diff options
608 files changed, 125125 insertions, 37190 deletions
diff --git a/rt/Changelog b/rt/Changelog index d8d73fd6d..2da390e97 100644 --- a/rt/Changelog +++ b/rt/Changelog @@ -1,1286 +1,12427 @@ - - - -Project "rt.3", Branch 0 Page 1 -Change Log Sat Jul 12 04:24:41 2003 - -rt.3.D000, C0, jesse, Thu Mar 13 20:43:23 2003, RT: Request Tracker, branch 3.0. - RT: Request Tracker, branch 3.0. - - Change Delta Brief Description - 10 1 Bumping the version to rt.3.0.0rc0 - 11 2 Minor CSS update. rollback fix; new database indices; - copyright update - 15 3 removing the old REST API - 16 4 Performance work on 'WhoHaveRight'; bumping to 3.0.0rc2 - 12 5 fixing indices for postgres - 17 6 fixing fastcgi's ability to load webmux.pl on some platforms - 18 7 More performance work; backing out 'enhancements' that killed - system performance - 19 8 Caving in to the masses and making 'notify sender' - configurable - 20 9 finishing the notify stuff - 22 10 Bumping to RC3; fixing the display of 'This user's n highest - priority tix' - 23 11 New french translation - 25 12 Brazilian Portuguese translation - 26 13 Postgres fixes - 27 14 Postgres schema tweak - 28 15 Further postgres tweaks and fixes - 29 16 RT should now be less overzealous about opening and then - marking a ticket 'new' again - 30 17 Bumping to 3.0.0rc4 - 31 18 Minor fixes - Bumped to 3.0.0; - 2266 - postgres scrip creation bug - 2267 - Tickets not reopened after being stalled - 2265 - Fixed css nits from blaise - Unreported - Fixed quick-search bug - 32 19 Added better error checking for failed ticket creation - 33 20 A tiny bit of extra data passing for some callbacks - 35 21 New czech translation - 37 22 Updated dependencies - 36 23 Updated Spanish translation - 38 24 Updates for RT RPC interface from AMS - 39 25 Many users should be able to have a blank address; neew test - suite to ensure this - 50 26 Integrating rafael's failing test suite and proposed fix from - autrijus - 51 27 Changing address used in example to not send mail to author - 52 28 More I18N testing for rafael - 53 29 Added preliminary left to right hebrew translation - 55 30 #2365 Removing outdated Mason setup parameter - 56 31 Testing fixes for mail authentication/authorization - 57 32 Testing and fixing binary attachment corruption - 58 33 Better binary attachment handling fix from autrijus - 59 34 Bumping to RT 3.0.1pre2 - 60 35 SMTP and I18N fixes from autrijus tang. Updated chinese - translations - 61 36 New speedycgi support from vivek khera - 62 37 Bumping to version 3.0.1 - 63 38 Fixing a showmessagestanza bug found in RTIR - 65 39 Fixing an untainting bug in 3.0.1 - 66 40 Quicksearch bug fix from Stan - 67 41 updating autrijus' autohandler patch. seems to break lots of - stuff - 68 42 Bumping to 3.0.2pre1 - 69 43 make ids clicky - 70 44 fixing utf8 tainting issue in autohandler; bumped to 3.0.2pre2 - 71 45 Another go at fixing the ARRAY() issue; bumping to 3.0.2pre3 - 72 46 bulk links - 73 47 I18N patches from autrijus; bouncing to 3.0.2pre4 - 75 48 bumped version to 3.0.2pre5; attachments performance fixes; - utf-8 mailgateway fixes; more extension hooks; template - updates for approvals - 76 49 [#2437] CanonicalizeEmailAddress fixes; [# 2449] html fixes - for right editing; [# 2457] email addresses weren't always - being canonicalized - 77 50 Fixing bogus anchor tags - 78 51 More performance work on WhoHaveRight; removing an extra join - 79 52 Cleaning up RT tag processing - 80 53 Importing utf8 fixes, _Vendor overlay support from ourinternet - 81 54 Bumping the version to 3.0.2pre6 - 82 55 Bumping the version to RT 3.0.2 - 83 56 merge from ourinternet; one CreateTickets fix and some utf8 - updates - 85 57 Robert's updated search stuff - 86 58 Fix for #2602 - make test fails on _Config.pm - 87 59 Including norwegian bokmal translation - 14 60 #2539: Re: [rt-users] unexpected usage: change sort order with - column headers in search window - 88 61 Fix to honor '$LogDir' for LogToFile - 89 62 #2603: /opt/rt3/share/doc should not be a file. - 90 63 Merging utf8 fixes from autrijus tang - 91 64 Fixing an upgrade bug from 3.0.2->3.0.3 - 92 65 MIME::Words encoding fixes for mail sending - 93 66 Additional work on the SQLite port - 95 67 Merge from ourinternet: UTF8 fixes; more configurable apache - sessions; - 96 68 ACL HasRight system replaced with an algorithm that does more - looking ahead - 97 69 A fix to Tickets_Overlay.pm to make the 'Count' methods - actually do a count, not a full SELECT - 98 70 Further UTF8-fixed from autrijus - 99 71 Bumping the version to 3.0.3pre1 - 100 72 update layout fix - 101 73 #2662 Fixing an overly restrictive ACL check on group creation - 102 74 #2657 Web UI Scrip creation bug - 103 75 #2652 - de.po updates - 105 76 #2658 Cosmetic issue with Scrip menu listing - 106 77 fix for FastCGI and SpeedyCGI setgidness with weird - environments - 107 78 Continued performance improvements for caching - 108 79 Log path enhancment to deal more gracefully with absolutely - specified logfile paths - 109 80 CF defaults; fix Starts set - 110 81 ACL cache made postgres safe - 111 82 Fixing an acl bug in Principal_Overlay introduced after 3.0.2 - and a possible 'Deep' transaction issue. now requires - DBIx::SearchBuilder 0.83_05 or newer - 112 83 #2678 Fixing crit messages in RT::User - 113 84 Bumping DBIx::SearchBuilder requirement to 0.84 - 115 85 The "rt" program, branch 3.0. - 117 86 pass title to Header - 116 87 Better testing for internationalization of outoging messages; - slight refactoring to SendEmail to be more testable; added - missing deps to EmailParser - 118 88 Bump to 3.0.3pre2; fix a misspelled right in Queue.pm (#2686) - 119 89 #2721 - 'id' attribute had mixed casing. this bothers certain - databases (Sybase) - 120 90 Header & Logout take URL - 121 91 Fixes for: Bogus message headers containing high-bit - characters; database handle reconnections; postgres test suite - failures - 123 92 support group & queue acl setting from rt-setup-database - 125 93 add TakeTicket, StealTicket rights - 122 94 Bumping version to 3.0.3pre3, bumping searchbuilder dependency - 126 95 Really bumping the version to 3.0.3pre3 - 129 96 Various fixes from a pull-up of the ourinternet branch - 128 97 #2605 - SpamAssassin Filter returns the wrong codes on - success/failure - 127 98 Fixes the cascading style sheet to properly reference message - bodies - 130 99 Attempting to be smarter about guessing encodings for outgoing - mail - 131 100 Fixing search navigation links (they were made to disappear) - 132 101 #2776 - 'new' ACL cache had bad behaviour. rolled back to - older cache and added tests - 133 102 On postgres, RT didn't previously cope well with multipart - messages including non-plain parts containing non-ascii - 135 103 Efficiency tweaks for WhoHaveRight - 136 104 Bumping version to RT 3.0.3pre4 - 137 105 #2813 Duplicate tickets created at the same time could cause a - user creation race condition - 138 106 Importing minor bugfixes from ourinternet - 139 107 #2816 new callback to ShowLinks - 150 108 #2799: Display URIs instead of HREFs in ticket display - 151 109 #2797 Clean up automatich chmodding on installation - 152 110 ShowRequestor takes path - 153 111 SystemInternal group ACLs in setup - 155 112 Better encoding and error checking for message headers - 156 113 better handle notification messages containing only text/html - content. - 157 114 Bumping to 3.0.3pre5 - 158 115 More I18N fixes from ourinternet - 159 116 Bumping version to RC-1 - 160 117 Another shot at the header encoding fix - 161 118 Mitya's failing processing of html email - 162 119 Bumping to 3.0.3rc2 - 163 120 Anonymizing addresses in mitya's submitted testcases - 165 121 Better handling of malformed email messages - 166 122 Bumping version to 3.0rc3 - 167 123 #2850 - With some configurations, users could not create new - tickets with 'new' requestors - Bumped to 3.0 RC 4 - 168 124 Scrip data updates weren't propagating to parent Ticket - objects; Bumping to 3.0.3 - 169 125 CustomField rights checking was overly restrictive for users - without queue-specific rights - 170 126 I18N mail testing was was being cavalier with the state of - acls after its testing. (clone of 3.0.C167) - 171 127 Ticket Update.html fix to not doubly load content - 172 128 Fixing postgres sortorder bug unmased by searchbuilder fix - 176 129 Applying POD patches from ourinternet (clone of 3.0.C173) - 177 130 UTF8, Custom Field and text message rendering fixes from - ourinternet - 178 131 #2843 Date relations were too strict in RT::Tickets searches - 179 132 #2847: allow URI Resolver to render itself - 173 133 ShowMessageHeaders; make headers clicky - 180 134 use RTIR callbacks - 175 135 Updating rt-setup-database to take acl and schema file names - on the commandline - 181 136 Refactored Users::WhoHaveRight from Chris Audley at Blackrock - 182 137 Download link in ShowTransaction - 185 138 Fix for speedycgi disappearing database connections - 183 139 #2873: Fix for insufficently agressive loop culling - 186 140 Fix for nested email message parsing - 187 141 Split the HasRight ACL query into two parts. It's now two - small and light SQL queries, instead of one big one that - overwhelmed databases - 188 142 Stylistic cleanups for HasRight optimizations - 189 143 Relationship transactions are recorded and displayed more - robustly - 190 144 Bumping the version to 3.0.4pre1 - 191 145 Updated french translation from Blaise Thauvin - 13 146 Bumping to 3.0.4RC1 - 192 147 Attachment display bug fix from autrijus tang - 193 148 Bumping the version to 3.0.4RC2 - 198 149 ShowAttachments had a relative path which hurt extensions - 199 150 README updates to indicate deprecated dependencies - 200 151 Debugging framework cleanup - 201 152 Bumping version to 3.0.4 - - rt.3.0.D152, C201, jesse, Sat Jul 12 02:41:34 2003, Bumping version to 3.0.4 - From: Jesse Vincent <jesse@localhost> - Date: Fri Jul 11 23:35:03 2003 - - none - - rt.3.0.D151, C200, jesse, Sat Jul 12 01:34:41 2003, Debugging framework - cleanup - From: Jesse Vincent <jesse@localhost> - Date: Fri Jul 11 22:31:37 2003 - - none - - rt.3.0.D150, C199, jesse, Sat Jul 12 01:17:57 2003, README updates to indicate - deprecated dependencies - From: Jesse Vincent <jesse@localhost> - Date: Fri Jul 11 22:14:37 2003 - - none - - rt.3.0.D149, C198, leira, Sat Jul 12 01:17:08 2003, ShowAttachments had a - relative path which hurt extensions - From: Linda L. Julien <leira@starsong.org> - Date: Wed Jul 9 23:33:21 2003 - Warning: the original change was in the 'being_developed' state - - none - - rt.3.0.D148, C193, jesse, Sat Jul 5 17:34:46 2003, Bumping the version to - 3.0.4RC2 - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Sat Jul 5 17:22:07 2003 - - none - - rt.3.0.D147, C192, jesse, Sat Jul 5 17:11:25 2003, Attachment display bug fix - from autrijus tang - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Sat Jul 5 17:09:07 2003 - - none - - rt.3.0.D146, C13, jesse, Fri Jul 4 14:54:43 2003, Bumping to 3.0.4RC1 - From: Jesse Vincent <jesse@eris> - Date: Fri Jul 4 14:52:56 2003 - - none - - rt.3.0.D145, C191, jesse, Fri Jul 4 14:50:26 2003, Updated french translation - from Blaise Thauvin - From: Jesse Vincent <jesse@eris> - Date: Fri Jul 4 14:48:56 2003 - - none - - rt.3.0.D144, C190, jesse, Thu Jul 3 01:48:45 2003, Bumping the version to - 3.0.4pre1 - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Thu Jul 3 01:47:25 2003 - - none - - rt.3.0.D143, C189, jesse, Thu Jul 3 01:44:51 2003, Relationship transactions - are recorded and displayed more robustly - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Thu Jul 3 01:44:08 2003 - - none - - rt.3.0.D142, C188, jesse, Wed Jul 2 21:01:44 2003, Stylistic cleanups for - HasRight optimizations - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Wed Jul 2 20:58:51 2003 - - none - - rt.3.0.D141, C187, jesse, Wed Jul 2 02:48:21 2003, Split the HasRight ACL - query into two parts. It's now two small and light SQL queries, instead of one - big one that overwhelmed databases - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Wed Jul 2 02:45:49 2003 - - none - - rt.3.0.D140, C186, jesse, Wed Jul 2 02:19:47 2003, Fix for nested email - message parsing - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Wed Jul 2 02:17:38 2003 - - none - - rt.3.0.D139, C183, jesse, Tue Jul 1 23:18:28 2003, #2873: Fix for - insufficently agressive loop culling - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 30 21:12:50 2003 - - none - - rt.3.0.D138, C185, jesse, Tue Jul 1 19:08:47 2003, Fix for speedycgi - disappearing database connections - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Tue Jul 1 19:05:19 2003 - - none - - rt.3.0.D137, C182, leira, Tue Jul 1 16:10:33 2003, Download link in - ShowTransaction - From: Linda L. Julien <leira@starsong.org> - Date: Mon Jun 30 18:04:52 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D136, C181, jesse, Mon Jun 30 15:25:46 2003, Refactored - Users::WhoHaveRight from Chris Audley at Blackrock - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 30 15:23:18 2003 - - none - - rt.3.0.D135, C175, jesse, Mon Jun 30 15:24:56 2003, Updating rt-setup-database - to take acl and schema file names on the commandline - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 30 13:41:12 2003 - - none - - rt.3.0.D134, C180, leira, Mon Jun 30 02:19:05 2003, use RTIR callbacks - From: Linda Julien <leira@hawthorn.local.> - Date: Mon Jun 30 02:11:25 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D133, C173, leira, Mon Jun 30 02:17:05 2003, ShowMessageHeaders; make - headers clicky - From: Linda Julien <leira@hawthorn.local.> - Date: Sun Jun 29 23:31:39 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D132, C179, jesse, Sun Jun 29 03:06:36 2003, #2847: allow URI Resolver - to render itself - From: Jesse Vincent <jesse@eris> - Date: Sun Jun 29 03:04:30 2003 - - none - - rt.3.0.D131, C178, jesse, Sun Jun 29 02:59:13 2003, #2843 Date relations were - too strict in RT::Tickets searches - From: Jesse Vincent <jesse@eris> - Date: Sun Jun 29 02:57:53 2003 - - none - - rt.3.0.D130, C177, jesse, Sat Jun 28 18:17:28 2003, UTF8, Custom Field and - text message rendering fixes from ourinternet - From: Jesse Vincent <jesse@eris> - Date: Sat Jun 28 18:15:09 2003 - - none - - rt.3.0.D129, C176, jesse, Sat Jun 28 17:23:01 2003, Applying POD patches from - ourinternet (clone of 3.0.C173) - From: Jesse Vincent <jesse@eris> - Date: Sat Jun 28 17:15:38 2003 - - none - - rt.3.0.D128, C172, jesse, Sat Jun 28 17:17:53 2003, Fixing postgres sortorder - bug unmased by searchbuilder fix - From: Jesse Vincent <jesse@eris> - Date: Fri Jun 27 01:12:13 2003 - - none - - rt.3.0.D127, C171, jesse, Tue Jun 24 16:42:07 2003, Ticket Update.html fix to - not doubly load content - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 24 16:28:49 2003 - - none - - rt.3.0.D126, C170, jesse, Tue Jun 24 16:23:49 2003, I18N mail testing was was - being cavalier with the state of acls after its testing. (clone of 3.0.C167) - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 24 16:22:16 2003 - - none - - rt.3.0.D125, C169, jesse, Tue Jun 24 16:23:37 2003, CustomField rights - checking was overly restrictive for users without queue-specific rights - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 24 16:18:05 2003 - - none - - rt.3.0.D124, C168, jesse, Sat Jun 21 13:01:18 2003, Scrip data updates weren't - propagating to parent Ticket objects; Bumping to 3.0.3 - From: Jesse Vincent <jesse@eris> - Date: Sat Jun 21 12:55:04 2003 - - none - - rt.3.0.D123, C167, jesse, Thu Jun 19 22:23:01 2003, #2850 - With some - configurations, users could not create new tickets with 'new' requestors - - Bumped to 3.0 RC 4 - From: Jesse Vincent <jesse@eris> - Date: Thu Jun 19 22:22:20 2003 - - none - - rt.3.0.D122, C166, jesse, Thu Jun 19 14:25:03 2003, Bumping version to 3.0rc3 - From: Jesse Vincent <jesse@eris> - Date: Thu Jun 19 14:18:19 2003 - - none - - rt.3.0.D121, C165, jesse, Thu Jun 19 12:25:20 2003, Better handling of - malformed email messages - From: Jesse Vincent <jesse@eris> - Date: Thu Jun 19 12:21:56 2003 - - none - - rt.3.0.D120, C163, jesse, Thu Jun 19 03:17:20 2003, Anonymizing addresses in - mitya's submitted testcases - From: Jesse Vincent <jesse@eris> - Date: Thu Jun 19 03:16:47 2003 - - none - - rt.3.0.D119, C162, jesse, Thu Jun 19 03:03:16 2003, Bumping to 3.0.3rc2 - From: Jesse Vincent <jesse@eris> - Date: Thu Jun 19 03:01:10 2003 - - none - - rt.3.0.D118, C161, jesse, Thu Jun 19 02:58:24 2003, Mitya's failing processing - of html email - From: Jesse Vincent <jesse@eris> - Date: Thu Jun 19 02:56:48 2003 - - none - - rt.3.0.D117, C160, jesse, Wed Jun 18 17:58:34 2003, Another shot at the header - encoding fix - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 18 17:58:01 2003 - - none - - rt.3.0.D116, C159, jesse, Wed Jun 18 01:27:03 2003, Bumping version to RC-1 - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 18 01:25:13 2003 - - none - - rt.3.0.D115, C158, jesse, Wed Jun 18 01:01:22 2003, More I18N fixes from - ourinternet - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 18 01:00:11 2003 - - none - - rt.3.0.D114, C157, jesse, Tue Jun 17 22:24:03 2003, Bumping to 3.0.3pre5 - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 17 22:20:51 2003 - - none - - rt.3.0.D113, C156, jesse, Tue Jun 17 22:14:35 2003, better handle notification - messages containing only text/html content. - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 17 21:55:06 2003 - - none - - rt.3.0.D112, C155, jesse, Tue Jun 17 21:55:16 2003, Better encoding and error - checking for message headers - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 17 21:26:27 2003 - Warning: the original change was in the 'being_developed' state - - none - - rt.3.0.D111, C153, leira, Tue Jun 17 17:47:18 2003, SystemInternal group ACLs - in setup - From: Linda L. Julien <leira@starsong.org> - Date: Tue Jun 17 18:19:58 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D110, C152, leira, Tue Jun 17 16:46:34 2003, ShowRequestor takes path - From: Linda L. Julien <leira@oak.starsong.org> - Date: Tue Jun 17 12:53:35 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D109, C151, jesse, Mon Jun 16 23:48:53 2003, #2797 Clean up automatich - chmodding on installation - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 16 23:48:19 2003 - - none - - rt.3.0.D108, C150, jesse, Mon Jun 16 23:36:29 2003, #2799: Display URIs - instead of HREFs in ticket display - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 16 23:35:00 2003 - - none - - rt.3.0.D107, C139, jesse, Mon Jun 16 23:16:45 2003, #2816 new callback to - ShowLinks - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 16 23:14:05 2003 - - none - - rt.3.0.D106, C138, jesse, Mon Jun 16 23:16:29 2003, Importing minor bugfixes - from ourinternet - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 16 23:06:00 2003 - - none - - rt.3.0.D105, C137, jesse, Mon Jun 16 19:41:13 2003, #2813 Duplicate tickets - created at the same time could cause a user creation race condition - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 16 19:39:57 2003 - - none - - rt.3.0.D104, C136, jesse, Fri Jun 13 18:27:11 2003, Bumping version to RT - 3.0.3pre4 - From: Jesse Vincent <jesse@eris> - Date: Fri Jun 13 18:25:57 2003 - - none - - rt.3.0.D103, C135, jesse, Fri Jun 13 18:22:33 2003, Efficiency tweaks for - WhoHaveRight - From: Jesse Vincent <jesse@eris> - Date: Fri Jun 13 18:19:02 2003 - - none - - rt.3.0.D102, C133, jesse, Fri Jun 13 18:18:32 2003, On postgres, RT didn't - previously cope well with multipart messages including non-plain parts - containing non-ascii - From: Jesse Vincent <jesse@eris> - Date: Fri Jun 13 18:17:37 2003 - - none - - rt.3.0.D101, C132, jesse, Fri Jun 13 01:41:24 2003, #2776 - 'new' ACL cache - had bad behaviour. rolled back to older cache and added tests - From: Jesse Vincent <jesse@eris> - Date: Fri Jun 13 01:40:26 2003 - - none - - rt.3.0.D100, C131, jesse, Thu Jun 12 13:22:10 2003, Fixing search navigation - links (they were made to disappear) - From: Jesse Vincent <jesse@eris> - Date: Thu Jun 12 13:19:37 2003 - - none - - rt.3.0.D099, C130, jesse, Wed Jun 11 16:44:16 2003, Attempting to be smarter - about guessing encodings for outgoing mail - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 11 16:42:50 2003 - Warning: the original change was in the 'being_developed' state - - none - - rt.3.0.D098, C127, jesse, Wed Jun 11 16:39:39 2003, Fixes the cascading style - sheet to properly reference message bodies - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 11 15:43:39 2003 - Warning: the original change was in the 'being_developed' state - - rt.3.0.D097, C128, jesse, Wed Jun 11 16:37:38 2003, #2605 - SpamAssassin - Filter returns the wrong codes on success/failure - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 11 15:53:58 2003 - - none - - rt.3.0.D096, C129, jesse, Wed Jun 11 16:36:53 2003, Various fixes from a pull- - up of the ourinternet branch - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 11 16:17:44 2003 - - none - - rt.3.0.D095, C126, jesse, Tue Jun 10 16:17:50 2003, Really bumping the version - to 3.0.3pre3 - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 10 16:17:08 2003 - - none - - rt.3.0.D094, C122, jesse, Tue Jun 10 15:58:32 2003, Bumping version to - 3.0.3pre3, bumping searchbuilder dependency - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 10 15:56:41 2003 - - none - - rt.3.0.D093, C125, jesse, Tue Jun 10 15:54:52 2003, add TakeTicket, - StealTicket rights - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 10 15:41:43 2003 - Warning: the original change was in the 'being_developed' state - - From: Jesse <jesse@fsck.com> - Date: Tue Jun 10 11:01:04 2003 - Warning: the original change was in the 'being_reviewed' state - - From: Linda L. Julien <leira@oak.starsong.org> - Date: Tue Jun 10 11:58:03 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D092, C123, leira, Tue Jun 10 15:54:10 2003, support group & queue acl - setting from rt-setup-database - From: Linda L. Julien <leira@oak.starsong.org> - Date: Tue Jun 10 14:13:46 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D091, C121, jesse, Sun Jun 8 00:41:47 2003, Fixes for: Bogus message - headers containing high-bit characters; database handle reconnections; - postgres test suite failures - From: Jesse Vincent <jesse@eris> - Date: Sun Jun 8 00:32:40 2003 - - none - - rt.3.0.D090, C120, leira, Sun Jun 8 00:34:40 2003, Header & Logout take URL - From: Linda L. Julien <leira@oak.starsong.org> - Date: Fri Jun 6 19:06:41 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D089, C119, jesse, Fri Jun 6 17:33:37 2003, #2721 - 'id' attribute had - mixed casing. this bothers certain databases (Sybase) - From: Jesse Vincent <jesse@eris> - Date: Fri Jun 6 17:32:16 2003 - - none - - rt.3.0.D088, C118, jesse, Wed Jun 4 17:21:24 2003, Bump to 3.0.3pre2; fix a - misspelled right in Queue.pm (#2686) - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 4 17:19:39 2003 - Warning: the original change was in the 'being_developed' state - - The "rt" program, branch 3.0. - - rt.3.0.D087, C116, jesse, Wed Jun 4 17:17:08 2003, Better testing for - internationalization of outoging messages; slight refactoring to SendEmail to - be more testable; added missing deps to EmailParser - From: Jesse Vincent <jesse@eris> - Date: Wed Jun 4 16:53:07 2003 - - none - - rt.3.0.D086, C117, leira, Wed Jun 4 00:23:20 2003, pass title to Header - From: Linda L. Julien <leira@oak.starsong.org> - Date: Tue Jun 3 18:09:39 2003 - Warning: the original change was in the 'being_developed' state - - none - - rt.3.0.D085, C115, jesse, Tue Jun 3 00:45:12 2003, The "rt" program, branch - 3.0. - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 3 00:43:15 2003 - Warning: the original change was in the 'being_developed' state - - The "rt" program, branch 3.0. - - rt.3.0.D084, C113, jesse, Tue Jun 3 00:20:07 2003, Bumping - DBIx::SearchBuilder requirement to 0.84 - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 3 00:19:50 2003 - - none - - rt.3.0.D083, C112, jesse, Tue Jun 3 00:18:43 2003, #2678 Fixing crit messages - in RT::User - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 3 00:18:12 2003 - - none - - rt.3.0.D082, C111, jesse, Tue Jun 3 00:04:45 2003, Fixing an acl bug in - Principal_Overlay introduced after 3.0.2 and a possible 'Deep' transaction - issue. now requires DBIx::SearchBuilder 0.83_05 or newer - From: Jesse Vincent <jesse@eris> - Date: Tue Jun 3 00:02:23 2003 - - none - - rt.3.0.D081, C110, jesse, Mon Jun 2 22:40:34 2003, ACL cache made postgres - safe - From: Jesse Vincent <jesse@eris> - Date: Mon Jun 2 22:39:03 2003 - - none - - rt.3.0.D080, C109, leira, Mon Jun 2 17:10:05 2003, CF defaults; fix Starts - set - From: Linda L. Julien <leira@oak.starsong.org> - Date: Mon Jun 2 17:32:11 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D079, C108, jesse, Sat May 31 00:28:37 2003, Log path enhancment to - deal more gracefully with absolutely specified logfile paths - From: Jesse Vincent <jesse@eris> - Date: Sat May 31 00:27:38 2003 - - none - - rt.3.0.D078, C107, jesse, Sat May 31 00:20:53 2003, Continued performance - improvements for caching - From: Jesse Vincent <jesse@eris> - Date: Sat May 31 00:19:32 2003 - - none - - rt.3.0.D077, C106, jesse, Sat May 31 00:20:32 2003, fix for FastCGI and - SpeedyCGI setgidness with weird environments - From: Jesse Vincent <jesse@eris> - Date: Sat May 31 00:19:15 2003 - - none - - rt.3.0.D076, C105, jesse, Fri May 30 16:21:14 2003, #2658 Cosmetic issue with - Scrip menu listing - From: Jesse Vincent <jesse@eris> - Date: Fri May 30 16:14:02 2003 - - none - - rt.3.0.D075, C103, jesse, Fri May 30 16:20:57 2003, #2652 - de.po updates - From: Jesse Vincent <jesse@eris> - Date: Fri May 30 15:57:44 2003 - - none - - rt.3.0.D074, C102, jesse, Fri May 30 16:18:57 2003, #2657 Web UI Scrip - creation bug - From: Jesse Vincent <jesse@eris> - Date: Fri May 30 15:50:16 2003 - - none - - rt.3.0.D073, C101, jesse, Fri May 30 16:17:43 2003, #2662 Fixing an overly - restrictive ACL check on group creation - From: Jesse Vincent <jesse@eris> - Date: Fri May 30 15:46:22 2003 - - none - - rt.3.0.D072, C100, leira, Fri May 30 16:17:05 2003, update layout fix - From: Linda L. Julien <leira@oak.starsong.org> - Date: Thu May 29 14:30:01 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D071, C99, jesse, Wed May 28 17:54:48 2003, Bumping the version to - 3.0.3pre1 - From: Jesse Vincent <jesse@eris> - Date: Wed May 28 17:52:51 2003 - - none - - rt.3.0.D070, C98, jesse, Wed May 28 17:54:40 2003, Further UTF8-fixed from - autrijus - From: Jesse Vincent <jesse@eris> - Date: Wed May 28 17:49:32 2003 - - none - - rt.3.0.D069, C97, jesse, Wed May 28 17:07:10 2003, A fix to Tickets_Overlay.pm - to make the 'Count' methods actually do a count, not a full SELECT - From: Jesse Vincent <jesse@eris> - Date: Wed May 28 17:04:50 2003 - - none - - rt.3.0.D068, C96, jesse, Wed May 28 17:06:43 2003, ACL HasRight system - replaced with an algorithm that does more looking ahead - From: Jesse Vincent <jesse@eris> - Date: Wed May 28 16:36:10 2003 - - none - - rt.3.0.D067, C95, jesse, Tue May 27 13:22:19 2003, Merge from ourinternet: - UTF8 fixes; more configurable apache sessions; - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Tue May 27 13:07:41 2003 - - none - - rt.3.0.D066, C93, jesse, Sat May 24 18:05:36 2003, Additional work on the - SQLite port - From: Jesse Vincent <jesse@eris> - Date: Sat May 24 18:04:50 2003 - - none - - rt.3.0.D065, C92, jesse, Fri May 23 16:45:23 2003, MIME::Words encoding fixes - for mail sending - From: Jesse Vincent <jesse@eris> - Date: Fri May 23 16:44:28 2003 - - none - - rt.3.0.D064, C91, jesse, Fri May 23 16:12:26 2003, Fixing an upgrade bug from - 3.0.2->3.0.3 - From: Jesse Vincent <jesse@eris> - Date: Fri May 23 15:57:50 2003 - - none - - rt.3.0.D063, C90, jesse, Fri May 23 15:27:47 2003, Merging utf8 fixes from - autrijus tang - From: Jesse Vincent <jesse@eris> - Date: Fri May 23 15:25:23 2003 - - none - - rt.3.0.D062, C89, jesse, Wed May 21 00:58:34 2003, #2603: /opt/rt3/share/doc - should not be a file. - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Wed May 21 00:29:55 2003 - - none - - rt.3.0.D061, C88, jesse, Wed May 21 00:57:45 2003, Fix to honor '$LogDir' for - LogToFile - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Wed May 21 00:17:18 2003 - - none - - rt.3.0.D060, C14, jesse, Wed May 21 00:56:31 2003, #2539: Re: [rt-users] - unexpected usage: change sort order with column headers in search window - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Tue May 20 23:19:46 2003 - - none - - rt.3.0.D059, C87, jesse, Wed May 21 00:55:08 2003, Including norwegian bokmal - translation - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Tue May 20 23:05:17 2003 - - none - - rt.3.0.D058, C86, jesse, Wed May 21 00:54:06 2003, Fix for #2602 - make test - fails on _Config.pm - From: Jesse Vincent <jesse@Jesse-Vincents-Computer.local.> - Date: Tue May 20 22:32:52 2003 - - none - - rt.3.0.D057, C85, leira, Tue May 20 12:15:11 2003, Robert's updated search - stuff - From: Linda L. Julien <leira@oak.starsong.org> - Date: Mon May 19 18:19:14 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D056, C83, jesse, Sat May 17 17:34:32 2003, merge from ourinternet; one - CreateTickets fix and some utf8 updates - From: Jesse Vincent <jesse@eris> - Date: Sat May 17 17:31:43 2003 - - none - - rt.3.0.D055, C82, jesse, Mon May 12 20:30:45 2003, Bumping the version to RT - 3.0.2 - From: Jesse Vincent <jesse@eris> - Date: Tue May 13 02:29:44 2003 - - none - - rt.3.0.D054, C81, jesse, Wed May 7 09:18:28 2003, Bumping the version to - 3.0.2pre6 - From: Jesse Vincent <jesse@eris> - Date: Wed May 7 15:16:55 2003 - Warning: the original change was in the 'being_developed' state - - none - - rt.3.0.D053, C80, jesse, Wed May 7 09:02:24 2003, Importing utf8 fixes, _ - Vendor overlay support from ourinternet - From: Jesse Vincent <jesse@eris> - Date: Wed May 7 14:52:58 2003 - - none - - rt.3.0.D052, C79, jesse, Wed May 7 07:05:14 2003, Cleaning up RT tag - processing - From: Jesse Vincent <jesse@eris> - Date: Wed May 7 13:04:17 2003 - - none - - rt.3.0.D051, C78, jesse, Wed May 7 07:03:27 2003, More performance work on - WhoHaveRight; removing an extra join - From: Jesse Vincent <jesse@eris> - Date: Wed May 7 13:00:43 2003 - - none - - rt.3.0.D050, C77, jesse, Fri May 2 11:23:23 2003, Fixing bogus anchor tags - From: Jesse Vincent <jesse@eris> - Date: Fri May 2 17:19:54 2003 - - none - - rt.3.0.D049, C76, jesse, Fri May 2 10:26:30 2003, [#2437] - CanonicalizeEmailAddress fixes; [# 2449] html fixes for right editing; [# - 2457] email addresses weren't always being canonicalized - From: Jesse Vincent <jesse@eris> - Date: Fri May 2 16:24:40 2003 - - none - - rt.3.0.D048, C75, jesse, Fri May 2 08:35:38 2003, bumped version to - 3.0.2pre5; attachments performance fixes; utf-8 mailgateway fixes; more - extension hooks; template updates for approvals - From: Jesse Vincent <jesse@eris> - Date: Fri May 2 14:32:57 2003 - - none - - rt.3.0.D047, C73, jesse, Sun Apr 27 19:06:46 2003, I18N patches from autrijus; - bouncing to 3.0.2pre4 - From: Jesse Vincent <jesse@eris> - Date: Mon Apr 28 01:02:18 2003 - - none - - rt.3.0.D046, C72, leira, Sun Apr 27 19:06:04 2003, bulk links - From: Linda L. Julien <leira@oak.starsong.org> - Date: Thu Apr 24 01:23:01 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D045, C71, jesse, Sat Apr 19 03:42:39 2003, Another go at fixing the - ARRAY() issue; bumping to 3.0.2pre3 - From: Jesse Vincent <jesse@eris> - Date: Sat Apr 19 08:39:19 2003 - - none - - rt.3.0.D044, C70, jesse, Fri Apr 18 16:37:00 2003, fixing utf8 tainting issue - in autohandler; bumped to 3.0.2pre2 - From: Jesse Vincent <jesse@eris> - Date: Fri Apr 18 21:32:04 2003 - - none - - rt.3.0.D043, C69, leira, Thu Apr 17 18:51:41 2003, make ids clicky - From: Linda L. Julien <leira@oak.starsong.org> - Date: Thu Apr 17 18:31:40 2003 - Warning: the original change was in the 'awaiting_integration' state - - none - - rt.3.0.D042, C68, jesse, Thu Apr 17 18:39:54 2003, Bumping to 3.0.2pre1 - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 17 23:37:59 2003 - - none - - rt.3.0.D041, C67, jesse, Thu Apr 17 18:33:15 2003, updating autrijus' - autohandler patch. seems to break lots of stuff - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 17 23:21:02 2003 - - none - - rt.3.0.D040, C66, jesse, Thu Apr 17 18:32:24 2003, Quicksearch bug fix from - Stan - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 17 23:16:58 2003 - - none - - rt.3.0.D039, C65, jesse, Thu Apr 17 18:29:31 2003, Fixing an untainting bug in - 3.0.1 - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 17 23:15:01 2003 - Warning: the original change was in the 'being_developed' state - - none - - rt.3.0.D038, C63, jesse, Thu Apr 17 04:46:42 2003, Fixing a showmessagestanza - bug found in RTIR - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 17 09:45:48 2003 - - none - - rt.3.0.D037, C62, jesse, Tue Apr 15 11:53:58 2003, Bumping to version 3.0.1 - From: Jesse Vincent <jesse@eris> - Date: Tue Apr 15 11:52:00 2003 - - none - - rt.3.0.D036, C61, jesse, Mon Apr 14 18:18:03 2003, New speedycgi support from - vivek khera - From: Jesse Vincent <jesse@eris> - Date: Mon Apr 14 14:49:49 2003 - - none - - rt.3.0.D035, C60, jesse, Sun Apr 13 21:43:32 2003, SMTP and I18N fixes from - autrijus tang. Updated chinese translations - From: Jesse Vincent <jesse@eris> - Date: Sun Apr 13 21:32:55 2003 - - none - - rt.3.0.D034, C59, jesse, Fri Apr 11 21:58:36 2003, Bumping to RT 3.0.1pre2 - From: Jesse Vincent <jesse@eris> - Date: Fri Apr 11 21:58:06 2003 - - none - - rt.3.0.D033, C58, jesse, Fri Apr 11 21:56:11 2003, Better binary attachment - handling fix from autrijus - From: Jesse Vincent <jesse@eris> - Date: Fri Apr 11 21:52:12 2003 - - none - - rt.3.0.D032, C57, jesse, Fri Apr 11 21:35:17 2003, Testing and fixing binary - attachment corruption - From: Jesse Vincent <jesse@eris> - Date: Fri Apr 11 21:34:28 2003 - - none - - rt.3.0.D031, C56, jesse, Fri Apr 11 21:34:56 2003, Testing fixes for mail - authentication/authorization - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 10 00:08:29 2003 - - none - - rt.3.0.D030, C55, jesse, Wed Apr 9 13:55:18 2003, #2365 Removing outdated - Mason setup parameter - From: Jesse Vincent <jesse@eris> - Date: Wed Apr 9 13:54:43 2003 - - none - - rt.3.0.D029, C53, jesse, Wed Apr 9 13:22:35 2003, Added preliminary left to - right hebrew translation - From: Jesse Vincent <jesse@eris> - Date: Wed Apr 9 13:18:16 2003 - - none - - rt.3.0.D028, C52, jesse, Fri Apr 4 02:10:01 2003, More I18N testing for - rafael - From: Jesse Vincent <jesse@eris> - Date: Fri Apr 4 02:08:49 2003 - - none - - rt.3.0.D027, C51, jesse, Thu Apr 3 19:33:34 2003, Changing address used in - example to not send mail to author - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 3 19:29:02 2003 - Warning: the original change was in the 'being_integrated' state - - none - - rt.3.0.D026, C50, jesse, Thu Apr 3 19:16:37 2003, Integrating rafael's - failing test suite and proposed fix from autrijus - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 3 19:15:03 2003 - - none - - rt.3.0.D025, C39, jesse, Thu Apr 3 19:16:15 2003, Many users should be able - to have a blank address; neew test suite to ensure this - From: Jesse Vincent <jesse@eris> - Date: Thu Apr 3 13:27:36 2003 - - none - - rt.3.0.D024, C38, jesse, Thu Apr 3 13:30:37 2003, Updates for RT RPC - interface from AMS - From: Jesse Vincent <jesse@eris> - Date: Wed Apr 2 15:32:15 2003 - - none - - rt.3.0.D023, C36, jesse, Wed Apr 2 14:14:07 2003, Updated Spanish translation - From: Jesse Vincent <jesse@eris> - Date: Tue Apr 1 14:02:36 2003 - - none - - rt.3.0.D022, C37, jesse, Wed Apr 2 14:13:55 2003, Updated dependencies - From: Jesse Vincent <jesse@eris> - Date: Wed Apr 2 14:09:41 2003 - - none - - rt.3.0.D021, C35, jesse, Tue Apr 1 13:00:22 2003, New czech translation - From: Jesse Vincent <jesse@eris> - Date: Tue Apr 1 12:58:57 2003 - - none - - rt.3.0.D020, C33, jesse, Fri Mar 28 14:48:20 2003, A tiny bit of extra data - passing for some callbacks - From: Jesse Vincent <jesse@eris> - Date: Fri Mar 28 14:43:28 2003 - - none - - rt.3.0.D019, C32, jesse, Fri Mar 28 14:35:10 2003, Added better error checking - for failed ticket creation - From: Jesse Vincent <jesse@eris> - Date: Fri Mar 28 14:32:52 2003 - - none - - rt.3.0.D018, C31, jesse, Sun Mar 23 17:21:45 2003, Minor fixes - Bumped to - 3.0.0; - 2266 - postgres scrip creation bug - 2267 - Tickets not reopened after being stalled - 2265 - Fixed css nits from blaise - Unreported - Fixed quick-search bug - From: Jesse Vincent <jesse@eris> - Date: Sun Mar 23 17:17:55 2003 - - none - - rt.3.0.D017, C30, jesse, Thu Mar 20 21:38:30 2003, Bumping to 3.0.0rc4 - From: Jesse Vincent <jesse@eris> - Date: Thu Mar 20 21:28:01 2003 - - none - - rt.3.0.D016, C29, jesse, Thu Mar 20 21:18:27 2003, RT should now be less - overzealous about opening and then marking a ticket 'new' again - From: Jesse Vincent <jesse@eris> - Date: Thu Mar 20 21:14:47 2003 - - none - - rt.3.0.D015, C28, jesse, Thu Mar 20 15:21:49 2003, Further postgres tweaks and - fixes - From: Jesse Vincent <jesse@eris> - Date: Thu Mar 20 15:20:21 2003 - - none - - rt.3.0.D014, C27, jesse, Thu Mar 20 01:48:42 2003, Postgres schema tweak - From: Jesse Vincent <jesse@eris> - Date: Thu Mar 20 01:47:20 2003 - - none - - rt.3.0.D013, C26, jesse, Wed Mar 19 21:26:47 2003, Postgres fixes - From: Jesse Vincent <jesse@eris> - Date: Wed Mar 19 21:26:24 2003 - - none - - rt.3.0.D012, C25, jesse, Wed Mar 19 16:27:29 2003, Brazilian Portuguese - translation - From: Jesse Vincent <jesse@eris> - Date: Wed Mar 19 16:25:48 2003 - - none - - rt.3.0.D011, C23, jesse, Wed Mar 19 13:03:15 2003, New french translation - From: Jesse Vincent <jesse@eris> - Date: Wed Mar 19 13:02:47 2003 - - none - - rt.3.0.D010, C22, jesse, Wed Mar 19 01:01:24 2003, Bumping to RC3; fixing the - display of 'This user's n highest priority tix' - From: Jesse Vincent <jesse@eris> - Date: Wed Mar 19 01:00:33 2003 - - none - - rt.3.0.D009, C20, jesse, Wed Mar 19 00:46:17 2003, finishing the notify stuff - From: Jesse Vincent <jesse@eris> - Date: Wed Mar 19 00:45:09 2003 - - none - - rt.3.0.D008, C19, jesse, Wed Mar 19 00:40:45 2003, Caving in to the masses and - making 'notify sender' configurable - From: Jesse Vincent <jesse@eris> - Date: Wed Mar 19 00:38:50 2003 - - none - - rt.3.0.D007, C18, jesse, Tue Mar 18 16:29:45 2003, More performance work; - backing out 'enhancements' that killed system performance - From: Jesse Vincent <jesse@eris> - Date: Tue Mar 18 16:26:07 2003 - - none - - rt.3.0.D006, C17, jesse, Tue Mar 18 11:29:28 2003, fixing fastcgi's ability to - load webmux.pl on some platforms - From: Jesse Vincent <jesse@eris> - Date: Tue Mar 18 11:28:11 2003 - - none - - rt.3.0.D005, C12, jesse, Tue Mar 18 00:58:52 2003, fixing indices for postgres - From: Jesse Vincent <jesse@eris> - Date: Tue Mar 18 00:53:06 2003 - - none - - rt.3.0.D004, C16, jesse, Tue Mar 18 00:41:26 2003, Performance work on - 'WhoHaveRight'; bumping to 3.0.0rc2 - From: Jesse Vincent <jesse@eris> - Date: Tue Mar 18 00:37:30 2003 - - none - - rt.3.0.D003, C15, jesse, Fri Mar 14 17:07:28 2003, removing the old REST API - From: Jesse Vincent <jesse@eris> - Date: Fri Mar 14 16:50:38 2003 - - none - - rt.3.0.D002, C11, jesse, Fri Mar 14 16:42:46 2003, Minor CSS update. rollback - fix; new database indices; copyright update - From: Jesse Vincent <jesse@eris> - Date: Fri Mar 14 16:35:01 2003 - - none - - rt.3.0.D001, C10, jesse, Fri Mar 14 01:26:22 2003, Bumping the version to - rt.3.0.0rc0 - From: Jesse Vincent <jesse@eris> - Date: Fri Mar 14 01:25:51 2003 - - none +------------------------------------------------------------------------ +r3729 | jesse | 2005-08-28 15:45:06 -0400 (Sun, 28 Aug 2005) | 1 line +Changed paths: + A /rt/tags/3.4.4 (from /rt/branches/3.4-RELEASE:3728) + +Tagged as 3.4.4 by svn RelEng 1.0 +------------------------------------------------------------------------ +r3728 | jesse | 2005-08-28 15:44:18 -0400 (Sun, 28 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r13812@hualien: jesse | 2005-08-28 15:43:29 -0400 + * bumping to 3.4.4 + +------------------------------------------------------------------------ +r3727 | jesse | 2005-08-27 21:26:24 -0400 (Sat, 27 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + + r13804@hualien: jesse | 2005-08-27 21:25:50 -0400 + * Updated French translation from jfenal + + +------------------------------------------------------------------------ +r3725 | jesse | 2005-08-25 16:05:12 -0400 (Thu, 25 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r13763@hualien: jesse | 2005-08-25 16:04:29 -0400 + * 3.4.4rc3 + +------------------------------------------------------------------------ +r3724 | jesse | 2005-08-25 15:54:00 -0400 (Thu, 25 Aug 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r13760@hualien: jesse | 2005-08-25 15:51:57 -0400 + RT-Ticket: 6855 + RT-Status: resolved + RT-Update: correspond + + * Applied a patch from Andreas Jakum to improve RT::Ticket->Import's handling + of watchers + + +------------------------------------------------------------------------ +r3723 | jesse | 2005-08-25 15:53:40 -0400 (Thu, 25 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/EmailParser.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm + + r13759@hualien: jesse | 2005-08-25 15:31:56 -0400 + * Fixes to IsRTAddress processing. Spotted by Travis Campbell. + + +------------------------------------------------------------------------ +r3722 | jesse | 2005-08-25 15:25:28 -0400 (Thu, 25 Aug 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Footer + M /rt/branches/3.4-RELEASE/sbin/extract-message-catalog + + r13757@hualien: jesse | 2005-08-25 15:23:18 -0400 + RT-Ticket: 6934 + RT-Status: resolved + RT-Update: correspond + + * A couple of patches to improve how localization extraction works from jfenal + + +------------------------------------------------------------------------ +r3721 | jesse | 2005-08-25 15:01:03 -0400 (Thu, 25 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Groups_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Users_Overlay.pm + + r13754@hualien: jesse | 2005-08-25 14:55:32 -0400 + * EquivObjects support for acl queries, from Todd Chapman + + +------------------------------------------------------------------------ +r3720 | jesse | 2005-08-25 15:00:44 -0400 (Thu, 25 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r13753@hualien: jesse | 2005-08-25 14:53:06 -0400 + * Removing warnings about mod_perl2 + +------------------------------------------------------------------------ +r3719 | jesse | 2005-08-24 02:00:52 -0400 (Wed, 24 Aug 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/rt.in + + r13743@hualien: jesse | 2005-08-24 02:00:08 -0400 + RT-Ticket: 6957 + RT-Status: resolved + RT-Update: correspond + + * Applied a patch from ams to restore his byline to bin/rt + +------------------------------------------------------------------------ +r3714 | jesse | 2005-08-23 23:39:37 -0400 (Tue, 23 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r13733@hualien: jesse | 2005-08-23 23:38:39 -0400 + * bumped to pre2 + +------------------------------------------------------------------------ +r3713 | jesse | 2005-08-23 23:39:17 -0400 (Tue, 23 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Callback + + r13732@hualien: jesse | 2005-08-23 23:38:28 -0400 + * Applied tom's callbacks fix + + +------------------------------------------------------------------------ +r3711 | jesse | 2005-08-23 22:37:51 -0400 (Tue, 23 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r13728@hualien: jesse | 2005-08-23 22:37:12 -0400 + * Bumped to 3.4.4pre1 + +------------------------------------------------------------------------ +r3710 | jesse | 2005-08-23 22:33:47 -0400 (Tue, 23 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + M /rt/branches/3.4-RELEASE/bin/webmux.pl.in + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Handler.pm + + r13725@hualien: jesse | 2005-08-23 22:10:42 -0400 + * Added support for mod_perl 2.0 + +------------------------------------------------------------------------ +r3709 | jesse | 2005-08-23 17:58:20 -0400 (Tue, 23 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + + r13720@hualien: jesse | 2005-08-23 17:54:29 -0400 + * Bugfixes to the German translation file + +------------------------------------------------------------------------ +r3708 | glasser | 2005-08-22 16:05:46 -0400 (Mon, 22 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Standalone.pm + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r40177@tin-foil: glasser | 2005-08-18 18:49:13 -0400 + Updates to the standalone server to not dupe as much code, but may be rolled back if HSSM needs to be. + +------------------------------------------------------------------------ +r3707 | glasser | 2005-08-22 16:04:25 -0400 (Mon, 22 Aug 2005) | 10 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r38371@tin-foil: glasser | 2005-08-02 15:05:25 -0400 + RT-Ticket: 6899 + RT-Status: resolved + RT-Update: correspond + + When limiting based on a whole date, make sure you're not being pushed to + another if you happen to be east of GMT. + + Patch by Ruslan Zakirov, problem found by Olivier Horec. + +------------------------------------------------------------------------ +r3706 | glasser | 2005-08-22 15:55:57 -0400 (Mon, 22 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r36571@tin-foil: glasser | 2005-07-08 16:53:26 -0400 + Fix from Tom Yu; if the Handle will give us a server-side function to lowercase + values, use that. + +------------------------------------------------------------------------ +r3700 | trs | 2005-08-18 22:39:02 -0400 (Thu, 18 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Queue_Overlay.pm + + r6002@wintermute: tom | 2005-08-18 22:37:53 -0400 + Fixed typo + +------------------------------------------------------------------------ +r3668 | jesse | 2005-08-17 22:04:31 -0400 (Wed, 17 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r13155@hualien: jesse | 2005-08-17 19:15:11 -0400 + * Note dependency on a current HSSM + +------------------------------------------------------------------------ +r3667 | jesse | 2005-08-17 22:04:12 -0400 (Wed, 17 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Standalone.pm + + r13154@hualien: jesse | 2005-08-17 19:14:26 -0400 + * Fixes to standalone webserver for mason 1.30 + +------------------------------------------------------------------------ +r3666 | alexmv | 2005-08-17 13:41:38 -0400 (Wed, 17 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Quicksearch + + r5920@zoq-fot-pik: chmrr | 2005-08-17 13:44:59 -0400 + * My memory was faulty; HTML escaping is not needed + +------------------------------------------------------------------------ +r3663 | alexmv | 2005-08-17 13:29:32 -0400 (Wed, 17 Aug 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3662 | alexmv | 2005-08-17 13:29:25 -0400 (Wed, 17 Aug 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Quicksearch + + r5914@zoq-fot-pik: chmrr | 2005-08-17 13:32:00 -0400 + * We love escaping! We need to escape quotes and slashes in + TicketSQL, then URI escape, then HTML escape. And the query comes + from the TicketSQL-escaped one, not the URI and HTML-escaped one. Oh, + yeah, and don't forget to turn off the automatic HTML escaping that + Mason does, or it'll be TicketSQL-HTML-URI-HTML escaped, which is + Right Out. + +------------------------------------------------------------------------ +r3640 | jesse | 2005-08-11 13:46:50 -0400 (Thu, 11 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + + r12938@hualien: jesse | 2005-08-11 13:46:14 -0400 + * French localization had lost its header + + +------------------------------------------------------------------------ +r3627 | jesse | 2005-08-10 15:25:55 -0400 (Wed, 10 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r7634@hualien: jesse | 2005-08-10 15:25:31 -0400 + * This is 3.4.3 + + +------------------------------------------------------------------------ +r3610 | jesse | 2005-08-05 19:18:01 -0400 (Fri, 05 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/22search_tix_by_txn.t + + r7399@hualien: jesse | 2005-08-05 19:16:58 -0400 + * Cleaned up searching by ticket or txn date. + +------------------------------------------------------------------------ +r3589 | kevinr | 2005-08-03 01:51:55 -0400 (Wed, 03 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + + r6872@SAD-GIRL-IN-SNOW: kevinr | 2005-08-03 01:51:33 -0400 + * More minor perldoc cleanup + +------------------------------------------------------------------------ +r3588 | kevinr | 2005-08-03 01:20:35 -0400 (Wed, 03 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Groups_Overlay.pm + + r6868@SAD-GIRL-IN-SNOW: kevinr | 2005-08-03 01:19:47 -0400 + * Fixed an outdated bit of POD + +------------------------------------------------------------------------ +r3585 | kevinr | 2005-08-02 20:18:54 -0400 (Tue, 02 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Base.pm + M /rt/branches/3.4-RELEASE/lib/RT/CachedGroupMember_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/EmailParser.pm + M /rt/branches/3.4-RELEASE/lib/RT/Group_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Groups_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Handle.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queue_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/SearchBuilder.pm + M /rt/branches/3.4-RELEASE/lib/RT/Template_Overlay.pm + + r6849@SAD-GIRL-IN-SNOW: kevinr | 2005-08-02 20:17:38 -0400 + * POD formatting fixes + +------------------------------------------------------------------------ +r3582 | glasser | 2005-08-02 15:10:05 -0400 (Tue, 02 Aug 2005) | 10 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r38371@tin-foil: glasser | 2005-08-02 15:05:25 -0400 + RT-Ticket: 6899 + RT-Status: resolved + RT-Update: correspond + + When limiting based on a whole date, make sure you're not being pushed to + another if you happen to be east of GMT. + + Patch by Ruslan Zakirov, problem found by Olivier Horec. + +------------------------------------------------------------------------ +r3581 | glasser | 2005-08-02 15:08:03 -0400 (Tue, 02 Aug 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r36571@tin-foil: glasser | 2005-07-08 16:53:26 -0400 + Fix from Tom Yu; if the Handle will give us a server-side function to lowercase + values, use that. + +------------------------------------------------------------------------ +r3579 | kevinr | 2005-08-02 14:22:27 -0400 (Tue, 02 Aug 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + + r6837@SAD-GIRL-IN-SNOW: kevinr | 2005-08-02 14:20:51 -0400 + RT-Ticket: 6897 + RT-Status: resolved + RT-Update: correspond + + * Incorporated the updated Italian translation from Angelo Turetta + +------------------------------------------------------------------------ +r3576 | robert | 2005-08-02 00:23:36 -0400 (Tue, 02 Aug 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Menu + + r3582@woof: rspier | 2005-08-01 21:20:12 -0700 + allow arbitrary https?: urls in the menus + +------------------------------------------------------------------------ +r3564 | jesse | 2005-07-30 11:11:02 -0400 (Sat, 30 Jul 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3563 | jesse | 2005-07-30 11:10:42 -0400 (Sat, 30 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r7153@hualien: jesse | 2005-07-30 11:07:37 -0400 + 3.4.3rc2 + +------------------------------------------------------------------------ +r3562 | jesse | 2005-07-30 11:10:02 -0400 (Sat, 30 Jul 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fi.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/he.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/id.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ja.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/nl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pt_br.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_cn.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_tw.po + + r7152@hualien: jesse | 2005-07-30 11:06:46 -0400 + * German and Danish translation header fixes. + besides that just a message catalog regenration + + +------------------------------------------------------------------------ +r3546 | kevinr | 2005-07-28 14:51:34 -0400 (Thu, 28 Jul 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/SelfService/Display.html + + r6713@SAD-GIRL-IN-SNOW: kevinr | 2005-07-28 14:50:47 -0400 + RT-Ticket: 6892 + RT-Status: resolved + RT-Update: correspond + + * Applied patch from Hsin-Chan Chien to fix a bug with attachment uploading + in SelfService mode. + +------------------------------------------------------------------------ +r3501 | alexmv | 2005-07-18 15:00:38 -0400 (Mon, 18 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r5198@zoq-fot-pik: chmrr | 2005-07-18 14:59:07 -0400 + * Fix TransactionBatch / DESTROY bug (backport from QUEBEC) + +------------------------------------------------------------------------ +r3498 | jesse | 2005-07-18 13:46:24 -0400 (Mon, 18 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r4894@hualien: jesse | 2005-07-18 13:44:44 -0400 + * releng.cnf bump to rc1 + +------------------------------------------------------------------------ +r3476 | kevinr | 2005-07-14 18:22:40 -0400 (Thu, 14 Jul 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ACE_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Principal_Overlay.pm + + r6308@SAD-GIRL-IN-SNOW: kevinr | 2005-07-14 18:22:19 -0400 + * Applied Ruslan Zakirov's patch to fix the way ACE Object{,Type,Id} handles + arguments + +------------------------------------------------------------------------ +r3466 | kevinr | 2005-07-12 18:35:15 -0400 (Tue, 12 Jul 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/lib/t/regression/07rights.t + + r6229@sad-girl-in-snow: kevinr | 2005-07-12 18:34:56 -0400 + RT-Ticket: 6825 + RT-Status: resolved + RT-Update: correspond + + Added Ruslan Zakirov's new queue-rights tests. + +------------------------------------------------------------------------ +r3465 | kevinr | 2005-07-12 18:12:03 -0400 (Tue, 12 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ACE_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT.pm.in + + r6225@sad-girl-in-snow: kevinr | 2005-07-12 18:06:39 -0400 + * Applied Ruslan Zakirov's patch to clean up the ACE code and a trailing \n + +------------------------------------------------------------------------ +r3464 | alexmv | 2005-07-12 12:22:01 -0400 (Tue, 12 Jul 2005) | 13 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/PageLayout + M /rt/branches/3.4-RELEASE/lib/RT/Action/Generic.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attachment_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r4959@zoq-fot-pik: chmrr | 2005-07-12 12:22:32 -0400 + * Better threading support; Message-IDs of emails are based on the + transaction which spawned them. + + * Support for ScripActionObj in Action::Generic (argument was being + passed in but never used) + + * Standardize on case of 'Message-ID' per RFC + + * Remove newline from Message-ID before inserting into DB + + * Fixed minor HTML nit in PageLayout + +------------------------------------------------------------------------ +r3416 | kevinr | 2005-07-07 17:36:00 -0400 (Thu, 07 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomField.pm + 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/Transaction_Overlay.pm + + r6064@sad-girl-in-snow: kevinr | 2005-07-07 17:35:40 -0400 + * Updated the custom field perldoc to explain some non-intuitive behavior. + +------------------------------------------------------------------------ +r3414 | kevinr | 2005-07-07 16:19:34 -0400 (Thu, 07 Jul 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + + r6055@sad-girl-in-snow: kevinr | 2005-07-07 16:19:18 -0400 + * Noted the deprecation of the *Ticket methods in the perldoc + * Corrected some copied-and-pasted-but-not-fully-updated error messages + +------------------------------------------------------------------------ +r3405 | kevinr | 2005-07-06 16:08:17 -0400 (Wed, 06 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + + r6033@sad-girl-in-snow: kevinr | 2005-07-06 16:07:34 -0400 + * Improving consistency of perldoc presentation + +------------------------------------------------------------------------ +r3404 | kevinr | 2005-07-06 14:53:19 -0400 (Wed, 06 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Template_Overlay.pm + + r6009@sad-girl-in-snow: kevinr | 2005-07-06 14:39:22 -0400 + * Documented the behavior which was tripping me up. + +------------------------------------------------------------------------ +r3399 | alexmv | 2005-07-06 11:07:45 -0400 (Wed, 06 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowHistory + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowTransaction + + r4801@zoq-fot-pik: chmrr | 2005-07-06 11:03:17 -0400 + * Fix '#' links after ticket update + +------------------------------------------------------------------------ +r3394 | glasser | 2005-07-05 21:53:14 -0400 (Tue, 05 Jul 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r36303@tin-foil: glasser | 2005-07-05 19:55:16 -0300 + RT-Ticket: 6757 + RT-Status: resolved + RT-Update: correspond + + Transaction custom fields weren't always being set in Updates, because + Transaction->UpdateCustomFields was being confused by the -Magic values. + (I should write a test for this, too.) + +------------------------------------------------------------------------ +r3393 | glasser | 2005-07-05 21:52:54 -0400 (Tue, 05 Jul 2005) | 13 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r36299@tin-foil: glasser | 2005-07-05 16:39:02 -0300 + RT-Ticket: 6774 + RT-Status: resolved + RT-Update: correspond + + Actually set password when creating a new user, and clean up the error reporting + from password setting. (And if you don't manage to set a password (either by leaving + it blank or by entering an invalid password) when creating a user, add a notice that + the user won't be able to log in.) Also, indentation cleanup. + + Patch by Ruslan Zakirov. + + +------------------------------------------------------------------------ +r3392 | glasser | 2005-07-05 21:52:35 -0400 (Tue, 05 Jul 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r36292@tin-foil: glasser | 2005-07-05 13:43:16 -0300 + RT-Ticket: 6811 + RT-Status: resolved + RT-Update: correspond + + Update French localization for 3.4.2 (thanks to J?\195?\169r?\195?\180me Fenal) + +------------------------------------------------------------------------ +r3391 | kevinr | 2005-07-05 20:48:09 -0400 (Tue, 05 Jul 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/SelfService/Display.html + + r6005@SAD-GIRL-IN-SNOW: kevinr | 2005-07-05 20:47:55 -0400 + RT-Ticket: 6505 + RT-Status: resolved + RT-Update: correspond + + Fixed the bug Seph noted where the "Brief/Full Headers" links in SelfService + were attempting to direct the user to /Ticket/Display.html instead of + /SelfService/Display.html + +------------------------------------------------------------------------ +r3390 | kevinr | 2005-07-05 19:11:14 -0400 (Tue, 05 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r5982@SAD-GIRL-IN-SNOW: kevinr | 2005-07-05 19:06:09 -0400 + * Fixed a typo in the perldoc + +------------------------------------------------------------------------ +r3389 | glasser | 2005-07-05 16:05:39 -0400 (Tue, 05 Jul 2005) | 13 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Users/Modify.html + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + + r36299@tin-foil: glasser | 2005-07-05 16:39:02 -0300 + RT-Ticket: 6774 + RT-Status: resolved + RT-Update: correspond + + Actually set password when creating a new user, and clean up the error reporting + from password setting. (And if you don't manage to set a password (either by leaving + it blank or by entering an invalid password) when creating a user, add a notice that + the user won't be able to log in.) Also, indentation cleanup. + + Patch by Ruslan Zakirov. + + +------------------------------------------------------------------------ +r3388 | glasser | 2005-07-05 12:45:50 -0400 (Tue, 05 Jul 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + + r36292@tin-foil: glasser | 2005-07-05 13:43:16 -0300 + RT-Ticket: 6811 + RT-Status: resolved + RT-Update: correspond + + Update French localization for 3.4.2 (thanks to J?\195?\169r?\195?\180me Fenal) + +------------------------------------------------------------------------ +r3379 | glasser | 2005-07-04 14:18:35 -0400 (Mon, 04 Jul 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Results.html + + r36245@tin-foil: glasser | 2005-07-04 14:10:53 -0300 + RT-Ticket: 6747 + RT-Status: resolved + RT-Update: Correspond + + Shorter links for RSS feed and offline + +------------------------------------------------------------------------ +r3378 | robert | 2005-07-04 00:40:37 -0400 (Mon, 04 Jul 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/rt.in + + r3412@bear: rspier | 2005-07-04T04:39:33.953112Z + documentation error, use -m not -t + + +------------------------------------------------------------------------ +r3295 | jesse | 2005-07-03 16:37:15 -0400 (Sun, 03 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r22106@hualien: jesse | 2005-07-03 16:35:22 -0400 + * We don't actually need a newer Text::WikiFormat + +------------------------------------------------------------------------ +r3293 | jesse | 2005-07-03 16:14:29 -0400 (Sun, 03 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/rt-mailgate.in + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/06mailgateway.t + + r22091@hualien: jesse | 2005-07-03 16:13:10 -0400 + * Disabling a new feature that might be dangerous; test fixes; cf fixes + +------------------------------------------------------------------------ +r3292 | jesse | 2005-07-03 16:14:21 -0400 (Sun, 03 Jul 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + + r22039@hualien: jesse | 2005-07-01 21:05:38 -0400 + * Refactoring of how RT::Record deals with custom fields for greater consistency + + +------------------------------------------------------------------------ +r3272 | alexmv | 2005-07-01 00:32:15 -0400 (Fri, 01 Jul 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3271 | alexmv | 2005-07-01 00:32:10 -0400 (Fri, 01 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r4556@zoq-fot-pik: chmrr | 2005-06-30 17:58:57 -0400 + * Don't assume link is happy on creation + +------------------------------------------------------------------------ +r3270 | alexmv | 2005-07-01 00:32:06 -0400 (Fri, 01 Jul 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFieldWikitext + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r4555@zoq-fot-pik: chmrr | 2005-06-30 17:36:05 -0400 + * WikiText updates to auto-link http:// style links + +------------------------------------------------------------------------ +r3261 | kevinr | 2005-06-28 18:47:38 -0400 (Tue, 28 Jun 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Display.html + + r5752@sad-girl-in-snow: kevinr | 2005-06-28 17:45:36 -0500 + RT-Ticket: 6745 + RT-Status: resolved + RT-Update: correspond + + Applied Seph's patch to add a BeforeShowHistory callback. + +------------------------------------------------------------------------ +r3254 | jesse | 2005-06-27 11:39:18 -0400 (Mon, 27 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/PageLayout + + r21952@hualien: jesse | 2005-06-27 11:38:54 -0400 + * Fixed a broken callback + +------------------------------------------------------------------------ +r3252 | jesse | 2005-06-24 13:55:24 -0400 (Fri, 24 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/id.po + + r21656@hualien: jesse | 2005-06-24 13:53:26 -0400 + * New Indonesian translation from James Briggs + +------------------------------------------------------------------------ +r3251 | jesse | 2005-06-24 13:55:11 -0400 (Fri, 24 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + + r21522@hualien: jesse | 2005-06-23 19:49:51 -0400 + * Some warning avoidance in Action/SendEmail.pm + +------------------------------------------------------------------------ +r3250 | jesse | 2005-06-24 13:54:56 -0400 (Fri, 24 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomField + + r21521@hualien: jesse | 2005-06-23 19:49:30 -0400 + * Custom field edit widget bullet proofing + +------------------------------------------------------------------------ +r3249 | jesse | 2005-06-24 13:54:42 -0400 (Fri, 24 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/t/regression/07acl.t + M /rt/branches/3.4-RELEASE/lib/t/regression/09record_cf_api.t + + r21520@hualien: jesse | 2005-06-23 19:49:06 -0400 + * Test suite improvements and cleanups + +------------------------------------------------------------------------ +r3248 | jesse | 2005-06-24 13:54:19 -0400 (Fri, 24 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r20757@hualien: jesse | 2005-06-17 19:34:37 -0400 + * Updated mailgateway documentation + +------------------------------------------------------------------------ +r3246 | alexmv | 2005-06-23 17:48:26 -0400 (Thu, 23 Jun 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r4485@zoq-fot-pik: chmrr | 2005-06-23 17:50:48 -0400 + RT-Ticket: 6781 + RT-Update: correspond + RT-Status: resolved + + * _AddWatcher takes Email, not Person; thanks to Andreas Jakum <ajakum@inode.at> + +------------------------------------------------------------------------ +r3245 | alexmv | 2005-06-23 17:43:57 -0400 (Thu, 23 Jun 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/RT_SiteConfig.pm + + r4483@zoq-fot-pik: chmrr | 2005-06-23 17:46:18 -0400 + RT-Ticket: 6782 + RT-Update: correspond + RT-Status: resolved + + * Fix perl invocation; thanks to Kim Toms <kim.toms@gmail.com> + +------------------------------------------------------------------------ +r3244 | alexmv | 2005-06-23 17:37:31 -0400 (Thu, 23 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Quicksearch + + r4481@zoq-fot-pik: chmrr | 2005-06-23 17:39:53 -0400 + * Actually fix the escaping bug + +------------------------------------------------------------------------ +r3243 | alexmv | 2005-06-23 16:58:14 -0400 (Thu, 23 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Quicksearch + + r4469@zoq-fot-pik: chmrr | 2005-06-23 17:00:09 -0400 + * Escape queue name properly + +------------------------------------------------------------------------ +r3242 | alexmv | 2005-06-23 16:58:02 -0400 (Thu, 23 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/MyRequests + M /rt/branches/3.4-RELEASE/html/Elements/MyTickets + + r4468@zoq-fot-pik: chmrr | 2005-06-23 16:59:51 -0400 + * Remove possible closure issue (my $foo = .... if $bar;) + +------------------------------------------------------------------------ +r3241 | alexmv | 2005-06-23 16:57:54 -0400 (Thu, 23 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + + r4467@zoq-fot-pik: chmrr | 2005-06-23 16:58:52 -0400 + * Doc that CanonicalizeEmailAddress may be called as static + +------------------------------------------------------------------------ +r3240 | alexmv | 2005-06-23 16:57:51 -0400 (Thu, 23 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT.pm.in + + r4466@zoq-fot-pik: chmrr | 2005-06-23 16:58:19 -0400 + * Document Set() a little better + +------------------------------------------------------------------------ +r3227 | jesse | 2005-06-18 23:47:04 -0400 (Sat, 18 Jun 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ListGlobalScrips + +* Fixed typo in kevin's fix (/l is a filter. it needs the |) + +------------------------------------------------------------------------ +r3226 | kevinr | 2005-06-18 22:37:51 -0400 (Sat, 18 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ListGlobalScrips + + r4496@sad-girl-in-snow: kevinr | 2005-06-18 21:37:27 -0500 + * Fixes possible cross-site scripting bug. + +------------------------------------------------------------------------ +r3225 | kevinr | 2005-06-18 22:26:51 -0400 (Sat, 18 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3224 | kevinr | 2005-06-18 22:26:40 -0400 (Sat, 18 Jun 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ListGlobalScrips + + r4487@sad-girl-in-snow: kevinr | 2005-06-18 21:23:04 -0500 + * Fixed a typo + * now use $RT::WebAddress because it's a good idea + * now localize 'Scrip' and number, instead of only the former + +------------------------------------------------------------------------ +r3223 | kevinr | 2005-06-18 03:41:38 -0400 (Sat, 18 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditScrips + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ListGlobalScrips + + r4484@sad-girl-in-snow: kevinr | 2005-06-18 02:40:00 -0500 + * Cleaned up the list-of-scrips element and made it provide more useful info. + +------------------------------------------------------------------------ +r3222 | jesse | 2005-06-17 19:36:28 -0400 (Fri, 17 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/rt-mailgate.in + + r20757@hualien: jesse | 2005-06-17 19:34:37 -0400 + * Updated mailgateway documentation + +------------------------------------------------------------------------ +r3212 | jesse | 2005-06-16 12:40:01 -0400 (Thu, 16 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/en.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fi.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/he.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ja.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/nl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pt_br.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_cn.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_tw.po + + r20717@hualien: jesse | 2005-06-16 12:24:50 -0400 + * Message catalog updates + +------------------------------------------------------------------------ +r3211 | jesse | 2005-06-16 12:39:48 -0400 (Thu, 16 Jun 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/Notify.pm + + r20716@hualien: jesse | 2005-06-16 12:23:58 -0400 + r20713@hualien: jesse | 2005-06-16 12:16:28 -0400 + r20711@hualien (orig r3204): alexmv | 2005-06-16 04:31:40 -0400 + r4308@zoq-fot-pik: chmrr | 2005-06-16 04:31:30 -0400 + * Missed an lc + + + + +------------------------------------------------------------------------ +r3210 | jesse | 2005-06-16 12:39:36 -0400 (Thu, 16 Jun 2005) | 10 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/Notify.pm + M /rt/branches/3.4-RELEASE/lib/RT/EmailParser.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queue_Overlay.pm + + r20715@hualien: jesse | 2005-06-16 12:20:34 -0400 + r20712@hualien: jesse | 2005-06-16 12:16:22 -0400 + r20710@hualien (orig r3203): alexmv | 2005-06-16 04:29:14 -0400 + r4306@zoq-fot-pik: chmrr | 2005-06-16 04:29:06 -0400 + * Move /^$foo$/ regexes to use eq instead, to prevent regex insertion + exploits + + + + +------------------------------------------------------------------------ +r3209 | jesse | 2005-06-16 12:39:21 -0400 (Thu, 16 Jun 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Scrip_Overlay.pm + + r20714@hualien: jesse | 2005-06-16 12:20:30 -0400 + r20705@hualien: jesse | 2005-06-16 12:11:06 -0400 + r19183@hualien (orig r3063): pdh | 2005-06-03 01:01:55 -0400 + Misleading error referred to IsApplicable, not Commit + + + + + +------------------------------------------------------------------------ +r3208 | jesse | 2005-06-16 12:39:07 -0400 (Thu, 16 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3207 | jesse | 2005-06-16 12:38:53 -0400 (Thu, 16 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3206 | jesse | 2005-06-16 12:38:40 -0400 (Thu, 16 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction_Overlay.pm + + +------------------------------------------------------------------------ +r3205 | jesse | 2005-06-16 12:38:27 -0400 (Thu, 16 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction_Overlay.pm + + +------------------------------------------------------------------------ +r3181 | alexmv | 2005-06-15 17:52:14 -0400 (Wed, 15 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3180 | alexmv | 2005-06-15 17:52:08 -0400 (Wed, 15 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFieldBinary + + r4266@zoq-fot-pik: chmrr | 2005-06-15 17:51:16 -0400 + * Backport r3147 from quebec + +------------------------------------------------------------------------ +r3170 | jesse | 2005-06-15 15:58:48 -0400 (Wed, 15 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/SearchBuilder.pm + + r20542@hualien: jesse | 2005-06-15 15:56:43 -0400 + * Made search-by-any-customfield work + + +------------------------------------------------------------------------ +r3155 | jesse | 2005-06-14 17:00:26 -0400 (Tue, 14 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/lib/RT/I18N/id.po + + r20078@hualien: jesse | 2005-06-14 16:57:41 -0400 + * First draft Indonesian message catalog from James Briggs + + +------------------------------------------------------------------------ +r3142 | kevinr | 2005-06-13 15:43:08 -0400 (Mon, 13 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + + r4210@SAD-GIRL-IN-SNOW: kevinr | 2005-06-13 15:39:50 -0400 + * fixed a couple small issues with the perldoc format + +------------------------------------------------------------------------ +r3120 | kevinr | 2005-06-09 01:33:18 -0400 (Thu, 09 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction_Overlay.pm + + r4110@SAD-GIRL-IN-SNOW: kevinr | 2005-06-09 01:30:22 -0400 + * fixed the mis-typed perldoc tags + +------------------------------------------------------------------------ +r3119 | kevinr | 2005-06-09 01:32:41 -0400 (Thu, 09 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction_Overlay.pm + + r4107@SAD-GIRL-IN-SNOW: kevinr | 2005-06-09 00:43:23 -0400 + * makes RT::ScripAction::Load return ($id, $message) instead of just $message, + and adds perldoc for Load() to that effect. + +------------------------------------------------------------------------ +r3116 | jesse | 2005-06-09 01:00:12 -0400 (Thu, 09 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r19701@hualien: jesse | 2005-06-09 00:58:09 -0400 + * Bumping to 3.4.3pre1 + + +------------------------------------------------------------------------ +r3094 | kevinr | 2005-06-08 18:44:39 -0400 (Wed, 08 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/rt-mailgate.in + M /rt/branches/3.4-RELEASE/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email/Auth/MailFrom.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/06mailgateway.t + + r4080@sad-girl-in-snow: kevinr | 2005-06-08 18:35:07 -0400 + * Applied Ruslan Zakirov's ext-mailgate patch, which allows you to take or + resolve tickets by e-mail. + +------------------------------------------------------------------------ +r3085 | kevinr | 2005-06-07 19:29:11 -0400 (Tue, 07 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r4043@SAD-GIRL-IN-SNOW: kevinr | 2005-06-07 19:28:11 -0400 + * Added return format information to perldoc for Comment() and Correspond() + +------------------------------------------------------------------------ +r3084 | kevinr | 2005-06-07 19:28:29 -0400 (Tue, 07 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r3943@SAD-GIRL-IN-SNOW: kevinr | 2005-06-02 16:12:07 -0400 + * Applied patch from Steve Turner to add a default callback to the Queue + Admin page. + +------------------------------------------------------------------------ +r3077 | alexmv | 2005-06-07 17:56:50 -0400 (Tue, 07 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/mason_handler.svc.in + M /rt/branches/3.4-RELEASE/bin/rt-mailgate.in + M /rt/branches/3.4-RELEASE/lib/RT/ACE_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ACL_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/EscalatePriority.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/Generic.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attachment_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attachments_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attributes_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/CachedGroupMembers_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/Generic.pm + M /rt/branches/3.4-RELEASE/lib/RT/CurrentUser.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Date.pm + M /rt/branches/3.4-RELEASE/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/GroupMembers_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Group_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Groups_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Handle.pm + M /rt/branches/3.4-RELEASE/lib/RT/I18N.pm + 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/Principals_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queue_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queues_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearches.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripActions_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripConditions_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Scrips_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Search/ActiveTicketsInQueue.pm + M /rt/branches/3.4-RELEASE/lib/RT/Search/FromSQL.pm + M /rt/branches/3.4-RELEASE/lib/RT/Search/Generic.pm + M /rt/branches/3.4-RELEASE/lib/RT/SearchBuilder.pm + M /rt/branches/3.4-RELEASE/lib/RT/System.pm + M /rt/branches/3.4-RELEASE/lib/RT/Templates_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transactions_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Users_Overlay.pm + + r4010@zoq-fot-pik: chmrr | 2005-06-07 17:08:18 -0400 + * Whitespace fixes for proper POD + +------------------------------------------------------------------------ +r3073 | jesse | 2005-06-05 17:30:17 -0400 (Sun, 05 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in + + +* Updated EmailSubjectTagRegex documentation. Thanks to Phil Homewood for spotting it. + +------------------------------------------------------------------------ +r3070 | robert | 2005-06-03 23:36:50 -0400 (Fri, 03 Jun 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/configure.ac + + r3078@bear: rspier | 2005-06-04T03:36:19.749340Z + RT-Ticket: 6748 + RT-Status: resolved + RT-Update: correspond + + Fallback to $LOGNAME if $USER isn't defined for --with-my-user-group + + + +------------------------------------------------------------------------ +r3059 | kevinr | 2005-06-02 16:17:31 -0400 (Thu, 02 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Groups/Modify.html + + r3943@STRATTON-THREE-TWENTY-SEVEN: kevinr | 2005-06-02 16:12:07 -0400 + * Applied patch from Steve Turner to add a default callback to the Queue + Admin page. + +------------------------------------------------------------------------ +r3057 | robert | 2005-06-02 00:15:13 -0400 (Thu, 02 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/AutoOpen.pm + + r3073@bear: rspier | 2005-06-02T04:14:40.726890Z + Support for RT-Control: no-autoopen + + +------------------------------------------------------------------------ +r3056 | glasser | 2005-06-01 18:39:36 -0400 (Wed, 01 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3055 | glasser | 2005-06-01 18:39:12 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/t/regression/04send_email.t + M /rt/branches/3.4-RELEASE/lib/t/regression/20savedsearch.t + M /rt/branches/3.4-RELEASE/lib/t/regression/21query-builder.t + + r33654@tin-foil: glasser | 2005-06-01 16:36:18 -0400 + Fix some test plans, mark some QB tests TODO + +------------------------------------------------------------------------ +r3054 | glasser | 2005-06-01 18:38:38 -0400 (Wed, 01 Jun 2005) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r33653@tin-foil: glasser | 2005-06-01 15:19:20 -0400 + fixdeps wasn't working for me (it was trying to detar inside my MiniCPAN!); + its code was "correct" but presumably one of the other 500 modules that were + loaded confused CPAN. (This bug happened both before and after the previous change.) + Now just uses a system() call to install. + +------------------------------------------------------------------------ +r3053 | glasser | 2005-06-01 18:38:05 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r33652@tin-foil: glasser | 2005-06-01 15:02:58 -0400 + A mini rewrite of testdeps: now it tells you at the bottom if it is missing anything + +------------------------------------------------------------------------ +r3052 | glasser | 2005-06-01 18:37:45 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + + r33243@tin-foil: glasser | 2005-05-27 17:08:38 -0400 + Add some hopefully correct comments to the head of Search/Build + +------------------------------------------------------------------------ +r3051 | glasser | 2005-06-01 18:37:29 -0400 (Wed, 01 Jun 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/t/regression/02basic_web.t + M /rt/branches/3.4-RELEASE/lib/t/regression/08web_cf_access.t + M /rt/branches/3.4-RELEASE/lib/t/regression/09record_cf_api.t + M /rt/branches/3.4-RELEASE/lib/t/regression/10merge.t + M /rt/branches/3.4-RELEASE/lib/t/regression/11-template-insert.t + M /rt/branches/3.4-RELEASE/lib/t/regression/12-search.t + M /rt/branches/3.4-RELEASE/lib/t/regression/13-attribute-tests.t + M /rt/branches/3.4-RELEASE/lib/t/regression/15cf_single_values_are_single.t + M /rt/branches/3.4-RELEASE/lib/t/regression/21query-builder.t + + r33242@tin-foil: glasser | 2005-05-27 14:08:19 -0400 + * Improved Query builder Tests + * add plans to a bunch of other tests + +------------------------------------------------------------------------ +r3050 | glasser | 2005-06-01 18:37:12 -0400 (Wed, 01 Jun 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r3049 | glasser | 2005-06-01 18:36:55 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + M /rt/branches/3.4-RELEASE/bin/standalone_httpd.in + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Groups.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Tickets.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Transactions.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Users.html + M /rt/branches/3.4-RELEASE/html/Admin/index.html + M /rt/branches/3.4-RELEASE/lib/RT/CustomFieldValue_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Standalone.pm + M /rt/branches/3.4-RELEASE/lib/RT/URI/t.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/04send_email.t + M /rt/branches/3.4-RELEASE/lib/t/regression/20savedsearch.t + + r33110@tin-foil: glasser | 2005-05-26 13:33:06 -0400 + Undo 'make license-tag' change; jesse should do this later though + +------------------------------------------------------------------------ +r3048 | glasser | 2005-06-01 18:36:40 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/QueryBuilder/Tree.pm + + r33109@tin-foil: glasser | 2005-05-26 12:02:13 -0400 + More docs and refactoring on QueryBuilder::Tree + +------------------------------------------------------------------------ +r3047 | glasser | 2005-06-01 18:36:24 -0400 (Wed, 01 Jun 2005) | 12 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/QueryBuilder/Tree.pm + + r33108@tin-foil: glasser | 2005-05-26 02:12:48 -0400 + rt-ticket: 6568 + rt-update: correspond + + * Better fix to Query Builder; in addition to refactoring most of the code which got + information out of the tree, prune away childless AND/ORs, fixing the bug from ticket #6568. + + Also get rid of the reaction to the "Clear" action, which I don't think exists, and which + I think is incorrect, since the root is supposed to have one child (see where it is + first created). + + +------------------------------------------------------------------------ +r3046 | glasser | 2005-06-01 18:35:53 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/QueryBuilder/Tree.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/QueryBuilder.pm + + r33107@tin-foil: glasser | 2005-05-26 01:56:25 -0400 + More Query Builder tree refactoring. + +------------------------------------------------------------------------ +r3045 | glasser | 2005-06-01 18:35:33 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + A /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/QueryBuilder + A /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/QueryBuilder/Tree.pm + A /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/QueryBuilder.pm + + r33106@tin-foil: glasser | 2005-05-26 01:21:29 -0400 + Move stuff out from html/Search/Build.html into a module; refactor some of the code there. + +------------------------------------------------------------------------ +r3044 | glasser | 2005-06-01 18:35:14 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + M /rt/branches/3.4-RELEASE/bin/standalone_httpd.in + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Groups.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Tickets.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Transactions.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Users.html + M /rt/branches/3.4-RELEASE/html/Admin/index.html + M /rt/branches/3.4-RELEASE/lib/RT/CustomFieldValue_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Standalone.pm + M /rt/branches/3.4-RELEASE/lib/RT/URI/t.pm + + r33105@tin-foil: glasser | 2005-05-26 00:02:36 -0400 + Run 'make license-tag' + +------------------------------------------------------------------------ +r3043 | glasser | 2005-06-01 18:34:56 -0400 (Wed, 01 Jun 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + A /rt/branches/3.4-RELEASE/lib/t/regression/21query-builder.t + + r33104@tin-foil: glasser | 2005-05-25 23:53:28 -0400 + Fix mistake in the function I just made + + Add a bit of testing of the query builder. + +------------------------------------------------------------------------ +r3042 | glasser | 2005-06-01 18:34:38 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + + r33103@tin-foil: glasser | 2005-05-25 22:24:07 -0400 + And remove the old functionality too. + +------------------------------------------------------------------------ +r3041 | glasser | 2005-06-01 18:33:51 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + + r33102@tin-foil: glasser | 2005-05-25 22:22:53 -0400 + build_array was being called twice for two totally disconnected reasons. Split one out. + +------------------------------------------------------------------------ +r3040 | glasser | 2005-06-01 18:32:34 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + + r33101@tin-foil: glasser | 2005-05-25 21:05:02 -0400 + Attempt to add parentheses to the clauses select list, in Query Builder. + +------------------------------------------------------------------------ +r3039 | glasser | 2005-06-01 18:32:16 -0400 (Wed, 01 Jun 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + + r33100@tin-foil: glasser | 2005-05-25 20:21:43 -0400 + Mini refactoring of Tree->SQL/HTML function + +------------------------------------------------------------------------ +r2998 | kevinr | 2005-05-31 21:08:40 -0400 (Tue, 31 May 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + + r3841@SAD-GIRL-IN-SNOW: kevinr | 2005-05-31 21:07:42 -0400 + RT-Ticket: 6669 + RT-Status: resolved + RT-Action: correspond + + * Fixed the mysteriously-absent '1' in the Norwegian po. + +------------------------------------------------------------------------ +r2997 | kevinr | 2005-05-31 20:38:19 -0400 (Tue, 31 May 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + + r3010@SAD-GIRL-IN-SNOW: kevinr | 2005-05-31 18:10:17 -0400 + RT-Ticket: 6423 + RT-Status: resolve + RT-Action: correspond + + * Fixed a line I broke in revision 3008 -- vi removed the '%1'. + +------------------------------------------------------------------------ +r2996 | kevinr | 2005-05-31 20:35:39 -0400 (Tue, 31 May 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fi.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/he.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ja.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/nl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pt_br.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_cn.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_tw.po + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r3009@SAD-GIRL-IN-SNOW: kevinr | 2005-05-31 17:52:48 -0400 + RT-Ticket: 6669 + RT-Status: resolved + RT-Action: correspond + + * Fixed an extra space in lib/RT/Transaction_Overlay.pm and propagated the + change to the po files, as per Brandon Pulsipher's suggestion. + +------------------------------------------------------------------------ +r2995 | kevinr | 2005-05-31 20:34:40 -0400 (Tue, 31 May 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Queues/Modify.html + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fi.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/he.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ja.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/nl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pt_br.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_cn.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_tw.po + + r3008@SAD-GIRL-IN-SNOW: kevinr | 2005-05-31 17:05:08 -0400 + RT-Ticket: 6423 + RT-Status: resolve + RT-Action: correspond + + * Corrected a typo in Admin/Queues/Modify.html and propagated it to all the + po files, as per Angelo Turetta's suggestion. + +------------------------------------------------------------------------ +r2994 | kevinr | 2005-05-31 16:11:31 -0400 (Tue, 31 May 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Error + + r3004@sad-girl-in-snow: kevinr | 2005-05-31 15:52:19 -0400 + RT-Ticket: 6684 + RT-Status: resolve + RT-Action: correspond + + html/Elements/Error should not continue, and has been changed to add the + standard footer element on %cleanup. + +------------------------------------------------------------------------ +r2993 | kevinr | 2005-05-31 16:10:33 -0400 (Tue, 31 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r2967@sad-girl-in-snow: kevinr | 2005-05-25 18:37:20 -0400 + * Added a comma where a compound sentence wanted it. + +------------------------------------------------------------------------ +r2992 | kevinr | 2005-05-31 16:10:01 -0400 (Tue, 31 May 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r2965@sad-girl-in-snow: kevinr | 2005-05-25 17:47:26 -0400 + * changed "e-mail" back to "email" + * removed discussion of pre-5.8.3 perl versions + +------------------------------------------------------------------------ +r2974 | jesse | 2005-05-29 19:28:58 -0400 (Sun, 29 May 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Results.html + + r17981@hualien: jesse | 2005-05-29 19:26:59 -0400 + r17979@hualien: jesse | 2005-05-29 19:21:59 -0400 + RT-Ticket: 6741 + RT-Status: resolved + RT-Update: correspond + + * Sort order wasn't preserved for the "in memory" saved search. --Phil Homewood + + +------------------------------------------------------------------------ +r2968 | jesse | 2005-05-25 22:46:40 -0400 (Wed, 25 May 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + + r17717@hualien: jesse | 2005-05-25 22:43:35 -0400 + * Better in-reply-to when replying to a message generated via the webui + * Now only hang onto the first four and the last six References headers. + + +------------------------------------------------------------------------ +r2967 | jesse | 2005-05-25 22:45:46 -0400 (Wed, 25 May 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r17705@hualien: jesse | 2005-05-25 01:17:11 -0400 + RT-Ticket: 6627 + RT-Status: resolved + RT-Update: correspond + + * Updated German translation -- David Schmit + +------------------------------------------------------------------------ +r2966 | jesse | 2005-05-25 22:45:39 -0400 (Wed, 25 May 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r17704@hualien: jesse | 2005-05-25 00:59:29 -0400 + RT-Ticket: 6654 + RT-Status: resolved + RT-Update: correspond + + * Updated Italian translation from Angelo Turetta + + +------------------------------------------------------------------------ +r2965 | jesse | 2005-05-25 22:45:32 -0400 (Wed, 25 May 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r17703@hualien: jesse | 2005-05-25 00:55:10 -0400 + RT-Ticket: 6653 + RT-Status: resolved + RT-Update: correspond + + * Small localization fix from Angelo Turetta + + + +------------------------------------------------------------------------ +r2964 | jesse | 2005-05-25 22:45:25 -0400 (Wed, 25 May 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r17684@hualien: jesse | 2005-05-24 18:18:21 -0400 + RT-Ticket: 6713 + RT-Status: resolved + RT-Update: correspond + + * Text::WikiFormat is a dependency. And should have been in 3.4.2 + + + +------------------------------------------------------------------------ +r2963 | jesse | 2005-05-25 22:45:17 -0400 (Wed, 25 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + + r17682@hualien: jesse | 2005-05-24 12:27:55 -0400 + * Wikitext fields weren't properly escaping HTML + +------------------------------------------------------------------------ +r2961 | glasser | 2005-05-25 19:58:06 -0400 (Wed, 25 May 2005) | 15 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + + r33096@tin-foil: glasser | 2005-05-25 19:56:11 -0400 + RT-Ticket: 6568 + RT-Status: open + RT-Update: correspond + + * Simple fix to Query Builder to prevent a crash in situations involving + the creation of AND/ORs with no children. A fix that treats the cause + and not the symptom is planned. Currently, it may sometimes do "unexpected things" + with your ADD, but it is at least in a state that the user can recover from. + + Specifically, for Danial's it works as expected; for Tim's example, it gives an incorrect + error message (in the context of the QB page, not a Mason crash thing) but the select + box is in a good state. + + +------------------------------------------------------------------------ +r2960 | kevinr | 2005-05-25 18:38:43 -0400 (Wed, 25 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r2967@SAD-GIRL-IN-SNOW: kevinr | 2005-05-25 18:37:20 -0400 + * Added a comma where a compound sentence wanted it. + +------------------------------------------------------------------------ +r2959 | kevinr | 2005-05-25 17:49:43 -0400 (Wed, 25 May 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r2965@SAD-GIRL-IN-SNOW: kevinr | 2005-05-25 17:47:26 -0400 + * changed "e-mail" back to "email" + * removed discussion of pre-5.8.3 perl versions + +------------------------------------------------------------------------ +r2958 | kevinr | 2005-05-25 16:47:14 -0400 (Wed, 25 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r2950@SAD-GIRL-IN-SNOW: kevinr | 2005-05-25 16:39:58 -0400 + * fixed a bunch of typoes in the README + +------------------------------------------------------------------------ +r2957 | jesse | 2005-05-25 01:25:06 -0400 (Wed, 25 May 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/PreviewScrips + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + + r17705@hualien: jesse | 2005-05-25 01:17:11 -0400 + RT-Ticket: 6627 + RT-Status: resolved + RT-Update: correspond + + * Updated German translation -- David Schmit + +------------------------------------------------------------------------ +r2956 | jesse | 2005-05-25 01:24:55 -0400 (Wed, 25 May 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + + r17704@hualien: jesse | 2005-05-25 00:59:29 -0400 + RT-Ticket: 6654 + RT-Status: resolved + RT-Update: correspond + + * Updated Italian translation from Angelo Turetta + + +------------------------------------------------------------------------ +r2955 | jesse | 2005-05-25 01:24:46 -0400 (Wed, 25 May 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Elements/DisplayOptions + + r17703@hualien: jesse | 2005-05-25 00:55:10 -0400 + RT-Ticket: 6653 + RT-Status: resolved + RT-Update: correspond + + * Small localization fix from Angelo Turetta + + + +------------------------------------------------------------------------ +r2954 | jesse | 2005-05-24 18:21:27 -0400 (Tue, 24 May 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r17684@hualien: jesse | 2005-05-24 18:18:21 -0400 + RT-Ticket: 6713 + RT-Status: resolved + RT-Update: correspond + + * Text::WikiFormat is a dependency. And should have been in 3.4.2 + + + +------------------------------------------------------------------------ +r2953 | jesse | 2005-05-24 18:21:07 -0400 (Tue, 24 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFieldWikitext + + r17682@hualien: jesse | 2005-05-24 12:27:55 -0400 + * Wikitext fields weren't properly escaping HTML + +------------------------------------------------------------------------ +r2945 | kevinr | 2005-05-24 13:53:43 -0400 (Tue, 24 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r2945@sad-girl-in-snow: kevinr | 2005-05-24 13:51:57 -0400 + * Updated README to note that RT works with Oracle versions >=9.2 + +------------------------------------------------------------------------ +r2936 | jesse | 2005-05-23 15:30:36 -0400 (Mon, 23 May 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + + r17673@hualien: jesse | 2005-05-23 15:27:11 -0400 + RT-Ticket: 6459 + RT-Status: resolved + + * Updates to the _AddLink return values from Todd Chapman. + + +------------------------------------------------------------------------ +r2935 | jesse | 2005-05-23 15:30:26 -0400 (Mon, 23 May 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in + + r17672@hualien: jesse | 2005-05-23 15:22:51 -0400 + * Switch the default WebURL to "localhost" to make the regression suite pass + more cleanly + +------------------------------------------------------------------------ +r2934 | jesse | 2005-05-23 15:30:16 -0400 (Mon, 23 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/EmailParser.pm + + r17671@hualien: jesse | 2005-05-23 14:21:54 -0400 + * Since EmailParser _might_ be used out of Interface::Email context, require Interface::Email. + +------------------------------------------------------------------------ +r2933 | jesse | 2005-05-23 15:30:02 -0400 (Mon, 23 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/EmailParser.pm + + r17670@hualien: jesse | 2005-05-23 13:48:34 -0400 + * RT::EmailParser->ParseTicketId was deprecated but that was not clear. Also, the code was out of date + +------------------------------------------------------------------------ +r2932 | glasser | 2005-05-23 13:04:38 -0400 (Mon, 23 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/URI/fsck_com_rt.pm + M /rt/branches/3.4-RELEASE/lib/RT/URI/t.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/02basic_web.t + M /rt/branches/3.4-RELEASE/lib/t/regression/03web_compiliation_errors.t + M /rt/branches/3.4-RELEASE/lib/t/regression/06mailgateway.t + M /rt/branches/3.4-RELEASE/lib/t/regression/07acl.t + M /rt/branches/3.4-RELEASE/lib/t/regression/08web_cf_access.t + +Allow for base URL to be changed when doing regressions. +(And kind of allow for Organization to be changed, except the mailgate +test will still bite it if you do.) +------------------------------------------------------------------------ +r2909 | glasser | 2005-05-22 17:03:29 -0400 (Sun, 22 May 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE/etc/RT_SiteConfig.pm + +Put an obviously fake instead of possibly wrong path in an example command.` +------------------------------------------------------------------------ +r2887 | jesse | 2005-05-16 22:09:21 -0400 (Mon, 16 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + + r16893@hualien: jesse | 2005-05-16 18:04:08 -0400 + * Better creation of in-reply-to/references headers on web-ased reply + +------------------------------------------------------------------------ +r2886 | jesse | 2005-05-16 17:49:47 -0400 (Mon, 16 May 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/PageLayout + + r16891@hualien: jesse | 2005-05-16 22:48:02 +0100 + * Adding a new "top of page" callback + + +------------------------------------------------------------------------ +r2880 | jesse | 2005-05-13 10:25:08 -0400 (Fri, 13 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValues_Overlay.pm + + r16761@hualien: jesse | 2005-05-13 15:22:22 +0100 + * Ruslan found a debugging statement we had accidentally committed + +------------------------------------------------------------------------ +r2879 | jesse | 2005-05-12 20:04:44 -0400 (Thu, 12 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValues_Overlay.pm + + r16510@hualien: jesse | 2005-05-12 17:44:00 +0100 + * Fix on the plane was wrong. sigh + +------------------------------------------------------------------------ +r2864 | jesse | 2005-05-11 20:06:23 -0400 (Wed, 11 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomFieldValue_Overlay.pm + + r16468@hualien: jesse | 2005-05-11 15:34:43 +0100 + * CustomFieldValues fix had a typo + +------------------------------------------------------------------------ +r2863 | jesse | 2005-05-11 20:06:12 -0400 (Wed, 11 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + + r16462@hualien: jesse | 2005-05-11 15:30:30 +0100 + * Try harder to set a proper In-reply-to: header + +------------------------------------------------------------------------ +r2862 | jesse | 2005-05-11 20:06:01 -0400 (Wed, 11 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/lib/RT/CustomFieldValue_Overlay.pm + + r16461@hualien: jesse | 2005-05-11 15:23:33 +0100 + * Custom field values can now be integers + +------------------------------------------------------------------------ +r2861 | robert | 2005-05-10 01:54:35 -0400 (Tue, 10 May 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/CreateTickets.pm + + r2875@bear: rspier | 2005-05-10T05:54:13.875334Z + quick and dirty fix (ok, not so quick, and not really so dirty) + for the recursive CreateTickets dataloss issue. + + +------------------------------------------------------------------------ +r2856 | jesse | 2005-05-09 21:52:39 -0400 (Mon, 09 May 2005) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/Queue_Overlay.pm + + r16376@hualien: jesse | 2005-05-09 21:51:14 -0400 + r16373@hualien: jesse | 2005-05-09 21:43:59 -0400 + * Queue name case changes were accidentally generating a "Name Conflict" error + + + +------------------------------------------------------------------------ +r2855 | jesse | 2005-05-09 21:52:31 -0400 (Mon, 09 May 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r2854 | jesse | 2005-05-09 21:52:24 -0400 (Mon, 09 May 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFields_Overlay.pm + + r15829@hualien: jesse | 2005-05-06 16:06:12 -0400 + * Make sure that disabled custom fields aren't listed in Queue CF listings. + + +------------------------------------------------------------------------ +r2833 | glasser | 2005-05-05 22:44:56 -0400 (Thu, 05 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + +Require modern version of XML::RSS (versions prior to 1.02 do not +encode their output properly; 1.02 and 1.05 have the same prereqs +but 1.05 fixes some other bugs) +------------------------------------------------------------------------ +r2831 | jesse | 2005-05-04 13:16:54 -0400 (Wed, 04 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r15792@hualien: jesse | 2005-05-04 13:14:49 -0400 + * This is 3.4.2 + +------------------------------------------------------------------------ +r2829 | robert | 2005-05-03 23:52:32 -0400 (Tue, 03 May 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/initialdata + + r2835@bear: rspier | 2005-05-04T03:51:48.597852Z + fix typo in initialdata related to approval rejection + + +------------------------------------------------------------------------ +r2820 | jesse | 2005-05-02 13:40:54 -0400 (Mon, 02 May 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r14639@hualien: jesse | 2005-05-02 13:30:18 -0400 + * This be 3.4.2rc2 + +------------------------------------------------------------------------ +r2819 | jesse | 2005-05-02 13:25:35 -0400 (Mon, 02 May 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/SelfService/Elements/Tabs + + r14637@hualien: jesse | 2005-05-02 13:24:05 -0400 + * Patch to SelfService UI to not display a preferences page unless the current user (ie all unprivileged users) has the right to do so. + + +------------------------------------------------------------------------ +r2817 | jesse | 2005-04-29 13:11:27 -0400 (Fri, 29 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Update.html + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + + r14626@hualien: jesse | 2005-04-29 13:06:57 -0400 + * Message threading improvements suggested by Florian Weimer + +------------------------------------------------------------------------ +r2815 | jesse | 2005-04-29 00:12:18 -0400 (Fri, 29 Apr 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Update.html + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + + r14617@hualien: jesse | 2005-04-28 22:56:56 -0400 + * Enabled proper message threading with RT + + +------------------------------------------------------------------------ +r2814 | jesse | 2005-04-29 00:12:11 -0400 (Fri, 29 Apr 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r14616@hualien: jesse | 2005-04-28 22:56:19 -0400 + * Added a todo notice + + +------------------------------------------------------------------------ +r2813 | jesse | 2005-04-29 00:12:04 -0400 (Fri, 29 Apr 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r2812 | jesse | 2005-04-29 00:11:00 -0400 (Fri, 29 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Footer + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/en.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fi.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/he.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ja.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/nl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pt_br.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_cn.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_tw.po + + r14017@hualien: jesse | 2005-04-21 21:07:47 -0400 + Loc updates + +------------------------------------------------------------------------ +r2807 | jesse | 2005-04-25 22:33:14 -0400 (Mon, 25 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in + +* Correct comments in config file. "RTLogoURL" is actually LogoURL. --Allison Randal + +------------------------------------------------------------------------ +r2792 | jesse | 2005-04-20 11:32:54 -0400 (Wed, 20 Apr 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + + r13994@hualien: jesse | 2005-04-20 11:31:44 -0400 + RT-Ticket: 6620 + RT-Status: resolved + RT-Update: correspond + + * Hungarian translation had an incorrect Content-Type. Reported upstream from + Debian. + + +------------------------------------------------------------------------ +r2791 | jesse | 2005-04-19 22:00:57 -0400 (Tue, 19 Apr 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in + M /rt/branches/3.4-RELEASE/etc/RT_SiteConfig.pm + + r13990@hualien: jesse | 2005-04-19 22:00:14 -0400 + * Canonicalized => to , in the configuration file + They mean the same thing, but consistency is good. + +------------------------------------------------------------------------ +r2783 | jesse | 2005-04-19 17:05:21 -0400 (Tue, 19 Apr 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/t/regression/01ticket_link_searching.t + M /rt/branches/3.4-RELEASE/lib/t/regression/19-rtname.t + + r13834@hualien: jesse | 2005-04-19 17:03:40 -0400 + RT-Ticket: 6617 + RT-Status: resolve + RT-Update: correspond + + Removed some spurious use lib lines from the test suite. Thanks to Dave Rolsky. + + + +------------------------------------------------------------------------ +r2782 | jesse | 2005-04-19 14:19:29 -0400 (Tue, 19 Apr 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + + r13264@hualien: jesse | 2005-04-19 14:15:54 -0400 + RT-Ticket: 6616 + RT-Status: resolved + RT-Update: correspond + + * Added a new HasPassword method to the RT user object + + +------------------------------------------------------------------------ +r2779 | tla | 2005-04-19 00:45:48 -0400 (Tue, 19 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/Queue_Overlay.pm + +fix the perldoc + +------------------------------------------------------------------------ +r2771 | jesse | 2005-04-18 01:10:20 -0400 (Mon, 18 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldWikitext + A /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFieldWikitext + M /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFields + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + + r13240@hualien: jesse | 2005-04-18 01:07:43 -0400 + * Added Wikitext custom field type + +------------------------------------------------------------------------ +r2768 | jesse | 2005-04-18 00:16:42 -0400 (Mon, 18 Apr 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE/releng.cnf + +3.4.2rc1 +------------------------------------------------------------------------ +r2749 | jesse | 2005-04-17 21:58:26 -0400 (Sun, 17 Apr 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Users/Modify.html + + r13207@hualien: jesse | 2005-04-17 21:57:31 -0400 + RT-Ticket: 6597 + RT-Status: resolved + RT-Update correspond + + * CanonicalizeUserInfo didn't work right from RT's WebUI. + Fixed by Dave Rolsky. + + +------------------------------------------------------------------------ +r2748 | jesse | 2005-04-17 21:58:19 -0400 (Sun, 17 Apr 2005) | 11 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/TicketList + + r13206@hualien: jesse | 2005-04-17 21:54:10 -0400 + r13204@hualien: jesse | 2005-04-17 21:52:15 -0400 + RT-Ticket: 6603 + RT-Status: resolved + RT-Update: correspond + + * RT used to report an improper total number of pages if the number of + results found was evenly divisible by the number of rows per page + + + +------------------------------------------------------------------------ +r2746 | jesse | 2005-04-17 21:45:07 -0400 (Sun, 17 Apr 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r13195@hualien: jesse | 2005-04-17 21:36:13 -0400 + RT-Ticket: 6491 + RT-Status: resolved + RT-Updated: correspond + + * Bumped the Postgres dependency to 1.41 to get around the + broken 1.40 release + + +------------------------------------------------------------------------ +r2745 | jesse | 2005-04-17 21:45:00 -0400 (Sun, 17 Apr 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/Row + + r13194@hualien: jesse | 2005-04-17 21:31:40 -0400 + RT-Ticket: 6522 + RT-Status: resolved + RT-Update: correspond + + * Newlines in CustomFields are now displayed in TicketList results + + + +------------------------------------------------------------------------ +r2744 | jesse | 2005-04-17 21:44:50 -0400 (Sun, 17 Apr 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/SetupSessionCookie + + r13193@hualien: jesse | 2005-04-17 21:26:35 -0400 + RT-Ticket: 6657 + RT-Status: resolved + + * Better error message when the sessions table or sessions dir isn't writable + + +------------------------------------------------------------------------ +r2743 | jesse | 2005-04-17 21:44:37 -0400 (Sun, 17 Apr 2005) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + + r13192@hualien: jesse | 2005-04-17 21:23:22 -0400 + RT-Ticket: 6517 + RT-Update: correspond + + * New Russian translation from Andrew Kornilov + +------------------------------------------------------------------------ +r2742 | jesse | 2005-04-17 21:44:23 -0400 (Sun, 17 Apr 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Modify.html + + r13191@hualien: jesse | 2005-04-17 21:10:17 -0400 + RT-Ticket: 6589 + RT-Status: resolved + RT-Update: correspond + + * Quieted a deprecation warning -- Dmitry Sivachenko <mitya@cavia.pp.ru> + + +------------------------------------------------------------------------ +r2741 | jesse | 2005-04-17 21:44:10 -0400 (Sun, 17 Apr 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + + r13190@hualien: jesse | 2005-04-17 21:08:55 -0400 + RT-Ticket: 6585 + RT-Status: resolved + RT-Update: correspond + + * Updated Danish translation from Jonas Nielsen + + +------------------------------------------------------------------------ +r2740 | jesse | 2005-04-17 21:43:53 -0400 (Sun, 17 Apr 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + + r13189@hualien: jesse | 2005-04-17 21:05:49 -0400 + RT-Ticket: 6583 + RT-Status: resolved + RT-Update: correspond + + * Fixed typos in Spanish translation + + +------------------------------------------------------------------------ +r2739 | jesse | 2005-04-17 21:43:44 -0400 (Sun, 17 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditQueueWatchers + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditScrips + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditTemplates + M /rt/branches/3.4-RELEASE/html/Admin/Elements/PickCustomFields + M /rt/branches/3.4-RELEASE/html/Admin/Elements/PickObjects + M /rt/branches/3.4-RELEASE/html/Admin/Elements/QueueRightsForUser + M /rt/branches/3.4-RELEASE/html/Admin/Groups/Members.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/index.html + M /rt/branches/3.4-RELEASE/html/Elements/Checkbox + M /rt/branches/3.4-RELEASE/html/Elements/EditLinks + M /rt/branches/3.4-RELEASE/html/Search/Bulk.html + M /rt/branches/3.4-RELEASE/html/SelfService/Update.html + M /rt/branches/3.4-RELEASE/html/Ticket/Create.html + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditWatchers + M /rt/branches/3.4-RELEASE/html/Ticket/Update.html + M /rt/branches/3.4-RELEASE/html/User/Elements/DelegateRights + M /rt/branches/3.4-RELEASE/html/User/Groups/Members.html + + r13188@hualien: jesse | 2005-04-17 20:58:19 -0400 + * Checkbox fields need a "value" or they are ignored + +------------------------------------------------------------------------ +r2738 | jesse | 2005-04-17 20:26:15 -0400 (Sun, 17 Apr 2005) | 11 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/12-search.t + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r13186@hualien: jesse | 2005-04-17 20:24:41 -0400 + RT-Ticket: 6562 + RT-Status: resolved + RT-Update: correspond + + * Patch from Tom Yu to allow negative CF searching and better + multi-CF search. + + * Bumped SearchBuilder dependency to new version + + +------------------------------------------------------------------------ +r2634 | tla | 2005-04-15 17:21:25 -0400 (Fri, 15 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/20savedsearch.t + +Added ability to update name as well as search parameters. + +------------------------------------------------------------------------ +r2631 | jesse | 2005-04-15 16:52:22 -0400 (Fri, 15 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/12-search.t + + r12950@hualien: jesse | 2005-04-15 16:47:32 -0400 + * Cleaned up search tests + +------------------------------------------------------------------------ +r2629 | jesse | 2005-04-15 15:29:18 -0400 (Fri, 15 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Standalone.pm + + r12944@hualien: jesse | 2005-04-15 15:28:01 -0400 + * Fixed Module::Refresh handling for standalone_httpd + +------------------------------------------------------------------------ +r2626 | jesse | 2005-04-14 16:36:14 -0400 (Thu, 14 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/SelfService/Display.html + + r12790@hualien: jesse | 2005-04-14 15:07:03 -0400 + * Fix support for uploading attachmends in selfservice. -- HC Chien + +------------------------------------------------------------------------ +r2624 | tla | 2005-04-13 13:42:51 -0400 (Wed, 13 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/html/Search/Elements/SelectSearchesForObjects + +Change to exclude saved searches meant for things other than tickets. + +------------------------------------------------------------------------ +r2623 | tla | 2005-04-13 13:32:41 -0400 (Wed, 13 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearches.pm + +Skeletal inline tests, to make autogen happy. + +------------------------------------------------------------------------ +r2622 | tla | 2005-04-13 12:27:38 -0400 (Wed, 13 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearches.pm + +Lost a curly brace somewhere. Also noted location of tests for both files. + +------------------------------------------------------------------------ +r2620 | autrijus | 2005-04-13 11:19:54 -0400 (Wed, 13 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/html/Admin/Users/Modify.html + +* Never mind my last change -- I saw "VALUE = 1" and trigger-happily + inferred that it should default to CHECKED. Which is, of course, + not the case. Reverted. +------------------------------------------------------------------------ +r2619 | autrijus | 2005-04-13 08:13:01 -0400 (Wed, 13 Apr 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE/html/Admin/Users/Modify.html + +* VALUE="1" does not work on checkboxes; this renders the + default True setting on the "Set to Privliged" checkbox + in the "New User" screen useless, so new users are defaulted + to unprivileged even though the code shows that they are + intended to be so. +------------------------------------------------------------------------ +r2617 | tla | 2005-04-12 21:52:54 -0400 (Tue, 12 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearches.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/20savedsearch.t + +Added delete method & localized strings in SavedSearch +Made SavedSearches::LimitByPrivacy safe to call multiple times + +------------------------------------------------------------------------ +r2609 | tla | 2005-04-12 15:59:07 -0400 (Tue, 12 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearches.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/20savedsearch.t + +Made SavedSearches work, added error messages to SavedSearch, updated tests + +------------------------------------------------------------------------ +r2608 | tla | 2005-04-12 15:29:25 -0400 (Tue, 12 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/20savedsearch.t + +SavedSearch now shinily tested. API also changed somewhat. + +------------------------------------------------------------------------ +r2607 | tla | 2005-04-11 14:47:03 -0400 (Mon, 11 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + A /rt/branches/3.4-RELEASE/lib/RT/SavedSearches.pm + +Semi-tested, semi-working checkpoint. Formal tests to follow shortly. + +------------------------------------------------------------------------ +r2603 | tla | 2005-04-10 19:51:56 -0400 (Sun, 10 Apr 2005) | 2 lines +Changed paths: + A /rt/branches/3.4-RELEASE/lib/RT/SavedSearch.pm + +UNTESTED first cut at a saved search lib wrapper. + +------------------------------------------------------------------------ +r2602 | tla | 2005-04-10 19:51:16 -0400 (Sun, 10 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + +Upped version dependency of DBIx::SearchBuilder to 1.24 for unique records +feature in CustomFields. + +------------------------------------------------------------------------ +r2601 | tla | 2005-04-10 19:49:31 -0400 (Sun, 10 Apr 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + +User_Overlay: added OwnGroups method to get a collection of groups of which +the user is a member. +Record: revamped ObjectTypeStr according to suggestions. + + +------------------------------------------------------------------------ +r2592 | jesse | 2005-04-06 15:27:58 -0400 (Wed, 06 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Elements/DisplayOptions + + r11940@hualien: jesse | 2005-04-07 03:23:40 +0800 + * Search "Order By" needed a more greedy matching operation; too many values were selected + +------------------------------------------------------------------------ +r2589 | jesse | 2005-04-06 14:58:41 -0400 (Wed, 06 Apr 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/Header + M /rt/branches/3.4-RELEASE/html/Elements/TicketList + + r11936@hualien: jesse | 2005-04-07 02:54:28 +0800 + RT-Ticket: 6590 + RT-Status: resolved + RT-Update: correspond + + resorting the search by clicking on a header no longer resets the format string + + +------------------------------------------------------------------------ +r2588 | jesse | 2005-04-06 13:50:56 -0400 (Wed, 06 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/12-search.t + + r11933@hualien: jesse | 2005-04-07 01:49:50 +0800 + Half way through custom field search fixes + +------------------------------------------------------------------------ +r2586 | tla | 2005-04-04 04:28:02 -0400 (Mon, 04 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/html/Elements/EditLinks + +Add a callback for the use of RTFM + +------------------------------------------------------------------------ +r2584 | tla | 2005-04-04 04:18:22 -0400 (Mon, 04 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + +Add a simple sub to return the object class with the RT::Lib:: prefix +stripped off. Useful for displaying, e.g., "Ticket #35" or "Article #3". + +------------------------------------------------------------------------ +r2582 | tla | 2005-04-03 15:35:23 -0400 (Sun, 03 Apr 2005) | 2 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/URI/t.pm + +Get rid of LocalURIPrefix test. Would make this DTRT if I knew what TRT was. + +------------------------------------------------------------------------ +r2557 | tla | 2005-04-01 23:16:13 -0500 (Fri, 01 Apr 2005) | 2 lines +Changed paths: + A /rt/branches/3.4-RELEASE/lib/RT/URI/t.pm + +A scheme which allows "t:123" URIs, for ticket specification. + +------------------------------------------------------------------------ +r2552 | jesse | 2005-04-01 04:18:10 -0500 (Fri, 01 Apr 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/Makefile.in + + r10907@hualien: jesse | 2005-04-01 17:15:55 +0800 + * Added "make depends" as an alias for "make fixdeps" for Autrijus + +------------------------------------------------------------------------ +r2543 | jesse | 2005-03-31 03:50:11 -0500 (Thu, 31 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in + + r10781@hualien: jesse | 2005-03-31 16:49:00 +0800 + * Fixes to seph's rtname regex + +------------------------------------------------------------------------ +r2542 | robert | 2005-03-30 23:03:13 -0500 (Wed, 30 Mar 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/config.layout + + r2579@dog: rspier | 2005-03-30 19:58:06 -0800 + RT-Ticket: 6572 + RT-Status: resolved + RT-Update: correspond + + Remove second FHS layout + + +------------------------------------------------------------------------ +r2541 | tla | 2005-03-30 19:20:44 -0500 (Wed, 30 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomField + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldText + +Fixes so that custom fields will pay attention to defaults, when the defaults +are specified. + +------------------------------------------------------------------------ +r2537 | jesse | 2005-03-30 09:44:40 -0500 (Wed, 30 Mar 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/19-rtname.t + + r10696@hualien: jesse | 2005-03-30 18:19:21 +0800 + RT-Ticket: 6544 + RT-Status: resolved + RT-Update: correspond + + * More graceful handling for historical $rtname tags + -- From seph + + +------------------------------------------------------------------------ +r2526 | jesse | 2005-03-28 05:25:03 -0500 (Mon, 28 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/SelectOwner + M /rt/branches/3.4-RELEASE/html/Search/Elements/BuildFormatString + M /rt/branches/3.4-RELEASE/html/Search/Elements/DisplayOptions + M /rt/branches/3.4-RELEASE/html/Search/Elements/EditFormat + M /rt/branches/3.4-RELEASE/html/Search/Elements/PickBasics + + r10271@hualien: jesse | 2005-03-28 15:49:42 +0800 + * A bunch of minor search query builder cleanup and loc improvements + +------------------------------------------------------------------------ +r2523 | jesse | 2005-03-27 12:08:05 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Attachment_Overlay.pm + + r10258@hualien: jesse | 2005-03-27 12:05:27 -0500 + * Record Message-Id when creating attachment records + +------------------------------------------------------------------------ +r2522 | jesse | 2005-03-27 04:14:15 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CurrentUser.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + + r10231@hualien: jesse | 2005-03-27 17:12:44 +0800 + * More fixes for status messages broken in this morning's commit + +------------------------------------------------------------------------ +r2521 | jesse | 2005-03-27 02:40:16 -0500 (Sun, 27 Mar 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Header + + r10229@hualien: jesse | 2005-03-27 15:39:30 +0800 + * Added ALT text for BPS corporate logo -- Suggested by Jedi during YAPC.TW 2005 + + +------------------------------------------------------------------------ +r2520 | jesse | 2005-03-27 02:01:20 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Login + + r10227@hualien: jesse | 2005-03-27 15:00:51 +0800 + * Explicitly give the login box an id/name so passwords are not saved on user edit pages + +------------------------------------------------------------------------ +r2519 | jesse | 2005-03-27 01:43:55 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/RT_SiteConfig.pm + + r10225@hualien: jesse | 2005-03-27 14:43:25 +0800 + * SiteConfig typofix + +------------------------------------------------------------------------ +r2518 | jesse | 2005-03-27 01:33:43 -0500 (Sun, 27 Mar 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/RT_SiteConfig.pm + + r10223@hualien: jesse | 2005-03-27 14:33:12 +0800 + RT-Ticket: 6566 + RT-Status: resolved + RT-Update: correspond + + * Added a bit of documentation to RT_SiteConfig.pm -- Thanks to David Glasser + + +------------------------------------------------------------------------ +r2517 | jesse | 2005-03-27 01:16:07 -0500 (Sun, 27 Mar 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r10221@hualien: jesse | 2005-03-27 14:15:36 +0800 + RT-Ticket: 6565 + RT-Status: resolved + RT-Update: correspond + + * Overhauled README to be more correct, friendly and a bit cleaner + +------------------------------------------------------------------------ +r2516 | jesse | 2005-03-27 00:21:35 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r10211@hualien: jesse | 2005-03-27 13:18:07 +0800 + * Updated RT::Transaction to return better Foo changed from "bar" to "baz" messages + +------------------------------------------------------------------------ +r2515 | jesse | 2005-03-27 00:21:16 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r10210@hualien: jesse | 2005-03-27 13:17:02 +0800 + * Updated RT::Ticket->_Set to return more appropriate status messages + +------------------------------------------------------------------------ +r2514 | jesse | 2005-03-27 00:20:57 -0500 (Sun, 27 Mar 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + + r10209@hualien: jesse | 2005-03-27 13:16:31 +0800 + * Updated RT::User regression tests to not expect a pristine database + * Updated RT::User->_Set to return more apropriate results messages (no more listing the actor) + +------------------------------------------------------------------------ +r2513 | jesse | 2005-03-27 00:20:37 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + + r10208@hualien: jesse | 2005-03-27 13:14:57 +0800 + * Fixing tests to not depend on a deprecated API + +------------------------------------------------------------------------ +r2512 | jesse | 2005-03-27 00:20:19 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CachedGroupMember_Overlay.pm + + r10207@hualien: jesse | 2005-03-27 13:13:26 +0800 + * Bugfixes to CachedGroupMember->SetDisabled unmasked by the RT::Record fixes + +------------------------------------------------------------------------ +r2511 | jesse | 2005-03-27 00:20:00 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Users/Modify.html + M /rt/branches/3.4-RELEASE/html/Elements/MessageBox + M /rt/branches/3.4-RELEASE/html/NoAuth/webrt.css + M /rt/branches/3.4-RELEASE/html/User/Prefs.html + + r10206@hualien: jesse | 2005-03-27 13:11:53 +0800 + Improvements to big textareas to make sure they don't force browser windows to scroll. + +------------------------------------------------------------------------ +r2510 | jesse | 2005-03-27 00:19:40 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Queues/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/index.html + + r10205@hualien: jesse | 2005-03-27 13:10:21 +0800 + * Slightly better introductory text on user and queue listings + +------------------------------------------------------------------------ +r2509 | jesse | 2005-03-27 00:19:20 -0500 (Sun, 27 Mar 2005) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + + r10204@hualien: jesse | 2005-03-27 13:08:01 +0800 + * Improved generic messages returned by RT::Record->_Set() + * Corrected RT::Record->_Set to return a Class::ReturnValue, rather than butchering it + into an array. (This means that RT::Ticket->SetPriority can now be evaluated in boolean + or list context, like it was supposed to be) + +------------------------------------------------------------------------ +r2508 | jesse | 2005-03-27 00:19:01 -0500 (Sun, 27 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r10203@hualien: jesse | 2005-03-27 13:01:43 +0800 + * Corrected HTTP::Server::Simple dependencies + +------------------------------------------------------------------------ +r2501 | jesse | 2005-03-23 21:29:28 -0500 (Wed, 23 Mar 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Update.html + + r9584@hualien: jesse | 2005-03-24 10:28:28 +0800 + RT-Ticket: 6558 + RT-Status: resolved + RT-Update: correspond + + * Removed an extra </td> tag. Thanks to Steve Turner + + +------------------------------------------------------------------------ +r2488 | jesse | 2005-03-22 10:16:55 -0500 (Tue, 22 Mar 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Standalone.pm + + r9555@hualien: jesse | 2005-03-22 22:15:24 +0800 + * Properly set binmode for the standalone_httpd server. This makes + UTF8 text that could be misinterpreted as Latin1 behave correctly. + + +------------------------------------------------------------------------ +r2487 | jesse | 2005-03-21 12:10:03 -0500 (Mon, 21 Mar 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/standalone_httpd.in + M /rt/branches/3.4-RELEASE/bin/webmux.pl.in + M /rt/branches/3.4-RELEASE/html/NoAuth/images/autohandler + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Handler.pm + A /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Standalone.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/02basic_web.t + D /rt/branches/3.4-RELEASE/lib/t/regression/03basic_web.t + A /rt/branches/3.4-RELEASE/lib/t/regression/03web_compiliation_errors.t + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r9502@hualien: jesse | 2005-03-22 01:07:59 +0800 + * Refactored standalone_httpd to use HTTP::Server::Simple::Mason + * Moved some configuration from webmux.pl to RT::Interface::Web::Handler + * Split apart some of the web tests for better isolation + +------------------------------------------------------------------------ +r2477 | jesse | 2005-03-16 03:09:00 -0500 (Wed, 16 Mar 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r8808@hualien: jesse | 2005-03-16 03:07:57 -0500 + RT-Ticket: 6537 + RT-Status: resolved + + Explicit transaction description for changed passwords + + +------------------------------------------------------------------------ +r2476 | jesse | 2005-03-16 03:08:55 -0500 (Wed, 16 Mar 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r2475 | jesse | 2005-03-16 03:08:32 -0500 (Wed, 16 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/index.html + + r8746@hualien: jesse | 2005-03-15 01:07:30 -0500 + Refactored the top-level admin menu to make it easier to add and remove options + +------------------------------------------------------------------------ +r2474 | alexmv | 2005-03-16 02:53:59 -0500 (Wed, 16 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + * Users and groups can have transactions; ShowTicket isn't needed to + see these + +------------------------------------------------------------------------ +r2354 | jesse | 2005-03-14 02:22:36 -0500 (Mon, 14 Mar 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditCustomFields + M /rt/branches/3.4-RELEASE/html/Admin/Elements/PickCustomFields + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Groups.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Tickets.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Transactions.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Users.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/CustomFields.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/CustomFields.html + + r8456@hualien: jesse | 2005-03-14 02:20:50 -0500 + Overhaul of custom field editing code to make it easier to add custom fields + for new object types + +------------------------------------------------------------------------ +r2353 | jesse | 2005-03-14 01:38:58 -0500 (Mon, 14 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/NoAuth/webrt.css + + r8453@hualien: jesse | 2005-03-14 01:37:00 -0500 + Hilighted menu options are now the right size + +------------------------------------------------------------------------ +r2350 | jesse | 2005-03-14 01:31:33 -0500 (Mon, 14 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/NoAuth/webrt.css + + r8450@hualien: jesse | 2005-03-14 01:30:59 -0500 + Slight style cleanup to page actions. + +------------------------------------------------------------------------ +r2343 | jesse | 2005-03-11 20:17:02 -0500 (Fri, 11 Mar 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Scrips_Overlay.pm + + r6769@hualien: jesse | 2005-03-11 20:16:42 -0500 + Now when running scrips on a disabled queue, run global scrips as well as per-queue scrips. + + + +------------------------------------------------------------------------ +r2332 | jesse | 2005-03-09 17:25:25 -0500 (Wed, 09 Mar 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r6651@hualien: jesse | 2005-03-09 17:23:54 -0500 + RT-Ticket: 6459 + RT-Status: resolved + RT-Update: correspond + + Sanity fixes for _AddLink's API from Todd Chapman + + +------------------------------------------------------------------------ +r2313 | jesse | 2005-03-07 16:03:05 -0500 (Mon, 07 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/Objects.html + + r6568@hualien: jesse | 2005-03-07 16:01:44 -0500 + Adding support for selecting custom fields for RTFM objects + +------------------------------------------------------------------------ +r2306 | jesse | 2005-03-06 17:33:52 -0500 (Sun, 06 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/Row + + r6473@hualien: jesse | 2005-03-06 16:04:46 -0500 + Small cleanups to print out less hardcoded style information (introduced by the pull-up from 3.2) + +------------------------------------------------------------------------ +r2305 | jesse | 2005-03-06 17:33:46 -0500 (Sun, 06 Mar 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + + r6465@hualien: jesse | 2005-03-06 15:00:29 -0500 + r6450@hualien: jesse | 2005-03-06 12:44:27 -0500 + RT-Ticket: 6496 + RT-Status: resolved + RT-Update: correspond + + Content-Transfer-Encoding should have been '8bit' not '8-bit' + + +------------------------------------------------------------------------ +r2304 | jesse | 2005-03-06 17:33:37 -0500 (Sun, 06 Mar 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/aclocal.m4 + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowTransactionAttachments + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + + r6464@hualien: jesse | 2005-03-06 15:00:23 -0500 + r6371@hualien: jesse | 2005-03-05 19:29:35 -0500 + r3963@hualien (orig r2142): jesse | 2005-01-30 12:45:15 -0500 + When we can't load a user by email address, make sure we can't load that user by name before returning an error + + + +------------------------------------------------------------------------ +r2303 | jesse | 2005-03-06 17:33:17 -0500 (Sun, 06 Mar 2005) | 10 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r6462@hualien: jesse | 2005-03-06 14:57:07 -0500 + r4715@hualien: jesse | 2005-02-15 12:34:54 -0500 + RT-Ticket: 6443 + RT-Status: resolved + RT-Update: correspond + + Ticket Searches on AdminCc would fail on non-mysql databases due to a case error + + + +------------------------------------------------------------------------ +r2302 | jesse | 2005-03-06 17:33:10 -0500 (Sun, 06 Mar 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/lib/RT/I18N/pl.po + + r6461@hualien: jesse | 2005-03-06 14:57:03 -0500 + r4070@hualien: jesse | 2005-02-03 11:22:59 -0500 + Polish Translation from Piotr Sliwa + + + + +------------------------------------------------------------------------ +r2301 | jesse | 2005-03-06 17:33:00 -0500 (Sun, 06 Mar 2005) | 13 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay_SQL.pm + + r6459@hualien: jesse | 2005-03-06 14:55:49 -0500 + r3935@hualien: jesse | 2005-01-26 12:15:42 -0500 + RT-Ticket: 6378 + RT-Status: resolved + RT-Update: correspond + + Added a flag to allow tools to use the RT API to search for deleted tickets. + (Ruslan) + + + + + +------------------------------------------------------------------------ +r2300 | jesse | 2005-03-06 17:32:39 -0500 (Sun, 06 Mar 2005) | 17 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r6457@hualien: jesse | 2005-03-06 14:55:20 -0500 + r2575@hualien: jesse | 2005-01-06 17:15:39 -0500 + RT-Ticket: 6327 + RT-Status: resolved + RT-Update: correspond + + Users who had "DeleteTicket" but not "ModifyTicket" could not delete tickets. + + This is introduced because "Ticket::SetStatus" checks the ACL but + forgets to tell "Ticket::_Set" NOT to check (which does check again, but + only against the 'ModifyTicket' right, and thus denies the change). + + Thanks to Ruediger Riediger + + + + +------------------------------------------------------------------------ +r2299 | jesse | 2005-03-06 17:32:31 -0500 (Sun, 06 Mar 2005) | 11 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + + r6456@hualien: jesse | 2005-03-06 14:55:05 -0500 + r2573@hualien: jesse | 2005-01-06 17:10:02 -0500 + RT-Ticket: 6322 + RT-Status: resolved + RT-Update: correspond + + New French translation from robitail@iro.umontreal.ca + + + + +------------------------------------------------------------------------ +r2298 | jesse | 2005-03-06 17:32:18 -0500 (Sun, 06 Mar 2005) | 19 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/ParseFormat + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/Row + M /rt/branches/3.4-RELEASE/html/Elements/RT__Ticket/ColumnMap + + r6454@hualien: jesse | 2005-03-06 14:53:48 -0500 + r2568@hualien: jesse | 2005-01-06 16:57:40 -0500 + RT-Ticket: 6336 + RT-Status: resolved + RT-Update: correspond + + + The attribute "align" in COLUMN_MAP wasn't usable, because it could not be + used for a complete column, so I added a /ALIGN:.. section in + CollectionAsTable/ParseFormat and use it in Row. + + There also was a minor error to be corrected, since the old variant of + ParseFormat did not allow more than one /ANYTHING:... to be use (in my + example /TITLE:.../ALIGN:...) --Dirk Pape + + + + + +------------------------------------------------------------------------ +r2297 | jesse | 2005-03-06 17:32:12 -0500 (Sun, 06 Mar 2005) | 11 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/html/REST/1.0/autohandler + + r6453@hualien: jesse | 2005-03-06 14:53:44 -0500 + r2567@hualien: jesse | 2005-01-06 16:37:01 -0500 + RT-Ticket: 6338 + RT-Status: resolved + RT-Update: correspond + + Force UTF8 content type on replies from RT's REST interface (Thanks to Dirk Pape) + + + + +------------------------------------------------------------------------ +r2296 | jesse | 2005-03-06 17:32:05 -0500 (Sun, 06 Mar 2005) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Attachment_Overlay.pm + + r6452@hualien: jesse | 2005-03-06 14:53:41 -0500 + r2514@hualien: jesse | 2004-12-29 14:43:06 -0500 + Updated Attachment import code to take database-specific lob encoding into account + + + + +------------------------------------------------------------------------ +r2286 | jesse | 2005-03-05 20:11:59 -0500 (Sat, 05 Mar 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE + + +------------------------------------------------------------------------ +r2285 | jesse | 2005-03-05 20:11:52 -0500 (Sat, 05 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/docs/design_docs/realflow.txt + A /rt/branches/3.4-RELEASE/docs/design_docs/rt-mvc + + r6290@hualien: jesse | 2005-03-05 19:06:54 -0500 + random design docs + +------------------------------------------------------------------------ +r2281 | jesse | 2005-03-05 17:06:33 -0500 (Sat, 05 Mar 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ACE_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ACL_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Group_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Principal_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/18stale_delegations_cleanup.t + + r6277@hualien: jesse | 2005-03-05 17:06:08 -0500 + RT-Ticket: 6184 + RT-Status: resolved + RT-Update: correspond + + Much better coverage of delegation revocation when users' group memberships are changed - Mike Whitson (BPS) + + +------------------------------------------------------------------------ +r2280 | jesse | 2005-03-05 16:10:34 -0500 (Sat, 05 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + + r6272@hualien: jesse | 2005-03-05 16:08:36 -0500 + Better support for loading custom fields by name + +------------------------------------------------------------------------ +r2275 | mwhitson | 2005-03-03 13:55:06 -0500 (Thu, 03 Mar 2005) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/ACE_Overlay.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/17multiple_deleg_revocation.t + +RT-Ticket: 6482 +RT-Status: resolved +RT-Update: correspond +Fix incorrect loop exit test in RT::ACE::_Delete such that multiply delegated ACEs are all +cleaned up when the parent ACE is revoked. + +------------------------------------------------------------------------ +r2274 | mwhitson | 2005-03-03 12:34:13 -0500 (Thu, 03 Mar 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE/lib/RT/Group_Overlay.pm + +rt-ticket: 6450 +rt-status: resolved +rt-update: correspond +Correct inaccurate POD for RT::Group::MembersObj and DeepMembersObj. + +------------------------------------------------------------------------ +r2271 | jesse | 2005-03-01 15:24:42 -0500 (Tue, 01 Mar 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r6108@hualien: jesse | 2005-03-01 15:20:28 -0500 + * 'LimitLinkedFrom' in RT::Tickets didn't work due to a typo. Fixed. + +------------------------------------------------------------------------ +r2266 | jesse | 2005-02-27 19:02:44 -0500 (Sun, 27 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + + r6061@hualien: jesse | 2005-02-27 18:58:48 -0500 + RT::Transaction->Delete implemented. (for RTFM) + +------------------------------------------------------------------------ +r2263 | jesse | 2005-02-24 17:52:18 -0500 (Thu, 24 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + + r5948@hualien: jesse | 2005-02-24 16:47:52 -0500 + Custom Field API extension and cleanup to allow new objects to use custom fields. (No backwards-incompat changes) + +------------------------------------------------------------------------ +r2262 | jesse | 2005-02-24 17:51:53 -0500 (Thu, 24 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/index.html + + r5947@hualien: jesse | 2005-02-24 16:46:11 -0500 + Refactoring Custom Field admin UI for extensibility + +------------------------------------------------------------------------ +r2261 | jesse | 2005-02-24 17:51:28 -0500 (Thu, 24 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ObjectCustomFields + + r5946@hualien: jesse | 2005-02-24 16:44:28 -0500 + Refactoring Custom Field admin UI for extensibility + +------------------------------------------------------------------------ +r2260 | jesse | 2005-02-24 17:51:01 -0500 (Thu, 24 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditCustomFields + + r5945@hualien: jesse | 2005-02-24 16:43:36 -0500 + Minor stylistic cleanups for web components + +------------------------------------------------------------------------ +r2259 | jesse | 2005-02-24 17:01:23 -0500 (Thu, 24 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/PickCustomFields + + r5944@hualien: jesse | 2005-02-24 16:43:05 -0500 + Minor stylistic cleanups for web components + +------------------------------------------------------------------------ +r2258 | jesse | 2005-02-24 17:00:58 -0500 (Thu, 24 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/16-transaction_cf_tests.t + + r5943@hualien: jesse | 2005-02-24 16:42:01 -0500 + Upgraded a private _LookupTypes method to a public CustomFieldUpdateTypes method to make it easier to ad custom fields to other objects + + +------------------------------------------------------------------------ +r2257 | jesse | 2005-02-24 16:50:52 -0500 (Thu, 24 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/configure.ac + + r5942@hualien: jesse | 2005-02-24 16:31:48 -0500 + * Have the configure script default to the web group for the RT group if no rt group exists or is specified + +------------------------------------------------------------------------ +r2254 | jesse | 2005-02-24 15:13:10 -0500 (Thu, 24 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/configure.ac + + r5932@hualien: jesse | 2005-02-24 15:09:27 -0500 + Robert added new functionality to support autodetection of RT and Web users in ./configure + + +------------------------------------------------------------------------ +r2249 | jesse | 2005-02-22 16:39:49 -0500 (Tue, 22 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/16-transaction_cf_tests.t + + r5747@hualien: jesse | 2005-02-22T21:33:09.438624Z + Better transaction UpdateCustomFields API + + +------------------------------------------------------------------------ +r2238 | jesse | 2005-02-15 12:36:54 -0500 (Tue, 15 Feb 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r4714@hualien: jesse | 2005-02-15T17:34:26.880496Z + RT-Ticket: 6443 + RT-Status: resolved + RT-Update: correspond + + Ticket Searches on AdminCc would fail on non-mysql databases due to a case error + + +------------------------------------------------------------------------ +r2235 | jesse | 2005-02-15 11:57:54 -0500 (Tue, 15 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r4711@hualien: jesse | 2005-02-15T16:19:52.970993Z + Bumping to 3.4.1 + + +------------------------------------------------------------------------ +r2234 | jesse | 2005-02-15 11:57:44 -0500 (Tue, 15 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r4710@hualien: jesse | 2005-02-15T16:18:22.880530Z + Updated 2.0 upgrade instructions + +------------------------------------------------------------------------ +r2233 | jesse | 2005-02-14 11:17:52 -0500 (Mon, 14 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + D /rt/branches/3.4-RELEASE/lib/RT/I18N/en_malkovich.po + + r4703@hualien: jesse | 2005-02-14T15:56:23.506986Z + Removed broken Malkovich translation + + +------------------------------------------------------------------------ +r2232 | jesse | 2005-02-14 11:17:43 -0500 (Mon, 14 Feb 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + + r4702@hualien: jesse | 2005-02-14T15:56:02.798500Z + Updated German translation from Torsten Brumm + + + +------------------------------------------------------------------------ +r2231 | jesse | 2005-02-13 23:43:57 -0500 (Sun, 13 Feb 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/standalone_httpd.in + + r4697@hualien: jesse | 2005-02-14T04:42:05.489259Z + * Standalone HTTP Daemon now deals properly with unicode input/output + + + +------------------------------------------------------------------------ +r2230 | jesse | 2005-02-13 23:43:44 -0500 (Sun, 13 Feb 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + + r4696@hualien: jesse | 2005-02-14T04:06:07.158818Z + RT-Ticket: 6429 + RT-Update: correspond + RT-Status: resolved + + Updated Italian translation from Angelo Turetta. Thanks! + + + +------------------------------------------------------------------------ +r2229 | jesse | 2005-02-13 23:43:33 -0500 (Sun, 13 Feb 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/Row + + r4695@hualien: jesse | 2005-02-14T04:04:07.657861Z + Fix for issues with words with Umlauts in search result listings + + + +------------------------------------------------------------------------ +r2228 | jesse | 2005-02-13 22:39:44 -0500 (Sun, 13 Feb 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/webmux.pl.in + + r4692@hualien: jesse | 2005-02-14T03:38:09.047131Z + Disabled automatic clearing of mason component cache on start with FastCGI. It doesn't work properly in the multiprocess + environment. + + +------------------------------------------------------------------------ +r2227 | jesse | 2005-02-13 22:39:37 -0500 (Sun, 13 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/rt-crontool.in + + r4691@hualien: jesse | 2005-02-14T03:37:15.362723Z + The crontool was using local and system libs in the wrong order + + +------------------------------------------------------------------------ +r2226 | jesse | 2005-02-13 22:32:27 -0500 (Sun, 13 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/UserRights.html + + r4689@hualien: jesse | 2005-02-14T03:30:20.309679Z + A typo prevented users from being able to revoke other users' rights on custom fields + + +------------------------------------------------------------------------ +r2224 | jesse | 2005-02-11 16:52:07 -0500 (Fri, 11 Feb 2005) | 1 line +Changed paths: + M /rt/branches/3.4-RELEASE/README + +README typo fix +------------------------------------------------------------------------ +r2223 | jesse | 2005-02-10 22:04:55 -0500 (Thu, 10 Feb 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/attachments + + r4683@hualien: jesse | 2005-02-11T03:00:33.383809Z + Use the "OriginalContent" rather than our encoded one. this might make cli attachment downloads work better + + + +------------------------------------------------------------------------ +r2221 | jesse | 2005-02-10 17:11:33 -0500 (Thu, 10 Feb 2005) | 10 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Search/Build.html + + r4678@hualien: jesse | 2005-02-10T22:10:29.492739Z + RT-Ticket: 6406 + RT-Status: resolved + RT-Update: correspond + + Query builder fixes for sites with multiple identically named custom fields + + + + +------------------------------------------------------------------------ +r2220 | jesse | 2005-02-10 16:34:23 -0500 (Thu, 10 Feb 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + + r4676@hualien: jesse | 2005-02-10T21:33:19.355354Z + RT-Ticket: 6364 + RT-Status: resolved + RT-Update: corerspond + + Updated Czech translation + + + +------------------------------------------------------------------------ +r2219 | jesse | 2005-02-10 16:25:22 -0500 (Thu, 10 Feb 2005) | 11 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/Makefile.in + M /rt/branches/3.4-RELEASE/docs/design_docs/cvs_integration + M /rt/branches/3.4-RELEASE/docs/design_docs/link-definitions.txt + M /rt/branches/3.4-RELEASE/html/Search/Bulk.html + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/Tabs + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/en_malkovich.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fi.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/he.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ja.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/nl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pt_br.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_cn.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_tw.po + M /rt/branches/3.4-RELEASE/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT.pm.in + + r4673@hualien: jesse | 2005-02-10T21:24:02.076922Z + RT-Ticket: 6379 + RT-Status: resolved + RT-Update: correspond + + Correct a common spelling error: + perl -pi.bak -e's/seperat/separat/g; s/Seperat/Separat/g;' $(find .) + + + + +------------------------------------------------------------------------ +r2218 | jesse | 2005-02-10 16:25:10 -0500 (Thu, 10 Feb 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValue_Overlay.pm + + r4672@hualien: jesse | 2005-02-10T21:19:40.639192Z + Fixes to handle large text custom fields gracefully + + + +------------------------------------------------------------------------ +r2217 | jesse | 2005-02-10 16:15:16 -0500 (Thu, 10 Feb 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + + r4669@hualien: jesse | 2005-02-10T21:11:24.084088Z + RT-Ticket: 6418 + RT-Status: resolved + RT-Update: correspond + + Applied new hungarian translation + + + +------------------------------------------------------------------------ +r2216 | jesse | 2005-02-10 16:15:06 -0500 (Thu, 10 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/history + + r4668@hualien: jesse | 2005-02-10T20:54:30.684091Z + removed effective ticket from history listing + +------------------------------------------------------------------------ +r2198 | jesse | 2005-02-08 12:27:46 -0500 (Tue, 08 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/RT__Ticket/ColumnMap + + r4644@hualien: jesse | 2005-02-08T17:26:39.133201Z + "Status" in ticket listings is now localized + + +------------------------------------------------------------------------ +r2196 | jesse | 2005-02-07 12:22:50 -0500 (Mon, 07 Feb 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectStage + + r4103@hualien: jesse | 2005-02-07T17:21:04.911429Z + RT-Ticket: 6417 + RT-Status: resolved + RT-Update: correspond + + Only show the TransactionBatch scrip stage if TransactionBatch + scrips are enabled. --Dave Rolsky + + +------------------------------------------------------------------------ +r2195 | jesse | 2005-02-07 12:22:15 -0500 (Mon, 07 Feb 2005) | 10 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectScripAction + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectScripCondition + M /rt/branches/3.4-RELEASE/html/Elements/Submit + M /rt/branches/3.4-RELEASE/html/Ticket/Display.html + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowMessageStanza + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowTransaction + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/Tabs + M /rt/branches/3.4-RELEASE/lib/RT/Action/CreateTickets.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + + r4102@hualien: jesse | 2005-02-07T17:20:01.069833Z + RT-Ticket: 6415 + RT-Status: resolved + RT-Update: correspond + + A bunch of small fixes to avoid minor warnings in the RT code. --Dave Rolsky + + + + +------------------------------------------------------------------------ +r2194 | jesse | 2005-02-04 11:03:39 -0500 (Fri, 04 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/Groups/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/index.html + M /rt/branches/3.4-RELEASE/html/Elements/ShowMemberships + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowMemberOf + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowReferences + + r4082@hualien: jesse | 2005-02-04T16:03:07.513522Z + Fixing some links that broke when RT was not installed at the server root + +------------------------------------------------------------------------ +r2193 | jesse | 2005-02-03 12:27:23 -0500 (Thu, 03 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/SelectOwner + + r4075@hualien: jesse | 2005-02-03T17:27:08.548583Z + SelectOwner was displaying "Nobody" twice due to smarter backend code that broke the not-so-smart frontend. Fixed the frontend. + + +------------------------------------------------------------------------ +r2150 | jesse | 2005-02-01 09:42:31 -0500 (Tue, 01 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r3972@hualien: jesse | 2005-02-01T14:36:00.190124Z + 3.4.0 + +------------------------------------------------------------------------ +r2149 | jesse | 2005-02-01 09:42:14 -0500 (Tue, 01 Feb 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r3971@hualien: jesse | 2005-02-01T14:35:45.436824Z + Bumping SearchBuilder dependency to 1.21 + + +------------------------------------------------------------------------ +r2148 | jesse | 2005-02-01 09:41:54 -0500 (Tue, 01 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r3970@hualien: jesse | 2005-02-01T14:21:00.328018Z + Merge reverted a date in the README + +------------------------------------------------------------------------ +r2147 | jesse | 2005-02-01 09:20:40 -0500 (Tue, 01 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/Makefile.in + M /rt/branches/3.4-RELEASE/README + M /rt/branches/3.4-RELEASE/bin/mason_handler.fcgi.in + M /rt/branches/3.4-RELEASE/bin/mason_handler.scgi.in + M /rt/branches/3.4-RELEASE/bin/mason_handler.svc.in + M /rt/branches/3.4-RELEASE/bin/rt-crontool.in + M /rt/branches/3.4-RELEASE/bin/rt-mailgate.in + M /rt/branches/3.4-RELEASE/bin/rt.in + M /rt/branches/3.4-RELEASE/bin/standalone_httpd.in + M /rt/branches/3.4-RELEASE/bin/webmux.pl.in + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/GroupRights.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/Modify.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/Objects.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/UserRights.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Elements/AddCustomFieldValue + M /rt/branches/3.4-RELEASE/html/Admin/Elements/CreateUserCalled + M /rt/branches/3.4-RELEASE/html/Admin/Elements/CustomFieldTabs + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditCustomField + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditCustomFieldValues + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditCustomFields + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditQueueWatchers + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditScrip + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditScrips + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditTemplates + M /rt/branches/3.4-RELEASE/html/Admin/Elements/EditUserComments + M /rt/branches/3.4-RELEASE/html/Admin/Elements/GlobalCustomFieldTabs + M /rt/branches/3.4-RELEASE/html/Admin/Elements/GroupTabs + M /rt/branches/3.4-RELEASE/html/Admin/Elements/Header + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ListGlobalCustomFields + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ListGlobalScrips + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ModifyTemplate + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ObjectCustomFields + M /rt/branches/3.4-RELEASE/html/Admin/Elements/PickCustomFields + M /rt/branches/3.4-RELEASE/html/Admin/Elements/PickObjects + M /rt/branches/3.4-RELEASE/html/Admin/Elements/QueueRightsForUser + M /rt/branches/3.4-RELEASE/html/Admin/Elements/QueueTabs + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectCustomFieldLookupType + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectCustomFieldType + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectGroups + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectModifyGroup + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectModifyQueue + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectModifyUser + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectNewGroupMembers + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectRights + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectScrip + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectScripAction + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectScripCondition + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectSingleOrMultiple + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectStage + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectTemplate + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SelectUsers + M /rt/branches/3.4-RELEASE/html/Admin/Elements/SystemTabs + M /rt/branches/3.4-RELEASE/html/Admin/Elements/Tabs + M /rt/branches/3.4-RELEASE/html/Admin/Elements/ToolTabs + M /rt/branches/3.4-RELEASE/html/Admin/Elements/UserTabs + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Groups.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Tickets.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Queue-Transactions.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/Users.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/CustomFields/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/GroupRights.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/Scrip.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/Scrips.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/Template.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/Templates.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/UserRights.html + M /rt/branches/3.4-RELEASE/html/Admin/Global/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/CustomFields.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/GroupRights.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/History.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/Members.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/Modify.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/UserRights.html + M /rt/branches/3.4-RELEASE/html/Admin/Groups/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/CustomField.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/CustomFields.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/GroupRights.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/Modify.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/People.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/Scrip.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/Scrips.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/Template.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/Templates.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/UserRights.html + M /rt/branches/3.4-RELEASE/html/Admin/Queues/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Tools/Configuration.html + M /rt/branches/3.4-RELEASE/html/Admin/Tools/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/CustomFields.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/History.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/Memberships.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/Modify.html + M /rt/branches/3.4-RELEASE/html/Admin/Users/index.html + M /rt/branches/3.4-RELEASE/html/Admin/autohandler + M /rt/branches/3.4-RELEASE/html/Admin/index.html + M /rt/branches/3.4-RELEASE/html/Approvals/Display.html + M /rt/branches/3.4-RELEASE/html/Approvals/Elements/Approve + M /rt/branches/3.4-RELEASE/html/Approvals/Elements/PendingMyApproval + M /rt/branches/3.4-RELEASE/html/Approvals/Elements/ShowDependency + M /rt/branches/3.4-RELEASE/html/Approvals/Elements/Tabs + M /rt/branches/3.4-RELEASE/html/Approvals/index.html + M /rt/branches/3.4-RELEASE/html/Download/CustomFieldValue/dhandler + M /rt/branches/3.4-RELEASE/html/Download/Tabular/dhandler + M /rt/branches/3.4-RELEASE/html/Elements/BevelBoxRaisedEnd + M /rt/branches/3.4-RELEASE/html/Elements/BevelBoxRaisedStart + M /rt/branches/3.4-RELEASE/html/Elements/Callback + M /rt/branches/3.4-RELEASE/html/Elements/Checkbox + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/Header + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/ParseFormat + M /rt/branches/3.4-RELEASE/html/Elements/CollectionAsTable/Row + M /rt/branches/3.4-RELEASE/html/Elements/CreateTicket + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomField + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldBinary + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldFreeform + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldImage + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldSelect + M /rt/branches/3.4-RELEASE/html/Elements/EditCustomFieldText + M /rt/branches/3.4-RELEASE/html/Elements/EditLinks + M /rt/branches/3.4-RELEASE/html/Elements/Error + M /rt/branches/3.4-RELEASE/html/Elements/Footer + M /rt/branches/3.4-RELEASE/html/Elements/GotoTicket + M /rt/branches/3.4-RELEASE/html/Elements/Header + M /rt/branches/3.4-RELEASE/html/Elements/ListActions + M /rt/branches/3.4-RELEASE/html/Elements/Login + M /rt/branches/3.4-RELEASE/html/Elements/Menu + M /rt/branches/3.4-RELEASE/html/Elements/MessageBox + M /rt/branches/3.4-RELEASE/html/Elements/MyRequests + M /rt/branches/3.4-RELEASE/html/Elements/MyTickets + M /rt/branches/3.4-RELEASE/html/Elements/PageLayout + M /rt/branches/3.4-RELEASE/html/Elements/QueryString + M /rt/branches/3.4-RELEASE/html/Elements/QuickCreate + M /rt/branches/3.4-RELEASE/html/Elements/Quicksearch + M /rt/branches/3.4-RELEASE/html/Elements/RT__Ticket/ColumnMap + M /rt/branches/3.4-RELEASE/html/Elements/Refresh + M /rt/branches/3.4-RELEASE/html/Elements/ScrubHTML + M /rt/branches/3.4-RELEASE/html/Elements/Section + M /rt/branches/3.4-RELEASE/html/Elements/SelectAttachmentField + M /rt/branches/3.4-RELEASE/html/Elements/SelectBoolean + M /rt/branches/3.4-RELEASE/html/Elements/SelectCustomFieldOperator + M /rt/branches/3.4-RELEASE/html/Elements/SelectCustomFieldValue + M /rt/branches/3.4-RELEASE/html/Elements/SelectDate + M /rt/branches/3.4-RELEASE/html/Elements/SelectDateRelation + M /rt/branches/3.4-RELEASE/html/Elements/SelectDateType + M /rt/branches/3.4-RELEASE/html/Elements/SelectEqualityOperator + M /rt/branches/3.4-RELEASE/html/Elements/SelectGroups + M /rt/branches/3.4-RELEASE/html/Elements/SelectLang + M /rt/branches/3.4-RELEASE/html/Elements/SelectLinkType + M /rt/branches/3.4-RELEASE/html/Elements/SelectMatch + M /rt/branches/3.4-RELEASE/html/Elements/SelectNewTicketQueue + M /rt/branches/3.4-RELEASE/html/Elements/SelectOwner + M /rt/branches/3.4-RELEASE/html/Elements/SelectQueue + M /rt/branches/3.4-RELEASE/html/Elements/SelectResultsPerPage + M /rt/branches/3.4-RELEASE/html/Elements/SelectSortOrder + M /rt/branches/3.4-RELEASE/html/Elements/SelectStatus + M /rt/branches/3.4-RELEASE/html/Elements/SelectTicketSortBy + M /rt/branches/3.4-RELEASE/html/Elements/SelectTicketTypes + M /rt/branches/3.4-RELEASE/html/Elements/SelectUsers + M /rt/branches/3.4-RELEASE/html/Elements/SelectWatcherType + M /rt/branches/3.4-RELEASE/html/Elements/SetupSessionCookie + M /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFieldImage + M /rt/branches/3.4-RELEASE/html/Elements/ShowCustomFields + M /rt/branches/3.4-RELEASE/html/Elements/ShowLink + M /rt/branches/3.4-RELEASE/html/Elements/ShowLinks + M /rt/branches/3.4-RELEASE/html/Elements/ShowMemberships + M /rt/branches/3.4-RELEASE/html/Elements/SimpleSearch + M /rt/branches/3.4-RELEASE/html/Elements/Submit + M /rt/branches/3.4-RELEASE/html/Elements/Tabs + M /rt/branches/3.4-RELEASE/html/Elements/TicketList + M /rt/branches/3.4-RELEASE/html/Elements/TitleBox + M /rt/branches/3.4-RELEASE/html/Elements/TitleBoxEnd + M /rt/branches/3.4-RELEASE/html/Elements/TitleBoxStart + M /rt/branches/3.4-RELEASE/html/NoAuth/Logout.html + M /rt/branches/3.4-RELEASE/html/NoAuth/Reminder.html + M /rt/branches/3.4-RELEASE/html/NoAuth/webrt.css + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/queue/default + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/queue/ns + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/attachments + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/default + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/history + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/ticket/links + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/user/default + M /rt/branches/3.4-RELEASE/html/REST/1.0/Forms/user/ns + M /rt/branches/3.4-RELEASE/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/3.4-RELEASE/html/REST/1.0/autohandler + M /rt/branches/3.4-RELEASE/html/REST/1.0/dhandler + M /rt/branches/3.4-RELEASE/html/REST/1.0/logout + M /rt/branches/3.4-RELEASE/html/REST/1.0/search/dhandler + M /rt/branches/3.4-RELEASE/html/REST/1.0/search/ticket + M /rt/branches/3.4-RELEASE/html/REST/1.0/ticket/comment + M /rt/branches/3.4-RELEASE/html/REST/1.0/ticket/link + M /rt/branches/3.4-RELEASE/html/REST/1.0/ticket/merge + M /rt/branches/3.4-RELEASE/html/Search/Build.html + M /rt/branches/3.4-RELEASE/html/Search/Bulk.html + M /rt/branches/3.4-RELEASE/html/Search/Edit.html + M /rt/branches/3.4-RELEASE/html/Search/Elements/BuildFormatString + M /rt/branches/3.4-RELEASE/html/Search/Elements/DisplayOptions + M /rt/branches/3.4-RELEASE/html/Search/Elements/EditFormat + M /rt/branches/3.4-RELEASE/html/Search/Elements/EditQuery + M /rt/branches/3.4-RELEASE/html/Search/Elements/EditSearches + M /rt/branches/3.4-RELEASE/html/Search/Elements/NewListActions + M /rt/branches/3.4-RELEASE/html/Search/Elements/PickBasics + M /rt/branches/3.4-RELEASE/html/Search/Elements/PickCFs + M /rt/branches/3.4-RELEASE/html/Search/Elements/PickCriteria + M /rt/branches/3.4-RELEASE/html/Search/Elements/SearchPrivacy + M /rt/branches/3.4-RELEASE/html/Search/Elements/SelectAndOr + M /rt/branches/3.4-RELEASE/html/Search/Elements/SelectGroup + M /rt/branches/3.4-RELEASE/html/Search/Elements/SelectLinks + M /rt/branches/3.4-RELEASE/html/Search/Elements/SelectPersonType + M /rt/branches/3.4-RELEASE/html/Search/Elements/SelectSearchObject + M /rt/branches/3.4-RELEASE/html/Search/Elements/SelectSearchesForObjects + M /rt/branches/3.4-RELEASE/html/Search/Results.html + M /rt/branches/3.4-RELEASE/html/Search/Results.rdf + M /rt/branches/3.4-RELEASE/html/Search/Results.tsv + M /rt/branches/3.4-RELEASE/html/SelfService/Attachment/dhandler + M /rt/branches/3.4-RELEASE/html/SelfService/Closed.html + M /rt/branches/3.4-RELEASE/html/SelfService/Create.html + M /rt/branches/3.4-RELEASE/html/SelfService/CreateTicketInQueue.html + M /rt/branches/3.4-RELEASE/html/SelfService/Display.html + M /rt/branches/3.4-RELEASE/html/SelfService/Elements/GotoTicket + M /rt/branches/3.4-RELEASE/html/SelfService/Elements/Header + M /rt/branches/3.4-RELEASE/html/SelfService/Elements/MyRequests + M /rt/branches/3.4-RELEASE/html/SelfService/Elements/Tabs + M /rt/branches/3.4-RELEASE/html/SelfService/Error.html + M /rt/branches/3.4-RELEASE/html/SelfService/Prefs.html + M /rt/branches/3.4-RELEASE/html/SelfService/Update.html + M /rt/branches/3.4-RELEASE/html/SelfService/index.html + M /rt/branches/3.4-RELEASE/html/Ticket/Attachment/dhandler + M /rt/branches/3.4-RELEASE/html/Ticket/Create.html + M /rt/branches/3.4-RELEASE/html/Ticket/Display.html + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/AddWatchers + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/BulkLinks + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditBasics + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditCustomField + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditCustomFields + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditDates + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditPeople + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/EditWatchers + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/FindAttachments + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/LoadTextAttachments + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/PreviewScrips + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowAttachments + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowBasics + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowCustomFields + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowDates + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowDependencies + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowGroupMembers + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowHistory + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowMemberOf + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowMembers + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowMessageHeaders + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowMessageStanza + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowPeople + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowReferences + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowRequestor + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowSummary + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowTransaction + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowTransactionAttachments + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowUserEntry + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/Tabs + M /rt/branches/3.4-RELEASE/html/Ticket/History.html + M /rt/branches/3.4-RELEASE/html/Ticket/Modify.html + M /rt/branches/3.4-RELEASE/html/Ticket/ModifyAll.html + M /rt/branches/3.4-RELEASE/html/Ticket/ModifyDates.html + M /rt/branches/3.4-RELEASE/html/Ticket/ModifyLinks.html + M /rt/branches/3.4-RELEASE/html/Ticket/ModifyPeople.html + M /rt/branches/3.4-RELEASE/html/Ticket/ShowEmailRecord.html + M /rt/branches/3.4-RELEASE/html/Ticket/Update.html + M /rt/branches/3.4-RELEASE/html/Tools/Elements/Tabs + M /rt/branches/3.4-RELEASE/html/Tools/MyDay.html + M /rt/branches/3.4-RELEASE/html/Tools/Offline.html + M /rt/branches/3.4-RELEASE/html/User/Delegation.html + M /rt/branches/3.4-RELEASE/html/User/Elements/DelegateRights + M /rt/branches/3.4-RELEASE/html/User/Elements/GroupTabs + M /rt/branches/3.4-RELEASE/html/User/Elements/Tabs + M /rt/branches/3.4-RELEASE/html/User/Groups/Members.html + M /rt/branches/3.4-RELEASE/html/User/Groups/Modify.html + M /rt/branches/3.4-RELEASE/html/User/Groups/index.html + M /rt/branches/3.4-RELEASE/html/User/Prefs.html + M /rt/branches/3.4-RELEASE/html/autohandler + M /rt/branches/3.4-RELEASE/html/index.html + M /rt/branches/3.4-RELEASE/html/l + M /rt/branches/3.4-RELEASE/lib/RT/ACE.pm + M /rt/branches/3.4-RELEASE/lib/RT/ACE_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ACL.pm + M /rt/branches/3.4-RELEASE/lib/RT/ACL_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/AutoOpen.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/Autoreply.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/CreateTickets.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/EscalatePriority.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/Generic.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/Notify.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/NotifyAsComment.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/RecordComment.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/RecordCorrespondence.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/ResolveMembers.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/SendEmail.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/SetPriority.pm + M /rt/branches/3.4-RELEASE/lib/RT/Action/UserDefined.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attachment.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attachment_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attachments.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attachments_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attribute.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attribute_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attributes.pm + M /rt/branches/3.4-RELEASE/lib/RT/Attributes_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Base.pm + M /rt/branches/3.4-RELEASE/lib/RT/CachedGroupMember.pm + M /rt/branches/3.4-RELEASE/lib/RT/CachedGroupMember_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/CachedGroupMembers.pm + M /rt/branches/3.4-RELEASE/lib/RT/CachedGroupMembers_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/AnyTransaction.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/BeforeDue.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/Generic.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/Overdue.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/OwnerChange.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/PriorityChange.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/PriorityExceeds.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/QueueChange.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/StatusChange.pm + M /rt/branches/3.4-RELEASE/lib/RT/Condition/UserDefined.pm + M /rt/branches/3.4-RELEASE/lib/RT/CurrentUser.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomField.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomFieldValue.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomFieldValues.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomFieldValues_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomFields.pm + M /rt/branches/3.4-RELEASE/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Date.pm + M /rt/branches/3.4-RELEASE/lib/RT/EmailParser.pm + M /rt/branches/3.4-RELEASE/lib/RT/Group.pm + M /rt/branches/3.4-RELEASE/lib/RT/GroupMember.pm + M /rt/branches/3.4-RELEASE/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/GroupMembers.pm + M /rt/branches/3.4-RELEASE/lib/RT/GroupMembers_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Group_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Groups.pm + M /rt/branches/3.4-RELEASE/lib/RT/Groups_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Handle.pm + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.pm + M /rt/branches/3.4-RELEASE/lib/RT/I18N/i_default.pm + M /rt/branches/3.4-RELEASE/lib/RT/I18N.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/CLI.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email/Auth/GnuPG.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email/Auth/MailFrom.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email/Filter/SpamAssassin.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Email.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/REST.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + M /rt/branches/3.4-RELEASE/lib/RT/Link.pm + M /rt/branches/3.4-RELEASE/lib/RT/Link_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Links.pm + M /rt/branches/3.4-RELEASE/lib/RT/Links_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomField.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValue.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValues.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFieldValues_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomField_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFields.pm + M /rt/branches/3.4-RELEASE/lib/RT/ObjectCustomFields_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Principal.pm + M /rt/branches/3.4-RELEASE/lib/RT/Principal_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Principals.pm + M /rt/branches/3.4-RELEASE/lib/RT/Principals_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queue.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queue_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queues.pm + M /rt/branches/3.4-RELEASE/lib/RT/Queues_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/RT/Scrip.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripActions.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripActions_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripCondition.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripConditions.pm + M /rt/branches/3.4-RELEASE/lib/RT/ScripConditions_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Scrips.pm + M /rt/branches/3.4-RELEASE/lib/RT/Scrips_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Search/ActiveTicketsInQueue.pm + M /rt/branches/3.4-RELEASE/lib/RT/Search/FromSQL.pm + M /rt/branches/3.4-RELEASE/lib/RT/Search/Generic.pm + M /rt/branches/3.4-RELEASE/lib/RT/SearchBuilder.pm + M /rt/branches/3.4-RELEASE/lib/RT/System.pm + M /rt/branches/3.4-RELEASE/lib/RT/Template.pm + M /rt/branches/3.4-RELEASE/lib/RT/Template_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Templates.pm + M /rt/branches/3.4-RELEASE/lib/RT/Templates_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Ticket.pm + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Tickets.pm + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transaction.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transaction_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transactions.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transactions_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 + M /rt/branches/3.4-RELEASE/lib/RT/URI.pm + M /rt/branches/3.4-RELEASE/lib/RT/User.pm + M /rt/branches/3.4-RELEASE/lib/RT/User_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Users.pm + M /rt/branches/3.4-RELEASE/lib/RT/Users_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT.pm.in + M /rt/branches/3.4-RELEASE/sbin/extract-message-catalog + M /rt/branches/3.4-RELEASE/sbin/extract_pod_tests + M /rt/branches/3.4-RELEASE/sbin/factory + M /rt/branches/3.4-RELEASE/sbin/regression_harness + M /rt/branches/3.4-RELEASE/sbin/rt-dump-database.in + M /rt/branches/3.4-RELEASE/sbin/rt-setup-database.in + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r3962@hualien: jesse | 2005-02-01T14:05:26.980011Z + reran license tagger + +------------------------------------------------------------------------ +r2146 | jesse | 2005-02-01 09:13:05 -0500 (Tue, 01 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/I18N/cs.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/da.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/de.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/en_malkovich.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/es.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fi.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/fr.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/he.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/hu.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/it.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ja.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/nl.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/no.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/pt_br.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/ru.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_cn.po + M /rt/branches/3.4-RELEASE/lib/RT/I18N/zh_tw.po + M /rt/branches/3.4-RELEASE/sbin/license_tag + + r3961@hualien: jesse | 2005-02-01T14:03:42.493372Z + Message catalogs updated + +------------------------------------------------------------------------ +r2145 | jesse | 2005-02-01 09:12:39 -0500 (Tue, 01 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r3960@hualien: jesse | 2005-02-01T13:59:42.556416Z + Tiny readme style fixes + +------------------------------------------------------------------------ +r2144 | jesse | 2005-02-01 09:11:23 -0500 (Tue, 01 Feb 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/upgrade/3.3.0/schema.Oracle + M /rt/branches/3.4-RELEASE/etc/upgrade/3.3.0/schema.Pg + + r3959@hualien: jesse | 2005-02-01T13:55:00.555573Z + Removing index changes from upgrade process that could break upgrades for some users + +------------------------------------------------------------------------ +r2131 | jesse | 2005-01-22 14:43:46 -0500 (Sat, 22 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r3924@hualien: jesse | 2005-01-22T19:34:52.453359Z + Bumped to 3.4.0rc6 + +------------------------------------------------------------------------ +r2123 | jesse | 2005-01-22 11:57:23 -0500 (Sat, 22 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r3910@hualien: jesse | 2005-01-22T16:06:58.731752Z + Custom field searches should only search on values that haven't been deleted + + +------------------------------------------------------------------------ +r2122 | jesse | 2005-01-22 11:57:11 -0500 (Sat, 22 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/15cf_single_values_are_single.t + + r3909@hualien: jesse | 2005-01-22T15:42:46.936767Z + Bullet-proofing for custom fields with a set but limited number of values + +------------------------------------------------------------------------ +r2121 | jesse | 2005-01-22 11:57:01 -0500 (Sat, 22 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r3907@hualien: jesse | 2005-01-22T14:48:14.100308Z + TicketSQL search fixes, especially to Custom field operations + + +------------------------------------------------------------------------ +r2120 | jesse | 2005-01-22 11:53:50 -0500 (Sat, 22 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/RT__Ticket/ColumnMap + + r3904@hualien: jesse | 2005-01-22T13:00:19.775653Z + The column map callback was broken by performance work + + +------------------------------------------------------------------------ +r2119 | jesse | 2005-01-22 06:26:14 -0500 (Sat, 22 Jan 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.0/content + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.11/acl.Oracle + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.11/acl.Pg + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.11/acl.SQLite + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.11/acl.mysql + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.11/content + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.11/schema.Oracle + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.11/schema.SQLite + M /rt/branches/3.4-RELEASE/sbin/rt-setup-database.in + + r3902@hualien: jesse | 2005-01-22T11:21:43.212477Z + RT-Ticket: 6366 + RT-Update: correspond + + Cleaned up the upgrade procedure to give better messages on success. Added content so it won't bomb out on errors for the 3.4 upgrades. + (We could have altered the script to not error out on missing content, but that would obscure errors where the user flubbed the path. + + + +------------------------------------------------------------------------ +r2116 | jesse | 2005-01-19 17:20:57 -0500 (Wed, 19 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/configure.ac + + r3893@hualien: jesse | 2005-01-19T18:39:39.850646Z + Updated version number used by development builds to note that this is the 3.4 series + + +------------------------------------------------------------------------ +r2115 | jesse | 2005-01-19 17:20:48 -0500 (Wed, 19 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Attachment_Overlay.pm + + r3892@hualien: jesse | 2005-01-19T18:38:38.233900Z + Added better error checking for attachment insertion failure. (This unmasked more instances of oracle brokenness) + + +------------------------------------------------------------------------ +r2114 | jesse | 2005-01-19 17:20:39 -0500 (Wed, 19 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/t/regression/03basic_web.t + M /rt/branches/3.4-RELEASE/lib/t/regression/06mailgateway.t + M /rt/branches/3.4-RELEASE/lib/t/regression/09record_cf_api.t + + r3891@hualien: jesse | 2005-01-19T18:31:15.604733Z + Minor formatting cleanups to tests + + +------------------------------------------------------------------------ +r2113 | jesse | 2005-01-18 10:46:48 -0500 (Tue, 18 Jan 2005) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/SelectOwner + M /rt/branches/3.4-RELEASE/lib/RT/Users_Overlay.pm + + r3885@hualien: jesse | 2005-01-18T15:02:02.574134Z + Reimplemented RT::Users->WhoHaveRights to remove O(n^2) SQL calls. (That means it's faster now) + Reimplemented SelectOwner widget to take advantage of the new WhoHaveRights + + + +------------------------------------------------------------------------ +r2112 | jesse | 2005-01-18 10:46:21 -0500 (Tue, 18 Jan 2005) | 8 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/CustomField_Overlay.pm + + r3884@hualien: jesse | 2005-01-18T14:59:19.630164Z + RT-Ticket: 6352 + RT-Status: resolved + RT-Update: correspond + + Fix an invalid custom field acl check + + +------------------------------------------------------------------------ +r2109 | tla | 2005-01-17 20:53:10 -0500 (Mon, 17 Jan 2005) | 4 lines +Changed paths: + A /rt/branches/3.4-RELEASE/lib/t/create_data.pl + +A script to automate testing data creation. Requires a new CPAN module, +Text::Lorem. Work in progress. + + +------------------------------------------------------------------------ +r2072 | jesse | 2005-01-13 02:02:25 -0500 (Thu, 13 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/README + +Removed a reference to NIS + + +------------------------------------------------------------------------ +r2071 | jesse | 2005-01-12 18:39:03 -0500 (Wed, 12 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/docs/rt3-schema-relationships.dot + +RT3.4 schema diagram corrected and updated. + + +------------------------------------------------------------------------ +r2070 | jesse | 2005-01-11 18:58:03 -0500 (Tue, 11 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/README + +Readme update to note that manual installation of Apache::DBI may be required. + + +------------------------------------------------------------------------ +r2069 | zev | 2005-01-11 18:49:19 -0500 (Tue, 11 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE/Makefile.in + M /rt/branches/3.4-RELEASE/etc/RT_Config.pm.in + +Fixed spelling and grammar mistakes in etc/RT_Config.pm.in +Added some documentation and fixed whitespace in Makefile.in + +------------------------------------------------------------------------ +r2065 | jesse | 2005-01-11 00:02:58 -0500 (Tue, 11 Jan 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r2678@hualien: jesse | 2005-01-11T06:37:57.777661Z + Bumped to rc5 + + + +------------------------------------------------------------------------ +r2064 | jesse | 2005-01-10 23:54:09 -0500 (Mon, 10 Jan 2005) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/14merge.t + + r2669@hualien: jesse | 2005-01-11T06:23:33.161490Z + Merging tickets with the same link could cause postgres to complain. Fixed. merged. + + + + +------------------------------------------------------------------------ +r2060 | jesse | 2005-01-08 18:46:21 -0500 (Sat, 08 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r2642@hualien: jesse | 2005-01-08T23:42:31.639282Z + 3.4.0rc4 + +------------------------------------------------------------------------ +r2059 | jesse | 2005-01-08 18:44:03 -0500 (Sat, 08 Jan 2005) | 9 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + M /rt/branches/3.4-RELEASE/lib/RT/Attributes_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/13-attribute-tests.t + M /rt/branches/3.4-RELEASE/sbin/rt-test-dependencies.in + + r2640@hualien: jesse | 2005-01-08T23:32:05.453370Z + Kevin Chen reported issues with Attributes not being properly deleted from the + ticket update screen. Alex Vandiver wrote new tests to illustrate the behaviour. + + This unearthed bugs in RT's attribute handling as well as DBIx::SearchBuilder. + + + + +------------------------------------------------------------------------ +r2055 | jesse | 2005-01-07 22:40:01 -0500 (Fri, 07 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r2633@hualien: jesse | 2005-01-08T03:37:18.260832Z + Bumping to 3.4.0rc3 + + +------------------------------------------------------------------------ +r2054 | jesse | 2005-01-07 22:39:55 -0500 (Fri, 07 Jan 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + A /rt/branches/3.4-RELEASE/lib/t/regression/12-search.t + + r2632@hualien: jesse | 2005-01-08T03:36:49.431347Z + Revision 1977 was a bogus merge. Revert that. Add new tests to catch the failing behaviour + + + +------------------------------------------------------------------------ +r2045 | jesse | 2005-01-06 16:01:06 -0500 (Thu, 06 Jan 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r2555@hualien: jesse | 2005-01-06T20:56:22.389566Z + Bumping to rc2 + + + +------------------------------------------------------------------------ +r2044 | jesse | 2005-01-06 16:00:57 -0500 (Thu, 06 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/t/regression/04send_email.t + M /rt/branches/3.4-RELEASE/lib/t/regression/06mailgateway.t + + r2543@hualien: jesse | 2005-01-06T07:08:12.346569Z + no longer hardcode paths in tests + +------------------------------------------------------------------------ +r2041 | jesse | 2005-01-05 00:34:02 -0500 (Wed, 05 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Record.pm + M /rt/branches/3.4-RELEASE/lib/t/regression/03basic_web.t + + r2539@hualien: jesse | 2005-01-05T05:31:36.967112Z + Better handling of Content that comes out of the database as utf8 (Such as with DBD::Oracle 1.16) + +------------------------------------------------------------------------ +r2040 | jesse | 2005-01-04 00:18:06 -0500 (Tue, 04 Jan 2005) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + + r2530@hualien: jesse | 2005-01-04T05:15:35.757280Z + a couple fixes for better handling ticket links on merge + +------------------------------------------------------------------------ +r2039 | jesse | 2005-01-04 00:17:52 -0500 (Tue, 04 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/lib/t/regression/11-template-insert.t + + r2528@hualien: jesse | 2005-01-03T19:54:59.819442Z + Added a test for a regression tickled by DBD::Oracle 1.16 + + +------------------------------------------------------------------------ +r2038 | jesse | 2005-01-04 00:17:42 -0500 (Tue, 04 Jan 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/upgrade/3.3.0/schema.mysql + + r2527@hualien: jesse | 2005-01-03T19:52:28.164258Z + Updated mysql schema upgrades to cope with ancient RT 3 instances which didn't have indexes we expect + + + +------------------------------------------------------------------------ +r2037 | jesse | 2005-01-04 00:17:29 -0500 (Tue, 04 Jan 2005) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/upgrade/3.3.0/schema.mysql + + r2526@hualien: jesse | 2005-01-03T19:21:48.180206Z + Workaround for missing mysql indexes + + +------------------------------------------------------------------------ +r2036 | jesse | 2005-01-03 14:14:54 -0500 (Mon, 03 Jan 2005) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/etc/upgrade/3.3.0/schema.Oracle + + r2524@hualien: jesse | 2005-01-03T19:12:32.074066Z + Oracle schema upgrades + + + +------------------------------------------------------------------------ +r2034 | jesse | 2004-12-29 15:41:21 -0500 (Wed, 29 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/GroupRights.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/Modify.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/Objects.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/UserRights.html + M /rt/branches/3.4-RELEASE/html/Admin/CustomFields/index.html + M /rt/branches/3.4-RELEASE/html/Admin/Elements/CustomFieldTabs + + r2520@hualien: jesse | 2004-12-29T20:39:43.707258Z + Custom field tab hilighting fixes. + + + +------------------------------------------------------------------------ +r2033 | jesse | 2004-12-29 14:45:54 -0500 (Wed, 29 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Handle.pm + + r2516@hualien: jesse | 2004-12-29T19:44:09.437463Z + Slightly updated encoding support for oracle + + + +------------------------------------------------------------------------ +r2032 | jesse | 2004-12-29 14:45:43 -0500 (Wed, 29 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/UPGRADING + + r2507@hualien: jesse | 2004-12-23T22:31:20.362197Z + Note about "OwnTickets" for Superusers + + +------------------------------------------------------------------------ +r2030 | robert | 2004-12-28 01:37:51 -0500 (Tue, 28 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/configure.ac + + r2033@dog: rspier | 2004-12-27 22:36:08 -0800 + RT 6331: configure spitting chmod errors + +------------------------------------------------------------------------ +r2029 | robert | 2004-12-28 01:37:47 -0500 (Tue, 28 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/NoAuth/webrt.css + + r2032@dog: rspier | 2004-12-27 22:24:34 -0800 + fix css errors + +------------------------------------------------------------------------ +r2028 | robert | 2004-12-28 01:37:37 -0500 (Tue, 28 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Elements/Header + + r2031@dog: rspier | 2004-12-27 21:46:34 -0800 + Only show the refresh tag if the refresh time is > 0. + (Mozilla will perform a refresh=1 for refresh=-1) + +------------------------------------------------------------------------ +r2027 | robert | 2004-12-28 01:37:32 -0500 (Tue, 28 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/configure.ac + + r2030@dog: rspier | 2004-12-27 21:05:44 -0800 + Whitespace tweak: use tabs consistently + +------------------------------------------------------------------------ +r2025 | jesse | 2004-12-22 02:06:35 -0500 (Wed, 22 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/etc/schema.Oracle + + r2504@hualien: jesse | 2004-12-22T07:05:58.453205Z + Oracle schema updates + + + +------------------------------------------------------------------------ +r2024 | jesse | 2004-12-21 17:11:39 -0500 (Tue, 21 Dec 2004) | 7 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/html/Ticket/Elements/ShowHistory + M /rt/branches/3.4-RELEASE/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.4-RELEASE/lib/RT/Transactions_Overlay.pm + + r2500@hualien: jesse | 2004-12-21T22:06:43.378557Z + Refactored RT's logic that limits sets of transactions to tickets to make it easier to reuse. + Fixed bugs in searches for transactions related to multiple tickets. + + + + +------------------------------------------------------------------------ +r2021 | jesse | 2004-12-21 00:32:15 -0500 (Tue, 21 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + A /rt/branches/3.4-RELEASE/lib/t/regression/10merge.t + + r2498@hualien: jesse | 2004-12-21T05:27:21.459146Z + Added a new regression test to validate some possibly bogus behaviour about merging tickets + + + +------------------------------------------------------------------------ +r2019 | jesse | 2004-12-20 21:44:53 -0500 (Mon, 20 Dec 2004) | 6 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Tickets_Overlay.pm + + r2494@hualien: jesse | 2004-12-21T02:40:37.522278Z + Added back a 'package' declaration to Tickets_Overlay to enable automatic reload. + + + + +------------------------------------------------------------------------ +r2018 | jesse | 2004-12-20 18:53:18 -0500 (Mon, 20 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/bin/mason_handler.fcgi.in + + r2492@hualien: jesse | 2004-12-20T23:49:03.808597Z + The FastCGI handler was missing a small bit of code to enable the devel mode "Module::Reload" feature. + + +------------------------------------------------------------------------ +r2017 | jesse | 2004-12-20 18:33:50 -0500 (Mon, 20 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/t/regression/08web_cf_access.t + + r2489@hualien: jesse | 2004-12-20T23:27:06.068915Z + Inhibit a warning in 08_web_Cf_access.t + + + +------------------------------------------------------------------------ +r2015 | jesse | 2004-12-20 13:43:27 -0500 (Mon, 20 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + D /rt/branches/3.4-RELEASE/HOWTO + + r2485@hualien: jesse | 2004-12-20T18:38:03.341344Z + Blew away outdated releng documentation + +------------------------------------------------------------------------ +r2014 | jesse | 2004-12-20 13:42:57 -0500 (Mon, 20 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/README + + r2484@hualien: jesse | 2004-12-20T18:37:10.098322Z + minor readme updates + +------------------------------------------------------------------------ +r2013 | jesse | 2004-12-20 13:42:45 -0500 (Mon, 20 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/releng.cnf + + r2483@hualien: jesse | 2004-12-20T18:35:10.597227Z + updated releng.cnf to point to the new branch + +------------------------------------------------------------------------ +r2012 | jesse | 2004-12-20 13:25:47 -0500 (Mon, 20 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.4-RELEASE + M /rt/branches/3.4-RELEASE/lib/RT/Interface/Web.pm + + r2478@hualien: jesse | 2004-12-20T18:18:05.386331Z + The last merge had a missing brace + +------------------------------------------------------------------------ +r2010 | jesse | 2004-12-20 13:07:34 -0500 (Mon, 20 Dec 2004) | 2 lines +Changed paths: + A /rt/branches/3.4-RELEASE (from /rt/branches/3.3-TESTING:2009) + +Moving the 3.3 testing branch to the 3.4 release branch in anticipation of a release candidate later today + +------------------------------------------------------------------------ +r2009 | jesse | 2004-12-20 12:30:49 -0500 (Mon, 20 Dec 2004) | 11 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/autohandler + + r2472@hualien: jesse | 2004-12-20T17:04:02.657029Z + r2464@hualien: jesse | 2004-12-17T23:04:58.188494Z + Security: + * Fixed a case where catastrophic failure of the logging infrastructure + on initial login could result in a failing login attempt could + result in a valid remote session. -- Reported by Tom Yu + + + + + +------------------------------------------------------------------------ +r2008 | jesse | 2004-12-20 12:30:35 -0500 (Mon, 20 Dec 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/REST/1.0/search/ticket + + r2471@hualien: jesse | 2004-12-20T17:04:02.035738Z + r2460@hualien: jesse | 2004-12-17T20:24:25.107579Z + REST UI for listing tickets was missing a newline, resulting in a malformed + response + + + + +------------------------------------------------------------------------ +r2007 | jesse | 2004-12-20 12:30:22 -0500 (Mon, 20 Dec 2004) | 11 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Users_Overlay.pm + + r2470@hualien: jesse | 2004-12-20T17:04:01.318822Z + r1984@hualien: jesse | 2004-12-09T07:16:39.436509Z + RT-Ticket: 6296 + RT-Status: resolved + RT-Update: correspond + + Removed a spurious =>, Thanks to Todd Chapman + + + + +------------------------------------------------------------------------ +r2006 | jesse | 2004-12-20 12:30:06 -0500 (Mon, 20 Dec 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r2469@hualien: jesse | 2004-12-20T16:35:42.953265Z + r1983@hualien: jesse | 2004-12-09T07:15:23.115403Z + + + + +------------------------------------------------------------------------ +r2002 | jesse | 2004-12-16 16:01:40 -0500 (Thu, 16 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + D /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue_Overlay.pm + D /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues_Overlay.pm + + r2447@hualien: jesse | 2004-12-16T20:55:51.733392Z + Removed two more unused files. Thanks to Ruslan for spotting this. + + +------------------------------------------------------------------------ +r2000 | jesse | 2004-12-15 18:00:06 -0500 (Wed, 15 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/t/regression/01ticket_link_searching.t + + r2442@hualien: jesse | 2004-12-15T22:55:54.557052Z + Clkao found a logic bug in the negative link searching + +------------------------------------------------------------------------ +r1998 | jesse | 2004-12-14 18:45:10 -0500 (Tue, 14 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r2440@hualien: jesse | 2004-12-14T23:39:15.304049Z + bumping to 3.3.16 + +------------------------------------------------------------------------ +r1997 | jesse | 2004-12-14 14:40:49 -0500 (Tue, 14 Dec 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/schema.Oracle + + r2437@hualien: jesse | 2004-12-14T19:37:11.516896Z + RT-Ticket: 6316 + RT-Status: resolved + RT-Update: correspond + + Added a patch to enable ObjectCustomFields for Oracle from Steve Turner at MIT. We're still short an oracle upgrade path. + + + +------------------------------------------------------------------------ +r1996 | autrijus | 2004-12-14 10:36:27 -0500 (Tue, 14 Dec 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + + r6687@not: autrijus | 2004-12-14T15:31:58.474155Z + * In HTML::Mason 1.18 or above, Apache2 support is native if + Apache::Request (libapreq2) is installed. + + + +------------------------------------------------------------------------ +r1995 | jesse | 2004-12-14 04:54:20 -0500 (Tue, 14 Dec 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/Makefile.in + M /rt/branches/3.3-TESTING/configure.ac + A /rt/branches/3.3-TESTING/lib/t/00smoke.t + D /rt/branches/3.3-TESTING/lib/t/00smoke.t.in + D /rt/branches/3.3-TESTING/lib/t/01harness.t.in + D /rt/branches/3.3-TESTING/lib/t/02regression.t.in + D /rt/branches/3.3-TESTING/lib/t/03web.pl.in + D /rt/branches/3.3-TESTING/lib/t/04_send_email.pl.in + D /rt/branches/3.3-TESTING/lib/t/05cronsupport.pl.in + D /rt/branches/3.3-TESTING/lib/t/06mailgateway.pl.in + D /rt/branches/3.3-TESTING/lib/t/07acl.pl.in + D /rt/branches/3.3-TESTING/lib/t/08web_cf.pl.in + D /rt/branches/3.3-TESTING/lib/t/regression/00placeholder + A /rt/branches/3.3-TESTING/lib/t/regression/03basic_web.t + A /rt/branches/3.3-TESTING/lib/t/regression/04send_email.t + A /rt/branches/3.3-TESTING/lib/t/regression/05cronsupport.t + A /rt/branches/3.3-TESTING/lib/t/regression/06mailgateway.t + A /rt/branches/3.3-TESTING/lib/t/regression/07acl.t + A /rt/branches/3.3-TESTING/lib/t/regression/08web_cf_access.t + A /rt/branches/3.3-TESTING/lib/t/regression/09record_cf_api.t + A /rt/branches/3.3-TESTING/lib/t/setup_regression.t + + r2434@hualien: jesse | 2004-12-14T09:50:12.895761Z + Test suite refactored to use 'prove' rather than one big ball of tests. + This makes it much easier to run individual test scripts and gets us a nice pretty output. + + Ruslan pushed me into this. + + + +------------------------------------------------------------------------ +r1994 | jesse | 2004-12-14 04:54:04 -0500 (Tue, 14 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/configure.ac + D /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue.pm + D /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT.pm.in + M /rt/branches/3.3-TESTING/lib/t/regression/01ticket_link_searching.t + M /rt/branches/3.3-TESTING/sbin/extract_pod_tests + + r2433@hualien: jesse | 2004-12-14T09:25:34.132509Z + Removing TicketCustomFieldValue files leftover from 3.2 + +------------------------------------------------------------------------ +r1993 | jesse | 2004-12-14 02:36:04 -0500 (Tue, 14 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + A /rt/branches/3.3-TESTING/lib/t/regression/01ticket_link_searching.t + + r2431@hualien: jesse | 2004-12-14T07:32:22.983998Z + And now we have _tests_ for the link searching. + + + +------------------------------------------------------------------------ +r1992 | jesse | 2004-12-14 02:25:03 -0500 (Tue, 14 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + + r2428@hualien: jesse | 2004-12-14T07:21:15.616305Z + Adding support for searching on tickets which have no relationships of a given type (Such as "HasMember IS NULL") for clkao + +------------------------------------------------------------------------ +r1990 | jesse | 2004-12-13 23:50:29 -0500 (Mon, 13 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r2423@hualien: jesse | 2004-12-14T04:46:07.648245Z + 3.3.15 + +------------------------------------------------------------------------ +r1989 | jesse | 2004-12-13 23:48:14 -0500 (Mon, 13 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + + r2419@hualien: jesse | 2004-12-14T04:42:37.099863Z + More fixes for working with Transaction Custom Fields + +------------------------------------------------------------------------ +r1988 | jesse | 2004-12-13 21:42:15 -0500 (Mon, 13 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + + r2413@hualien: jesse | 2004-12-14T02:38:06.428282Z + RT::Transaction->CustomFieldValues can now accept named arguments + +------------------------------------------------------------------------ +r1987 | mwhitson | 2004-12-13 18:15:35 -0500 (Mon, 13 Dec 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING/html/Admin/Groups/Modify.html + M /rt/branches/3.3-TESTING/html/User/Groups/Modify.html + +rt-ticket: 6315 +rt-status: resolved +rt-update: correspond + +Relabeled 'Create' submit buttons to 'Save Changes' in group modification pages. + +------------------------------------------------------------------------ +r1986 | jesse | 2004-12-12 23:13:42 -0500 (Sun, 12 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/SelfService/Display.html + M /rt/branches/3.3-TESTING/html/SelfService/Update.html + + r2411@hualien: jesse | 2004-12-13T04:10:03.842079Z + self service ui html beautification, selfservice customfield editing + +------------------------------------------------------------------------ +r1983 | jesse | 2004-12-10 13:55:22 -0500 (Fri, 10 Dec 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/UPGRADING + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + + r2000@hualien: jesse | 2004-12-10T18:55:08.662227Z + RT-Ticket: 6304 + RT-Status: resolved + RT-Update: correspond + + ModifyObjectCustomFieldValues was too long. It's been changed to "ModifyCustomField" + + +------------------------------------------------------------------------ +r1982 | jesse | 2004-12-10 00:19:36 -0500 (Fri, 10 Dec 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/configure.ac + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + M /rt/branches/3.3-TESTING/lib/t/02regression.t.in + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r1998@hualien: jesse | 2004-12-10T05:18:47.952532Z + Ruslan handed us a suite of tests. Some of those tests failed, demonstrating a couple of API issues with CustomFields. + + This led to more API bulletproofing and a SearchBuilder bump + + + + +------------------------------------------------------------------------ +r1980 | jesse | 2004-12-09 02:33:58 -0500 (Thu, 09 Dec 2004) | 29 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldFreeform + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r1990@hualien: jesse | 2004-12-09T07:32:26.670652Z + This actually covers several bugs in the custom field processing in 3.3. + 12. Each time I fixed a bug, another one was uncovered. I think I've + finished now. + + You can see the problems if you create a ticket with "Enter multiple + values", "Fill in one text area" and "upload a file" CFs. The go to the + Basics page, don't change anything and hit submit. All hell breaks loose + - + + 1) the multi-value & text area fields get screwed up. + 2) a message appears telling you the file upload CF has been deleted, + although it apparently hasn't. + + Here's the idea behind what I did: + + - Multi-value CFs should be stored with no \n or \r characters. + - Fill-in-a-text-area CFs should have \r removed before storing in + the database (but \n should remain). + + There are a couple of other related changes - free form multi value CFs + are no longer identified by type "FreeformMultiple". Also there's a + "next if" statement in the wrong place which was causing the file upload + bug. + + --Steve Turner + + + +------------------------------------------------------------------------ +r1979 | jesse | 2004-12-09 02:32:46 -0500 (Thu, 09 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r1989@hualien: jesse | 2004-12-09T07:31:07.292798Z + Typo fix + + +------------------------------------------------------------------------ +r1978 | jesse | 2004-12-09 02:21:52 -0500 (Thu, 09 Dec 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r1986@hualien: jesse | 2004-12-09T07:20:03.552482Z + RT-Ticket: 6295 + RT-Status: resolved + RT-Update: correspond + + Removed a "die" from a code path that should never be hit but doesn't need to die. Thanks to Todd Chapman + + + +------------------------------------------------------------------------ +r1977 | jesse | 2004-12-09 02:20:17 -0500 (Thu, 09 Dec 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r1982@hualien: jesse | 2004-12-09T07:09:56.419805Z + Slightly more refactoring of Record->CustomFieldValues designed to restore older + behaviour. + + + + +------------------------------------------------------------------------ +r1975 | jesse | 2004-12-09 02:05:51 -0500 (Thu, 09 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/mason_handler.fcgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.scgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.svc.in + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + + r1980@hualien: jesse | 2004-12-09T07:05:41.787599Z + Refactored post-http handling code into lib/RT/Interface/Web/Handler.pm + + + +------------------------------------------------------------------------ +r1974 | jesse | 2004-12-08 20:05:42 -0500 (Wed, 08 Dec 2004) | 19 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/lib/RT/ACE_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Group_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/t/06mailgateway.pl.in + M /rt/branches/3.3-TESTING/lib/t/07acl.pl.in + + r1978@hualien: jesse | 2004-12-09T01:05:21.233709Z + Core: + + * Promoted ACL cache invalidation to a public method. + + Web: + + * Web UI now invalidates ACL cache after each HTTP hit. This means + more consistent ACL checks at the expense marginally more database lookups + + Test Suite: + + * Removed delays from the test suite which were there to deal with the ACL + cache. The test suite now completes in approximately one minute on my + laptop. + + + + +------------------------------------------------------------------------ +r1972 | jesse | 2004-12-07 21:40:10 -0500 (Tue, 07 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r9533@tinbook: jesse | 2004-12-08T02:40:01.308641Z + Bumping to 3.3.14 + +------------------------------------------------------------------------ +r1971 | jesse | 2004-12-07 21:38:14 -0500 (Tue, 07 Dec 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r9530@tinbook: jesse | 2004-12-08T02:38:06.660707Z + Refactored RT::Record->CustomFieldValues to be more careful to not + accidentally load all ticket custom field values when asked for a + bogus custom field. Thanks to Ruslan for a pointer to the bug. + + + +------------------------------------------------------------------------ +r1968 | jesse | 2004-12-07 20:35:22 -0500 (Tue, 07 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + + r9525@tinbook: jesse | 2004-12-08T01:29:33.251334Z + Pulling forward query optimization from 3.2 + + +------------------------------------------------------------------------ +r1967 | jesse | 2004-12-07 20:33:35 -0500 (Tue, 07 Dec 2004) | 36 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + + r9524@tinbook: jesse | 2004-12-07T22:51:16.647524Z + r9522@tinbook: jesse | 2004-12-07T22:47:20.573617Z + RT-Ticket: 6286 + RT-Status: resolved + RT-Update: correspond + + Searching on Ticket data and Transaction content caused horribly pessimal searches. + + OLD + + mysql> explain SELECT DISTINCT main.* FROM Tickets main , Transactions Transactions_1, Attachments Attachments_2 WHERE ((main.EffectiveId = main.id)) AND ((main.Status != 'deleted')) AND ((main.Type = 'ticket')) AND ((main.Subject LIKE '%subject/content SQL test%')OR ( (Attachments_2.Content LIKE '%subject/content SQL test%')AND(Attachments_2.TransactionId = Transactions_1.id)AND(main.id = Transactions_1.Ticket) ) ); + +----------------+-------+-----------------------+---------------+---------+------+------+------------------------------------+ + | table | type | possible_keys | key | key_len | ref | rows | Extra | + +----------------+-------+-----------------------+---------------+---------+------+------+------------------------------------+ + | main | ALL | PRIMARY | NULL | NULL | NULL | 30 | Using where; Using temporary | + | Attachments_2 | ALL | Attachments2 | NULL | NULL | NULL | 22 | Using where; Distinct | + | Transactions_1 | index | PRIMARY,Transactions1 | Transactions1 | 4 | NULL | 73 | Using where; Using index; Distinct | + +----------------+-------+-----------------------+---------------+---------+------+------+------------------------------------+ + 3 rows in set (0.00 sec) + + NEW + + mysql> explain SELECT DISTINCT main.* FROM ((Tickets main LEFT JOIN Transactions Transactions_1 ON ( main.id = Transactions_1.Ticket)) LEFT JOIN Attachments Attachments_2 ON ( Transactions_1.id = Attachments_2.TransactionId)) WHERE ((main.EffectiveId = main.id)) AND ((main.Status != 'deleted')) AND ((main.Type = 'ticket')) AND ((main.Subject LIKE '%subject/content SQL test%')OR ( (Attachments_2.Content LIKE '%subject/content SQL test%') ) ); + +----------------+------+---------------+---------------+---------+-------------------+------+------------------------------+ + | table | type | possible_keys | key | key_len | ref | rows | Extra | + +----------------+------+---------------+---------------+---------+-------------------+------+------------------------------+ + | main | ALL | NULL | NULL | NULL | NULL | 30 | Using where; Using temporary | + | Transactions_1 | ref | Transactions1 | Transactions1 | 4 | main.id | 1 | Using index; Distinct | + | Attachments_2 | ref | Attachments2 | Attachments2 | 4 | Transactions_1.id | 1 | Using where; Distinct | + +----------------+------+---------------+---------------+---------+-------------------+------+------------------------------+ + 3 rows in set (0.03 sec) + + + + + +------------------------------------------------------------------------ +r1965 | jesse | 2004-12-07 15:16:58 -0500 (Tue, 07 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Build.html + + r9519@tinbook: jesse | 2004-12-07T20:14:22.950883Z + The "toggle AND/OR" button in the query builder broke in 3.3.10 or so. Reported by Wilson Chow + + +------------------------------------------------------------------------ +r1963 | jesse | 2004-12-06 15:13:15 -0500 (Mon, 06 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r9514@tinbook: jesse | 2004-12-06T20:08:56.717991Z + Bumping to 3.3.13 + +------------------------------------------------------------------------ +r1962 | autrijus | 2004-12-06 12:49:23 -0500 (Mon, 06 Dec 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + + +------------------------------------------------------------------------ +r1961 | autrijus | 2004-12-06 12:48:46 -0500 (Mon, 06 Dec 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/docs/design_docs/3.3-schema-redesign.txt + + r6348@not: autrijus | 2004-12-06T17:45:43.194394Z + * Fix an incorrect description of OCFs + +------------------------------------------------------------------------ +r1960 | jesse | 2004-12-06 02:11:55 -0500 (Mon, 06 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/SelfService/Create.html + A /rt/branches/3.3-TESTING/html/SelfService/CreateTicketInQueue.html + M /rt/branches/3.3-TESTING/html/SelfService/Display.html + M /rt/branches/3.3-TESTING/html/SelfService/Elements/Tabs + + r9505@tinbook: jesse | 2004-12-06T07:11:01.358418Z + SelfService: Added support for setting custom fields on creation and viewing custom fields the user has the right to see. + + +------------------------------------------------------------------------ +r1959 | jesse | 2004-12-06 02:11:21 -0500 (Mon, 06 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldFreeform + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldSelect + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldText + + r9504@tinbook: jesse | 2004-12-06T07:10:00.587141Z + Removing duplicated code. + + + +------------------------------------------------------------------------ +r1958 | jesse | 2004-12-06 00:50:07 -0500 (Mon, 06 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + + r9498@tinbook: jesse | 2004-12-06T05:49:22.962399Z + Fixing CustomField->LoadByName for the case where no such custom field exists. + + +------------------------------------------------------------------------ +r1957 | jesse | 2004-12-05 16:58:31 -0500 (Sun, 05 Dec 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r9495@tinbook: jesse | 2004-12-05T21:57:36.434513Z + Refactored RT::Record->CustomFieldValues to accept cf names and convert them to ids. (Based on a patch by Tara Andrews) + + +------------------------------------------------------------------------ +r1956 | jesse | 2004-12-05 16:58:06 -0500 (Sun, 05 Dec 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r9451@tinbook: jesse | 2004-12-03T22:42:17.243639Z + r9450@tinbook: jesse | 2004-12-03T22:39:34.093758Z + Refactoring to use the API to determine if a ticket is being closed, rather than looking at a hardcoded status. -- Stephen Quinney + + + +------------------------------------------------------------------------ +r1953 | jesse | 2004-12-03 17:25:07 -0500 (Fri, 03 Dec 2004) | 13 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + + r9447@tinbook: jesse | 2004-12-03T22:23:11.115990Z + RT-Ticket: 6291 + RT-Status: resolved + RT-Update: correspond + + + Altered Transaction->Value to only show data about custom field transactions if the user + has the right to see that custom field. This automatically limits the Transaction list + to exclude custom field transactions the user shouldn't see. + + + + +------------------------------------------------------------------------ +r1952 | tla | 2004-12-02 18:16:17 -0500 (Thu, 02 Dec 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + +If First is undef on account of there not being a custom field of that +name, the Content() method cannot be called on it, so check for mere +existence before we try. + + +------------------------------------------------------------------------ +r1949 | jesse | 2004-11-29 13:32:05 -0500 (Mon, 29 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/SelfService/Update.html + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditBasics + M /rt/branches/3.3-TESTING/html/Ticket/Update.html + M /rt/branches/3.3-TESTING/html/Tools/MyDay.html + + r9437@tinbook: jesse | 2004-11-29T18:33:10.692247Z + Small localization fixes for "Status" (Unchanged) messages + + + +------------------------------------------------------------------------ +r1948 | jesse | 2004-11-29 01:24:52 -0500 (Mon, 29 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/upgrade/3.3.11/schema.Pg + M /rt/branches/3.3-TESTING/etc/upgrade/3.3.11/schema.mysql + M /rt/branches/3.3-TESTING/sbin/rt-setup-database.in + + r9435@tinbook: jesse | 2004-11-29T06:26:08.317066Z + More postgres upgrade fixes + +------------------------------------------------------------------------ +r1946 | jesse | 2004-11-28 22:25:19 -0500 (Sun, 28 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomField + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + + r9432@tinbook: jesse | 2004-11-29T03:26:44.094679Z + Custom field API backward-compatibility improvements + +------------------------------------------------------------------------ +r1943 | jesse | 2004-11-27 02:34:16 -0500 (Sat, 27 Nov 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + + +------------------------------------------------------------------------ +r1942 | jesse | 2004-11-27 02:34:09 -0500 (Sat, 27 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + + r9422@tinbook: jesse | 2004-11-27T07:33:36.170661Z + r9420@tinbook: jesse | 2004-11-27T07:31:22.860069Z + Refactored ColumnMap to remove use of a deprecated API + + +------------------------------------------------------------------------ +r1941 | jesse | 2004-11-27 01:38:00 -0500 (Sat, 27 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Row + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r9414@tinbook: jesse | 2004-11-27T06:29:04.667691Z + Multiple fixes to search result display + +------------------------------------------------------------------------ +r1937 | jesse | 2004-11-26 22:49:33 -0500 (Fri, 26 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r9411@tinbook: jesse | 2004-11-27T03:48:14.141183Z + Bumping to 3.3.12 + +------------------------------------------------------------------------ +r1934 | jesse | 2004-11-24 11:15:39 -0500 (Wed, 24 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/upgrade/3.3.11/schema.Pg + + r9348@tinbook: jesse | 2004-11-24T16:15:50.210159Z + 3.3.11 upgrade schema for postgres depended on features not supported by postgres. fixed. -- Mathieu Sauve-Frankel + +------------------------------------------------------------------------ +r1933 | jesse | 2004-11-22 14:44:43 -0500 (Mon, 22 Nov 2004) | 11 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Attachment_Overlay.pm + + r9335@tinbook: jesse | 2004-11-22T19:44:48.685300Z + r9328@tinbook: jesse | 2004-11-22T19:23:06.663299Z + RT-Ticket: 6187 + RT-Status: resolved + RT-Update: correspond + + Refactored RT's core attachment processing logic to be a bit less baroque and to use new convenience methods. ths should prevent some mail header display strangeness folks were seeing. + + + + +------------------------------------------------------------------------ +r1932 | jesse | 2004-11-22 14:44:28 -0500 (Mon, 22 Nov 2004) | 12 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/Users/Modify.html + + r9334@tinbook: jesse | 2004-11-22T19:44:47.878500Z + r9324@tinbook: jesse | 2004-11-22T18:44:30.383331Z + RT-Ticket: 6272 + RT-Status: resolved + RT-Update: correspond + + When updating comments and signature in the Administrative UI, RT won't introduce + extra newlines anymore. (Todd Chapman) + + + + +------------------------------------------------------------------------ +r1931 | jesse | 2004-11-22 14:44:10 -0500 (Mon, 22 Nov 2004) | 12 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowTransactionAttachments + + r9333@tinbook: jesse | 2004-11-22T19:44:47.283026Z + r9322@tinbook: jesse | 2004-11-22T18:41:02.001214Z + RT-Ticket: 6276 + RT-Status: resolved + RT-Update: correspond + + Now honor the RT::MaxInlineBody configuration variable. Also, the Content-Disposition header. + We no longer display long attachments inline if they were marked as attachments. + + + + +------------------------------------------------------------------------ +r1930 | jesse | 2004-11-22 14:43:53 -0500 (Mon, 22 Nov 2004) | 12 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowAttachments + + r9332@tinbook: jesse | 2004-11-22T19:44:46.719948Z + r9320@tinbook: jesse | 2004-11-22T18:13:24.717525Z + RT-Ticket: 6264 + RT-Status: resolved + RT-Update: correspond + + Fix the "ShowAttachments" component to deal gracefully, even if called without a + precached set of attachments. From Rolf Grossmann. + + + + +------------------------------------------------------------------------ +r1929 | jesse | 2004-11-22 14:43:42 -0500 (Mon, 22 Nov 2004) | 11 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/SelfService/Elements/MyRequests + + r9331@tinbook: jesse | 2004-11-22T19:44:46.166158Z + r9316@tinbook: jesse | 2004-11-22T17:59:32.163278Z + RT-Ticket: 6270 + RT-Status: resolved + RT-Update: correspond + + Localized the "Status" field in the selfservice UI + + + + +------------------------------------------------------------------------ +r1928 | jesse | 2004-11-22 14:43:35 -0500 (Mon, 22 Nov 2004) | 11 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + + r9330@tinbook: jesse | 2004-11-22T19:44:45.488990Z + r9272@tinbook: jesse | 2004-11-16T16:29:54.673250Z + RT-Ticket: 6239 + RT-Status: resolved + RT-Update: correspond + + Applied patch from Rudolph Pereira to allow email plugins to change ticket ID + + + + +------------------------------------------------------------------------ +r1926 | jesse | 2004-11-22 13:52:27 -0500 (Mon, 22 Nov 2004) | 18 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Filter/SpamAssassin.pm + + r9326@tinbook: jesse | 2004-11-22T18:53:57.082454Z + RT-Ticket: 6125 + RT-Status: resolved + RT-Update: correspond + + SpamAssasin mail plugin overhauled (Petter Reinholdtsen) + + The current code wipe out the CurrentUser variable, and must be called + first in the chain of plugins. There is no good reason why it need to + do this, so I propose to change it to keep the CurrentUser value. + + Here is a patch to change the argument handling, to pass + $args{'Message'} to spamassasin, instead of the strange $item value. + The patch also make sure CurrentUser and AuthLevel is passed through + when no change is wanted. + + + +------------------------------------------------------------------------ +r1922 | jesse | 2004-11-22 13:05:08 -0500 (Mon, 22 Nov 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/docs/rt3-schema-relationships.dot + + r9318@tinbook: jesse | 2004-11-22T18:06:38.935955Z + RT-Ticket: 6269 + RT-Status: resolved + RT-Update: correspond + + RT3 schema diagram updated. (Todd Chapman) + + + +------------------------------------------------------------------------ +r1920 | autrijus | 2004-11-22 08:19:30 -0500 (Mon, 22 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/EditCustomField + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r5939@not: autrijus | 2004-11-22T13:20:38.205298Z + * the "Magic" on modify broke Image/Binary custom fields. + + +------------------------------------------------------------------------ +r1919 | jesse | 2004-11-22 02:25:42 -0500 (Mon, 22 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Scrip_Overlay.pm + + r9313@tinbook: jesse | 2004-11-22T07:26:55.423227Z + Comments about redundant code + +------------------------------------------------------------------------ +r1918 | jesse | 2004-11-21 20:26:56 -0500 (Sun, 21 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r9310@tinbook: jesse | 2004-11-22T01:26:40.004042Z + fixes for the perl module downloading bit + +------------------------------------------------------------------------ +r1916 | jesse | 2004-11-18 11:00:17 -0500 (Thu, 18 Nov 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Ticket/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Ticket/ModifyAll.html + + r9296@tinbook: jesse | 2004-11-18T15:59:55.061638Z + + + Ported Custom Field editing fixes from 3.2. Added a deprecated warning to a deprecated API. + Cleaned up a tiny bit of formatting + + + +------------------------------------------------------------------------ +r1915 | jesse | 2004-11-18 11:00:04 -0500 (Thu, 18 Nov 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + + +------------------------------------------------------------------------ +r1914 | jesse | 2004-11-18 10:59:05 -0500 (Thu, 18 Nov 2004) | 14 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/UPGRADING + M /rt/branches/3.3-TESTING/lib/RT/ACE_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r9280@tinbook: jesse | 2004-11-17T18:34:51.857756Z + A bunch of CustomField related improvements. Autrijus is working on the new test suite. Coming "tomorrow" + + + UPGRADING FROM 3.3.11 and earlier - Changes: + + = Rights Changes = + + Custom Fields now have an additional right "ModifyObjectCustomFieldValues". + This right governs whether a user can modify an object's custom field values + for a particular custom field. This includes adding, deleting and changing values. + + + +------------------------------------------------------------------------ +r1913 | autrijus | 2004-11-17 23:39:01 -0500 (Wed, 17 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/EditCustomField + + r5691@not: autrijus | 2004-11-18T04:40:20.966758Z + * Remove the unused and misleading chunks in EditCustomField. + + +------------------------------------------------------------------------ +r1912 | autrijus | 2004-11-17 06:29:10 -0500 (Wed, 17 Nov 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + + +------------------------------------------------------------------------ +r1911 | autrijus | 2004-11-17 06:28:47 -0500 (Wed, 17 Nov 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/autohandler + + r4462@not: autrijus | 2004-11-17T11:21:48.719799Z + * under MasonX::Apache2Handler, empty arguments sometimes got + passed in as unicode strings, so Encode::decode('utf8') + fails miserably. We now explicitly check is_utf8() before + applying a decode; this is a better style anyway. + + +------------------------------------------------------------------------ +r1908 | jesse | 2004-11-16 07:32:40 -0500 (Tue, 16 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + +Time::HiRes was improperly capitalized + + +------------------------------------------------------------------------ +r1907 | jesse | 2004-11-15 16:19:49 -0500 (Mon, 15 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/html/Elements/Footer + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + M /rt/branches/3.3-TESTING/html/autohandler + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r9270@tinbook: jesse | 2004-11-15T21:17:01.591994Z + Moved render time display out of an "if developer" block into a main-page div. Set up css to display it small and very de-emphasized + +------------------------------------------------------------------------ +r1906 | jesse | 2004-11-15 15:55:48 -0500 (Mon, 15 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/EditCustomField + + r9268@tinbook: jesse | 2004-11-15T20:51:06.505734Z + Disabled replaced Current a bit back + + + +------------------------------------------------------------------------ +r1905 | jesse | 2004-11-15 15:45:02 -0500 (Mon, 15 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r9266@tinbook: jesse | 2004-11-15T20:24:28.381430Z + Previous merge forward clobbered 3.3 branch changes. + + + +------------------------------------------------------------------------ +r1903 | jesse | 2004-11-15 13:58:26 -0500 (Mon, 15 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/I18N/cs.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/da.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/de.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/en.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/en_malkovich.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/es.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/fi.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/fr.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/he.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/hu.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/it.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/ja.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/nl.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/no.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/pt_br.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/ru.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_cn.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_tw.po + + r9260@tinbook: jesse | 2004-11-15T18:58:48.392208Z + Reran string extraction for loc + +------------------------------------------------------------------------ +r1902 | jesse | 2004-11-15 13:57:52 -0500 (Mon, 15 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/configure.ac + + r9259@tinbook: jesse | 2004-11-15T17:21:40.789848Z + Added the database dump tool to the list of executable things + +------------------------------------------------------------------------ +r1901 | jesse | 2004-11-15 12:13:51 -0500 (Mon, 15 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomField + M /rt/branches/3.3-TESTING/lib/RT/I18N.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r9257@tinbook: jesse | 2004-11-15T17:13:44.237481Z + Merging forward from RT 3.2 bugfixes + +------------------------------------------------------------------------ +r1898 | autrijus | 2004-11-15 04:43:23 -0500 (Mon, 15 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/rt-dump-database.in + + r4175@not: autrijus | 2004-11-15T09:44:43.225379Z + * The XML-based dump format now finally round trips. + + +------------------------------------------------------------------------ +r1897 | autrijus | 2004-11-15 02:24:35 -0500 (Mon, 15 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/rt-dump-database.in + + r4166@not: autrijus | 2004-11-15T07:25:55.961743Z + * make "sbin/rt-dump-database 0" actually work. + + +------------------------------------------------------------------------ +r1896 | autrijus | 2004-11-15 01:30:04 -0500 (Mon, 15 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/rt-dump-database.in + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r4158@not: autrijus | 2004-11-15T06:31:13.491985Z + * Switch the rt-dump-database format from YAML to XML::Simple. + + +------------------------------------------------------------------------ +r1894 | autrijus | 2004-11-14 12:11:20 -0500 (Sun, 14 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/factory + + r4106@not: autrijus | 2004-11-14T17:12:19.553522Z + * Make sbin/factory safe from strict and warnings. + + +------------------------------------------------------------------------ +r1893 | autrijus | 2004-11-14 09:23:53 -0500 (Sun, 14 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + + r4099@not: autrijus | 2004-11-14T14:25:10.934431Z + * It turns out that Apache::Log needs to be explicitly loaded + for MasonX::Apache2Handler to run. + + +------------------------------------------------------------------------ +r1892 | autrijus | 2004-11-14 01:02:18 -0500 (Sun, 14 Nov 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + + +------------------------------------------------------------------------ +r1891 | autrijus | 2004-11-14 01:01:46 -0500 (Sun, 14 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + + r4056@not: autrijus | 2004-11-14T05:55:16.343169Z + * The chown() syntax in Handler.pm was broken. + * Also removed an unneccessary capturing parenthesis. + + +------------------------------------------------------------------------ +r1890 | autrijus | 2004-11-14 01:01:21 -0500 (Sun, 14 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + + r4055@not: autrijus | 2004-11-14T05:54:37.364789Z + * Under static_source, we need to purge the component cache + each time we restart, so newer components may be reloaded. + + +------------------------------------------------------------------------ +r1889 | autrijus | 2004-11-14 01:00:58 -0500 (Sun, 14 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + + r3828@not: autrijus | 2004-11-11T04:38:07.819422Z + * Do not waste stat() calls on Callback elements. + * If $RT::DevelMode is not set, do not refresh Callbacks cache at all. + + +------------------------------------------------------------------------ +r1888 | autrijus | 2004-11-14 01:00:32 -0500 (Sun, 14 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + + r3827@not: autrijus | 2004-11-11T02:06:28.593023Z + * only exclude normal files, not directories. + + +------------------------------------------------------------------------ +r1887 | autrijus | 2004-11-14 01:00:09 -0500 (Sun, 14 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin + M /rt/branches/3.3-TESTING/etc + M /rt/branches/3.3-TESTING/lib + M /rt/branches/3.3-TESTING/lib/t + M /rt/branches/3.3-TESTING/sbin + + r3826@not: autrijus | 2004-11-11T02:05:00.289897Z + * set svn:ignore on directories to exclude generated files from + version control. + + +------------------------------------------------------------------------ +r1884 | jesse | 2004-11-13 18:01:01 -0500 (Sat, 13 Nov 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING/releng.cnf + +Bumping to 3.3.11 +------------------------------------------------------------------------ +r1882 | jesse | 2004-11-13 00:12:51 -0500 (Sat, 13 Nov 2004) | 10 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + D /rt/branches/3.3-TESTING/html/NoAuth/images/back_home.gif + D /rt/branches/3.3-TESTING/html/NoAuth/images/head_requestracker.gif + D /rt/branches/3.3-TESTING/html/NoAuth/images/rt.jpg + D /rt/branches/3.3-TESTING/html/NoAuth/images/spacer.gif + D /rt/branches/3.3-TESTING/html/NoAuth/images/squares_blue.gif + M /rt/branches/3.3-TESTING/lib/t/06mailgateway.pl.in + + r9222@tinbook: jesse | 2004-11-13T03:09:38.303870Z + Core: + + * Removed images that weren't used anymore + + Configuration: + + * Fixed RTLogo configuration variable to actually display RT's logo. + + +------------------------------------------------------------------------ +r1881 | jesse | 2004-11-13 00:12:26 -0500 (Sat, 13 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/Elements/CustomFieldTabs + + r9221@tinbook: jesse | 2004-11-13T02:43:58.587708Z + No longer show the "Applies To" tab for user and group Custom Fields. + + +------------------------------------------------------------------------ +r1880 | jesse | 2004-11-13 00:11:58 -0500 (Sat, 13 Nov 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + + r9220@tinbook: jesse | 2004-11-13T02:42:34.101313Z + Those variables need to have the RT namespace. + + + + +------------------------------------------------------------------------ +r1879 | jesse | 2004-11-13 00:11:31 -0500 (Sat, 13 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + + r9219@tinbook: jesse | 2004-11-13T00:28:50.936425Z + Made the automatic cache flushing configurable. + + +------------------------------------------------------------------------ +r1878 | jesse | 2004-11-13 00:11:00 -0500 (Sat, 13 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + + r9218@tinbook: jesse | 2004-11-12T03:08:16.964082Z + Refactored the column map to only initialize itself once, rather than every time it's called + + +------------------------------------------------------------------------ +r1877 | autrijus | 2004-11-11 23:51:18 -0500 (Thu, 11 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/Callback + + r3828@not: autrijus | 2004-11-11T04:38:07.819422Z + * Do not waste stat() calls on Callback elements. + * If $RT::DevelMode is not set, do not refresh Callbacks cache at all. + + +------------------------------------------------------------------------ +r1876 | autrijus | 2004-11-11 23:51:01 -0500 (Thu, 11 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + + r3827@not: autrijus | 2004-11-11T02:06:28.593023Z + * only exclude normal files, not directories. + + +------------------------------------------------------------------------ +r1875 | autrijus | 2004-11-11 23:47:44 -0500 (Thu, 11 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin + M /rt/branches/3.3-TESTING/etc + M /rt/branches/3.3-TESTING/lib + M /rt/branches/3.3-TESTING/lib/t + M /rt/branches/3.3-TESTING/sbin + + r3826@not: autrijus | 2004-11-11T02:05:00.289897Z + * set svn:ignore on directories to exclude generated files from + version control. + + +------------------------------------------------------------------------ +r1800 | autrijus | 2004-11-10 08:50:55 -0500 (Wed, 10 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/lib/RT.pm.in + + r3590@not: autrijus | 2004-11-10T13:52:05.548584Z + * Flush cache at end of each request. + * Defeat perlbug that mangles (caller(0))[1] wheneter $^P is set by Module::Refresh. + + +------------------------------------------------------------------------ +r1796 | autrijus | 2004-11-10 08:15:51 -0500 (Wed, 10 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/lib/RT/ACE_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Group_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Link_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Links_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Template_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Users_Overlay.pm + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r3588@not: autrijus | 2004-11-10T13:16:02.416034Z + * Module::Refresh is now enabled by default for all HTTPD handlers + when $RT::DevelMode is set to true. + + +------------------------------------------------------------------------ +r1789 | jesse | 2004-11-10 07:58:47 -0500 (Wed, 10 Nov 2004) | 12 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + M /rt/branches/3.3-TESTING/lib/RT/Action/SendEmail.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + + r9043@tinbook: jesse | 2004-11-10T12:55:28.022711Z + r9040@tinbook: jesse | 2004-11-10T12:52:28.271911Z + RT-Ticket: 4624 + RT-Status: resolved + RT-Update: correspond + + Provide more control over how autogenerated mail gets sent out via RT. + + + + + +------------------------------------------------------------------------ +r1788 | jesse | 2004-11-10 07:58:22 -0500 (Wed, 10 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + + r9042@tinbook: jesse | 2004-11-10T12:55:27.433932Z + r8971@tinbook: jesse | 2004-11-10T02:24:26.255370Z + Fixed the MaxAttachmentSize variable name in comments. Thanks to Graham Dunn + + +------------------------------------------------------------------------ +r1786 | jesse | 2004-11-10 07:38:04 -0500 (Wed, 10 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + + r9037@tinbook: jesse | 2004-11-10T12:38:52.925002Z + * $ was missing on the DevelMode option + +------------------------------------------------------------------------ +r1779 | autrijus | 2004-11-10 05:09:04 -0500 (Wed, 10 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r3567@not: autrijus | 2004-11-10T10:09:08.775089Z + * Add Module::Refresh as a dependency. + + +------------------------------------------------------------------------ +r1778 | autrijus | 2004-11-10 05:08:41 -0500 (Wed, 10 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + + r3566@not: autrijus | 2004-11-10T10:08:56.876914Z + * Under developer mode, do not let Mason cache object files on var/. + + +------------------------------------------------------------------------ +r1777 | autrijus | 2004-11-10 05:08:17 -0500 (Wed, 10 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/html/Elements/Callback + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/ParseFormat + M /rt/branches/3.3-TESTING/html/Elements/Header + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxStart + M /rt/branches/3.3-TESTING/lib/RT/CurrentUser.pm + M /rt/branches/3.3-TESTING/lib/RT.pm.in + + r3565@not: autrijus | 2004-11-10T10:08:34.482570Z + * Various warning avoidance patches. + + +------------------------------------------------------------------------ +r1767 | jesse | 2004-11-09 21:01:21 -0500 (Tue, 09 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + + r8969@tinbook: jesse | 2004-11-10T02:01:53.054185Z + Fixing DeveloperlMode -> DevelMode. Thanks to Reed Lowden for the catch. + + +------------------------------------------------------------------------ +r1766 | jesse | 2004-11-09 03:28:53 -0500 (Tue, 09 Nov 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/Makefile.in + M /rt/branches/3.3-TESTING/README + M /rt/branches/3.3-TESTING/bin/mason_handler.fcgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.scgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.svc.in + M /rt/branches/3.3-TESTING/bin/rt-crontool.in + M /rt/branches/3.3-TESTING/bin/rt-mailgate.in + M /rt/branches/3.3-TESTING/bin/rt.in + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/Objects.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/index.html + M /rt/branches/3.3-TESTING/html/Admin/Elements/AddCustomFieldValue + M /rt/branches/3.3-TESTING/html/Admin/Elements/CreateUserCalled + M /rt/branches/3.3-TESTING/html/Admin/Elements/CustomFieldTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFieldValues + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditQueueWatchers + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditScrip + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditScrips + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditTemplates + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditUserComments + M /rt/branches/3.3-TESTING/html/Admin/Elements/GlobalCustomFieldTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/GroupTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/Header + M /rt/branches/3.3-TESTING/html/Admin/Elements/ListGlobalCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/ListGlobalScrips + M /rt/branches/3.3-TESTING/html/Admin/Elements/ModifyTemplate + M /rt/branches/3.3-TESTING/html/Admin/Elements/ObjectCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/PickCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/PickObjects + M /rt/branches/3.3-TESTING/html/Admin/Elements/QueueRightsForUser + M /rt/branches/3.3-TESTING/html/Admin/Elements/QueueTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectCustomFieldLookupType + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectCustomFieldType + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectGroups + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyGroup + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyQueue + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyUser + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectNewGroupMembers + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectRights + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScrip + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScripAction + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScripCondition + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectSingleOrMultiple + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectStage + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectTemplate + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectUsers + M /rt/branches/3.3-TESTING/html/Admin/Elements/SystemTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/ToolTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/UserTabs + M /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Groups.html + M /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Queue-Tickets.html + M /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Queue-Transactions.html + M /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Users.html + M /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/index.html + M /rt/branches/3.3-TESTING/html/Admin/Global/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Scrip.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Scrips.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Template.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Templates.html + M /rt/branches/3.3-TESTING/html/Admin/Global/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Global/index.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/CustomFields.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/History.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/Members.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/index.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/CustomField.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/CustomFields.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/People.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Scrip.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Scrips.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Template.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Templates.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/index.html + M /rt/branches/3.3-TESTING/html/Admin/Tools/Configuration.html + M /rt/branches/3.3-TESTING/html/Admin/Tools/index.html + M /rt/branches/3.3-TESTING/html/Admin/Users/CustomFields.html + M /rt/branches/3.3-TESTING/html/Admin/Users/History.html + M /rt/branches/3.3-TESTING/html/Admin/Users/Memberships.html + M /rt/branches/3.3-TESTING/html/Admin/Users/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Users/index.html + M /rt/branches/3.3-TESTING/html/Admin/autohandler + M /rt/branches/3.3-TESTING/html/Admin/index.html + M /rt/branches/3.3-TESTING/html/Approvals/Display.html + M /rt/branches/3.3-TESTING/html/Approvals/Elements/Approve + M /rt/branches/3.3-TESTING/html/Approvals/Elements/PendingMyApproval + M /rt/branches/3.3-TESTING/html/Approvals/Elements/ShowDependency + M /rt/branches/3.3-TESTING/html/Approvals/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Approvals/index.html + M /rt/branches/3.3-TESTING/html/Download/CustomFieldValue/dhandler + M /rt/branches/3.3-TESTING/html/Download/Tabular/dhandler + M /rt/branches/3.3-TESTING/html/Elements/BevelBoxRaisedEnd + M /rt/branches/3.3-TESTING/html/Elements/BevelBoxRaisedStart + M /rt/branches/3.3-TESTING/html/Elements/Callback + M /rt/branches/3.3-TESTING/html/Elements/Checkbox + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Header + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/ParseFormat + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Row + M /rt/branches/3.3-TESTING/html/Elements/CreateTicket + M /rt/branches/3.3-TESTING/html/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldBinary + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldFreeform + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldImage + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldSelect + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldText + M /rt/branches/3.3-TESTING/html/Elements/EditLinks + M /rt/branches/3.3-TESTING/html/Elements/Error + M /rt/branches/3.3-TESTING/html/Elements/Footer + M /rt/branches/3.3-TESTING/html/Elements/GotoTicket + M /rt/branches/3.3-TESTING/html/Elements/Header + M /rt/branches/3.3-TESTING/html/Elements/ListActions + M /rt/branches/3.3-TESTING/html/Elements/Login + M /rt/branches/3.3-TESTING/html/Elements/Menu + M /rt/branches/3.3-TESTING/html/Elements/MessageBox + M /rt/branches/3.3-TESTING/html/Elements/MyRequests + M /rt/branches/3.3-TESTING/html/Elements/MyTickets + M /rt/branches/3.3-TESTING/html/Elements/PageLayout + M /rt/branches/3.3-TESTING/html/Elements/QueryString + M /rt/branches/3.3-TESTING/html/Elements/QuickCreate + M /rt/branches/3.3-TESTING/html/Elements/Quicksearch + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + M /rt/branches/3.3-TESTING/html/Elements/Refresh + M /rt/branches/3.3-TESTING/html/Elements/ScrubHTML + M /rt/branches/3.3-TESTING/html/Elements/Section + M /rt/branches/3.3-TESTING/html/Elements/SelectAttachmentField + M /rt/branches/3.3-TESTING/html/Elements/SelectBoolean + M /rt/branches/3.3-TESTING/html/Elements/SelectCustomFieldOperator + M /rt/branches/3.3-TESTING/html/Elements/SelectCustomFieldValue + M /rt/branches/3.3-TESTING/html/Elements/SelectDate + M /rt/branches/3.3-TESTING/html/Elements/SelectDateRelation + M /rt/branches/3.3-TESTING/html/Elements/SelectDateType + M /rt/branches/3.3-TESTING/html/Elements/SelectEqualityOperator + M /rt/branches/3.3-TESTING/html/Elements/SelectGroups + M /rt/branches/3.3-TESTING/html/Elements/SelectLang + M /rt/branches/3.3-TESTING/html/Elements/SelectLinkType + M /rt/branches/3.3-TESTING/html/Elements/SelectMatch + M /rt/branches/3.3-TESTING/html/Elements/SelectNewTicketQueue + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + M /rt/branches/3.3-TESTING/html/Elements/SelectQueue + M /rt/branches/3.3-TESTING/html/Elements/SelectResultsPerPage + M /rt/branches/3.3-TESTING/html/Elements/SelectSortOrder + M /rt/branches/3.3-TESTING/html/Elements/SelectStatus + M /rt/branches/3.3-TESTING/html/Elements/SelectTicketSortBy + M /rt/branches/3.3-TESTING/html/Elements/SelectTicketTypes + M /rt/branches/3.3-TESTING/html/Elements/SelectUsers + M /rt/branches/3.3-TESTING/html/Elements/SelectWatcherType + M /rt/branches/3.3-TESTING/html/Elements/SetupSessionCookie + M /rt/branches/3.3-TESTING/html/Elements/ShowCustomFieldImage + M /rt/branches/3.3-TESTING/html/Elements/ShowCustomFields + M /rt/branches/3.3-TESTING/html/Elements/ShowLink + M /rt/branches/3.3-TESTING/html/Elements/ShowLinks + M /rt/branches/3.3-TESTING/html/Elements/ShowMemberships + M /rt/branches/3.3-TESTING/html/Elements/SimpleSearch + M /rt/branches/3.3-TESTING/html/Elements/Submit + M /rt/branches/3.3-TESTING/html/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/Elements/TitleBox + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxEnd + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxStart + M /rt/branches/3.3-TESTING/html/NoAuth/Logout.html + M /rt/branches/3.3-TESTING/html/NoAuth/Reminder.html + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/queue/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/queue/ns + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/attachments + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/history + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/links + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/user/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/user/ns + M /rt/branches/3.3-TESTING/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/3.3-TESTING/html/REST/1.0/autohandler + M /rt/branches/3.3-TESTING/html/REST/1.0/dhandler + M /rt/branches/3.3-TESTING/html/REST/1.0/logout + M /rt/branches/3.3-TESTING/html/REST/1.0/search/dhandler + M /rt/branches/3.3-TESTING/html/REST/1.0/search/ticket + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/comment + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/link + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/merge + M /rt/branches/3.3-TESTING/html/Search/Build.html + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/html/Search/Edit.html + M /rt/branches/3.3-TESTING/html/Search/Elements/BuildFormatString + M /rt/branches/3.3-TESTING/html/Search/Elements/DisplayOptions + M /rt/branches/3.3-TESTING/html/Search/Elements/EditFormat + M /rt/branches/3.3-TESTING/html/Search/Elements/EditQuery + M /rt/branches/3.3-TESTING/html/Search/Elements/EditSearches + M /rt/branches/3.3-TESTING/html/Search/Elements/NewListActions + M /rt/branches/3.3-TESTING/html/Search/Elements/PickBasics + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCFs + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCriteria + M /rt/branches/3.3-TESTING/html/Search/Elements/SearchPrivacy + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectAndOr + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectGroup + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectLinks + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectPersonType + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectSearchObject + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectSearchesForObjects + M /rt/branches/3.3-TESTING/html/Search/Results.html + M /rt/branches/3.3-TESTING/html/Search/Results.rdf + M /rt/branches/3.3-TESTING/html/Search/Results.tsv + M /rt/branches/3.3-TESTING/html/SelfService/Attachment/dhandler + M /rt/branches/3.3-TESTING/html/SelfService/Closed.html + M /rt/branches/3.3-TESTING/html/SelfService/Create.html + M /rt/branches/3.3-TESTING/html/SelfService/Display.html + M /rt/branches/3.3-TESTING/html/SelfService/Elements/GotoTicket + M /rt/branches/3.3-TESTING/html/SelfService/Elements/Header + M /rt/branches/3.3-TESTING/html/SelfService/Elements/MyRequests + M /rt/branches/3.3-TESTING/html/SelfService/Elements/Tabs + M /rt/branches/3.3-TESTING/html/SelfService/Error.html + M /rt/branches/3.3-TESTING/html/SelfService/Prefs.html + M /rt/branches/3.3-TESTING/html/SelfService/Update.html + M /rt/branches/3.3-TESTING/html/SelfService/index.html + M /rt/branches/3.3-TESTING/html/Ticket/Attachment/dhandler + M /rt/branches/3.3-TESTING/html/Ticket/Create.html + M /rt/branches/3.3-TESTING/html/Ticket/Display.html + M /rt/branches/3.3-TESTING/html/Ticket/Elements/AddWatchers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/BulkLinks + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditBasics + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditDates + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditPeople + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditWatchers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/FindAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/LoadTextAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/PreviewScrips + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowBasics + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowCustomFields + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowDates + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowDependencies + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowGroupMembers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowHistory + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMemberOf + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMembers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageHeaders + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageStanza + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowPeople + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowReferences + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowRequestor + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowSummary + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowTransaction + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowTransactionAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowUserEntry + M /rt/branches/3.3-TESTING/html/Ticket/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Ticket/History.html + M /rt/branches/3.3-TESTING/html/Ticket/Modify.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyAll.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyDates.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyLinks.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyPeople.html + M /rt/branches/3.3-TESTING/html/Ticket/ShowEmailRecord.html + M /rt/branches/3.3-TESTING/html/Ticket/Update.html + M /rt/branches/3.3-TESTING/html/Tools/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Tools/MyDay.html + M /rt/branches/3.3-TESTING/html/Tools/Offline.html + M /rt/branches/3.3-TESTING/html/User/Delegation.html + M /rt/branches/3.3-TESTING/html/User/Elements/DelegateRights + M /rt/branches/3.3-TESTING/html/User/Elements/GroupTabs + M /rt/branches/3.3-TESTING/html/User/Elements/Tabs + M /rt/branches/3.3-TESTING/html/User/Groups/Members.html + M /rt/branches/3.3-TESTING/html/User/Groups/Modify.html + M /rt/branches/3.3-TESTING/html/User/Groups/index.html + M /rt/branches/3.3-TESTING/html/User/Prefs.html + M /rt/branches/3.3-TESTING/html/autohandler + M /rt/branches/3.3-TESTING/html/index.html + M /rt/branches/3.3-TESTING/html/l + M /rt/branches/3.3-TESTING/lib/RT/ACE.pm + M /rt/branches/3.3-TESTING/lib/RT/ACE_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/AutoOpen.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Autoreply.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/CreateTickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/EscalatePriority.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Notify.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/NotifyAsComment.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/RecordComment.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/RecordCorrespondence.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/ResolveMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/SendEmail.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/SetPriority.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/UserDefined.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Base.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/AnyTransaction.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/BeforeDue.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/Overdue.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/OwnerChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/PriorityChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/PriorityExceeds.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/QueueChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/StatusChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/UserDefined.pm + M /rt/branches/3.3-TESTING/lib/RT/CurrentUser.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Date.pm + M /rt/branches/3.3-TESTING/lib/RT/EmailParser.pm + M /rt/branches/3.3-TESTING/lib/RT/Group.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Group_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Handle.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/cs.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/i_default.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/CLI.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Auth/GnuPG.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Auth/MailFrom.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Filter/SpamAssassin.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/REST.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/Link.pm + M /rt/branches/3.3-TESTING/lib/RT/Link_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Links.pm + M /rt/branches/3.3-TESTING/lib/RT/Links_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomField.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/ActiveTicketsInQueue.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/FromSQL.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/SearchBuilder.pm + M /rt/branches/3.3-TESTING/lib/RT/System.pm + M /rt/branches/3.3-TESTING/lib/RT/Template.pm + M /rt/branches/3.3-TESTING/lib/RT/Template_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/URI/base.pm + M /rt/branches/3.3-TESTING/lib/RT/URI/fsck_com_rt.pm + M /rt/branches/3.3-TESTING/lib/RT/URI.pm + M /rt/branches/3.3-TESTING/lib/RT/User.pm + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Users.pm + M /rt/branches/3.3-TESTING/lib/RT/Users_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT.pm.in + M /rt/branches/3.3-TESTING/lib/t/06mailgateway.pl.in + M /rt/branches/3.3-TESTING/sbin/extract-message-catalog + M /rt/branches/3.3-TESTING/sbin/extract_pod_tests + M /rt/branches/3.3-TESTING/sbin/factory + M /rt/branches/3.3-TESTING/sbin/license_tag + M /rt/branches/3.3-TESTING/sbin/regression_harness + M /rt/branches/3.3-TESTING/sbin/rt-dump-database.in + M /rt/branches/3.3-TESTING/sbin/rt-setup-database.in + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r8965@tinbook: jesse | 2004-11-09T08:25:30.422838Z + Updated license tagging and folding for license tagging + + * No functionality changes + + + + +------------------------------------------------------------------------ +r1765 | jesse | 2004-11-09 02:55:47 -0500 (Tue, 09 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + + r8963@tinbook: jesse | 2004-11-09T07:55:26.294077Z + Just formatting changes. ran perltidy on HasRight. + + + +------------------------------------------------------------------------ +r1763 | jesse | 2004-11-09 00:46:40 -0500 (Tue, 09 Nov 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r8959@tinbook: jesse | 2004-11-09T05:47:13.371897Z + Switched to using Cache::Simple::TimedExpiry for our ACL cache, rather + than our overly convoluted (and slower) ACL cache code in Prinicpal_Overlay.pm + + SearchBuilder already depends on C::S::TE, so this isn't a new dep + + +------------------------------------------------------------------------ +r1759 | jesse | 2004-11-08 23:58:09 -0500 (Mon, 08 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + + r8951@tinbook: jesse | 2004-11-09T04:59:07.816904Z + Fixed a comment about the static_source directive for mason. Thanks to matthewd + + +------------------------------------------------------------------------ +r1758 | jesse | 2004-11-08 22:47:40 -0500 (Mon, 08 Nov 2004) | 16 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/configure.ac + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + M /rt/branches/3.3-TESTING/html/Elements/PageLayout + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxEnd + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowHistory + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + + r8942@tinbook: jesse | 2004-11-08T17:22:08.032229Z + Web: + * Switched back to manual buffer flushing, as this will + improve performance and help future-proof RT against a mason update + * Added several manual buffer flushing points to help with the user + experience during page display + * Switched to using mason's "static_source" directive, which stops mason + from trying to guess about which pages need to be reload from disk. + (Now you need to restart the webserver to see changes) + Core: + * New --with-developer-mode configuration flag. Right now, it just + turns mason static_source off, but in the future, it will enable other + developer-only features. + + + +------------------------------------------------------------------------ +r1757 | jesse | 2004-11-08 22:47:13 -0500 (Mon, 08 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Base.pm + + r8941@tinbook: jesse | 2004-11-08T17:18:03.357715Z + Added a bit of documentation to RT::Base; removed an unused line of code + + +------------------------------------------------------------------------ +r1753 | jesse | 2004-11-08 08:25:36 -0500 (Mon, 08 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + + r8935@tinbook: jesse | 2004-11-08T13:18:04.774918Z + * Turning off the forking in standalone_httpd. It was never a win + +------------------------------------------------------------------------ +r1752 | autrijus | 2004-11-08 07:53:51 -0500 (Mon, 08 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + + r3280@not: autrijus | 2004-11-08T12:13:28.529608Z + * make kill -HUP work sanely. + + +------------------------------------------------------------------------ +r1751 | autrijus | 2004-11-08 07:53:30 -0500 (Mon, 08 Nov 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + + +------------------------------------------------------------------------ +r1750 | autrijus | 2004-11-08 07:53:00 -0500 (Mon, 08 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + D /rt/branches/3.3-TESTING/spec + + r1748@not: autrijus | 2004-11-08T08:29:17.162697Z + * remove the now-empty spec/ directory. + + +------------------------------------------------------------------------ +r1749 | autrijus | 2004-11-08 07:52:36 -0500 (Mon, 08 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + A /rt/branches/3.3-TESTING/docs/design_docs/3.3-schema-redesign.txt + D /rt/branches/3.3-TESTING/spec/schema.txt + + r1747@not: autrijus | 2004-11-08T08:28:53.206839Z + * move the design spec from spec/ under the docs/design_docs/ space where it belongs. + + +------------------------------------------------------------------------ +r1748 | autrijus | 2004-11-08 07:52:03 -0500 (Mon, 08 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/spec/schema.txt + + r1746@not: autrijus | 2004-11-08T08:27:45.676219Z + * V7 of redesign schema, incoporating many more comments and + the new, clkao-inspired fields. + + +------------------------------------------------------------------------ +r1744 | jesse | 2004-11-07 11:26:35 -0500 (Sun, 07 Nov 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/configure.ac + M /rt/branches/3.3-TESTING/lib/t/02regression.t.in + A /rt/branches/3.3-TESTING/lib/t/08web_cf.pl.in + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r6237@tinbook: jesse | 2004-11-07T16:27:42.200967Z + New web-based testing for image custom field creation + (upload on create, display in search result listings) + + -Autrijus Tang + + + +------------------------------------------------------------------------ +r1743 | jesse | 2004-11-07 10:10:03 -0500 (Sun, 07 Nov 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + + +------------------------------------------------------------------------ +r1742 | jesse | 2004-11-07 10:09:36 -0500 (Sun, 07 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Elements/BuildFormatString + + r6225@tinbook: jesse | 2004-11-07T14:44:15.591492Z + Web + * Refactore BuildFormatString to simplify logic and improve reliability + + +------------------------------------------------------------------------ +r1741 | jesse | 2004-11-07 10:09:14 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Header + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Row + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + + r6201@tinbook: jesse | 2004-11-07T05:35:22.316024Z + Refactoring and restyling the Ticket List to present prettier tables with more human-readable names + + +------------------------------------------------------------------------ +r1740 | jesse | 2004-11-07 10:08:50 -0500 (Sun, 07 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectLinks + + r6200@tinbook: jesse | 2004-11-07T05:32:56.068727Z + Web: Fixed SelectLinks component to contain the right options and present the right human-readable names + + + +------------------------------------------------------------------------ +r1739 | jesse | 2004-11-07 10:08:29 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Elements/BuildFormatString + M /rt/branches/3.3-TESTING/html/Search/Elements/EditFormat + + r6199@tinbook: jesse | 2004-11-07T05:30:58.330526Z + Web UI: Refactored the logic which builds format strings to simplify code and present better human-readable names + + +------------------------------------------------------------------------ +r1738 | jesse | 2004-11-07 10:08:08 -0500 (Sun, 07 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Header + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + M /rt/branches/3.3-TESTING/html/Search/Results.html + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + + r6198@tinbook: jesse | 2004-11-07T04:18:22.934311Z + Devel: Changed severity of calling Principal->HasRight without a Right + +------------------------------------------------------------------------ +r1737 | jesse | 2004-11-07 10:05:16 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/Quicksearch + + r6197@tinbook: jesse | 2004-11-07T03:38:25.380100Z + Switching Quicksearch to use most standard CSS styles + + +------------------------------------------------------------------------ +r1736 | jesse | 2004-11-07 10:04:54 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + + r6196@tinbook: jesse | 2004-11-07T03:37:32.303504Z + Squash warnings when trying to check acls on nonexisten custom fields + + +------------------------------------------------------------------------ +r1735 | jesse | 2004-11-07 10:04:23 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r6195@tinbook: jesse | 2004-11-06T15:14:59.241373Z + Better handling of Record deletion confirmation messages. (To go with new searchbuilder fixes) + + +------------------------------------------------------------------------ +r1734 | autrijus | 2004-11-07 09:38:43 -0500 (Sun, 07 Nov 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + +* In query builder, parse custom fields by name. +* Generate all Link-type result cell callbacks from %LINKTYPEMAP. +* Display custom field contents, separated by newlines. +* For Image custom fields we also show a thumbnail. + + +------------------------------------------------------------------------ +r1731 | autrijus | 2004-11-07 09:32:12 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/html/Search/Build.html + + r10263@not: autrijus | 2004-11-07T14:15:05.153388Z + * one loc fix. + + +------------------------------------------------------------------------ +r1730 | autrijus | 2004-11-07 09:30:22 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt + A /rt/branches/3.3-TESTING/html/Search/Elements/EditQuery + M /rt/branches/3.3-TESTING/html/Search/Elements/EditSearches + M /rt/branches/3.3-TESTING/html/Search/Elements/PickBasics + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCriteria + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectAndOr + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectPersonType + + r10261@not: autrijus | 2004-11-07T08:55:02.919657Z + * loc and layout fixed. + + +------------------------------------------------------------------------ +r1729 | autrijus | 2004-11-07 09:30:06 -0500 (Sun, 07 Nov 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/html/Search/Build.html + + r10260@not: autrijus | 2004-11-07T08:54:20.330259Z + * Query builder now acts on multiple clauses. + * Close a potential XSS bug by escaping the clause naems. + * Refactor the clause display component. + + +------------------------------------------------------------------------ +r1728 | autrijus | 2004-11-07 09:29:51 -0500 (Sun, 07 Nov 2004) | 5 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Row + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + + r10256@not: autrijus | 2004-11-06T10:35:22.448152Z + * Escape ColumnMap return values properly to prevent cross-site scripting + attack. All HTML snippets are now returned as scalar references. + + +------------------------------------------------------------------------ +r1727 | autrijus | 2004-11-07 09:28:27 -0500 (Sun, 07 Nov 2004) | 5 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/Makefile.in + + r10253@not: autrijus | 2004-11-06T10:17:49.792085Z + * "make initdb" now an alias of "make initialize-database". + + + +------------------------------------------------------------------------ +r1726 | autrijus | 2004-11-07 09:26:14 -0500 (Sun, 07 Nov 2004) | 5 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/sbin/rt-setup-database.in + + r10252@not: autrijus | 2004-11-06T10:17:41.433720Z + * "make dropdb" on SQLite now works. + + + +------------------------------------------------------------------------ +r1725 | autrijus | 2004-11-07 09:22:06 -0500 (Sun, 07 Nov 2004) | 5 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFields.pm + M /rt/branches/3.3-TESTING/sbin/factory + + r10251@not: autrijus | 2004-11-06T10:17:29.202899Z + * fallouts from the OCFV schema change. + + + +------------------------------------------------------------------------ +r1724 | autrijus | 2004-11-07 09:17:03 -0500 (Sun, 07 Nov 2004) | 7 lines +Changed paths: + M /rt + A /rt/branches/3.3-TESTING/etc/upgrade/3.3.11 + A /rt/branches/3.3-TESTING/etc/upgrade/3.3.11/schema.Pg + A /rt/branches/3.3-TESTING/etc/upgrade/3.3.11/schema.mysql + + r10242@not: autrijus | 2004-11-06T06:59:58.274625Z + * Schema changes for Pg, SQLite, mysql and Oracle. + + r10243@not: autrijus | 2004-11-06T07:00:15.865682Z + * schema updater for Pg and mysql; Oracle comes later and SQLite is nontrivial. + + +------------------------------------------------------------------------ +r1723 | autrijus | 2004-11-07 09:16:15 -0500 (Sun, 07 Nov 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/etc/schema.Oracle + M /rt/branches/3.3-TESTING/etc/schema.Pg + M /rt/branches/3.3-TESTING/etc/schema.SQLite + M /rt/branches/3.3-TESTING/etc/schema.mysql + + r10242@not: autrijus | 2004-11-06T06:59:58.274625Z + * Schema changes for Pg, SQLite, mysql and Oracle. + + +------------------------------------------------------------------------ +r1721 | autrijus | 2004-11-05 06:43:18 -0500 (Fri, 05 Nov 2004) | 18 lines +Changed paths: + M /rt + M /rt/branches + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r10186@not (orig r1718): autrijus | 2004-11-05T08:56:10.440277Z + * Log::Dispatch wants ->warning, not ->warn. + + r10196@not: autrijus | 2004-11-05T11:41:58.476189Z + * Fixes to standalone_httpd: 'protocol' was not defined, and query_string + may be undefined too. (Supposedly fixed in HTTP::Server::Simple.) + + r10197@not: autrijus | 2004-11-05T11:42:20.621065Z + * Remove outdated comment. + + r10198@not: autrijus | 2004-11-05T11:43:55.045510Z + * Refactor getting-an-uploaded-file-into-cf into _UploadFile call + in Interface::Web; this unbreaks uploading a file cf on ticket creation. + * The "CustomField-x" keys in $Ticket->Create now take hash references + that contain CFV fields, eg. LargeContent, ContentType, Value. + + + +------------------------------------------------------------------------ +r1718 | autrijus | 2004-11-05 03:56:10 -0500 (Fri, 05 Nov 2004) | 3 lines +Changed paths: + M /rt + M /rt/branches + M /rt/branches/3.2-RELEASE + M /rt/branches/3.2-SYBASE-TESTING + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/PLATANO-EXPERIMENTAL-CSS + M /rt/branches/PLATANO-EXPERIMENTAL-CSS/etc/upgrade + +* Log::Dispatch wants ->warning, not ->warn. + + +------------------------------------------------------------------------ +r1716 | jesse | 2004-11-04 23:02:48 -0500 (Thu, 04 Nov 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r6175@tinbook: jesse | 2004-11-05T02:17:24.427390Z + Improved comments and folds in RT::Record + + + +------------------------------------------------------------------------ +r1715 | jesse | 2004-11-04 23:02:27 -0500 (Thu, 04 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r6174@tinbook: jesse | 2004-11-05T02:17:10.144816Z + When uploading image custom fields, they're handled as file descriptors, rather than scalars. Our old logic assumed that any ref was an array. Now we check for array refs explicitly. + + +------------------------------------------------------------------------ +r1714 | jesse | 2004-11-04 23:02:06 -0500 (Thu, 04 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + + r6173@tinbook: jesse | 2004-11-05T02:14:56.442006Z + Added a HUP handler for the standalone httpd (so you can kill -HUP it to reload) + + +------------------------------------------------------------------------ +r1713 | jesse | 2004-11-04 23:01:23 -0500 (Thu, 04 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/ShowCustomFields + + r6172@tinbook: jesse | 2004-11-05T02:14:19.720658Z + Improved list format for multiple custom field values + + +------------------------------------------------------------------------ +r1712 | jesse | 2004-11-04 23:00:28 -0500 (Thu, 04 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/CreateTicket + M /rt/branches/3.3-TESTING/html/Ticket/Create.html + + r6171@tinbook: jesse | 2004-11-05T02:14:02.424154Z + More form Names to make testing easier + + +------------------------------------------------------------------------ +r1711 | jesse | 2004-11-04 22:59:53 -0500 (Thu, 04 Nov 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFields + + r6170@tinbook: jesse | 2004-11-04T08:33:12.626307Z + Added a couple of form NAME elements, to ease testing + + +------------------------------------------------------------------------ +r1710 | jesse | 2004-11-04 22:59:24 -0500 (Thu, 04 Nov 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r6169@tinbook: jesse | 2004-11-04T08:32:13.034112Z + Added a Delete method to RT::Record so we get proper messages on object deletion + --Autrijus + + + +------------------------------------------------------------------------ +r1709 | jesse | 2004-11-01 00:55:09 -0500 (Mon, 01 Nov 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r6157@tinbook: jesse | 2004-11-01T04:52:49.078521Z + A patch from 3.2 accidentally cascaded forward + +------------------------------------------------------------------------ +r1708 | jesse | 2004-11-01 00:54:59 -0500 (Mon, 01 Nov 2004) | 11 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + + r6156@tinbook: jesse | 2004-11-01T04:47:06.225531Z + r6152@tinbook: jesse | 2004-11-01T04:43:38.864654Z + RT-Ticket: 6230 + RT-Status: resolved + RT-Update: correspond + + New "batch transactions" core from Ruslan. This update makes it much easier to use stock conditions for bulk updates + + + + +------------------------------------------------------------------------ +r1707 | jesse | 2004-11-01 00:54:47 -0500 (Mon, 01 Nov 2004) | 12 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r6155@tinbook: jesse | 2004-11-01T04:47:05.144200Z + r6151@tinbook: jesse | 2004-11-01T04:42:20.034865Z + RT-Ticket: 6242 + RT-Status: resolved + RT-Update: correspond + + There were a couple of bugs in the bulk update page that broke ticket linking. + (Among other things, the custom fields update functionality was completely broken. It's been disabled pending a new implementation) + + + + +------------------------------------------------------------------------ +r1704 | jesse | 2004-10-31 22:49:50 -0500 (Sun, 31 Oct 2004) | 10 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/PickCustomFields + + r6149@tinbook: jesse | 2004-11-01T03:50:49.511535Z + RT-Ticket: 6245 + RT-Status: resolved + RT-Update: correspond + + Global custom field editing in 3.3 had the wrong (hardcoded) URL target. + + + + +------------------------------------------------------------------------ +r1699 | jesse | 2004-10-27 18:01:49 -0400 (Wed, 27 Oct 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r6127@tinbook: jesse | 2004-10-27T22:02:28.387934Z + Bumping to 3.3.10 + + + +------------------------------------------------------------------------ +r1698 | jesse | 2004-10-27 04:06:56 -0400 (Wed, 27 Oct 2004) | 12 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + + r6121@tinbook: jesse | 2004-10-27T07:55:33.542549Z + r6115@tinbook: jesse | 2004-10-27T07:51:39.957035Z + RT-Ticket: 6219 + RT-Status: resolved + RT-Update: correspond + + Rebuilt RT::Tickets' watcher search logic to only use _one_ join to the users/groups table so as to create joins that can be computed in finite time. Theoretically, this makes watcher searching less powerful. In practice, it makes watcher searching a lot more possible. + + + + + +------------------------------------------------------------------------ +r1697 | jesse | 2004-10-27 04:06:29 -0400 (Wed, 27 Oct 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/TicketList + + r6120@tinbook: jesse | 2004-10-27T07:55:32.882088Z + r6109@tinbook: jesse | 2004-10-26T20:02:02.857695Z + Additional fixes for display of unlimited search results + + +------------------------------------------------------------------------ +r1696 | jesse | 2004-10-27 04:05:52 -0400 (Wed, 27 Oct 2004) | 10 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + + r6119@tinbook: jesse | 2004-10-27T07:55:32.408440Z + r6046@tinbook: jesse | 2004-10-19T05:21:18.567580Z + RT-Ticket: 6121 + RT-Status: resolved + RT-Update: correspond + + Fixed the name of the template used to notify non-privilged users when their password is changed + + + +------------------------------------------------------------------------ +r1695 | jesse | 2004-10-27 04:05:26 -0400 (Wed, 27 Oct 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/schema.Pg + M /rt/branches/3.3-TESTING/etc/upgrade/3.1.0/schema.Pg + + r6118@tinbook: jesse | 2004-10-27T07:55:31.895658Z + r6007@tinbook: jesse | 2004-10-14T21:47:50.297291Z + RT-Ticket: 6197 + RT-Status: resolved + + Removed a comment from the PostgreSQL schema files, as some versions of postgres fail to parse it well. + + + +------------------------------------------------------------------------ +r1694 | jesse | 2004-10-27 04:05:10 -0400 (Wed, 27 Oct 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Results.html + + r6117@tinbook: jesse | 2004-10-27T07:55:31.185793Z + r1994@tinbook: jesse | 2004-10-12T23:37:37.775608Z + Improved "stickiness" of queries. + Next/Prev navigation should be more consistently available now. + Most recent query should be available more consistently. + + + +------------------------------------------------------------------------ +r1692 | jesse | 2004-10-27 00:31:12 -0400 (Wed, 27 Oct 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/html/Ticket/Create.html + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowSummary + M /rt/branches/3.3-TESTING/html/Ticket/ModifyAll.html + M /rt/branches/3.3-TESTING/html/Ticket/Update.html + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + + r6113@tinbook: jesse | 2004-10-27T04:31:13.448231Z + Added support for recording transaction custom fields on ticket creation. + + +------------------------------------------------------------------------ +r1688 | jesse | 2004-10-23 18:05:14 -0400 (Sat, 23 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r6101@tinbook: jesse | 2004-10-23T22:05:06.396023Z + Bumping to 3.3.9 + +------------------------------------------------------------------------ +r1686 | jesse | 2004-10-23 17:50:32 -0400 (Sat, 23 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/Header + M /rt/branches/3.3-TESTING/html/Elements/PageLayout + M /rt/branches/3.3-TESTING/html/Elements/SelectEqualityOperator + M /rt/branches/3.3-TESTING/html/Elements/SelectNewTicketQueue + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + M /rt/branches/3.3-TESTING/html/Elements/SelectStatus + M /rt/branches/3.3-TESTING/html/Search/Elements/BuildFormatString + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectGroup + + r6093@tinbook: jesse | 2004-10-23T21:47:53.224532Z + A bunch of tiny fixes to the web ui to avoid warnings about uninitialized variables. + +------------------------------------------------------------------------ +r1685 | jesse | 2004-10-23 17:50:14 -0400 (Sat, 23 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/schema.SQLite + + r6092@tinbook: jesse | 2004-10-23T21:46:47.129210Z + Updated SQLite schema to current RT 3.3 versions + +------------------------------------------------------------------------ +r1684 | jesse | 2004-10-23 17:49:50 -0400 (Sat, 23 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/ACL_Overlay.pm + + r6091@tinbook: jesse | 2004-10-23T21:46:04.315427Z + Better checking for ACL queries on undefined objects (to avoid a warning). + +------------------------------------------------------------------------ +r1683 | jesse | 2004-10-23 17:49:38 -0400 (Sat, 23 Oct 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r6090@tinbook: jesse | 2004-10-23T21:44:41.851286Z + Fixed a warning when objects were created with no names + + +------------------------------------------------------------------------ +r1682 | jesse | 2004-10-23 17:49:25 -0400 (Sat, 23 Oct 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + + r6089@tinbook: jesse | 2004-10-23T21:43:19.939096Z + Fixed message returned on password change to not include md5 hash of password + + +------------------------------------------------------------------------ +r1681 | jesse | 2004-10-23 17:48:13 -0400 (Sat, 23 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r6088@tinbook: jesse | 2004-10-23T21:42:23.542584Z + Bumped DBIx::SearchBuilder required version, for new SQLite support + +------------------------------------------------------------------------ +r1680 | jesse | 2004-10-21 13:20:05 -0400 (Thu, 21 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/ACE.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/Group.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups.pm + M /rt/branches/3.3-TESTING/lib/RT/Link.pm + M /rt/branches/3.3-TESTING/lib/RT/Links.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomField.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips.pm + M /rt/branches/3.3-TESTING/lib/RT/Template.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions.pm + M /rt/branches/3.3-TESTING/lib/RT/User.pm + M /rt/branches/3.3-TESTING/lib/RT/Users.pm + M /rt/branches/3.3-TESTING/sbin/factory + + r6077@tinbook: jesse | 2004-10-21T17:20:26.237576Z + Core: integrated new factory code to allow more datamodel metadata to be collected + +------------------------------------------------------------------------ +r1679 | jesse | 2004-10-21 13:19:45 -0400 (Thu, 21 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + + r6076@tinbook: jesse | 2004-10-21T16:46:20.466296Z + ACL: Fixed logic in an ACL query so that it returns failure when handed an invalid object, rather than trying a bogus SQL query and failing. + +------------------------------------------------------------------------ +r1678 | jesse | 2004-10-20 19:27:13 -0400 (Wed, 20 Oct 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r6074@tinbook: jesse | 2004-10-20T23:26:48.112240Z + RT-Ticket: 5701 + RT-Status: resolved + RT-Update: correspond + + RT now prevents users from creating objects with 'Name' attributes that are numreric. + + +------------------------------------------------------------------------ +r1677 | jesse | 2004-10-20 18:56:16 -0400 (Wed, 20 Oct 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Attachment_Overlay.pm + + r6071@tinbook: jesse | 2004-10-20T22:56:43.545883Z + RT-Ticket: 6192 + RT-Status: update + + + Updated RT::Attachement::OriginalContent to use a better regexp for determining what's encoded and what's not. + + + +------------------------------------------------------------------------ +r1676 | jesse | 2004-10-20 18:55:57 -0400 (Wed, 20 Oct 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/I18N/nl.po + + r6070@tinbook: jesse | 2004-10-20T22:51:44.854897Z + RT-Ticket: 6123 + RT-Status: resolved + RT-Update: correspond + + + Updated the dutch translation. (As the translation hadn't been applied for a bit, some translations didn't apply cleanly.) + + +------------------------------------------------------------------------ +r1675 | jesse | 2004-10-20 18:34:32 -0400 (Wed, 20 Oct 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/Tools/Configuration.html + + r6064@tinbook: jesse | 2004-10-20T22:08:13.953728Z + Fixed a typo + + +------------------------------------------------------------------------ +r1674 | jesse | 2004-10-20 18:33:19 -0400 (Wed, 20 Oct 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + + r6063@tinbook: jesse | 2004-10-20T19:54:02.885732Z + RT-Ticket: 6180 + RT-Status: resolved + RT-Update: correspond + + If you have changed $MinimumPasswordLength to be greater than 6, RT's "GenerateRandomPassword" method now takes that into account + + + +------------------------------------------------------------------------ +r1673 | jesse | 2004-10-20 18:33:03 -0400 (Wed, 20 Oct 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/Tools/Configuration.html + + r6062@tinbook: jesse | 2004-10-20T19:46:00.816618Z + RT-Ticket: 6188 + RT-Status: resolved + RT-Update: correspond + + RT squelches passwords in the configuration summary page. It no longer + squleches "RT::MinimumPasswordLength" + + +------------------------------------------------------------------------ +r1672 | jesse | 2004-10-20 18:32:48 -0400 (Wed, 20 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r6061@tinbook: jesse | 2004-10-20T19:27:22.698792Z + Minor cleanups to record.pm + +------------------------------------------------------------------------ +r1671 | alexmv | 2004-10-20 15:51:36 -0400 (Wed, 20 Oct 2004) | 2 lines +Changed paths: + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + +Remove wayward '+' + +------------------------------------------------------------------------ +r1670 | jesse | 2004-10-20 15:20:19 -0400 (Wed, 20 Oct 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/EmailParser.pm + + r6056@tinbook: jesse | 2004-10-20T19:20:39.940786Z + RT-Ticket: 5594 + RT-Status: resolved + RT-UpdateType: correspond + + EmailParser updates applied to RT 3.3 to fix subject lines that are encoded and multi-line + + +------------------------------------------------------------------------ +r1669 | jesse | 2004-10-20 15:19:59 -0400 (Wed, 20 Oct 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + + r6055@tinbook: jesse | 2004-10-20T18:56:31.219026Z + RT-Ticket: 5569 + RT-Status: resolved + + Status is nowdefinablein the RT_Config file. + + +------------------------------------------------------------------------ +r1666 | jesse | 2004-10-20 01:47:04 -0400 (Wed, 20 Oct 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Header + M /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Row + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + + r6051@tinbook: jesse | 2004-10-20T05:39:54.597284Z + RT-Ticket: 5837 + RT-Status: resolved + RT-Update: correspond + + Moved more ticket listing style to the CSS and out of the html, per the suggestion of Dirk Pape + + + +------------------------------------------------------------------------ +r1665 | jesse | 2004-10-20 01:46:54 -0400 (Wed, 20 Oct 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + + r6050@tinbook: jesse | 2004-10-20T05:33:26.027966Z + RT-Ticket: 5729 + RT-Status: resolved + RT-Action: correspond + + Patch fixes issue with multibyte characters escaping in URLs. --Ruslan + + + +------------------------------------------------------------------------ +r1663 | jesse | 2004-10-19 01:23:26 -0400 (Tue, 19 Oct 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/config.layout + M /rt/branches/3.3-TESTING/m4/rt_layout.m4 + + r6048@tinbook: jesse | 2004-10-19T05:24:15.256721Z + RT-Ticket: 6198 + RT-Status: resolved + RT-Update: correspond + + Applied a patch to add an fhs-compliant RT layout and fix some of the layout parsing. + + +------------------------------------------------------------------------ +r1661 | jesse | 2004-10-19 01:17:39 -0400 (Tue, 19 Oct 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + + r6044@tinbook: jesse | 2004-10-19T05:18:31.025176Z + RT-Ticket: 6154 + RT-Status: resolved + RT-Update: reply + + Owner listings now sort alphabetically + + +------------------------------------------------------------------------ +r1660 | jesse | 2004-10-19 01:10:02 -0400 (Tue, 19 Oct 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT.pm.in + + r6042@tinbook: jesse | 2004-10-19T05:10:45.782060Z + RT-Ticket: 6199 + RT-Status: resolved + RT-Update: correspond + + Formatting fixes to RT.pm + + +------------------------------------------------------------------------ +r1659 | jesse | 2004-10-18 13:47:29 -0400 (Mon, 18 Oct 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/etc/initialdata + + r6039@tinbook: jesse | 2004-10-18T17:48:14.238206Z + RT-Ticket: 5336 + RT-Status: resolved + + Approval template corrected + + +------------------------------------------------------------------------ +r1657 | jesse | 2004-10-15 14:25:31 -0400 (Fri, 15 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r6014@tinbook: jesse | 2004-10-15T18:26:19.439204Z + Bumping to 3.3.8 + +------------------------------------------------------------------------ +r1656 | jesse | 2004-10-15 13:56:50 -0400 (Fri, 15 Oct 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + A /rt/branches/3.3-TESTING/html/Admin/Elements/GlobalCustomFieldTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/GroupTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/ObjectCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/QueueTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/SystemTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/UserTabs + A /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields + A /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Groups.html + A /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Queue-Tickets.html + A /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Queue-Transactions.html + A /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/Users.html + A /rt/branches/3.3-TESTING/html/Admin/Global/CustomFields/index.html + M /rt/branches/3.3-TESTING/html/Admin/Global/index.html + + r6009@tinbook: jesse | 2004-10-15T17:57:36.162346Z + Administrative menu overhaul to sanitize custom field configuration. + + +------------------------------------------------------------------------ +r1650 | jesse | 2004-10-12 17:01:07 -0400 (Tue, 12 Oct 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r1992@tinbook: jesse | 2004-10-12T21:00:33.006657Z + RT-Ticket: 6182 + RT-Status: resolved + + +------------------------------------------------------------------------ +r1649 | jesse | 2004-10-11 17:10:40 -0400 (Mon, 11 Oct 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + + r1985@tinbook: jesse | 2004-10-11T20:26:31.046336Z + Fixed a bug in the merge from 3.2 that broke ticket transaction searching; added support for Ticket "Updated" as a synonym for TransactionDate as a search criterion + +------------------------------------------------------------------------ +r1648 | jesse | 2004-10-10 00:30:21 -0400 (Sun, 10 Oct 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/configure.ac + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + M /rt/branches/3.3-TESTING/html/Search/Results.tsv + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Ticket/ModifyAll.html + M /rt/branches/3.3-TESTING/lib/RT/Action/SendEmail.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/3.3-TESTING/sbin/rt-setup-database.in + + r1651@tinbook: jesse | 2004-10-10T04:24:17.077128Z + + r1652@tinbook: jesse | 2004-10-10T04:30:49.336195Z + r1650@tinbook: jesse | 2004-10-10T04:23:58.456281Z + + + +------------------------------------------------------------------------ +r1603 | jesse | 2004-09-30 22:45:46 -0400 (Thu, 30 Sep 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/Menu + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + + ---------------------------------------------------------------------- + r10434@tinbook: jesse | 2004-10-01T02:43:47.012515Z + Better cssification of the menus + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1566 | jesse | 2004-09-27 17:20:14 -0400 (Mon, 27 Sep 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/Menu + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + + r10391@tinbook: jesse | 2004-09-27T21:17:31.817589Z + RT-Ticket: 6139 + RT-Status: resolved + RT-Update-Type: correspond + + Applied patch from Oliver Thomas to move more menu styling to the external CSS file and out of the html. + + +------------------------------------------------------------------------ +r1556 | jesse | 2004-09-23 15:14:29 -0400 (Thu, 23 Sep 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowPeople + + r10336@Jesse-Vincents-Computer: jesse | 2004-09-23T06:45:36.828724Z + + r10350@Jesse-Vincents-Computer: jesse | 2004-09-23T19:13:34.578717Z + Use ShowUserEntry for ShowPeople + + +------------------------------------------------------------------------ +r1554 | jesse | 2004-09-23 00:30:24 -0400 (Thu, 23 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r1867@bitsy: jesse | 2004-09-23T02:39:51.040258Z + Bumping to 3.3.7 + +------------------------------------------------------------------------ +r1553 | jesse | 2004-09-23 00:30:04 -0400 (Thu, 23 Sep 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r1865@bitsy: jesse | 2004-09-23T02:28:19.315048Z + + r1866@bitsy: jesse | 2004-09-23T02:38:19.257248Z + DBIx::SearchBuilder dependency incremented + +------------------------------------------------------------------------ +r1552 | tla | 2004-09-22 23:54:00 -0400 (Wed, 22 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING/lib/t/07acl.pl.in + +This now actually tests the SelectOwner functionality change. + + +------------------------------------------------------------------------ +r1551 | tla | 2004-09-22 18:44:28 -0400 (Wed, 22 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + M /rt/branches/3.3-TESTING/lib/t/07acl.pl.in + +SelectOwner can now be passed a list of queues which the user may see. + + +------------------------------------------------------------------------ +r1550 | tla | 2004-09-22 17:32:53 -0400 (Wed, 22 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING/lib/t/07acl.pl.in + +Add sleeps for the right granting; try a pattern-match that works this time. + + +------------------------------------------------------------------------ +r1546 | autrijus | 2004-09-22 13:16:22 -0400 (Wed, 22 Sep 2004) | 8 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + + r7965@not: autrijus | 2004-09-21T13:18:07.917938Z + + + + r8021@not: autrijus | 2004-09-22T17:15:50.576469Z + * On mod_perl1 with root directory, ->filename is empty, not '/', + hence breaking index.html handling. Entirely my fault. + +------------------------------------------------------------------------ +r1544 | tla | 2004-09-22 12:21:24 -0400 (Wed, 22 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING/html/Elements/Header + +If a user does not have the ModifySelf right, he/she should also not +be able to see the Prefs link in the header. + + +------------------------------------------------------------------------ +r1543 | tla | 2004-09-22 04:08:50 -0400 (Wed, 22 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + +If we unlimit the queues, then queues will show up, and then users will +show up, and then customers will be happy. + + +------------------------------------------------------------------------ +r1542 | tla | 2004-09-22 03:41:22 -0400 (Wed, 22 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING/UPGRADING + M /rt/branches/3.3-TESTING/configure.ac + M /rt/branches/3.3-TESTING/html/Elements/Tabs + M /rt/branches/3.3-TESTING/lib/t/02regression.t.in + A /rt/branches/3.3-TESTING/lib/t/07acl.pl.in + +Moved the functionality whereby Config and Prefs tabs disappear to core. +Wrote tests for the new core behavior. + + +------------------------------------------------------------------------ +r1541 | tla | 2004-09-22 03:14:33 -0400 (Wed, 22 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING/lib/t/05cronsupport.pl.in + +The regression test would die if the last test in here failed. +That wasn't very nice of me. + +------------------------------------------------------------------------ +r1538 | tla | 2004-09-22 01:57:34 -0400 (Wed, 22 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING/configure.ac + +The cronsupport tests somehow fell out of here. Replacing. + + +------------------------------------------------------------------------ +r1535 | jesse | 2004-09-21 02:03:26 -0400 (Tue, 21 Sep 2004) | 10 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + + r10334@tinbook: jesse | 2004-09-21T06:03:40.050504Z + RT-Ticket: 6105 + RT-Status: resolved + RT-UpdateType: correspond + + Refactored some TicketSQL stuff to bound the right thing in our ticketsql subclause + + + + +------------------------------------------------------------------------ +r1534 | jesse | 2004-09-21 01:16:18 -0400 (Tue, 21 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + + r10332@tinbook: jesse | 2004-09-21T05:16:35.439550Z + Next test version of less broken cf search code + +------------------------------------------------------------------------ +r1533 | jesse | 2004-09-21 00:48:54 -0400 (Tue, 21 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + + r10326@tinbook: jesse | 2004-09-21T04:48:46.583575Z + First test version of less broken cf search code + +------------------------------------------------------------------------ +r1528 | jesse | 2004-09-20 23:18:19 -0400 (Mon, 20 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCFs + + r10324@tinbook: jesse | 2004-09-21T03:18:34.501590Z + removing some debugging output + +------------------------------------------------------------------------ +r1527 | jesse | 2004-09-20 23:12:11 -0400 (Mon, 20 Sep 2004) | 142 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCFs + M /rt/branches/3.3-TESTING/lib/RT/CustomFields_Overlay.pm + + r10311@tinbook: jesse | 2004-09-20T21:22:51.344787Z + ---------------------------------------------------------------------- + r10213@tinbook (orig r1454): autrijus | 2004-09-08T19:54:32.241114Z + r5740@xor: autrijus | 2004-09-08T19:54:01.384500Z + * Let "make install" for inplace layout work without hassle. + + + ---------------------------------------------------------------------- + r10214@tinbook (orig r1455): autrijus | 2004-09-08T19:54:55.301056Z + r5741@xor: autrijus | 2004-09-08T19:54:33.611316Z + * With SQLite, put database in $VarPath if $DatabaseName is relative. + + ---------------------------------------------------------------------- + r10215@tinbook (orig r1456): autrijus | 2004-09-08T19:59:38.530949Z + r5749@xor: autrijus | 2004-09-08T19:59:51.949128Z + * Add mason_handler.scgi and standalone_httpd into list of files + to be made executable on "make fixperms". + + ---------------------------------------------------------------------- + r10216@tinbook (orig r1457): jesse | 2004-09-08T20:31:26.131286Z + + ---------------------------------------------------------------------- + r10212@tinbook: jesse | 2004-09-08T20:30:48.849107Z + merging 3.2's Offline.html page forward to 3.3 + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r10222@tinbook (orig r1461): autrijus | 2004-09-08T21:30:59.960856Z + r5770@xor: autrijus | 2004-09-08T20:42:48.599276Z + + + + r5809@xor: autrijus | 2004-09-08T21:30:29.869203Z + * add sbin/rt-dump-database into sbin files. + + ---------------------------------------------------------------------- + r10257@tinbook (orig r1480): jesse | 2004-09-14T03:28:52.701395Z + Bumped to 3.3.6 + ---------------------------------------------------------------------- + r10275@tinbook (orig r1493): autrijus | 2004-09-15T15:40:44.820762Z + r7404@not: | 2004-09-15T00:04:07.008049Z + + + + r7442@not: | 2004-09-15T15:39:23.096249Z + ---------------------------------------------------------------------- + r7441@not: autrijus | 2004-09-15T15:20:23.097011Z + * Luis Arnauth pointed out that we did not serve mail-gateway. + ---------------------------------------------------------------------- + + + ---------------------------------------------------------------------- + r10298@tinbook (orig r1506): jesse | 2004-09-19T20:20:43.620895Z + Fixing case of mysql tablenames, since all the world is not case insensitive like Mac OS X. This is a good thing + ---------------------------------------------------------------------- + r10299@tinbook (orig r1507): jesse | 2004-09-20T00:58:19.610978Z + r10219@tinbook (orig r1458): leira | 2004-09-08T21:19:51.021183Z + If something is overdue, set DueRelative to class "overdue". + + Note: core RT doesn't have an "overdue" class at this time. + + + ---------------------------------------------------------------------- + r10300@tinbook (orig r1508): jesse | 2004-09-20T00:58:46.601286Z + r10221@tinbook (orig r1460): leira | 2004-09-08T21:29:25.111044Z + Use time() instead of making an RT::Date. + + + ---------------------------------------------------------------------- + r10301@tinbook (orig r1509): jesse | 2004-09-20T00:59:15.051043Z + r10223@tinbook (orig r1462): leira | 2004-09-08T21:31:51.811014Z + Overdue things are now read. + + + ---------------------------------------------------------------------- + r10302@tinbook (orig r1510): jesse | 2004-09-20T00:59:45.271374Z + r10225@tinbook (orig r1464): leira | 2004-09-08T21:41:43.110851Z + Don't put a span around things if it won't do anything. + + + ---------------------------------------------------------------------- + r10303@tinbook (orig r1511): jesse | 2004-09-20T01:00:10.600204Z + r10238@tinbook (orig r1474): jesse | 2004-09-10T19:40:40.885981Z + -l + + + + ---------------------------------------------------------------------- + r10304@tinbook (orig r1512): jesse | 2004-09-20T01:01:13.381046Z + r10253@tinbook (orig r1477): jesse | 2004-09-13T20:01:18.620833Z + r10249@tinbook: jesse | 2004-09-13T19:56:43.541086Z + ---------------------------------------------------------------------- + r10238@tinbook (orig r1474): jesse | 2004-09-10T19:40:40.885981Z + + + ---------------------------------------------------------------------- + + r10250@tinbook: jesse | 2004-09-13T19:58:31.660069Z + Bumped to 3.2.2rc1 + + + ---------------------------------------------------------------------- + r10305@tinbook (orig r1513): jesse | 2004-09-20T01:01:37.103494Z + r10265@tinbook (orig r1486): jesse | 2004-09-14T06:12:08.920979Z + r10262@tinbook: jesse | 2004-09-14T06:12:21.353389Z + Never try to fetch attributes when we don't have an object to fetch attributes on + + + ---------------------------------------------------------------------- + r10306@tinbook (orig r1514): jesse | 2004-09-20T01:02:01.021112Z + r10267@tinbook (orig r1487): jesse | 2004-09-14T16:14:00.320887Z + r10266@tinbook: jesse | 2004-09-14T16:14:14.588686Z + RT-Ticket: 5836 + RT-Status: resolved + RT-ACtion: reply + + + Added back a "ticket refresh" dropdown on the search results page. + Thanks to Dirk Pape. + + + + + ---------------------------------------------------------------------- + r10307@tinbook (orig r1515): jesse | 2004-09-20T01:02:23.020890Z + r10277@tinbook (orig r1495): leira | 2004-09-15T19:22:35.471086Z + Removed <pre> block around the header keys, and removed an extraneous </td>. + + + ---------------------------------------------------------------------- + r10308@tinbook (orig r1516): jesse | 2004-09-20T01:02:45.710756Z + r10284@tinbook (orig r1498): leira | 2004-09-16T22:28:20.860968Z + Add another callback that passes parsed headers. + + Useful for MakeClicky, among other things. + + + ---------------------------------------------------------------------- + + r10312@tinbook: jesse | 2004-09-21T03:10:37.466198Z + Custom field joins were being incorrectly constructed + +------------------------------------------------------------------------ +r1526 | tla | 2004-09-20 18:06:08 -0400 (Mon, 20 Sep 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + +The SelectOwner widget should not reveal the names system superusers +to users who are not otherwise privileged to see them. Made this +variable change in the UsersWhoHaveRight() call. + + +------------------------------------------------------------------------ +r1525 | autrijus | 2004-09-20 14:25:28 -0400 (Mon, 20 Sep 2004) | 3 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/sbin/rt-dump-database.in + + r7812@not: autrijus | 2004-09-20T18:00:42.848849Z + * dump data has to return 'true'. oops. + +------------------------------------------------------------------------ +r1522 | autrijus | 2004-09-20 13:22:04 -0400 (Mon, 20 Sep 2004) | 3 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + r7810@not: autrijus | 2004-09-20T17:22:27.534622Z + * add YAML as a core dep for rt-dump-database. + +------------------------------------------------------------------------ +r1519 | autrijus | 2004-09-20 13:09:36 -0400 (Mon, 20 Sep 2004) | 2 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/sbin/rt-dump-database.in + +* rt-dump-database now uses YAML for easy hand modification. + +------------------------------------------------------------------------ +r1516 | jesse | 2004-09-19 21:02:45 -0400 (Sun, 19 Sep 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageHeaders + + r10284@tinbook (orig r1498): leira | 2004-09-16T22:28:20.860968Z + Add another callback that passes parsed headers. + + Useful for MakeClicky, among other things. + + +------------------------------------------------------------------------ +r1515 | jesse | 2004-09-19 21:02:23 -0400 (Sun, 19 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageHeaders + + r10277@tinbook (orig r1495): leira | 2004-09-15T19:22:35.471086Z + Removed <pre> block around the header keys, and removed an extraneous </td>. + + +------------------------------------------------------------------------ +r1514 | jesse | 2004-09-19 21:02:01 -0400 (Sun, 19 Sep 2004) | 13 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Results.html + + r10267@tinbook (orig r1487): jesse | 2004-09-14T16:14:00.320887Z + r10266@tinbook: jesse | 2004-09-14T16:14:14.588686Z + RT-Ticket: 5836 + RT-Status: resolved + RT-ACtion: reply + + + Added back a "ticket refresh" dropdown on the search results page. + Thanks to Dirk Pape. + + + + +------------------------------------------------------------------------ +r1513 | jesse | 2004-09-19 21:01:37 -0400 (Sun, 19 Sep 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Attributes_Overlay.pm + + r10265@tinbook (orig r1486): jesse | 2004-09-14T06:12:08.920979Z + r10262@tinbook: jesse | 2004-09-14T06:12:21.353389Z + Never try to fetch attributes when we don't have an object to fetch attributes on + + +------------------------------------------------------------------------ +r1512 | jesse | 2004-09-19 21:01:13 -0400 (Sun, 19 Sep 2004) | 12 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/releng.cnf + + r10253@tinbook (orig r1477): jesse | 2004-09-13T20:01:18.620833Z + r10249@tinbook: jesse | 2004-09-13T19:56:43.541086Z + ---------------------------------------------------------------------- + r10238@tinbook (orig r1474): jesse | 2004-09-10T19:40:40.885981Z + + + ---------------------------------------------------------------------- + + r10250@tinbook: jesse | 2004-09-13T19:58:31.660069Z + Bumped to 3.2.2rc1 + + +------------------------------------------------------------------------ +r1511 | jesse | 2004-09-19 21:00:10 -0400 (Sun, 19 Sep 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Scrip_Overlay.pm + + r10238@tinbook (orig r1474): jesse | 2004-09-10T19:40:40.885981Z + -l + + + +------------------------------------------------------------------------ +r1510 | jesse | 2004-09-19 20:59:45 -0400 (Sun, 19 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + + r10225@tinbook (orig r1464): leira | 2004-09-08T21:41:43.110851Z + Don't put a span around things if it won't do anything. + + +------------------------------------------------------------------------ +r1509 | jesse | 2004-09-19 20:59:15 -0400 (Sun, 19 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + + r10223@tinbook (orig r1462): leira | 2004-09-08T21:31:51.811014Z + Overdue things are now read. + + +------------------------------------------------------------------------ +r1508 | jesse | 2004-09-19 20:58:46 -0400 (Sun, 19 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + + r10221@tinbook (orig r1460): leira | 2004-09-08T21:29:25.111044Z + Use time() instead of making an RT::Date. + + +------------------------------------------------------------------------ +r1507 | jesse | 2004-09-19 20:58:19 -0400 (Sun, 19 Sep 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + + r10219@tinbook (orig r1458): leira | 2004-09-08T21:19:51.021183Z + If something is overdue, set DueRelative to class "overdue". + + Note: core RT doesn't have an "overdue" class at this time. + + +------------------------------------------------------------------------ +r1506 | jesse | 2004-09-19 16:20:43 -0400 (Sun, 19 Sep 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING/etc/upgrade/3.3.0/schema.mysql + +Fixing case of mysql tablenames, since all the world is not case insensitive like Mac OS X. This is a good thing +------------------------------------------------------------------------ +r1493 | autrijus | 2004-09-15 11:40:44 -0400 (Wed, 15 Sep 2004) | 11 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + + r7404@not: | 2004-09-15T00:04:07.008049Z + + + + r7442@not: | 2004-09-15T15:39:23.096249Z + ---------------------------------------------------------------------- + r7441@not: autrijus | 2004-09-15T15:20:23.097011Z + * Luis Arnauth pointed out that we did not serve mail-gateway. + ---------------------------------------------------------------------- + + +------------------------------------------------------------------------ +r1480 | jesse | 2004-09-13 23:28:52 -0400 (Mon, 13 Sep 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING/releng.cnf + +Bumped to 3.3.6 +------------------------------------------------------------------------ +r1461 | autrijus | 2004-09-08 17:30:59 -0400 (Wed, 08 Sep 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/Makefile.in + M /rt/branches/3.3-TESTING/configure.ac + + r5770@xor: autrijus | 2004-09-08T20:42:48.599276Z + + + + r5809@xor: autrijus | 2004-09-08T21:30:29.869203Z + * add sbin/rt-dump-database into sbin files. + +------------------------------------------------------------------------ +r1457 | jesse | 2004-09-08 16:31:26 -0400 (Wed, 08 Sep 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Tools/Offline.html + + + ---------------------------------------------------------------------- + r10212@tinbook: jesse | 2004-09-08T20:30:48.849107Z + merging 3.2's Offline.html page forward to 3.3 + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1456 | autrijus | 2004-09-08 15:59:38 -0400 (Wed, 08 Sep 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/Makefile.in + + r5749@xor: autrijus | 2004-09-08T19:59:51.949128Z + * Add mason_handler.scgi and standalone_httpd into list of files + to be made executable on "make fixperms". + +------------------------------------------------------------------------ +r1455 | autrijus | 2004-09-08 15:54:55 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/lib/RT/Handle.pm + + r5741@xor: autrijus | 2004-09-08T19:54:33.611316Z + * With SQLite, put database in $VarPath if $DatabaseName is relative. + +------------------------------------------------------------------------ +r1454 | autrijus | 2004-09-08 15:54:32 -0400 (Wed, 08 Sep 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/Makefile.in + + r5740@xor: autrijus | 2004-09-08T19:54:01.384500Z + * Let "make install" for inplace layout work without hassle. + + +------------------------------------------------------------------------ +r1453 | jesse | 2004-09-08 15:00:44 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + A /rt/branches/3.3-TESTING/html/Admin/autohandler + + r10209@tinbook: jesse | 2004-09-08T17:44:02.958487Z + New autohandler to keep prying eyes out of the adminui + +------------------------------------------------------------------------ +r1452 | jesse | 2004-09-08 12:49:35 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/TicketList + + r10201@tinbook: jesse | 2004-09-08T16:46:05.221674Z + Ticket listings modified to show which N results they're showing + +------------------------------------------------------------------------ +r1451 | jesse | 2004-09-08 12:49:19 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + + r10200@tinbook: jesse | 2004-09-08T16:44:11.407371Z + Modified search UI to only show potential owners for tickets in queues the user can see. + +------------------------------------------------------------------------ +r1450 | jesse | 2004-09-08 12:49:07 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Search/Elements/EditSearches + + r10199@tinbook: jesse | 2004-09-08T16:42:14.323284Z + Edited the Saved Search UI to not display things the user can not do + +------------------------------------------------------------------------ +r1449 | jesse | 2004-09-08 12:48:48 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Group_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/System.pm + + r10198@tinbook: jesse | 2004-09-08T16:40:40.817855Z + Added new rights: ShowConfigTab, LoadSavedSearch, CreateSavedSearch + +------------------------------------------------------------------------ +r1448 | autrijus | 2004-09-08 05:02:12 -0400 (Wed, 08 Sep 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/README + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + + r4031@not: autrijus | 2004-09-07T20:56:58.734255Z + + + + r4032@not: autrijus | 2004-09-07T21:02:14.437187Z + * Unify httpd.conf settings for mod_perl1 and mod_perl2. + +------------------------------------------------------------------------ +r1447 | jesse | 2004-09-08 01:24:48 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r10181@tinbook: jesse | 2004-09-08T05:21:47.107322Z + ACL checks to make sure a user can modify both tickets when creating a link + +------------------------------------------------------------------------ +r1446 | jesse | 2004-09-08 01:24:34 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + + r10180@tinbook: jesse | 2004-09-08T05:18:46.031232Z + Fixed a debug message + +------------------------------------------------------------------------ +r1445 | jesse | 2004-09-08 01:24:22 -0400 (Wed, 08 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + + r10179@tinbook: jesse | 2004-09-08T05:17:10.044025Z + Fixed a bug in the web handler that would throw an error when not running in a modperl environemnt + +------------------------------------------------------------------------ +r1444 | jesse | 2004-09-08 01:24:02 -0400 (Wed, 08 Sep 2004) | 4 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/SelectQueue + M /rt/branches/3.3-TESTING/html/Search/Elements/PickBasics + + r10178@tinbook: jesse | 2004-09-08T05:16:16.426259Z + When searching for tickets, now the user will only see tickets they have the right to ShowTicket in... + + +------------------------------------------------------------------------ +r1443 | jesse | 2004-09-08 01:23:31 -0400 (Wed, 08 Sep 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Elements/Quicksearch + + r10177@tinbook: jesse | 2004-09-07T23:05:53.208347Z + Updated the Quicksearch element to use slightly cleaner code. + + BEHAVIOR CHANGE: Only queues for which the current user has "ShowTicket" are listed in the queue list. + + +------------------------------------------------------------------------ +r1436 | jesse | 2004-09-07 18:50:53 -0400 (Tue, 07 Sep 2004) | 7 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r10175@tinbook: jesse | 2004-09-07T22:49:31.744508Z + iRefactoring of the MergeInto method to use less code, be more correct and be clearer. + + Updated tests to test merge. + + + +------------------------------------------------------------------------ +r1421 | autrijus | 2004-09-06 10:50:19 -0400 (Mon, 06 Sep 2004) | 2 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_cn.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_tw.po + +* Updated Chinese translations. + +------------------------------------------------------------------------ +r1417 | jesse | 2004-09-03 19:24:32 -0400 (Fri, 03 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + + r10151@tinbook: jesse | 2004-09-03T23:24:09.414496Z + minor library cleanups + +------------------------------------------------------------------------ +r1416 | jesse | 2004-09-03 19:24:24 -0400 (Fri, 03 Sep 2004) | 3 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/rt-mailgate.in + M /rt/branches/3.3-TESTING/configure.ac + M /rt/branches/3.3-TESTING/lib/t/02regression.t.in + A /rt/branches/3.3-TESTING/lib/t/06mailgateway.pl.in + + r10150@tinbook: jesse | 2004-09-03T23:22:35.061493Z + Moving mailgateway tests into their own file + +------------------------------------------------------------------------ +r1415 | jesse | 2004-09-03 16:35:38 -0400 (Fri, 03 Sep 2004) | 9 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + + ---------------------------------------------------------------------- + r10116@tinbook: jesse | 2004-09-02T21:14:26.642415Z + + ---------------------------------------------------------------------- + r10144@tinbook: jesse | 2004-09-03T20:32:06.311337Z + Query builder fixes (merge bug) + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1388 | jesse | 2004-09-01 00:43:19 -0400 (Wed, 01 Sep 2004) | 5 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectRights + + ---------------------------------------------------------------------- + r10114@tinbook: jesse | 2004-09-01T04:43:10.448516Z + Don't show rights that a principal has in the list of rights that can be granted to them + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1387 | jesse | 2004-09-01 00:10:48 -0400 (Wed, 01 Sep 2004) | 11 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/3.3-TESTING/html/Search/Build.html + M /rt/branches/3.3-TESTING/html/Search/Elements/DisplayOptions + M /rt/branches/3.3-TESTING/html/Search/Elements/PickBasics + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCFs + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCriteria + + ---------------------------------------------------------------------- + r8302@tinbook: jesse | 2004-07-28T20:59:42.277484Z + + ---------------------------------------------------------------------- + r10109@tinbook: jesse | 2004-09-01T04:08:25.198125Z + rewrote mail gateway shim to be a bit more robust + ---------------------------------------------------------------------- + r10110@tinbook: jesse | 2004-09-01T04:09:17.429478Z + Started to refactor the query builder ui code to yank out the bogus logic. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1383 | jesse | 2004-08-31 22:37:44 -0400 (Tue, 31 Aug 2004) | 407 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/Makefile.in + M /rt/branches/3.3-TESTING/README + M /rt/branches/3.3-TESTING/bin/mason_handler.fcgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.scgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.svc.in + M /rt/branches/3.3-TESTING/bin/rt-crontool.in + M /rt/branches/3.3-TESTING/bin/rt-mailgate.in + M /rt/branches/3.3-TESTING/bin/rt.in + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + M /rt/branches/3.3-TESTING/etc/drop.Oracle + M /rt/branches/3.3-TESTING/etc/upgrade/3.1.0/schema.Pg + M /rt/branches/3.3-TESTING/html/Admin/Elements/AddCustomFieldValue + M /rt/branches/3.3-TESTING/html/Admin/Elements/CreateUserCalled + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFieldValues + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditQueueWatchers + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditScrip + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditScrips + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditTemplates + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditUserComments + M /rt/branches/3.3-TESTING/html/Admin/Elements/GroupTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/Header + M /rt/branches/3.3-TESTING/html/Admin/Elements/ListGlobalCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/ListGlobalScrips + M /rt/branches/3.3-TESTING/html/Admin/Elements/ModifyTemplate + M /rt/branches/3.3-TESTING/html/Admin/Elements/QueueRightsForUser + M /rt/branches/3.3-TESTING/html/Admin/Elements/QueueTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectCustomFieldType + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectGroups + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyGroup + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyQueue + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyUser + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectNewGroupMembers + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectRights + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScrip + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScripAction + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScripCondition + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectSingleOrMultiple + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectStage + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectTemplate + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectUsers + M /rt/branches/3.3-TESTING/html/Admin/Elements/SystemTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/ToolTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/UserTabs + M /rt/branches/3.3-TESTING/html/Admin/Global/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Scrip.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Scrips.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Template.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Templates.html + M /rt/branches/3.3-TESTING/html/Admin/Global/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Global/index.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/Members.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/index.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/CustomField.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/CustomFields.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/People.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Scrip.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Scrips.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Template.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Templates.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/index.html + M /rt/branches/3.3-TESTING/html/Admin/Tools/Configuration.html + M /rt/branches/3.3-TESTING/html/Admin/Tools/index.html + M /rt/branches/3.3-TESTING/html/Admin/Users/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Users/index.html + M /rt/branches/3.3-TESTING/html/Admin/index.html + M /rt/branches/3.3-TESTING/html/Approvals/Display.html + M /rt/branches/3.3-TESTING/html/Approvals/Elements/Approve + M /rt/branches/3.3-TESTING/html/Approvals/Elements/PendingMyApproval + M /rt/branches/3.3-TESTING/html/Approvals/Elements/ShowDependency + M /rt/branches/3.3-TESTING/html/Approvals/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Approvals/index.html + M /rt/branches/3.3-TESTING/html/Elements/BevelBoxRaisedEnd + M /rt/branches/3.3-TESTING/html/Elements/BevelBoxRaisedStart + M /rt/branches/3.3-TESTING/html/Elements/Callback + M /rt/branches/3.3-TESTING/html/Elements/Checkbox + A /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable + A /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Header + A /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/ParseFormat + A /rt/branches/3.3-TESTING/html/Elements/CollectionAsTable/Row + M /rt/branches/3.3-TESTING/html/Elements/CreateTicket + M /rt/branches/3.3-TESTING/html/Elements/EditLinks + M /rt/branches/3.3-TESTING/html/Elements/Error + M /rt/branches/3.3-TESTING/html/Elements/Footer + M /rt/branches/3.3-TESTING/html/Elements/GotoTicket + M /rt/branches/3.3-TESTING/html/Elements/Header + M /rt/branches/3.3-TESTING/html/Elements/ListActions + M /rt/branches/3.3-TESTING/html/Elements/Login + M /rt/branches/3.3-TESTING/html/Elements/Menu + M /rt/branches/3.3-TESTING/html/Elements/MessageBox + M /rt/branches/3.3-TESTING/html/Elements/MyRequests + M /rt/branches/3.3-TESTING/html/Elements/MyTickets + M /rt/branches/3.3-TESTING/html/Elements/PageLayout + M /rt/branches/3.3-TESTING/html/Elements/QueryString + M /rt/branches/3.3-TESTING/html/Elements/QuickCreate + M /rt/branches/3.3-TESTING/html/Elements/Quicksearch + A /rt/branches/3.3-TESTING/html/Elements/RT__Ticket + A /rt/branches/3.3-TESTING/html/Elements/RT__Ticket/ColumnMap + M /rt/branches/3.3-TESTING/html/Elements/Refresh + M /rt/branches/3.3-TESTING/html/Elements/ScrubHTML + M /rt/branches/3.3-TESTING/html/Elements/Section + M /rt/branches/3.3-TESTING/html/Elements/SelectAttachmentField + M /rt/branches/3.3-TESTING/html/Elements/SelectBoolean + M /rt/branches/3.3-TESTING/html/Elements/SelectCustomFieldOperator + M /rt/branches/3.3-TESTING/html/Elements/SelectCustomFieldValue + M /rt/branches/3.3-TESTING/html/Elements/SelectDate + M /rt/branches/3.3-TESTING/html/Elements/SelectDateRelation + M /rt/branches/3.3-TESTING/html/Elements/SelectDateType + M /rt/branches/3.3-TESTING/html/Elements/SelectEqualityOperator + M /rt/branches/3.3-TESTING/html/Elements/SelectGroups + M /rt/branches/3.3-TESTING/html/Elements/SelectLang + M /rt/branches/3.3-TESTING/html/Elements/SelectLinkType + M /rt/branches/3.3-TESTING/html/Elements/SelectMatch + M /rt/branches/3.3-TESTING/html/Elements/SelectNewTicketQueue + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + M /rt/branches/3.3-TESTING/html/Elements/SelectQueue + M /rt/branches/3.3-TESTING/html/Elements/SelectResultsPerPage + M /rt/branches/3.3-TESTING/html/Elements/SelectSortOrder + M /rt/branches/3.3-TESTING/html/Elements/SelectStatus + M /rt/branches/3.3-TESTING/html/Elements/SelectTicketSortBy + M /rt/branches/3.3-TESTING/html/Elements/SelectTicketTypes + M /rt/branches/3.3-TESTING/html/Elements/SelectUsers + M /rt/branches/3.3-TESTING/html/Elements/SelectWatcherType + M /rt/branches/3.3-TESTING/html/Elements/SetupSessionCookie + M /rt/branches/3.3-TESTING/html/Elements/ShowLink + M /rt/branches/3.3-TESTING/html/Elements/ShowLinks + M /rt/branches/3.3-TESTING/html/Elements/SimpleSearch + M /rt/branches/3.3-TESTING/html/Elements/Submit + M /rt/branches/3.3-TESTING/html/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/Elements/TitleBox + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxEnd + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxStart + M /rt/branches/3.3-TESTING/html/NoAuth/Logout.html + M /rt/branches/3.3-TESTING/html/NoAuth/Reminder.html + A /rt/branches/3.3-TESTING/html/NoAuth/images/autohandler + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/queue/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/queue/ns + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/attachments + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/history + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/links + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/user/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/user/ns + M /rt/branches/3.3-TESTING/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/3.3-TESTING/html/REST/1.0/autohandler + M /rt/branches/3.3-TESTING/html/REST/1.0/dhandler + M /rt/branches/3.3-TESTING/html/REST/1.0/logout + M /rt/branches/3.3-TESTING/html/REST/1.0/search/dhandler + M /rt/branches/3.3-TESTING/html/REST/1.0/search/ticket + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/comment + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/link + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/merge + M /rt/branches/3.3-TESTING/html/Search/Build.html + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/html/Search/Edit.html + M /rt/branches/3.3-TESTING/html/Search/Elements/BuildFormatString + M /rt/branches/3.3-TESTING/html/Search/Elements/DisplayOptions + M /rt/branches/3.3-TESTING/html/Search/Elements/EditFormat + M /rt/branches/3.3-TESTING/html/Search/Elements/EditSearches + M /rt/branches/3.3-TESTING/html/Search/Elements/NewListActions + M /rt/branches/3.3-TESTING/html/Search/Elements/PickBasics + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCFs + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCriteria + M /rt/branches/3.3-TESTING/html/Search/Elements/SearchPrivacy + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectAndOr + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectLinks + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectPersonType + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectSearchObject + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectSearchesForObjects + M /rt/branches/3.3-TESTING/html/Search/Results.html + M /rt/branches/3.3-TESTING/html/Search/Results.rdf + M /rt/branches/3.3-TESTING/html/Search/Results.tsv + M /rt/branches/3.3-TESTING/html/SelfService/Attachment/dhandler + M /rt/branches/3.3-TESTING/html/SelfService/Closed.html + M /rt/branches/3.3-TESTING/html/SelfService/Create.html + M /rt/branches/3.3-TESTING/html/SelfService/Display.html + M /rt/branches/3.3-TESTING/html/SelfService/Elements/GotoTicket + M /rt/branches/3.3-TESTING/html/SelfService/Elements/Header + M /rt/branches/3.3-TESTING/html/SelfService/Elements/MyRequests + M /rt/branches/3.3-TESTING/html/SelfService/Elements/Tabs + M /rt/branches/3.3-TESTING/html/SelfService/Error.html + M /rt/branches/3.3-TESTING/html/SelfService/Prefs.html + M /rt/branches/3.3-TESTING/html/SelfService/Update.html + M /rt/branches/3.3-TESTING/html/SelfService/index.html + M /rt/branches/3.3-TESTING/html/Ticket/Attachment/dhandler + M /rt/branches/3.3-TESTING/html/Ticket/Create.html + M /rt/branches/3.3-TESTING/html/Ticket/Display.html + M /rt/branches/3.3-TESTING/html/Ticket/Elements/AddWatchers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/BulkLinks + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditBasics + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditDates + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditPeople + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditWatchers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/FindAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/LoadTextAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/PreviewScrips + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowBasics + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowCustomFields + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowDates + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowDependencies + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowGroupMembers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowHistory + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMemberOf + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMembers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageHeaders + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageStanza + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowPeople + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowReferences + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowRequestor + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowSummary + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowTransaction + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowTransactionAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowUserEntry + M /rt/branches/3.3-TESTING/html/Ticket/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Ticket/History.html + M /rt/branches/3.3-TESTING/html/Ticket/Modify.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyAll.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyDates.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyLinks.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyPeople.html + M /rt/branches/3.3-TESTING/html/Ticket/ShowEmailRecord.html + M /rt/branches/3.3-TESTING/html/Ticket/Update.html + M /rt/branches/3.3-TESTING/html/Tools/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Tools/MyDay.html + M /rt/branches/3.3-TESTING/html/Tools/Offline.html + M /rt/branches/3.3-TESTING/html/User/Delegation.html + M /rt/branches/3.3-TESTING/html/User/Elements/DelegateRights + M /rt/branches/3.3-TESTING/html/User/Elements/GroupTabs + M /rt/branches/3.3-TESTING/html/User/Elements/Tabs + M /rt/branches/3.3-TESTING/html/User/Groups/Members.html + M /rt/branches/3.3-TESTING/html/User/Groups/Modify.html + M /rt/branches/3.3-TESTING/html/User/Groups/index.html + M /rt/branches/3.3-TESTING/html/User/Prefs.html + M /rt/branches/3.3-TESTING/html/autohandler + M /rt/branches/3.3-TESTING/html/index.html + M /rt/branches/3.3-TESTING/html/l + M /rt/branches/3.3-TESTING/lib/RT/ACE.pm + M /rt/branches/3.3-TESTING/lib/RT/ACE_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/AutoOpen.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Autoreply.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/CreateTickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/EscalatePriority.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Notify.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/NotifyAsComment.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/RecordComment.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/RecordCorrespondence.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/ResolveMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/SendEmail.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/SetPriority.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/UserDefined.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Base.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/AnyTransaction.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/BeforeDue.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/Overdue.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/OwnerChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/PriorityChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/PriorityExceeds.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/QueueChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/StatusChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/UserDefined.pm + M /rt/branches/3.3-TESTING/lib/RT/CurrentUser.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Date.pm + M /rt/branches/3.3-TESTING/lib/RT/EmailParser.pm + M /rt/branches/3.3-TESTING/lib/RT/Group.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Group_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Handle.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/cs.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/cs.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/da.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/de.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/es.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/fi.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/fr.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/he.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/hu.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/i_default.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/it.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/ja.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/nl.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/no.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/pt_br.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/ru.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_cn.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_tw.po + M /rt/branches/3.3-TESTING/lib/RT/I18N.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/CLI.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Auth/GnuPG.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Auth/MailFrom.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Filter/SpamAssassin.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/REST.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/Link.pm + M /rt/branches/3.3-TESTING/lib/RT/Link_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Links.pm + M /rt/branches/3.3-TESTING/lib/RT/Links_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/ActiveTicketsInQueue.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/FromSQL.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/SearchBuilder.pm + M /rt/branches/3.3-TESTING/lib/RT/System.pm + M /rt/branches/3.3-TESTING/lib/RT/Template.pm + M /rt/branches/3.3-TESTING/lib/RT/Template_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/URI/base.pm + M /rt/branches/3.3-TESTING/lib/RT/URI/fsck_com_rt.pm + M /rt/branches/3.3-TESTING/lib/RT/URI.pm + M /rt/branches/3.3-TESTING/lib/RT/User.pm + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Users.pm + M /rt/branches/3.3-TESTING/lib/RT/Users_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT.pm.in + M /rt/branches/3.3-TESTING/sbin/extract-message-catalog + M /rt/branches/3.3-TESTING/sbin/extract_pod_tests + M /rt/branches/3.3-TESTING/sbin/factory + M /rt/branches/3.3-TESTING/sbin/license_tag + M /rt/branches/3.3-TESTING/sbin/regression_harness + M /rt/branches/3.3-TESTING/sbin/rt-setup-database.in + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + ---------------------------------------------------------------------- + r8270@tinbook (orig r1270): autrijus | 2004-07-22T00:39:33.156202Z + ---------------------------------------------------------------------- + r6200@not: autrijus | 2004-07-22T00:37:31.494556Z + + * $Ticket->AddCustomFieldValue now takes FIELD as Name. + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8271@tinbook (orig r1271): autrijus | 2004-07-22T00:52:53.468442Z + ---------------------------------------------------------------------- + r6204@not: autrijus | 2004-07-22T00:52:38.207887Z + + * Switch $Ticket->AddCustomFieldValue to use $cf->LoadByNameAndQueue for + forward compatibility. + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8272@tinbook (orig r1272): jesse | 2004-07-22T01:04:55.279276Z + ---------------------------------------------------------------------- + r8267@tinbook: jesse | 2004-07-22T01:01:02.633960Z + + Making license blocks fold away + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8282@tinbook (orig r1276): jesse | 2004-07-22T19:08:32.352834Z + ---------------------------------------------------------------------- + r8281@tinbook: jesse | 2004-07-22T19:08:48.451578Z + + * The "/l" component now does all its work in the init block + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8286@tinbook (orig r1277): leira | 2004-07-23T02:30:36.111345Z + If a template file is uploaded, clear out the old template first (as before). + + ---------------------------------------------------------------------- + r8287@tinbook (orig r1278): leira | 2004-07-23T02:32:27.864998Z + Fill in the default queue if one was specified. + + ---------------------------------------------------------------------- + r8288@tinbook (orig r1279): leira | 2004-07-23T03:02:15.525380Z + RT-Ticket: 5880 + RT-Status: resolved + RT-Action: correspond + NULL values can now be chosen, and the TicketSQL query is constructed properly. + + ---------------------------------------------------------------------- + r8289@tinbook (orig r1280): leira | 2004-07-23T03:04:27.962400Z + No value is NULL, not null. + + ---------------------------------------------------------------------- + r8290@tinbook (orig r1281): autrijus | 2004-07-23T17:15:16.923948Z + RT-Ticket: 5274 + RT-Status: resolved + RT-Update: correspond + + Apply Bart Duchesne's patch for correctly deleting old TCFV '0' + when editing SingleValue TCFs. + + ---------------------------------------------------------------------- + r8291@tinbook (orig r1282): jesse | 2004-07-23T17:34:23.556934Z + + ---------------------------------------------------------------------- + r8285@tinbook: jesse | 2004-07-23T17:33:04.648260Z + + Using single quotes makes the email address in the copyright not get mangled + ---------------------------------------------------------------------- + + + ---------------------------------------------------------------------- + r8293@tinbook (orig r1283): jesse | 2004-07-23T21:23:10.580796Z + ---------------------------------------------------------------------- + r8292@tinbook: jesse | 2004-07-23T21:23:16.884303Z + + RT now goes out of its way to display images, like the logo... even when users fail to configure their webserver correctly + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8294@tinbook (orig r1284): leira | 2004-07-23T21:43:20.116290Z + Reset string properly when uploading a template file. + + ---------------------------------------------------------------------- + r8304@tinbook (orig r1285): robert | 2004-07-26T19:07:58.942428Z + ---------------------------------------------------------------------- + r1287@dog: rspier | 2004-07-26T18:56:48.690023Z + + [fsck.com #5879] - DBIx::SearchBuilder should treat 'IS' as case insensitive, since most databases do too. + ---------------------------------------------------------------------- + r1288@dog: rspier | 2004-07-26T19:00:50.217330Z + + MicroOptimizations: + - if we're doing an IS NULL search already, there's no reason to do a $null_columns_ok + - use || instead of 'or' so we can short-circuit + ---------------------------------------------------------------------- + r1289@dog: rspier | 2004-07-26T19:06:54.604573Z + + MicroOptimization/Cleanup: + - get rid of $null_columns_ok flag + - clean up logic, and use string compare instead of regexp + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8305@tinbook (orig r1286): robert | 2004-07-26T19:15:12.786172Z + ---------------------------------------------------------------------- + r1291@dog: rspier | 2004-07-26T19:14:41.133769Z + + Revert the last microoptimization. It smells funny and will create problems with merging to 3.3 + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8307@tinbook (orig r1288): leira | 2004-07-28T04:04:12.240846Z + Handle 0 values properly. + + ---------------------------------------------------------------------- + r8308@tinbook (orig r1289): huberth | 2004-07-28T18:35:38.638941Z + RT-Ticket: 5908 + RT-Status: resolved + + * drop.Oracle now drops the attributes table. + + ---------------------------------------------------------------------- + r8309@tinbook (orig r1290): huberth | 2004-07-28T18:39:36.764074Z + RT-Ticket: 5899 + RT-Status: resolved + + * html/Search/Results.tsv now works with custom fields that have line breaks + within them. + + + ---------------------------------------------------------------------- + r8311@tinbook (orig r1292): jesse | 2004-07-29T00:08:11.298269Z + ---------------------------------------------------------------------- + r8303@tinbook: jesse | 2004-07-28T23:59:45.883318Z + + Removed the extra newlines we inserted after the copyright block, since it adds extra newlines to the mason pages, which can break some parsing. + + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8316@tinbook (orig r1293): leira | 2004-07-29T05:41:51.040092Z + Make the TitleBox title a link to the same search, only not limited to 10. + + ---------------------------------------------------------------------- + r8319@tinbook (orig r1296): alexmv | 2004-07-30T19:59:24.588580Z + * Fix "Unrecognised line: foo@bar" caused by 5.8.0 not matching utf8 + against regexps + + ---------------------------------------------------------------------- + r8320@tinbook (orig r1297): huberth | 2004-07-30T21:46:43.639926Z + RT-Ticket: 5699 + RT-Status: resolved + + * Bulk editing of custom fields (finally!) added. Not quite as fast as + would be preferred, probably, but it (should) work. + + + + ---------------------------------------------------------------------- + r8329@tinbook (orig r1298): huberth | 2004-08-03T14:02:14.558593Z + RT-Ticket: 5927 + RT-Status: resolved + + * Due dates in the past no longer look like they're in the future, + i.e. "6 days ago". + + ---------------------------------------------------------------------- + r8333@tinbook (orig r1302): huberth | 2004-08-03T22:06:00.556754Z + RT-Ticket: 4473 + RT-Status: resolved + + * In Ticket/Elements/ShowAttachments, the font code that is generated + no longer tries to escape the quotes (to give something like + <font size="-1">). Now the quotes appear. Also, the default + font size for the date and size has been changed to -2, because -1 + looks huge and out of place. + + ---------------------------------------------------------------------- + r8338@tinbook (orig r1307): alexmv | 2004-08-04T14:33:55.363891Z + RT-Ticket: 5916 + RT-Status: resolved + * Postgres doesn't use '#' as a comment character + + ---------------------------------------------------------------------- + r8339@tinbook (orig r1308): alexmv | 2004-08-04T15:54:14.363856Z + RT-Ticket: 4036 + RT-Status: resolved + * 'Create' is uppercase + * TemplateObj->QueueObj is null if the template is just being created + + ---------------------------------------------------------------------- + r8340@tinbook (orig r1309): alexmv | 2004-08-04T17:42:42.591907Z + * Warn if running MySQL < 4.0.x + + * Suggest something slightly more useful if we don't have InnoDB and + we're running MySQL 3.23 + + ---------------------------------------------------------------------- + r8341@tinbook (orig r1310): alexmv | 2004-08-04T19:03:51.226982Z + RT-Ticket: 5942 + RT-Status: resolved + * Use a:after {content: "..."} to put dots after titlebox links; this + involves one loc string change + + * Also force titlebox hrefs to be white, not black + + ---------------------------------------------------------------------- + r8342@tinbook (orig r1311): huberth | 2004-08-05T00:44:40.527084Z + RT-Ticket: 4234 + RT-Status: resolved + + * Doubled headers and navbars no longer appear when an unprivileged user + creates a Custom Field. (This happened because Abort was called within + a subcomponent.) + + ---------------------------------------------------------------------- + r8343@tinbook (orig r1312): alexmv | 2004-08-05T00:50:16.625070Z + * Removing accidental paste + + ---------------------------------------------------------------------- + r8344@tinbook (orig r1313): huberth | 2004-08-05T18:47:43.340906Z + * Fixed a couple of other stupid errors resulting from r1311 relating to + quoting of pathnames. + + ---------------------------------------------------------------------- + r8383@tinbook (orig r1326): alexmv | 2004-08-10T19:38:59.860454Z + * Add callback in header proper, to allow injection of style and script tags + + ---------------------------------------------------------------------- + r8394@tinbook (orig r1335): leira | 2004-08-17T16:03:08.253892Z + Added a new callback at the very beginning of the <%INIT> block. + + RTIR uses this callback to look at the queue and hijack the display + page, however, the callback itself is more generic than that: it + happens at the very beginning, and receives all arguments. + + + ---------------------------------------------------------------------- + r8396@tinbook (orig r1337): alexmv | 2004-08-17T19:03:04.023840Z + RT-Ticket: 5820 + RT-Update: correspond + RT-Status: resolved + + * Use "local $_" to prevent "modification of read-only value..." + caused by aliasing $_ to a constant + + ---------------------------------------------------------------------- + r8397@tinbook (orig r1338): alexmv | 2004-08-17T21:05:10.004165Z + RT-Ticket: 5716 + RT-Update: correspond + RT-Status: resolved + + * Move code which is not specific to parsing mime messages into + RT::Email::Interface; this removes a large base of duplicated code, + and some sketchy "methods" that were getting called with "" as self + often + + + ---------------------------------------------------------------------- + r8398@tinbook (orig r1339): alexmv | 2004-08-17T22:16:11.573879Z + RT-Ticket: 5963 + RT-Update: correspond + RT-Status: resolved + + * Applied patch provided by bobg at the domain of uic.edu to exit if + there is no content on standard input + + + ---------------------------------------------------------------------- + r8399@tinbook (orig r1340): alexmv | 2004-08-17T22:18:15.933790Z + RT-Ticket: 5939 + RT-Status: resolved + RT-Update: correspond + + * Take out un-needed $fontsize variable; removing <font> tags will + have to wait + + ---------------------------------------------------------------------- + r8400@tinbook (orig r1341): alexmv | 2004-08-17T23:57:59.583821Z + RT-Ticket: 5897 + RT-Update: correspond + RT-Status: resolved + + * ModifyTicket includes CommentOnTicket and ReplyToTicket rights; + this effects display of "[Reply] [Comment]" links per transaction + + ---------------------------------------------------------------------- + r8401@tinbook (orig r1342): alexmv | 2004-08-18T00:05:11.483081Z + RT-Ticket: 5823 + RT-Update: correspond + RT-Status: resolved + + * Applied patch from bobg at the domain of uic.edu, prefixing refresh + form's url with $RT::WebPath + + ---------------------------------------------------------------------- + r8402@tinbook (orig r1343): huberth | 2004-08-18T02:23:42.094984Z + * Made bulk editing of custom fields slightly more efficient and + simultaneously cleaned up some of its code. + * Also added a little bit of docs for RT::Ticket::Create() - Priority + is a valid arg also. + + ---------------------------------------------------------------------- + r8403@tinbook (orig r1344): alexmv | 2004-08-18T02:27:04.024544Z + RT-Ticket: 5988 + RT-Update: correspond + RT-Status: resolved + + * Back out change r1338, as it breaks API compatibility in a stable + release + + ---------------------------------------------------------------------- + r8416@tinbook (orig r1347): alexmv | 2004-08-18T19:31:10.580958Z + RT-Ticket: 5826 + RT-Update: correspond + RT-Status: resolved + + * Fix logic; bounce message as a loop if $IsALoop and not $RT::StoreLoops; + was "if $IsALoop and ($RT::LoopsToOwner and not $RT::StoreLoops)" + + ---------------------------------------------------------------------- + r8417@tinbook (orig r1348): alexmv | 2004-08-18T20:22:42.711734Z + RT-Ticket: 5215 + RT-Update: correspond + RT-Status: resolved + + * When merging tickets, the resulting ticket's + Time{Estimated,Worked,Left} should be the sum of the fields from + both tickets + + ---------------------------------------------------------------------- + r8418@tinbook (orig r1349): alexmv | 2004-08-18T20:38:09.170879Z + RT-Ticket: 5963 + RT-Update: correspond + RT-Status: resolved + + * Some mailers care about the return value rt-mailgate; 'return 0' + instead of 'die' to ensure that we fake success + + ---------------------------------------------------------------------- + r8420@tinbook (orig r1351): alexmv | 2004-08-18T21:53:17.081053Z + RT-Ticket: 5792 + RT-Update: correspond + RT-Status: resolved + + * Move the lasttrans anchor into a table cell + + ---------------------------------------------------------------------- + r8421@tinbook (orig r1352): alexmv | 2004-08-18T22:04:57.879119Z + RT-Ticket: 5809 + RT-Status: resolved + + * Derivative of the doc. patch in [fsck.com #5809] applied + + ---------------------------------------------------------------------- + r8456@tinbook (orig r1372): jesse | 2004-08-28T23:47:32.411217Z + ---------------------------------------------------------------------- + r8454@tinbook: jesse | 2004-08-28T23:42:12.276700Z + + ---------------------------------------------------------------------- + r8455@tinbook: jesse | 2004-08-28T23:46:06.962020Z + Adding a "SearchActions" callback to Search/Results.html + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8473@tinbook (orig r1376): jesse | 2004-08-31T04:22:49.340942Z + ---------------------------------------------------------------------- + r8457@tinbook: jesse | 2004-08-29T01:52:08.449173Z + Refactored the TicketList compnent to be more reusable + ---------------------------------------------------------------------- + r8458@tinbook: jesse | 2004-08-29T02:41:50.808026Z + Adding a callback for a customer + ---------------------------------------------------------------------- + r8471@tinbook: jesse | 2004-08-31T04:20:29.035587Z + Fixed the callback in Results.html to not flake out when we've got interesting %ARGS coming into it. + + ---------------------------------------------------------------------- + r8472@tinbook: jesse | 2004-08-31T04:21:47.346418Z + Added "DependedOnBy" to TicketSQL to mean what it means elsewhere. + + Made TicketSQL let you search by ticket type + + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8479@tinbook (orig r1379): jesse | 2004-08-31T08:14:54.830848Z + ---------------------------------------------------------------------- + r8478@tinbook: jesse | 2004-08-31T08:14:29.467020Z + Inlined Tickets_Overlay_SQL's "match" + + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8482@tinbook (orig r1380): jesse | 2004-08-31T18:49:23.384189Z + + ---------------------------------------------------------------------- + r8480@tinbook: jesse | 2004-08-31T18:48:19.505579Z + Added callbacks to let users add entries to show and edit basics boxes + + Made "type" an editable field on tickets (at the web api level, not in the UI) + + ---------------------------------------------------------------------- + + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1345 | alexmv | 2004-08-17 22:42:49 -0400 (Tue, 17 Aug 2004) | 6 lines +Changed paths: + M /rt/branches/3.3-TESTING/lib/RT/Action/SendEmail.pm + M /rt/branches/3.3-TESTING/lib/RT/EmailParser.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + +RT-Ticket: 5716 +RT-Status: resolved +RT-Update: correspond + + * Duplicate code change backed out of 3.2 and checked into 3.3 + +------------------------------------------------------------------------ +r1275 | jesse | 2004-07-22 14:36:03 -0400 (Thu, 22 Jul 2004) | 8 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/PickCustomFields + + + ---------------------------------------------------------------------- + r8279@tinbook: jesse | 2004-07-22T18:33:54.229892Z + + * Allow the move up/move down links to work for custom field ordering + ---------------------------------------------------------------------- + + +------------------------------------------------------------------------ +r1268 | jesse | 2004-07-21 15:36:07 -0400 (Wed, 21 Jul 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING/releng.cnf + +Bumped to 3.3.5 +------------------------------------------------------------------------ +r1267 | jesse | 2004-07-21 15:12:31 -0400 (Wed, 21 Jul 2004) | 67 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/Makefile.in + M /rt/branches/3.3-TESTING/README + M /rt/branches/3.3-TESTING/bin/mason_handler.fcgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.scgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.svc.in + M /rt/branches/3.3-TESTING/bin/rt-crontool.in + M /rt/branches/3.3-TESTING/bin/rt-mailgate.in + M /rt/branches/3.3-TESTING/bin/rt.in + M /rt/branches/3.3-TESTING/bin/standalone_httpd.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/configure.ac + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/Objects.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/CustomFields/index.html + M /rt/branches/3.3-TESTING/html/Admin/Elements/AddCustomFieldValue + M /rt/branches/3.3-TESTING/html/Admin/Elements/CreateUserCalled + M /rt/branches/3.3-TESTING/html/Admin/Elements/CustomFieldTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFieldValues + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditQueueWatchers + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditScrip + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditScrips + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditTemplates + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditUserComments + M /rt/branches/3.3-TESTING/html/Admin/Elements/GroupTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/Header + M /rt/branches/3.3-TESTING/html/Admin/Elements/ListGlobalCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/ListGlobalScrips + M /rt/branches/3.3-TESTING/html/Admin/Elements/ModifyTemplate + M /rt/branches/3.3-TESTING/html/Admin/Elements/ObjectCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/PickCustomFields + M /rt/branches/3.3-TESTING/html/Admin/Elements/PickObjects + M /rt/branches/3.3-TESTING/html/Admin/Elements/QueueRightsForUser + M /rt/branches/3.3-TESTING/html/Admin/Elements/QueueTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectCustomFieldLookupType + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectCustomFieldType + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectGroups + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyGroup + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyQueue + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectModifyUser + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectNewGroupMembers + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectRights + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScrip + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScripAction + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectScripCondition + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectSingleOrMultiple + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectStage + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectTemplate + M /rt/branches/3.3-TESTING/html/Admin/Elements/SelectUsers + M /rt/branches/3.3-TESTING/html/Admin/Elements/SystemTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/ToolTabs + M /rt/branches/3.3-TESTING/html/Admin/Elements/UserTabs + M /rt/branches/3.3-TESTING/html/Admin/Global/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Scrip.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Scrips.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Template.html + M /rt/branches/3.3-TESTING/html/Admin/Global/Templates.html + M /rt/branches/3.3-TESTING/html/Admin/Global/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Global/index.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/CustomFields.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/History.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/Members.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Groups/index.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/CustomField.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/CustomFields.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/GroupRights.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/People.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Scrip.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Scrips.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Template.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/Templates.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/UserRights.html + M /rt/branches/3.3-TESTING/html/Admin/Queues/index.html + M /rt/branches/3.3-TESTING/html/Admin/Tools/Configuration.html + M /rt/branches/3.3-TESTING/html/Admin/Tools/index.html + M /rt/branches/3.3-TESTING/html/Admin/Users/CustomFields.html + M /rt/branches/3.3-TESTING/html/Admin/Users/History.html + M /rt/branches/3.3-TESTING/html/Admin/Users/Memberships.html + M /rt/branches/3.3-TESTING/html/Admin/Users/Modify.html + M /rt/branches/3.3-TESTING/html/Admin/Users/index.html + M /rt/branches/3.3-TESTING/html/Admin/index.html + M /rt/branches/3.3-TESTING/html/Approvals/Display.html + M /rt/branches/3.3-TESTING/html/Approvals/Elements/Approve + M /rt/branches/3.3-TESTING/html/Approvals/Elements/PendingMyApproval + M /rt/branches/3.3-TESTING/html/Approvals/Elements/ShowDependency + M /rt/branches/3.3-TESTING/html/Approvals/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Approvals/index.html + M /rt/branches/3.3-TESTING/html/Download/CustomFieldValue/dhandler + M /rt/branches/3.3-TESTING/html/Download/Tabular/dhandler + M /rt/branches/3.3-TESTING/html/Elements/BevelBoxRaisedEnd + M /rt/branches/3.3-TESTING/html/Elements/BevelBoxRaisedStart + M /rt/branches/3.3-TESTING/html/Elements/Callback + M /rt/branches/3.3-TESTING/html/Elements/Checkbox + M /rt/branches/3.3-TESTING/html/Elements/CreateTicket + M /rt/branches/3.3-TESTING/html/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldBinary + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldFreeform + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldImage + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldSelect + M /rt/branches/3.3-TESTING/html/Elements/EditCustomFieldText + M /rt/branches/3.3-TESTING/html/Elements/EditLinks + M /rt/branches/3.3-TESTING/html/Elements/Error + M /rt/branches/3.3-TESTING/html/Elements/Footer + M /rt/branches/3.3-TESTING/html/Elements/GotoTicket + M /rt/branches/3.3-TESTING/html/Elements/Header + M /rt/branches/3.3-TESTING/html/Elements/ListActions + M /rt/branches/3.3-TESTING/html/Elements/Login + M /rt/branches/3.3-TESTING/html/Elements/Menu + M /rt/branches/3.3-TESTING/html/Elements/MessageBox + M /rt/branches/3.3-TESTING/html/Elements/MyRequests + M /rt/branches/3.3-TESTING/html/Elements/MyTickets + M /rt/branches/3.3-TESTING/html/Elements/PageLayout + M /rt/branches/3.3-TESTING/html/Elements/QueryString + M /rt/branches/3.3-TESTING/html/Elements/QuickCreate + M /rt/branches/3.3-TESTING/html/Elements/Quicksearch + M /rt/branches/3.3-TESTING/html/Elements/Refresh + M /rt/branches/3.3-TESTING/html/Elements/ScrubHTML + M /rt/branches/3.3-TESTING/html/Elements/Section + M /rt/branches/3.3-TESTING/html/Elements/SelectAttachmentField + M /rt/branches/3.3-TESTING/html/Elements/SelectBoolean + M /rt/branches/3.3-TESTING/html/Elements/SelectCustomFieldOperator + M /rt/branches/3.3-TESTING/html/Elements/SelectCustomFieldValue + M /rt/branches/3.3-TESTING/html/Elements/SelectDate + M /rt/branches/3.3-TESTING/html/Elements/SelectDateRelation + M /rt/branches/3.3-TESTING/html/Elements/SelectDateType + M /rt/branches/3.3-TESTING/html/Elements/SelectEqualityOperator + M /rt/branches/3.3-TESTING/html/Elements/SelectGroups + M /rt/branches/3.3-TESTING/html/Elements/SelectLang + M /rt/branches/3.3-TESTING/html/Elements/SelectLinkType + M /rt/branches/3.3-TESTING/html/Elements/SelectMatch + M /rt/branches/3.3-TESTING/html/Elements/SelectNewTicketQueue + M /rt/branches/3.3-TESTING/html/Elements/SelectOwner + M /rt/branches/3.3-TESTING/html/Elements/SelectQueue + M /rt/branches/3.3-TESTING/html/Elements/SelectResultsPerPage + M /rt/branches/3.3-TESTING/html/Elements/SelectSortOrder + M /rt/branches/3.3-TESTING/html/Elements/SelectStatus + M /rt/branches/3.3-TESTING/html/Elements/SelectTicketSortBy + M /rt/branches/3.3-TESTING/html/Elements/SelectTicketTypes + M /rt/branches/3.3-TESTING/html/Elements/SelectUsers + M /rt/branches/3.3-TESTING/html/Elements/SelectWatcherType + M /rt/branches/3.3-TESTING/html/Elements/SetupSessionCookie + M /rt/branches/3.3-TESTING/html/Elements/ShowCustomFieldImage + M /rt/branches/3.3-TESTING/html/Elements/ShowCustomFields + M /rt/branches/3.3-TESTING/html/Elements/ShowLink + M /rt/branches/3.3-TESTING/html/Elements/ShowLinks + M /rt/branches/3.3-TESTING/html/Elements/ShowMemberships + M /rt/branches/3.3-TESTING/html/Elements/SimpleSearch + M /rt/branches/3.3-TESTING/html/Elements/Submit + M /rt/branches/3.3-TESTING/html/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/Elements/TitleBox + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxEnd + M /rt/branches/3.3-TESTING/html/Elements/TitleBoxStart + M /rt/branches/3.3-TESTING/html/NoAuth/Logout.html + M /rt/branches/3.3-TESTING/html/NoAuth/Reminder.html + M /rt/branches/3.3-TESTING/html/NoAuth/webrt.css + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/queue/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/queue/ns + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/attachments + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/history + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/ticket/links + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/user/default + M /rt/branches/3.3-TESTING/html/REST/1.0/Forms/user/ns + M /rt/branches/3.3-TESTING/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/3.3-TESTING/html/REST/1.0/autohandler + M /rt/branches/3.3-TESTING/html/REST/1.0/dhandler + M /rt/branches/3.3-TESTING/html/REST/1.0/logout + M /rt/branches/3.3-TESTING/html/REST/1.0/search/dhandler + M /rt/branches/3.3-TESTING/html/REST/1.0/search/ticket + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/comment + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/link + M /rt/branches/3.3-TESTING/html/REST/1.0/ticket/merge + M /rt/branches/3.3-TESTING/html/Search/Build.html + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/html/Search/Edit.html + M /rt/branches/3.3-TESTING/html/Search/Elements/BuildFormatString + M /rt/branches/3.3-TESTING/html/Search/Elements/DisplayOptions + M /rt/branches/3.3-TESTING/html/Search/Elements/EditFormat + M /rt/branches/3.3-TESTING/html/Search/Elements/EditSearches + M /rt/branches/3.3-TESTING/html/Search/Elements/NewListActions + M /rt/branches/3.3-TESTING/html/Search/Elements/PickBasics + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCFs + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCriteria + M /rt/branches/3.3-TESTING/html/Search/Elements/SearchPrivacy + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectAndOr + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectGroup + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectLinks + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectPersonType + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectSearchObject + M /rt/branches/3.3-TESTING/html/Search/Elements/SelectSearchesForObjects + D /rt/branches/3.3-TESTING/html/Search/Elements/TicketRow + M /rt/branches/3.3-TESTING/html/Search/Results.html + M /rt/branches/3.3-TESTING/html/Search/Results.rdf + M /rt/branches/3.3-TESTING/html/Search/Results.tsv + M /rt/branches/3.3-TESTING/html/SelfService/Attachment/dhandler + M /rt/branches/3.3-TESTING/html/SelfService/Closed.html + M /rt/branches/3.3-TESTING/html/SelfService/Create.html + M /rt/branches/3.3-TESTING/html/SelfService/Display.html + M /rt/branches/3.3-TESTING/html/SelfService/Elements/GotoTicket + M /rt/branches/3.3-TESTING/html/SelfService/Elements/Header + M /rt/branches/3.3-TESTING/html/SelfService/Elements/MyRequests + M /rt/branches/3.3-TESTING/html/SelfService/Elements/Tabs + M /rt/branches/3.3-TESTING/html/SelfService/Error.html + M /rt/branches/3.3-TESTING/html/SelfService/Prefs.html + M /rt/branches/3.3-TESTING/html/SelfService/Update.html + M /rt/branches/3.3-TESTING/html/SelfService/index.html + M /rt/branches/3.3-TESTING/html/Ticket/Attachment/dhandler + M /rt/branches/3.3-TESTING/html/Ticket/Create.html + M /rt/branches/3.3-TESTING/html/Ticket/Display.html + M /rt/branches/3.3-TESTING/html/Ticket/Elements/AddWatchers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/BulkLinks + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditBasics + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomField + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditCustomFields + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditDates + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditPeople + M /rt/branches/3.3-TESTING/html/Ticket/Elements/EditWatchers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/FindAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/LoadTextAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/PreviewScrips + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowBasics + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowCustomFields + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowDates + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowDependencies + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowGroupMembers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowHistory + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMemberOf + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMembers + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageHeaders + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowMessageStanza + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowPeople + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowReferences + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowRequestor + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowSummary + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowTransaction + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowTransactionAttachments + M /rt/branches/3.3-TESTING/html/Ticket/Elements/ShowUserEntry + M /rt/branches/3.3-TESTING/html/Ticket/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Ticket/History.html + M /rt/branches/3.3-TESTING/html/Ticket/Modify.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyAll.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyDates.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyLinks.html + M /rt/branches/3.3-TESTING/html/Ticket/ModifyPeople.html + M /rt/branches/3.3-TESTING/html/Ticket/ShowEmailRecord.html + M /rt/branches/3.3-TESTING/html/Ticket/Update.html + M /rt/branches/3.3-TESTING/html/Tools/Elements/Tabs + M /rt/branches/3.3-TESTING/html/Tools/MyDay.html + M /rt/branches/3.3-TESTING/html/Tools/Offline.html + M /rt/branches/3.3-TESTING/html/User/Delegation.html + M /rt/branches/3.3-TESTING/html/User/Elements/DelegateRights + M /rt/branches/3.3-TESTING/html/User/Elements/GroupTabs + M /rt/branches/3.3-TESTING/html/User/Elements/Tabs + M /rt/branches/3.3-TESTING/html/User/Groups/Members.html + M /rt/branches/3.3-TESTING/html/User/Groups/Modify.html + M /rt/branches/3.3-TESTING/html/User/Groups/index.html + M /rt/branches/3.3-TESTING/html/User/Prefs.html + M /rt/branches/3.3-TESTING/html/autohandler + M /rt/branches/3.3-TESTING/html/index.html + M /rt/branches/3.3-TESTING/html/l + M /rt/branches/3.3-TESTING/lib/RT/ACE.pm + M /rt/branches/3.3-TESTING/lib/RT/ACE_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL.pm + M /rt/branches/3.3-TESTING/lib/RT/ACL_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/AutoOpen.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Autoreply.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/CreateTickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/EscalatePriority.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Notify.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/NotifyAsComment.pm + A /rt/branches/3.3-TESTING/lib/RT/Action/RecordComment.pm + A /rt/branches/3.3-TESTING/lib/RT/Action/RecordCorrespondence.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/ResolveMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/SendEmail.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/SetPriority.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/UserDefined.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachment_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments.pm + M /rt/branches/3.3-TESTING/lib/RT/Attachments_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes.pm + M /rt/branches/3.3-TESTING/lib/RT/Attributes_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Base.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/CachedGroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/AnyTransaction.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/BeforeDue.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/Overdue.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/OwnerChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/PriorityChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/PriorityExceeds.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/QueueChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/StatusChange.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/UserDefined.pm + M /rt/branches/3.3-TESTING/lib/RT/CurrentUser.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/CustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Date.pm + M /rt/branches/3.3-TESTING/lib/RT/EmailParser.pm + M /rt/branches/3.3-TESTING/lib/RT/Group.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMember_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers.pm + M /rt/branches/3.3-TESTING/lib/RT/GroupMembers_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Group_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups.pm + M /rt/branches/3.3-TESTING/lib/RT/Groups_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Handle.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/cs.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/de.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/i_default.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/CLI.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Auth/GnuPG.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Auth/MailFrom.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email/Filter/SpamAssassin.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Email.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/REST.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/Link.pm + M /rt/branches/3.3-TESTING/lib/RT/Link_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Links.pm + M /rt/branches/3.3-TESTING/lib/RT/Links_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomField.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomField_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFields.pm + M /rt/branches/3.3-TESTING/lib/RT/ObjectCustomFields_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal.pm + M /rt/branches/3.3-TESTING/lib/RT/Principal_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals.pm + M /rt/branches/3.3-TESTING/lib/RT/Principals_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue.pm + M /rt/branches/3.3-TESTING/lib/RT/Queue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues.pm + M /rt/branches/3.3-TESTING/lib/RT/Queues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Record.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripActions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripConditions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrip_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips.pm + M /rt/branches/3.3-TESTING/lib/RT/Scrips_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/ActiveTicketsInQueue.pm + A /rt/branches/3.3-TESTING/lib/RT/Search/FromSQL.pm + M /rt/branches/3.3-TESTING/lib/RT/Search/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/SearchBuilder.pm + M /rt/branches/3.3-TESTING/lib/RT/System.pm + M /rt/branches/3.3-TESTING/lib/RT/Template.pm + M /rt/branches/3.3-TESTING/lib/RT/Template_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates.pm + M /rt/branches/3.3-TESTING/lib/RT/Templates_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValue_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues.pm + M /rt/branches/3.3-TESTING/lib/RT/TicketCustomFieldValues_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction.pm + M /rt/branches/3.3-TESTING/lib/RT/Transaction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions.pm + M /rt/branches/3.3-TESTING/lib/RT/Transactions_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/URI/base.pm + M /rt/branches/3.3-TESTING/lib/RT/URI/fsck_com_rt.pm + M /rt/branches/3.3-TESTING/lib/RT/URI.pm + M /rt/branches/3.3-TESTING/lib/RT/User.pm + M /rt/branches/3.3-TESTING/lib/RT/User_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Users.pm + M /rt/branches/3.3-TESTING/lib/RT/Users_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT.pm.in + M /rt/branches/3.3-TESTING/lib/t/02regression.t.in + A /rt/branches/3.3-TESTING/lib/t/05cronsupport.pl.in + M /rt/branches/3.3-TESTING/sbin/extract-message-catalog + M /rt/branches/3.3-TESTING/sbin/extract_pod_tests + M /rt/branches/3.3-TESTING/sbin/factory + M /rt/branches/3.3-TESTING/sbin/license_tag + M /rt/branches/3.3-TESTING/sbin/regression_harness + M /rt/branches/3.3-TESTING/sbin/rt-dump-database.in + M /rt/branches/3.3-TESTING/sbin/rt-setup-database.in + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + ---------------------------------------------------------------------- + r8262@tinbook: jesse | 2004-07-21T18:06:24.396460Z + + Merged forward from 3.2 + + ---------------------------------------------------------------------- + r3390@tinbook: jesse | 2004-07-14T19:30:37.426202Z + + RT-Ticket: 5886 + RT-Action: correspond + RT-Status: resolved + + Updated rt-crontool to pass in CurrentUser when creating new actions and searches.. + + ---------------------------------------------------------------------- + r3397@tinbook: jesse | 2004-07-14T19:44:51.378312Z + + + ---------------------------------------------------------------------- + r3398@tinbook: jesse | 2004-07-14T19:59:24.627023Z + + + ---------------------------------------------------------------------- + r3399@tinbook: jesse | 2004-07-14T20:23:59.757938Z + + Bumping to 3.2.1rc4 + ---------------------------------------------------------------------- + r8220@tinbook: jesse | 2004-07-15T19:02:55.020727Z + + RT-Ticket: 5891 + RT-Status: open + RT-Action: correspond + + Interim measure to only list sortable fields in the "Sort display by" + options. + + + ---------------------------------------------------------------------- + r8222@tinbook: jesse | 2004-07-16T17:09:30.264982Z + + Web UI: Fixed bug which prevented unlimited searches + ---------------------------------------------------------------------- + r8239@tinbook: jesse | 2004-07-19T16:54:11.660605Z + + + ---------------------------------------------------------------------- + r8240@tinbook: jesse | 2004-07-19T17:01:43.322617Z + + Retagging the source code with the updated submission policy + ---------------------------------------------------------------------- + r8258@tinbook: jesse | 2004-07-20T21:24:03.019565Z + + Crontool additions to support scripted notifications + ---------------------------------------------------------------------- + r8261@tinbook: jesse | 2004-07-21T18:05:55.579150Z + + + + + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r8264@tinbook: jesse | 2004-07-21T19:10:28.393515Z + + Bumpped the copyright/license/notice + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1264 | autrijus | 2004-07-19 22:56:01 -0400 (Mon, 19 Jul 2004) | 8 lines +Changed paths: + M /rt + M /rt/branches/3.2-RELEASE/html/Elements/Header + M /rt/branches/3.2-RELEASE/html/Elements/SetupSessionCookie + M /rt/branches/3.2-RELEASE/html/NoAuth/webrt.css + M /rt/branches/3.3-TESTING/html/Download/Tabular/dhandler + M /rt/branches/PLATANO-EXPERIMENTAL/docs/design_docs/ruleset-workflow.txt + + + r6188@not: autrijus | 2004-07-20T02:52:39.146361Z + + + + + + +------------------------------------------------------------------------ +r1247 | autrijus | 2004-07-14 15:24:23 -0400 (Wed, 14 Jul 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/3.3-TESTING/lib/RT/StyleGuide.pod + + ---------------------------------------------------------------------- + r6050@not: autrijus | 2004-07-14T19:21:34.616159Z + + * Add style guide information about parameter passing style. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1233 | jesse | 2004-07-14 00:37:55 -0400 (Wed, 14 Jul 2004) | 10 lines +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/bin/mason_handler.fcgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.scgi.in + M /rt/branches/3.3-TESTING/bin/mason_handler.svc.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/etc/schema.Sybase + M /rt/branches/3.3-TESTING/html/Admin/Elements/EditScrip + M /rt/branches/3.3-TESTING/html/Elements/Header + M /rt/branches/3.3-TESTING/html/Elements/TicketList + M /rt/branches/3.3-TESTING/html/Search/Build.html + M /rt/branches/3.3-TESTING/html/Search/Bulk.html + M /rt/branches/3.3-TESTING/lib/RT/Action/CreateTickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/Condition/Generic.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/it.po + A /rt/branches/3.3-TESTING/lib/RT/Interface/Web + A /rt/branches/3.3-TESTING/lib/RT/Interface/Web/Handler.pm + M /rt/branches/3.3-TESTING/lib/RT/Interface/Web.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripAction_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Ticket_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + + ---------------------------------------------------------------------- + r3374@tinbook: jesse | 2004-07-13T23:31:39.996661Z + + Merge forward from RT 3.2 + ---------------------------------------------------------------------- + r3375@tinbook: jesse | 2004-07-14T04:33:29.296451Z + + Minor fixes for a merge problem from 3.2 + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1232 | jesse | 2004-07-13 19:15:10 -0400 (Tue, 13 Jul 2004) | 1 line +Changed paths: + M /rt/branches/3.3-TESTING + M /rt/branches/3.3-TESTING/Makefile.in + M /rt/branches/3.3-TESTING/README + M /rt/branches/3.3-TESTING/UPGRADING + M /rt/branches/3.3-TESTING/bin/rt-crontool.in + M /rt/branches/3.3-TESTING/bin/webmux.pl.in + M /rt/branches/3.3-TESTING/etc/RT_Config.pm.in + M /rt/branches/3.3-TESTING/html/Elements/QuickCreate + M /rt/branches/3.3-TESTING/html/Elements/Quicksearch + D /rt/branches/3.3-TESTING/html/Elements/ViewUser + M /rt/branches/3.3-TESTING/html/Search/Build.html + M /rt/branches/3.3-TESTING/html/Search/Elements/DisplayOptions + M /rt/branches/3.3-TESTING/html/Search/Elements/EditSearches + M /rt/branches/3.3-TESTING/html/Search/Elements/PickCFs + M /rt/branches/3.3-TESTING/html/Search/Results.html + M /rt/branches/3.3-TESTING/html/Search/Results.rdf + M /rt/branches/3.3-TESTING/html/Ticket/Update.html + M /rt/branches/3.3-TESTING/html/Tools/Offline.html + M /rt/branches/3.3-TESTING/lib/RT/Action/CreateTickets.pm + M /rt/branches/3.3-TESTING/lib/RT/Action/SendEmail.pm + M /rt/branches/3.3-TESTING/lib/RT/Attribute_Overlay.pm + M /rt/branches/3.3-TESTING/lib/RT/I18N/cs.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/da.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/de.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/en_malkovich.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/es.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/fi.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/fr.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/he.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/hu.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/it.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/ja.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/nl.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/no.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/pt_br.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/ru.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_cn.po + M /rt/branches/3.3-TESTING/lib/RT/I18N/zh_tw.po + M /rt/branches/3.3-TESTING/lib/RT/Tickets_Overlay.pm + M /rt/branches/3.3-TESTING/lib/t/03web.pl.in + M /rt/branches/3.3-TESTING/sbin/rt-setup-database.in + M /rt/branches/3.3-TESTING/sbin/rt-test-dependencies.in + + +------------------------------------------------------------------------ +r1224 | jesse | 2004-07-13 14:41:42 -0400 (Tue, 13 Jul 2004) | 1 line +Changed paths: + A /rt/branches/3.3-TESTING (from /rt/branches/rt-3.3:1223) + D /rt/branches/rt-3.3 + +Moving RT 3.0 from "head" to a 3.0-MAINT branch +------------------------------------------------------------------------ +r1209 | autrijus | 2004-07-12 16:22:48 -0400 (Mon, 12 Jul 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.1/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/etc/upgrade/3.1.0/schema.SQLite + + ---------------------------------------------------------------------- + r5990@not: autrijus | 2004-07-12T20:22:03.588615Z + + * Let the cf param in Ticket->CustomFieldValues be optional, + so we can get Atom tests to work. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1205 | autrijus | 2004-07-12 13:30:03 -0400 (Mon, 12 Jul 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/sbin/rt-setup-database.in + + ---------------------------------------------------------------------- + r5976@not: autrijus | 2004-07-12T17:29:13.392510Z + + * The warning on missing ACL files used $RT::EtcPath even if it's + reading it fro other paths. Fixed. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1180 | autrijus | 2004-07-05 15:43:17 -0400 (Mon, 05 Jul 2004) | 6 lines +Changed paths: + M /rt + A /rt/branches/rt-3.3/sbin/rt-dump-database.in + + ---------------------------------------------------------------------- + r5913@not: autrijus | 2004-07-05T19:41:37.720057Z + + * add rt-dump-database, a tool to dump config data to initialdata format. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1179 | autrijus | 2004-07-05 12:56:22 -0400 (Mon, 05 Jul 2004) | 8 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + + ---------------------------------------------------------------------- + r5899@not: autrijus | 2004-07-05T15:13:55.850880Z + + * correct the documentation for CreateTickets; it was still referring + to the archaic "Approvals" queue and "Approval" type, whereas now we're + using "___Approvals" and "approval" now. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1160 | jesse | 2004-06-27 23:10:54 -0400 (Sun, 27 Jun 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/releng.cnf + + ---------------------------------------------------------------------- + r1997@tinbook: jesse | 2004-06-28T03:10:36.434329Z + + Bumping to 3.3.4 + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1159 | jesse | 2004-06-27 23:08:01 -0400 (Sun, 27 Jun 2004) | 24 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/Makefile.in + M /rt/branches/rt-3.3/UPGRADING + M /rt/branches/rt-3.3/bin/mason_handler.fcgi.in + M /rt/branches/rt-3.3/bin/mason_handler.scgi.in + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/configure.ac + M /rt/branches/rt-3.3/etc/RT_Config.pm.in + M /rt/branches/rt-3.3/html/Admin/Elements/EditCustomField + M /rt/branches/rt-3.3/html/Admin/Elements/EditScrip + M /rt/branches/rt-3.3/html/Admin/Elements/EditTemplates + M /rt/branches/rt-3.3/html/Admin/Elements/UserTabs + M /rt/branches/rt-3.3/html/Admin/Global/GroupRights.html + M /rt/branches/rt-3.3/html/Admin/Global/Template.html + M /rt/branches/rt-3.3/html/Admin/Global/UserRights.html + M /rt/branches/rt-3.3/html/Admin/Groups/GroupRights.html + M /rt/branches/rt-3.3/html/Admin/Groups/Members.html + M /rt/branches/rt-3.3/html/Admin/Groups/Modify.html + M /rt/branches/rt-3.3/html/Admin/Groups/UserRights.html + M /rt/branches/rt-3.3/html/Admin/Queues/GroupRights.html + M /rt/branches/rt-3.3/html/Admin/Queues/Modify.html + M /rt/branches/rt-3.3/html/Admin/Queues/Template.html + M /rt/branches/rt-3.3/html/Admin/Queues/UserRights.html + M /rt/branches/rt-3.3/html/Admin/Users/Modify.html + M /rt/branches/rt-3.3/html/Approvals/index.html + M /rt/branches/rt-3.3/html/Search/Bulk.html + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + M /rt/branches/rt-3.3/html/SelfService/Prefs.html + M /rt/branches/rt-3.3/html/Ticket/Display.html + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowAttachments + M /rt/branches/rt-3.3/html/Ticket/ModifyAll.html + M /rt/branches/rt-3.3/html/Ticket/ModifyDates.html + M /rt/branches/rt-3.3/html/Ticket/ModifyLinks.html + M /rt/branches/rt-3.3/html/Ticket/Update.html + M /rt/branches/rt-3.3/html/User/Delegation.html + M /rt/branches/rt-3.3/html/User/Groups/Members.html + M /rt/branches/rt-3.3/html/User/Groups/Modify.html + M /rt/branches/rt-3.3/html/User/Prefs.html + M /rt/branches/rt-3.3/html/autohandler + M /rt/branches/rt-3.3/lib/RT/I18N/da.po + M /rt/branches/rt-3.3/lib/RT/I18N/de.po + M /rt/branches/rt-3.3/lib/RT/I18N/en_malkovich.po + M /rt/branches/rt-3.3/lib/RT/I18N/es.po + M /rt/branches/rt-3.3/lib/RT/I18N/fi.po + M /rt/branches/rt-3.3/lib/RT/I18N/fr.po + M /rt/branches/rt-3.3/lib/RT/I18N/he.po + M /rt/branches/rt-3.3/lib/RT/I18N/it.po + M /rt/branches/rt-3.3/lib/RT/I18N/ja.po + M /rt/branches/rt-3.3/lib/RT/I18N/nl.po + M /rt/branches/rt-3.3/lib/RT/I18N/no.po + M /rt/branches/rt-3.3/lib/RT/I18N/pt_br.po + M /rt/branches/rt-3.3/lib/RT/I18N/ru.po + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/SearchBuilder.pm + M /rt/branches/rt-3.3/lib/RT/Templates_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + + ---------------------------------------------------------------------- + r1769@tinbook: jesse | 2004-06-01T20:22:38.640731Z + + + ---------------------------------------------------------------------- + r1902@tinbook: jesse | 2004-06-17T01:08:53.996154Z + + + ---------------------------------------------------------------------- + r1991@tinbook: jesse | 2004-06-28T02:03:57.669851Z + + + ---------------------------------------------------------------------- + r1992@tinbook: jesse | 2004-06-28T02:19:36.386707Z + + Pulling forward from RT 3.1 + + + ---------------------------------------------------------------------- + r1993@tinbook: jesse | 2004-06-28T03:06:56.930396Z + + Merging forward from 3.1 + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1153 | autrijus | 2004-06-27 00:02:47 -0400 (Sun, 27 Jun 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/Tools/Offline.html + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + + ---------------------------------------------------------------------- + r5788@not: autrijus | 2004-06-27T04:02:12.644291Z + + * import 3.1 again due to glitches in Offline.html + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1150 | autrijus | 2004-06-26 16:31:56 -0400 (Sat, 26 Jun 2004) | 14 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/Makefile.in + M /rt/branches/rt-3.3/README + M /rt/branches/rt-3.3/UPGRADING + M /rt/branches/rt-3.3/bin/mason_handler.fcgi.in + D /rt/branches/rt-3.3/bin/rt-commit-handler.in + M /rt/branches/rt-3.3/bin/rt-crontool.in + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/configure.ac + M /rt/branches/rt-3.3/etc/RT_Config.pm.in + M /rt/branches/rt-3.3/etc/acl.mysql + M /rt/branches/rt-3.3/etc/initialdata + A /rt/branches/rt-3.3/etc/upgrade/3.1.17 + A /rt/branches/rt-3.3/etc/upgrade/3.1.17/content + M /rt/branches/rt-3.3/html/Admin/Elements/EditQueueWatchers + M /rt/branches/rt-3.3/html/Admin/Elements/EditScrip + D /rt/branches/rt-3.3/html/Admin/Elements/ModifyQueue + D /rt/branches/rt-3.3/html/Admin/Elements/ModifyUser + M /rt/branches/rt-3.3/html/Admin/Queues/People.html + M /rt/branches/rt-3.3/html/Admin/Users/Modify.html + D /rt/branches/rt-3.3/html/Admin/Users/Prefs.html + D /rt/branches/rt-3.3/html/Developer + M /rt/branches/rt-3.3/html/Elements/EditLinks + M /rt/branches/rt-3.3/html/Elements/Header + M /rt/branches/rt-3.3/html/Elements/ScrubHTML + M /rt/branches/rt-3.3/html/Elements/SelectOwner + M /rt/branches/rt-3.3/html/Elements/SelectStatus + M /rt/branches/rt-3.3/html/Elements/TicketList + M /rt/branches/rt-3.3/html/Elements/TitleBoxStart + M /rt/branches/rt-3.3/html/NoAuth/webrt.css + M /rt/branches/rt-3.3/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/rt-3.3/html/REST/1.0/ticket/link + M /rt/branches/rt-3.3/html/Search/Build.html + M /rt/branches/rt-3.3/html/Search/Bulk.html + M /rt/branches/rt-3.3/html/Search/Edit.html + M /rt/branches/rt-3.3/html/Search/Elements/BuildFormatString + M /rt/branches/rt-3.3/html/Search/Elements/EditFormat + M /rt/branches/rt-3.3/html/Search/Elements/EditSearches + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + M /rt/branches/rt-3.3/html/Search/Results.html + M /rt/branches/rt-3.3/html/SelfService/Display.html + M /rt/branches/rt-3.3/html/SelfService/Update.html + M /rt/branches/rt-3.3/html/Ticket/Create.html + M /rt/branches/rt-3.3/html/Ticket/Elements/EditBasics + M /rt/branches/rt-3.3/html/Ticket/Elements/EditPeople + M /rt/branches/rt-3.3/html/Ticket/Elements/EditWatchers + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowDates + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowGroupMembers + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowPeople + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowSummary + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowUserEntry + M /rt/branches/rt-3.3/html/Ticket/Elements/Tabs + M /rt/branches/rt-3.3/html/Ticket/ModifyAll.html + M /rt/branches/rt-3.3/html/Ticket/ModifyLinks.html + M /rt/branches/rt-3.3/html/Ticket/Update.html + M /rt/branches/rt-3.3/html/Tools/MyDay.html + M /rt/branches/rt-3.3/html/Tools/Offline.html + M /rt/branches/rt-3.3/html/User/Prefs.html + M /rt/branches/rt-3.3/html/index.html + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Action/EscalatePriority.pm + A /rt/branches/rt-3.3/lib/RT/Condition/PriorityChange.pm + M /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + M /rt/branches/rt-3.3/lib/RT/EmailParser.pm + M /rt/branches/rt-3.3/lib/RT/I18N/cs.po + M /rt/branches/rt-3.3/lib/RT/I18N/da.po + M /rt/branches/rt-3.3/lib/RT/I18N/de.po + M /rt/branches/rt-3.3/lib/RT/I18N/en_malkovich.po + M /rt/branches/rt-3.3/lib/RT/I18N/es.po + M /rt/branches/rt-3.3/lib/RT/I18N/fi.po + M /rt/branches/rt-3.3/lib/RT/I18N/fr.po + M /rt/branches/rt-3.3/lib/RT/I18N/he.po + M /rt/branches/rt-3.3/lib/RT/I18N/it.po + M /rt/branches/rt-3.3/lib/RT/I18N/ja.po + M /rt/branches/rt-3.3/lib/RT/I18N/nl.po + M /rt/branches/rt-3.3/lib/RT/I18N/no.po + M /rt/branches/rt-3.3/lib/RT/I18N/pt_br.po + M /rt/branches/rt-3.3/lib/RT/I18N/ru.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_cn.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_tw.po + M /rt/branches/rt-3.3/lib/RT/Interface/Email.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Record.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm + M /rt/branches/rt-3.3/lib/RT.pm.in + M /rt/branches/rt-3.3/lib/t/00smoke.t.in + M /rt/branches/rt-3.3/lib/t/02regression.t.in + M /rt/branches/rt-3.3/lib/t/03web.pl.in + M /rt/branches/rt-3.3/sbin/rt-test-dependencies.in + + ---------------------------------------------------------------------- + r5774@not: autrijus | 2004-06-26T10:40:48.767820Z + + * incremental merge from 3.1 to 3.3 + ---------------------------------------------------------------------- + r5778@not: autrijus | 2004-06-26T11:28:26.143291Z + + * solve utf8 quoting problem on "Take". + ---------------------------------------------------------------------- + r5781@not: autrijus | 2004-06-26T20:27:29.184033Z + + * restore hu.po + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1121 | autrijus | 2004-06-20 13:59:07 -0400 (Sun, 20 Jun 2004) | 10 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/html/Elements/Header + M /rt/branches/rt-3.3/html/Elements/SetupSessionCookie + M /rt/branches/rt-3.3/html/NoAuth/webrt.css + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + + ---------------------------------------------------------------------- + r5682@not: autrijus | 2004-06-20T17:57:48.360088Z + + * Supports native MasonX::Apache2Handler. + * Changed header_out to use headers_out instead (which should be + used in 1.0 as well). Cf.: + http://perl.apache.planetmirror.com/docs/2.0/user/porting/compat.html + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1082 | alexmv | 2004-06-16 10:53:17 -0400 (Wed, 16 Jun 2004) | 11 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Record.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + +RT-Ticket: 5732 +RT-Status: stalled +RT-Update: correspond + + * POD spacing mistake in Ticket_Overlay + + * Ticket_Overlay now overrides RT::Record's CustomFieldValues method, + to intercept calls where the field is passed by name. I don't have + a way of testing this patch, so this bug is getting marked stalled + until this patch is verified. + +------------------------------------------------------------------------ +r1033 | leira | 2004-06-08 14:26:18 -0400 (Tue, 08 Jun 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + +Pass along 'Type' argument in CreateTickets (replicates a patch that was applied to 3.1, but needed for a customer in this branch now). + +------------------------------------------------------------------------ +r1031 | jesse | 2004-06-08 01:05:46 -0400 (Tue, 08 Jun 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/bin/standalone_httpd.in + + ---------------------------------------------------------------------- + r1752@debian: jesse | 2004-06-08T13:50:52.709840Z + + standalone httpd is now forking rather than singleprocess + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r1023 | alexmv | 2004-06-07 16:03:46 -0400 (Mon, 07 Jun 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/I18N/he.po + +RT-Ticket: 5674 +RT-Action: comment +RT-Status: resolved + + * Apply Ilan Rabinovitch's changes + +------------------------------------------------------------------------ +r1022 | alexmv | 2004-06-07 14:47:18 -0400 (Mon, 07 Jun 2004) | 7 lines +Changed paths: + M /rt/branches/rt-3.3/etc/schema.mysql + +RT-Ticket: 5648 +RT-Action: comment +RT-Status: resolved + + * The last hunk of the ticket no longer applies, as those indexes + were reshuffled because they were too long. + +------------------------------------------------------------------------ +r986 | jesse | 2004-05-31 21:54:38 -0400 (Mon, 31 May 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/configure.ac + A /rt/branches/rt-3.3/etc/acl.Sybase + A /rt/branches/rt-3.3/etc/schema.Sybase + M /rt/branches/rt-3.3/html/Search/Build.html + M /rt/branches/rt-3.3/html/Search/Bulk.html + M /rt/branches/rt-3.3/lib/RT/EmailParser.pm + M /rt/branches/rt-3.3/lib/RT/Handle.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/rt-3.3/lib/RT.pm.in + M /rt/branches/rt-3.3/sbin/rt-setup-database.in + M /rt/branches/rt-3.3/sbin/rt-test-dependencies.in + +Merging forward from RT 3.1 +------------------------------------------------------------------------ +r981 | jesse | 2004-05-30 03:01:04 -0400 (Sun, 30 May 2004) | 7 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/etc/schema.mysql + M /rt/branches/rt-3.3/etc/upgrade/3.3.0/schema.mysql + + + ---------------------------------------------------------------------- + r1721@debian: jesse | 2004-05-30T16:04:25.431679Z + + Mysql on some platforms (built with unicode?) has a shorter max index length. adjusted indexes + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r966 | jesse | 2004-05-27 23:30:59 -0400 (Thu, 27 May 2004) | 35 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/configure.ac + M /rt/branches/rt-3.3/etc/acl.Pg + D /rt/branches/rt-3.3/etc/upgrade/2.1.71 + M /rt/branches/rt-3.3/html/Admin/Elements/ToolTabs + D /rt/branches/rt-3.3/html/Developer/Perldoc.html + M /rt/branches/rt-3.3/html/Elements/EditLinks + M /rt/branches/rt-3.3/html/Elements/Footer + D /rt/branches/rt-3.3/html/Elements/ShadedBox + D /rt/branches/rt-3.3/html/Elements/ShadedInputRow + D /rt/branches/rt-3.3/html/Elements/ShadedRow + M /rt/branches/rt-3.3/html/Elements/ShowLinks + M /rt/branches/rt-3.3/html/Elements/TicketList + D /rt/branches/rt-3.3/html/Projects + D /rt/branches/rt-3.3/html/Scope + M /rt/branches/rt-3.3/html/Search/Build.html + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + D /rt/branches/rt-3.3/html/Search/Elements/PickRestriction + D /rt/branches/rt-3.3/html/Search/Elements/TicketHeader + D /rt/branches/rt-3.3/html/Search/Elements/TicketHeaderCell + D /rt/branches/rt-3.3/html/Search/Listing.html + D /rt/branches/rt-3.3/html/Ticket/Elements/EditLinks + D /rt/branches/rt-3.3/html/Ticket/Elements/ShowLink + D /rt/branches/rt-3.3/html/Ticket/Elements/ShowLinks + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransactionAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/Tabs + M /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + + ---------------------------------------------------------------------- + r1710@tinbook: jesse | 2004-05-28T02:46:23.907073Z + + + ---------------------------------------------------------------------- + r1712@tinbook: jesse | 2004-05-28T03:15:12.330227Z + + ---------------------------------------------------------------------- + r1669@tinbook: jesse | 2004-05-24T02:17:41.959105Z + + + ---------------------------------------------------------------------- + r1672@tinbook: jesse | 2004-05-24T03:09:05.156817Z + + + ---------------------------------------------------------------------- + r1673@tinbook: jesse | 2004-05-24T03:59:43.181766Z + + Bumping to 3.1.16 + ---------------------------------------------------------------------- + r1706@tinbook: jesse | 2004-05-28T02:10:56.309297Z + + + ---------------------------------------------------------------------- + r1711@tinbook: jesse | 2004-05-28T02:47:49.277131Z + + + ---------------------------------------------------------------------- + + ---------------------------------------------------------------------- + r1713@tinbook: jesse | 2004-05-28T03:27:19.127190Z + + Cleaning out things split out into other products + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r965 | jesse | 2004-05-27 22:44:48 -0400 (Thu, 27 May 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/bin/standalone_httpd.in + M /rt/branches/rt-3.3/html/Search/Edit.html + M /rt/branches/rt-3.3/html/Search/Results.html + M /rt/branches/rt-3.3/html/Ticket/Elements/PreviewScrips + M /rt/branches/rt-3.3/lib/RT/Interface/Email/Auth/GnuPG.pm + + +------------------------------------------------------------------------ +r954 | autrijus | 2004-05-26 06:12:38 -0400 (Wed, 26 May 2004) | 20 lines +Changed paths: + M /rt + M /rt/branches/rt-3.1/lib/RT/I18N/zh_cn.po + M /rt/branches/rt-3.1/lib/RT/I18N/zh_tw.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_cn.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_tw.po + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + + ---------------------------------------------------------------------- + r4757@not: autrijus | 2004-05-11T06:13:28.139589Z + + * Chinese translation for 3.2 final. + ---------------------------------------------------------------------- + r5211@not: autrijus | 2004-05-26T10:07:40.959072Z + + * FreezeThaw fails badly when encoding structures with mixed unicode + and byte string contents. Switch to Storable+Base64 which deals + with this gracefully. + + ---------------------------------------------------------------------- + r5212@not: autrijus | 2004-05-26T10:09:36.398305Z + + * EscapeUTF8 should preserve the byte/unicode flag of the original + string. Otherwise, silent promotion on AutoFlush=>0 can corrupt + pages with both byte and unicode string contents. + (Reported by: LCamel and jihuang from foundry) + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r941 | jesse | 2004-05-23 22:29:51 -0400 (Sun, 23 May 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/html/Search/Build.html + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + M /rt/branches/rt-3.3/html/Ticket/Create.html + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm + A /rt/branches/rt-3.3/lib/t/data/rt-send-cc + +Merge forward from 3.1 + +------------------------------------------------------------------------ +r934 | leira | 2004-05-19 12:23:49 -0400 (Wed, 19 May 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + +Move file from 3.1 so that CF searching will work. + +------------------------------------------------------------------------ +r933 | leira | 2004-05-19 02:34:22 -0400 (Wed, 19 May 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Link_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Record.pm + +Actually pass along link error messages. Resolves bps #2210. + +------------------------------------------------------------------------ +r930 | leira | 2004-05-19 00:48:20 -0400 (Wed, 19 May 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/html/Ticket/Create.html + +Remove Debug field. + +------------------------------------------------------------------------ +r920 | jesse | 2004-05-17 22:18:53 -0400 (Mon, 17 May 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3 + + +------------------------------------------------------------------------ +r918 | jesse | 2004-05-17 22:02:24 -0400 (Mon, 17 May 2004) | 10 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/html/Admin/Groups/index.html + M /rt/branches/rt-3.3/html/Elements/MyTickets + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + M /rt/branches/rt-3.3/html/Tools/Offline.html + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/rt-3.3/lib/t/04_send_email.pl.in + + ---------------------------------------------------------------------- + r1191@Jesse-Vincents-Computer: jesse | 2004-05-18T00:35:23.362237Z + + + ---------------------------------------------------------------------- + r1192@Jesse-Vincents-Computer: jesse | 2004-05-18T02:01:52.198022Z + + Merged forward from rt 3.1 + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r901 | leira | 2004-05-14 17:35:35 -0400 (Fri, 14 May 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/html/Elements/MyTickets + +MyTickets doesn't require a Priority to be set. + +------------------------------------------------------------------------ +r890 | leira | 2004-05-14 00:28:27 -0400 (Fri, 14 May 2004) | 4 lines +Changed paths: + M /rt/branches/rt-3.3/html/Admin/Groups/index.html + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + +If there isn't a QueueObj to begin with, it can't have a Name. + +Replaced a newline that had gone astray. + +------------------------------------------------------------------------ +r864 | jesse | 2004-05-11 01:25:36 -0400 (Tue, 11 May 2004) | 8 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/html/Admin/Elements/CustomFieldTabs + M /rt/branches/rt-3.3/html/SelfService/Closed.html + M /rt/branches/rt-3.3/html/autohandler + M /rt/branches/rt-3.3/lib/RT/I18N/cs.po + M /rt/branches/rt-3.3/lib/RT/I18N/da.po + M /rt/branches/rt-3.3/lib/RT/I18N/de.po + M /rt/branches/rt-3.3/lib/RT/I18N/en.po + M /rt/branches/rt-3.3/lib/RT/I18N/en_malkovich.po + M /rt/branches/rt-3.3/lib/RT/I18N/es.po + M /rt/branches/rt-3.3/lib/RT/I18N/fi.po + M /rt/branches/rt-3.3/lib/RT/I18N/fr.po + M /rt/branches/rt-3.3/lib/RT/I18N/he.po + M /rt/branches/rt-3.3/lib/RT/I18N/hu.po + M /rt/branches/rt-3.3/lib/RT/I18N/it.po + M /rt/branches/rt-3.3/lib/RT/I18N/ja.po + M /rt/branches/rt-3.3/lib/RT/I18N/nl.po + M /rt/branches/rt-3.3/lib/RT/I18N/no.po + M /rt/branches/rt-3.3/lib/RT/I18N/pt_br.po + M /rt/branches/rt-3.3/lib/RT/I18N/ru.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_cn.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_tw.po + M /rt/branches/rt-3.3/sbin/extract-message-catalog + + + + ---------------------------------------------------------------------- + r1528@tinbook: jesse | 2004-05-11T04:57:31.357768Z + + Updated translations, linted them, updated translation extraction software + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r859 | jesse | 2004-05-09 21:29:48 -0400 (Sun, 09 May 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/releng.cnf + + ---------------------------------------------------------------------- + r1517@tinbook: jesse | 2004-05-10T01:29:37.932237Z + + Bumping to 3.3.3 + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r858 | jesse | 2004-05-09 21:27:33 -0400 (Sun, 09 May 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/Makefile.in + M /rt/branches/rt-3.3/etc/upgrade/3.3.0/schema.Pg + M /rt/branches/rt-3.3/etc/upgrade/3.3.0/schema.mysql + + ---------------------------------------------------------------------- + r1515@tinbook: jesse | 2004-05-10T01:26:38.232023Z + + Improved 3.1->3.3 migration support + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r851 | jesse | 2004-05-06 21:03:05 -0400 (Thu, 06 May 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/html/Admin/Queues/Scrip.html + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + M /rt/branches/rt-3.3/lib/RT.pm.in + +Merging forward from rt-3.1 +------------------------------------------------------------------------ +r848 | jesse | 2004-05-06 20:33:00 -0400 (Thu, 06 May 2004) | 5 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/HOWTO/README + M /rt/branches/rt-3.3/HOWTO/change.txt + M /rt/branches/rt-3.3/HOWTO/release.txt + M /rt/branches/rt-3.3/HOWTO/version-control.txt + M /rt/branches/rt-3.3/Makefile.in + M /rt/branches/rt-3.3/UPGRADING + M /rt/branches/rt-3.3/aclocal.m4 + M /rt/branches/rt-3.3/bin/mason_handler.fcgi.in + M /rt/branches/rt-3.3/bin/mason_handler.scgi.in + M /rt/branches/rt-3.3/bin/mason_handler.svc.in + M /rt/branches/rt-3.3/bin/rt-commit-handler.in + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/configure.ac + M /rt/branches/rt-3.3/docs/Security + M /rt/branches/rt-3.3/docs/design_docs/acls + M /rt/branches/rt-3.3/docs/design_docs/approval_notices + M /rt/branches/rt-3.3/docs/design_docs/approval_template + M /rt/branches/rt-3.3/docs/design_docs/cf_search + M /rt/branches/rt-3.3/docs/design_docs/cli_spec + M /rt/branches/rt-3.3/docs/design_docs/cvs_integration + M /rt/branches/rt-3.3/docs/design_docs/delegation + M /rt/branches/rt-3.3/docs/design_docs/evil_plans + M /rt/branches/rt-3.3/docs/design_docs/groups_notes + M /rt/branches/rt-3.3/docs/design_docs/link-definitions.txt + M /rt/branches/rt-3.3/docs/design_docs/recursive_group_membership_algorithm + M /rt/branches/rt-3.3/docs/design_docs/rql_parser_machine.graphviz + M /rt/branches/rt-3.3/docs/design_docs/string-extraction-guide.txt + M /rt/branches/rt-3.3/docs/design_docs/ticket_templates + M /rt/branches/rt-3.3/docs/design_docs/users + M /rt/branches/rt-3.3/docs/rt3-schema-relationships.dot + M /rt/branches/rt-3.3/etc/RT_Config.pm.in + M /rt/branches/rt-3.3/etc/RT_SiteConfig.pm + M /rt/branches/rt-3.3/etc/acl.Informix + M /rt/branches/rt-3.3/etc/acl.Oracle + M /rt/branches/rt-3.3/etc/constraints.mysql + M /rt/branches/rt-3.3/etc/drop.Informix + M /rt/branches/rt-3.3/etc/drop.Oracle + M /rt/branches/rt-3.3/etc/initialdata + M /rt/branches/rt-3.3/etc/rt.spec + M /rt/branches/rt-3.3/etc/schema.SQLite + M /rt/branches/rt-3.3/html/Admin/Elements/AddCustomFieldValue + M /rt/branches/rt-3.3/html/Admin/Elements/EditCustomField + M /rt/branches/rt-3.3/html/Admin/Elements/EditCustomFieldValues + M /rt/branches/rt-3.3/html/Admin/Elements/EditCustomFields + M /rt/branches/rt-3.3/html/Admin/Elements/EditQueueWatchers + M /rt/branches/rt-3.3/html/Admin/Elements/EditScrips + M /rt/branches/rt-3.3/html/Admin/Elements/EditTemplates + M /rt/branches/rt-3.3/html/Admin/Elements/ListGlobalCustomFields + M /rt/branches/rt-3.3/html/Admin/Elements/QueueRightsForUser + M /rt/branches/rt-3.3/html/Admin/Elements/SelectCustomFieldType + M /rt/branches/rt-3.3/html/Admin/Elements/SelectGroups + M /rt/branches/rt-3.3/html/Admin/Elements/SelectModifyGroup + M /rt/branches/rt-3.3/html/Admin/Elements/SelectNewGroupMembers + M /rt/branches/rt-3.3/html/Admin/Elements/SelectRights + M /rt/branches/rt-3.3/html/Admin/Elements/SelectScripAction + M /rt/branches/rt-3.3/html/Admin/Elements/SelectScripCondition + M /rt/branches/rt-3.3/html/Admin/Elements/SelectSingleOrMultiple + M /rt/branches/rt-3.3/html/Admin/Elements/SelectUsers + M /rt/branches/rt-3.3/html/Admin/Global/Scrip.html + M /rt/branches/rt-3.3/html/Admin/Groups/GroupRights.html + M /rt/branches/rt-3.3/html/Admin/Groups/Members.html + M /rt/branches/rt-3.3/html/Admin/Groups/Modify.html + M /rt/branches/rt-3.3/html/Admin/Groups/UserRights.html + M /rt/branches/rt-3.3/html/Admin/Groups/index.html + M /rt/branches/rt-3.3/html/Admin/Queues/CustomField.html + M /rt/branches/rt-3.3/html/Admin/Queues/CustomFields.html + M /rt/branches/rt-3.3/html/Admin/Queues/Scrip.html + M /rt/branches/rt-3.3/html/Approvals/Display.html + M /rt/branches/rt-3.3/html/Approvals/Elements/Approve + M /rt/branches/rt-3.3/html/Approvals/Elements/PendingMyApproval + M /rt/branches/rt-3.3/html/Approvals/Elements/ShowDependency + M /rt/branches/rt-3.3/html/Approvals/Elements/Tabs + M /rt/branches/rt-3.3/html/Approvals/index.html + M /rt/branches/rt-3.3/html/Elements/BevelBoxRaisedEnd + M /rt/branches/rt-3.3/html/Elements/BevelBoxRaisedStart + M /rt/branches/rt-3.3/html/Elements/CreateTicket + M /rt/branches/rt-3.3/html/Elements/GotoTicket + M /rt/branches/rt-3.3/html/Elements/Menu + M /rt/branches/rt-3.3/html/Elements/MyRequests + M /rt/branches/rt-3.3/html/Elements/MyTickets + M /rt/branches/rt-3.3/html/Elements/PageLayout + M /rt/branches/rt-3.3/html/Elements/Quicksearch + M /rt/branches/rt-3.3/html/Elements/Refresh + M /rt/branches/rt-3.3/html/Elements/SelectAttachmentField + M /rt/branches/rt-3.3/html/Elements/SelectCustomFieldOperator + M /rt/branches/rt-3.3/html/Elements/SelectCustomFieldValue + M /rt/branches/rt-3.3/html/Elements/SelectGroups + M /rt/branches/rt-3.3/html/Elements/SelectLinkType + M /rt/branches/rt-3.3/html/Elements/SelectMatch + M /rt/branches/rt-3.3/html/Elements/SelectNewTicketQueue + M /rt/branches/rt-3.3/html/Elements/SelectQueue + M /rt/branches/rt-3.3/html/Elements/SelectResultsPerPage + M /rt/branches/rt-3.3/html/Elements/SelectSortOrder + M /rt/branches/rt-3.3/html/Elements/SelectTicketSortBy + M /rt/branches/rt-3.3/html/Elements/SelectTicketTypes + M /rt/branches/rt-3.3/html/Elements/ViewUser + M /rt/branches/rt-3.3/html/NoAuth/images/back_home.gif + M /rt/branches/rt-3.3/html/NoAuth/images/bplogo.gif + M /rt/branches/rt-3.3/html/NoAuth/images/favicon.png + M /rt/branches/rt-3.3/html/NoAuth/images/head_requestracker.gif + M /rt/branches/rt-3.3/html/NoAuth/images/rt.jpg + M /rt/branches/rt-3.3/html/NoAuth/images/space.gif + M /rt/branches/rt-3.3/html/NoAuth/images/spacer.gif + M /rt/branches/rt-3.3/html/NoAuth/images/squares_blue.gif + M /rt/branches/rt-3.3/html/REST/1.0/Forms/queue/default + M /rt/branches/rt-3.3/html/REST/1.0/Forms/queue/ns + M /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/attachments + M /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/links + M /rt/branches/rt-3.3/html/REST/1.0/Forms/user/default + M /rt/branches/rt-3.3/html/REST/1.0/Forms/user/ns + M /rt/branches/rt-3.3/html/REST/1.0/NoAuth/mail-gateway + M /rt/branches/rt-3.3/html/REST/1.0/logout + M /rt/branches/rt-3.3/html/REST/1.0/search/dhandler + M /rt/branches/rt-3.3/html/REST/1.0/ticket/comment + M /rt/branches/rt-3.3/html/REST/1.0/ticket/link + M /rt/branches/rt-3.3/html/REST/1.0/ticket/merge + M /rt/branches/rt-3.3/html/Search/Elements/PickCFs + M /rt/branches/rt-3.3/html/Search/Elements/TicketRow + M /rt/branches/rt-3.3/html/SelfService/Attachment/dhandler + M /rt/branches/rt-3.3/html/SelfService/Closed.html + M /rt/branches/rt-3.3/html/SelfService/Elements/Tabs + M /rt/branches/rt-3.3/html/SelfService/index.html + M /rt/branches/rt-3.3/html/Ticket/Create.html + M /rt/branches/rt-3.3/html/Ticket/Display.html + M /rt/branches/rt-3.3/html/Ticket/Elements/BulkLinks + M /rt/branches/rt-3.3/html/Ticket/Elements/EditCustomField + M /rt/branches/rt-3.3/html/Ticket/Elements/EditCustomFields + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowCustomFields + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageHeaders + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction + M /rt/branches/rt-3.3/html/Ticket/ShowEmailRecord.html + M /rt/branches/rt-3.3/html/Tools/Offline.html + M /rt/branches/rt-3.3/html/User/Delegation.html + M /rt/branches/rt-3.3/html/User/Elements/DelegateRights + M /rt/branches/rt-3.3/html/User/Elements/GroupTabs + M /rt/branches/rt-3.3/html/User/Elements/Tabs + M /rt/branches/rt-3.3/html/User/Groups/Members.html + M /rt/branches/rt-3.3/html/User/Groups/Modify.html + M /rt/branches/rt-3.3/html/User/Groups/index.html + M /rt/branches/rt-3.3/html/index.html + M /rt/branches/rt-3.3/html/l + M /rt/branches/rt-3.3/install-sh + M /rt/branches/rt-3.3/lib/RT/ACE_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/ACL_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Action/EscalatePriority.pm + M /rt/branches/rt-3.3/lib/RT/Action/ResolveMembers.pm + M /rt/branches/rt-3.3/lib/RT/Action/SendEmail.pm + M /rt/branches/rt-3.3/lib/RT/Action/SetPriority.pm + M /rt/branches/rt-3.3/lib/RT/Action/UserDefined.pm + M /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Attachments_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/CachedGroupMember.pm + M /rt/branches/rt-3.3/lib/RT/CachedGroupMember_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/CachedGroupMembers.pm + M /rt/branches/rt-3.3/lib/RT/CachedGroupMembers_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Condition/AnyTransaction.pm + M /rt/branches/rt-3.3/lib/RT/Condition/BeforeDue.pm + M /rt/branches/rt-3.3/lib/RT/Condition/Overdue.pm + M /rt/branches/rt-3.3/lib/RT/Condition/OwnerChange.pm + M /rt/branches/rt-3.3/lib/RT/Condition/PriorityExceeds.pm + M /rt/branches/rt-3.3/lib/RT/Condition/QueueChange.pm + M /rt/branches/rt-3.3/lib/RT/Condition/StatusChange.pm + M /rt/branches/rt-3.3/lib/RT/Condition/UserDefined.pm + M /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + M /rt/branches/rt-3.3/lib/RT/CustomField.pm + M /rt/branches/rt-3.3/lib/RT/CustomFieldValue.pm + M /rt/branches/rt-3.3/lib/RT/CustomFieldValues.pm + M /rt/branches/rt-3.3/lib/RT/CustomFieldValues_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/CustomFields.pm + M /rt/branches/rt-3.3/lib/RT/CustomFields_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Date.pm + M /rt/branches/rt-3.3/lib/RT/EmailParser.pm + M /rt/branches/rt-3.3/lib/RT/GroupMember_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/GroupMembers_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Group_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Handle.pm + M /rt/branches/rt-3.3/lib/RT/I18N/cs.pm + M /rt/branches/rt-3.3/lib/RT/I18N/cs.po + M /rt/branches/rt-3.3/lib/RT/I18N/de.po + M /rt/branches/rt-3.3/lib/RT/I18N/en.po + M /rt/branches/rt-3.3/lib/RT/I18N/es.po + M /rt/branches/rt-3.3/lib/RT/I18N/fr.po + M /rt/branches/rt-3.3/lib/RT/I18N/he.po + M /rt/branches/rt-3.3/lib/RT/I18N/i_default.pm + M /rt/branches/rt-3.3/lib/RT/I18N/it.po + M /rt/branches/rt-3.3/lib/RT/I18N/ja.po + M /rt/branches/rt-3.3/lib/RT/I18N/nl.po + M /rt/branches/rt-3.3/lib/RT/I18N/no.po + M /rt/branches/rt-3.3/lib/RT/I18N/pt_br.po + M /rt/branches/rt-3.3/lib/RT/I18N/ru.po + M /rt/branches/rt-3.3/lib/RT/Interface/CLI.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Email/Filter/SpamAssassin.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Email.pm + M /rt/branches/rt-3.3/lib/RT/Interface/REST.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/Link.pm + M /rt/branches/rt-3.3/lib/RT/Link_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Links.pm + M /rt/branches/rt-3.3/lib/RT/Links_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Principal.pm + M /rt/branches/rt-3.3/lib/RT/Principal_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Principals.pm + M /rt/branches/rt-3.3/lib/RT/Principals_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Queues_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/ScripAction_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/ScripActions_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/ScripCondition_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/ScripConditions_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Scrip_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Search/ActiveTicketsInQueue.pm + M /rt/branches/rt-3.3/lib/RT/Search/Generic.pm + M /rt/branches/rt-3.3/lib/RT/System.pm + M /rt/branches/rt-3.3/lib/RT/Template_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Templates_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValue.pm + M /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValue_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValues.pm + M /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValues_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/URI/base.pm + M /rt/branches/rt-3.3/lib/RT/URI/fsck_com_rt.pm + M /rt/branches/rt-3.3/lib/RT/User_Overlay.pm + M /rt/branches/rt-3.3/lib/RT.pm.in + M /rt/branches/rt-3.3/lib/t/00smoke.t.in + M /rt/branches/rt-3.3/lib/t/01harness.t.in + M /rt/branches/rt-3.3/lib/t/02regression.t.in + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/dir + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg1 + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg2 + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg3 + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg4 + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg5 + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg6 + M /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg7 + M /rt/branches/rt-3.3/lib/t/data/multipart-alternative-with-umlaut + M /rt/branches/rt-3.3/lib/t/data/multipart-report + M /rt/branches/rt-3.3/lib/t/data/nested-mime-sample + M /rt/branches/rt-3.3/lib/t/data/nested-rfc-822 + M /rt/branches/rt-3.3/lib/t/data/new-ticket-from-iso-8859-1 + M /rt/branches/rt-3.3/lib/t/data/new-ticket-from-iso-8859-1-full + M /rt/branches/rt-3.3/lib/t/data/russian-subject-no-content-type + M /rt/branches/rt-3.3/lib/t/data/text-html-in-russian + M /rt/branches/rt-3.3/lib/t/data/text-html-with-umlaut + M /rt/branches/rt-3.3/lib/t/regression/00placeholder + M /rt/branches/rt-3.3/lib/t/regression/mime_tests + M /rt/branches/rt-3.3/m4/rt_enable_layout.m4 + M /rt/branches/rt-3.3/m4/rt_expand_var.m4 + M /rt/branches/rt-3.3/m4/rt_layout.m4 + M /rt/branches/rt-3.3/m4/rt_subst_expanded_arg.m4 + M /rt/branches/rt-3.3/sbin/extract-message-catalog + M /rt/branches/rt-3.3/sbin/extract_pod_tests + M /rt/branches/rt-3.3/sbin/factory + M /rt/branches/rt-3.3/sbin/regression_harness + M /rt/branches/rt-3.3/sbin/rt-setup-database.in + M /rt/branches/rt-3.3/sbin/rt-test-dependencies.in + + r1484@tinbook: jesse | 2004-05-07T00:31:24.624807Z + + Merging forward from 3.1 + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r843 | autrijus | 2004-05-06 04:13:18 -0400 (Thu, 06 May 2004) | 10 lines +Changed paths: + M /rt + D /rt/branches/rt-3.3/docs/design_docs/atom-api.txt + M /rt/branches/rt-3.3/lib/RT/CustomField_Overlay.pm + + ---------------------------------------------------------------------- + r4415@not: autrijus | 2004-05-03T06:42:06.584504Z + + * move atom-api.txt to RTx::Atom space. + ---------------------------------------------------------------------- + r4510@not: autrijus | 2004-05-06T07:44:35.710915Z + + * stub undef CustomField->QueueObj to make BuildFormatString happy. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r833 | jesse | 2004-05-05 14:18:03 -0400 (Wed, 05 May 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3 + +A new merge ticket + +------------------------------------------------------------------------ +r810 | autrijus | 2004-05-02 21:00:48 -0400 (Sun, 02 May 2004) | 8 lines +Changed paths: + M /rt + D /rt/branches/rt-3.3/html/REST/2.0 + + ---------------------------------------------------------------------- + r4394@not: autrijus | 2004-05-03T01:00:51.890023Z + + * 301 Moved Permanently + * Location: /RTx-Atom/html/Atom/0.3 + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r808 | autrijus | 2004-05-02 20:21:29 -0400 (Sun, 02 May 2004) | 15 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/docs/design_docs/atom-api.txt + A /rt/branches/rt-3.3/html/REST/2.0/Add + A /rt/branches/rt-3.3/html/REST/2.0/Add/index + D /rt/branches/rt-3.3/html/REST/2.0/Create + D /rt/branches/rt-3.3/html/REST/2.0/Delete + A /rt/branches/rt-3.3/html/REST/2.0/Remove + A /rt/branches/rt-3.3/html/REST/2.0/Remove/index + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + M /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + M /rt/branches/rt-3.3/lib/RT/Date.pm + + ---------------------------------------------------------------------- + r4385@not: autrijus | 2004-05-02T21:16:04.349680Z + + * Correct POD for W3CDTF + ---------------------------------------------------------------------- + r4388@not: autrijus | 2004-05-03T00:17:22.934822Z + + * massive redesign based on discussion with obra. + ---------------------------------------------------------------------- + r4389@not: autrijus | 2004-05-03T00:21:25.960300Z + + * Rename "Create" to "Add"; "Delete" to "Remove". + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r805 | autrijus | 2004-05-02 14:03:32 -0400 (Sun, 02 May 2004) | 10 lines +Changed paths: + M /rt + A /rt/branches/rt-3.3/docs/design_docs/atom-api.txt + A /rt/branches/rt-3.3/html/REST/2.0/Create/index + A /rt/branches/rt-3.3/html/REST/2.0/Delete/index + A /rt/branches/rt-3.3/html/REST/2.0/Describe + A /rt/branches/rt-3.3/html/REST/2.0/Describe/index + M /rt/branches/rt-3.3/html/REST/2.0/Elements/Link + A /rt/branches/rt-3.3/html/REST/2.0/Get/index + M /rt/branches/rt-3.3/html/REST/2.0/NoAuth/feed.css + A /rt/branches/rt-3.3/html/REST/2.0/Put + A /rt/branches/rt-3.3/html/REST/2.0/Put/index + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + A /rt/branches/rt-3.3/html/REST/2.0/Update/index + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + M /rt/branches/rt-3.3/html/REST/2.0/index + + ---------------------------------------------------------------------- + r4382@not: autrijus | 2004-05-02T18:02:39.870947Z + + * Describes RT/REST 2.0, Atom-compatible API. + ---------------------------------------------------------------------- + r4383@not: autrijus | 2004-05-02T18:03:08.473736Z + + * Put stubs to all the unimplemented verbs. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r804 | autrijus | 2004-05-02 11:58:17 -0400 (Sun, 02 May 2004) | 14 lines +Changed paths: + M /rt + A /rt/branches/rt-3.3/html/REST/2.0/Elements/Error + A /rt/branches/rt-3.3/html/REST/2.0/Elements/Introspect + D /rt/branches/rt-3.3/html/REST/2.0/Error + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + M /rt/branches/rt-3.3/html/REST/2.0/index + + ---------------------------------------------------------------------- + r4379@not: autrijus | 2004-05-02T15:26:00.873038Z + + * Do content negotiation with the browser and fallback on text/xml. + * Clean up namespaces a little. + ---------------------------------------------------------------------- + r4380@not: autrijus | 2004-05-02T15:58:03.262688Z + + * Move Error/index to Elements/Error since Error is not a verb. + * Refactor the Introspect part away to Elements/. + * Correctly redirects /Templates/ and /template/ to /templates/. + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r802 | autrijus | 2004-05-02 09:14:02 -0400 (Sun, 02 May 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Elements/Link + M /rt/branches/rt-3.3/html/REST/2.0/NoAuth/feed.css + M /rt/branches/rt-3.3/html/REST/2.0/NoAuth/index.css + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + + ---------------------------------------------------------------------- + r4375@not: autrijus | 2004-05-02T13:13:38.884936Z + + * use ->URI correctly. + * use <a xmlns="...html..."> so things can correct render in nongecko browsers. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r801 | autrijus | 2004-05-01 19:14:04 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/index + + ---------------------------------------------------------------------- + r4365@not: autrijus | 2004-05-01T23:14:05.342098Z + + * Cross-introspection logic to eliminate subordinate classes from main index. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r800 | autrijus | 2004-05-01 17:39:50 -0400 (Sat, 01 May 2004) | 8 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Elements/Link + M /rt/branches/rt-3.3/html/REST/2.0/NoAuth/feed.css + A /rt/branches/rt-3.3/html/REST/2.0/NoAuth/index.css + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + M /rt/branches/rt-3.3/html/REST/2.0/autohandler + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + M /rt/branches/rt-3.3/html/REST/2.0/index + + ---------------------------------------------------------------------- + r4363@not: autrijus | 2004-05-01T21:39:51.608519Z + + * Index page implemented using multiple "Feed" services. + * Lots of cute, little icons placed with CSS. + * Much better preparation for autodiscovery; PostURI is now handled with "/type.new". + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r799 | autrijus | 2004-05-01 14:54:56 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/NoAuth/feed.css + + ---------------------------------------------------------------------- + r4361@not: autrijus | 2004-05-01T18:55:05.234036Z + + * Even more CSS tricks. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r798 | autrijus | 2004-05-01 14:49:18 -0400 (Sat, 01 May 2004) | 14 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/Admin/Elements/Header + M /rt/branches/rt-3.3/html/Admin/Global/Templates.html + M /rt/branches/rt-3.3/html/Elements/Header + M /rt/branches/rt-3.3/html/Elements/TicketList + A /rt/branches/rt-3.3/html/REST/2.0/Elements + A /rt/branches/rt-3.3/html/REST/2.0/Elements/Link + M /rt/branches/rt-3.3/html/REST/2.0/NoAuth/feed.css + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + M /rt/branches/rt-3.3/html/REST/2.0/autohandler + + ---------------------------------------------------------------------- + r4357@not: autrijus | 2004-05-01T18:47:10.055533Z + + * Various CSS tricks. + ---------------------------------------------------------------------- + r4358@not: autrijus | 2004-05-01T18:47:49.553353Z + + * Fixed an off-by-one error in ticket listing. + ---------------------------------------------------------------------- + r4359@not: autrijus | 2004-05-01T18:48:06.789268Z + + * support for Atom autodiscovery. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r797 | autrijus | 2004-05-01 12:11:01 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Error/index + + ---------------------------------------------------------------------- + r4353@not: autrijus | 2004-05-01T16:11:10.795277Z + + * finally Error works for all three supported carriers. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r796 | autrijus | 2004-05-01 12:07:33 -0400 (Sat, 01 May 2004) | 17 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/bin/standalone_httpd.in + M /rt/branches/rt-3.3/html/REST/2.0/Error/index + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + + ---------------------------------------------------------------------- + r4349@not: autrijus | 2004-05-01T15:36:00.221832Z + + * Properly clean up leftover HTTP_* environment variables. + * Pass authorization header to Mason. + * Send out correct HTTP status code instead of blindly assuming 200. + ---------------------------------------------------------------------- + r4350@not: autrijus | 2004-05-01T15:59:39.046584Z + + * RT::Date->new also takes currentuser. + ---------------------------------------------------------------------- + r4351@not: autrijus | 2004-05-01T16:00:38.530367Z + + * Correctly handle nonce disposal. + * $m->abort is needed for mod_perl2. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r795 | autrijus | 2004-05-01 09:58:07 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + + ---------------------------------------------------------------------- + r4347@not: autrijus | 2004-05-01T13:58:14.427055Z + + * it's Queues, not Queue + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r794 | autrijus | 2004-05-01 09:55:57 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + + ---------------------------------------------------------------------- + r4345@not: autrijus | 2004-05-01T13:56:03.778530Z + + * use absolute URIs, not relative ones, per the Atom spec + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r793 | autrijus | 2004-05-01 09:51:25 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + + ---------------------------------------------------------------------- + r4343@not: autrijus | 2004-05-01T13:51:31.406464Z + + * link semantics now agrees with AtomAPI. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r792 | autrijus | 2004-05-01 09:35:28 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Search/index + + ---------------------------------------------------------------------- + r4341@not: autrijus | 2004-05-01T13:35:35.544895Z + + * Make <id> slightly more unique + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r791 | autrijus | 2004-05-01 09:33:03 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/Error/index + M /rt/branches/rt-3.3/html/REST/2.0/autohandler + + ---------------------------------------------------------------------- + r4339@not: autrijus | 2004-05-01T13:32:59.502832Z + + * adapt for FastCGI's needs + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r790 | autrijus | 2004-05-01 09:22:21 -0400 (Sat, 01 May 2004) | 9 lines +Changed paths: + M /rt + A /rt/branches/rt-3.3/html/REST/2.0/Auth + A /rt/branches/rt-3.3/html/REST/2.0/Create + A /rt/branches/rt-3.3/html/REST/2.0/Delete + A /rt/branches/rt-3.3/html/REST/2.0/Error + A /rt/branches/rt-3.3/html/REST/2.0/Error/index + A /rt/branches/rt-3.3/html/REST/2.0/Get + A /rt/branches/rt-3.3/html/REST/2.0/Search + A /rt/branches/rt-3.3/html/REST/2.0/Search/index + A /rt/branches/rt-3.3/html/REST/2.0/Update + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + A /rt/branches/rt-3.3/html/REST/2.0/index + + ---------------------------------------------------------------------- + r4335@not: autrijus | 2004-05-01T13:20:56.570615Z + + * Establish directory layout. + * Error handling. + * Refactor out the 'Search' verb. + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r788 | autrijus | 2004-05-01 07:44:58 -0400 (Sat, 01 May 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + + ---------------------------------------------------------------------- + r4331@not: autrijus | 2004-05-01T11:44:31.355329Z + + * do not offer WSSE auth to non-atom clients, and vice versa, + to avoid spurious auth warnings. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r785 | autrijus | 2004-05-01 07:16:25 -0400 (Sat, 01 May 2004) | 10 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + M /rt/branches/rt-3.3/lib/RT/Date.pm + + ---------------------------------------------------------------------- + r4323@not: autrijus | 2004-05-01T11:14:28.377660Z + + * implement ->W3CDTF. + ---------------------------------------------------------------------- + r4324@not: autrijus | 2004-05-01T11:16:31.456041Z + + * we are now a valid Atom feed. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r784 | autrijus | 2004-05-01 06:52:15 -0400 (Sat, 01 May 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + + ---------------------------------------------------------------------- + r4321@not: autrijus | 2004-05-01T10:52:23.225100Z + + * add fastcgi support. + * make proper use of X-WSSE header instead of demanding Authorization + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r783 | autrijus | 2004-05-01 06:50:30 -0400 (Sat, 01 May 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/I18N.pm + + ---------------------------------------------------------------------- + r4319@not: autrijus | 2004-05-01T10:50:15.580296Z + + * glob local/*.po too for consistency and intuitiveness. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r782 | autrijus | 2004-05-01 06:35:23 -0400 (Sat, 01 May 2004) | 8 lines +Changed paths: + M /rt + A /rt/branches/rt-3.3/html/REST/2.0/NoAuth + A /rt/branches/rt-3.3/html/REST/2.0/NoAuth/feed.css + M /rt/branches/rt-3.3/html/REST/2.0/autohandler + M /rt/branches/rt-3.3/html/REST/2.0/dhandler + + ---------------------------------------------------------------------- + r4317@not: autrijus | 2004-05-01T10:35:00.584748Z + + * now does Basic and Digest authentication, too. + * CSSify the example feed + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r781 | autrijus | 2004-04-30 23:24:12 -0400 (Fri, 30 Apr 2004) | 7 lines +Changed paths: + M /rt + A /rt/branches/rt-3.3/html/REST/2.0 + A /rt/branches/rt-3.3/html/REST/2.0/autohandler + A /rt/branches/rt-3.3/html/REST/2.0/dhandler + M /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + + ---------------------------------------------------------------------- + r4309@not: autrijus | 2004-05-01T03:22:53.730384Z + + * initial commit of RT/REST 2.0 API and WSSE authentication. + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r766 | jesse | 2004-04-28 14:26:02 -0400 (Wed, 28 Apr 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3/etc/upgrade + A /rt/branches/rt-3.3/etc/upgrade/3.3.0 + A /rt/branches/rt-3.3/etc/upgrade/3.3.0/acl.Informix + A /rt/branches/rt-3.3/etc/upgrade/3.3.0/acl.Oracle + A /rt/branches/rt-3.3/etc/upgrade/3.3.0/acl.Pg + A /rt/branches/rt-3.3/etc/upgrade/3.3.0/acl.SQLite + A /rt/branches/rt-3.3/etc/upgrade/3.3.0/acl.mysql + A /rt/branches/rt-3.3/etc/upgrade/3.3.0/schema.Pg + A /rt/branches/rt-3.3/etc/upgrade/3.3.0/schema.mysql + + ---------------------------------------------------------------------- + r2206@tinbook: jesse | 2004-04-28T18:24:56.988760Z + + Added the beginnings of upgrade 3.1->3.3 functionality. has not yet been tested + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r763 | autrijus | 2004-04-28 02:05:14 -0400 (Wed, 28 Apr 2004) | 8 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/Base.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + + ---------------------------------------------------------------------- + r4223@not: autrijus | 2004-04-28T06:00:27.794797Z + + * correctly put loc_fuzzy in Base. + * do not double-encode EscapeUTF8 for Mason. this resolves the weird + standalong-httpd bug. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r761 | jesse | 2004-04-27 23:16:35 -0400 (Tue, 27 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/etc/schema.Pg + +Updating schema for 3.3 to use 'integer' on postgres rather than int2 on Andrew Sullivan's recommendation + +------------------------------------------------------------------------ +r758 | autrijus | 2004-04-27 16:12:38 -0400 (Tue, 27 Apr 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/Elements/Footer + + ---------------------------------------------------------------------- + r4214@not: autrijus | 2004-04-27T20:12:39.658238Z + + * rework Footer l10n into one line so not to confuse the old string extractor + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r757 | autrijus | 2004-04-27 16:09:45 -0400 (Tue, 27 Apr 2004) | 6 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/I18N/zh_cn.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_tw.po + + ---------------------------------------------------------------------- + r4211@not: autrijus | 2004-04-27T19:55:32.087502Z + + * Chinese translations. + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r756 | autrijus | 2004-04-27 04:46:57 -0400 (Tue, 27 Apr 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/README + + ---------------------------------------------------------------------- + r4195@not: autrijus | 2004-04-27T08:46:36.958817Z + + * now mod_perl2 only needs one line of extra setup. + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r746 | autrijus | 2004-04-26 15:11:33 -0400 (Mon, 26 Apr 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.1/lib/RT/Tickets_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/User_Overlay.pm + + ---------------------------------------------------------------------- + r4176@not: autrijus | 2004-04-26T19:09:53.594445Z + + * switch password format from base64 to hex; maintaining legacy + compatibility by upgrading passwords in-place upon successful auth + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r745 | autrijus | 2004-04-26 15:02:48 -0400 (Mon, 26 Apr 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/SearchBuilder.pm + + ---------------------------------------------------------------------- + r4171@not: autrijus | 2004-04-26T18:59:54.608186Z + + * correct EMPTY and NULL support for $Tickets->LimitAttribute(). + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r744 | autrijus | 2004-04-26 15:01:49 -0400 (Mon, 26 Apr 2004) | 8 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Template_Overlay.pm + + ---------------------------------------------------------------------- + r4170@not: autrijus | 2004-04-26T18:56:10.826541Z + + * Do not crash the application when Template parsing failed; instead + capture the error and handle it with $RT::Logger->error(). + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r743 | autrijus | 2004-04-26 15:01:05 -0400 (Mon, 26 Apr 2004) | 8 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + + ---------------------------------------------------------------------- + r4169@not: autrijus | 2004-04-26T18:52:39.442581Z + + * allow subkeys limit like $Tickets->Limit( FIELD => 'Requestor.Id' ); + previously it was only available from "CF.*" keys. + + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r741 | autrijus | 2004-04-26 14:48:52 -0400 (Mon, 26 Apr 2004) | 3 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + +* freeze() forgot to take account of the look_at_* indices, resulting + in incorrect object after thaw()ing + +------------------------------------------------------------------------ +r733 | autrijus | 2004-04-23 15:09:40 -0400 (Fri, 23 Apr 2004) | 5 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm + + r4083@not: autrijus | 2004-04-23T19:08:59.061919Z + + * ENTRY_AGGREGATOR is a misspelling (for ENTRYAGGREGATOR), and it + defaults to OR anyway, so simply eliminate this bogus parameter. + +------------------------------------------------------------------------ +r722 | autrijus | 2004-04-21 18:32:19 -0400 (Wed, 21 Apr 2004) | 10 lines +Changed paths: + M /rt + M /rt/branches/rt-3.1/lib/RT/SearchBuilder.pm + M /rt/branches/rt-3.3/lib/RT/SearchBuilder.pm + + r4037@not: autrijus | 2004-04-21T22:30:37.269510Z + + * It turns out that for EMPTY => 1 to work, IS NULL needs to be OR'ed + to the other columns as well... + + ---------------------------------------------------------------------- + r4038@not: autrijus | 2004-04-21T22:31:56.271421Z + + * merge previous commit from 3.3 to 3.1. + +------------------------------------------------------------------------ +r719 | autrijus | 2004-04-21 14:59:55 -0400 (Wed, 21 Apr 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/SearchBuilder.pm + + r4027@not: autrijus | 2004-04-21T18:59:19.548165Z + + * LimitAttribute( EMPTY => 1 ) is much more correctly handled with a IS NULL. + +------------------------------------------------------------------------ +r717 | jesse | 2004-04-21 01:25:01 -0400 (Wed, 21 Apr 2004) | 6 lines +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/Makefile.in + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/configure.ac + M /rt/branches/rt-3.3/etc/RT_Config.pm.in + M /rt/branches/rt-3.3/etc/schema.mysql + A /rt/branches/rt-3.3/etc/upgrade/3.1.0 + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/acl.Informix + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/acl.Oracle + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/acl.Pg + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/acl.SQLite + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/acl.mysql + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/content + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/schema.Informix + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/schema.Oracle + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/schema.Pg + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/schema.SQLite + A /rt/branches/rt-3.3/etc/upgrade/3.1.0/schema.mysql + M /rt/branches/rt-3.3/html/Admin/Elements/SelectNewGroupMembers + A /rt/branches/rt-3.3/html/Admin/Elements/ToolTabs + A /rt/branches/rt-3.3/html/Admin/Tools + A /rt/branches/rt-3.3/html/Admin/Tools/Configuration.html + A /rt/branches/rt-3.3/html/Admin/Tools/index.html + A /rt/branches/rt-3.3/html/Elements/QueryString + A /rt/branches/rt-3.3/html/Elements/ScrubHTML + M /rt/branches/rt-3.3/html/Elements/Tabs + M /rt/branches/rt-3.3/html/Elements/TicketList + M /rt/branches/rt-3.3/html/NoAuth/webrt.css + M /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/default + M /rt/branches/rt-3.3/html/Scope/Search.html + M /rt/branches/rt-3.3/html/Search/Build.html + M /rt/branches/rt-3.3/html/Search/Edit.html + M /rt/branches/rt-3.3/html/Search/Elements/BuildFormatString + M /rt/branches/rt-3.3/html/Search/Elements/DisplayOptions + M /rt/branches/rt-3.3/html/Search/Elements/EditFormat + M /rt/branches/rt-3.3/html/Search/Elements/EditSearches + M /rt/branches/rt-3.3/html/Search/Results.html + M /rt/branches/rt-3.3/html/Search/Results.rdf + M /rt/branches/rt-3.3/html/Search/Results.tsv + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransactionAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/Tabs + A /rt/branches/rt-3.3/html/Ticket/ShowEmailRecord.html + M /rt/branches/rt-3.3/html/Ticket/Update.html + A /rt/branches/rt-3.3/html/Tools/Elements + A /rt/branches/rt-3.3/html/Tools/Elements/Tabs + A /rt/branches/rt-3.3/html/Tools/Offline.html + M /rt/branches/rt-3.3/html/autohandler + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Group_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/I18N.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Transaction_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Users_Overlay.pm + M /rt/branches/rt-3.3/sbin/rt-test-dependencies.in + + ---------------------------------------------------------------------- + r2113@tinbook: jesse | 2004-04-21T05:24:17.573962Z + + Remerging from RT 3.1.x + ---------------------------------------------------------------------- + +------------------------------------------------------------------------ +r714 | autrijus | 2004-04-20 23:49:45 -0400 (Tue, 20 Apr 2004) | 7 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldImage + A /rt/branches/rt-3.3/html/Elements/ShowCustomFieldImage + M /rt/branches/rt-3.3/html/Elements/ShowCustomFields + +r4005@not: autrijus | 2004-04-21T03:49:17.533641Z + +RT-Ticket: 5365 +RT-Status: resolved + +Make image display inline on ticket info screen. + +------------------------------------------------------------------------ +r712 | leira | 2004-04-20 22:49:09 -0400 (Tue, 20 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/html/Admin/Groups/index.html + M /rt/branches/rt-3.3/html/Admin/Users/index.html + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldImage + +fix WebPath urls + +------------------------------------------------------------------------ +r711 | leira | 2004-04-20 22:43:57 -0400 (Tue, 20 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/html/Admin/Groups/index.html + M /rt/branches/rt-3.3/html/Admin/Users/index.html + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldBinary + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldImage + +Dowload links need the WebPath. + +------------------------------------------------------------------------ +r710 | leira | 2004-04-20 22:37:34 -0400 (Tue, 20 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValue_Overlay.pm + +decode_utf8, not decode_utf_8 + +------------------------------------------------------------------------ +r709 | leira | 2004-04-20 22:16:04 -0400 (Tue, 20 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValue_Overlay.pm + +"decode_utf_8", not "decode_utf 8" + +------------------------------------------------------------------------ +r708 | leira | 2004-04-20 22:15:39 -0400 (Tue, 20 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/CustomField_Overlay.pm + +CFs are no longer attached to queues. + +------------------------------------------------------------------------ +r707 | jesse | 2004-04-20 21:21:11 -0400 (Tue, 20 Apr 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValue_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Record.pm + +Adding support for encoding LOBs for the new custom field behaviour +------------------------------------------------------------------------ +r703 | jesse | 2004-04-19 22:26:50 -0400 (Mon, 19 Apr 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/etc/schema.Pg + M /rt/branches/rt-3.3/html/Ticket/Elements/FindAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/LoadTextAttachments + M /rt/branches/rt-3.3/lib/RT/Transaction_Overlay.pm + +"Another pass at trying to fix the schema" +------------------------------------------------------------------------ +r702 | jesse | 2004-04-19 22:12:32 -0400 (Mon, 19 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/etc/acl.Pg + M /rt/branches/rt-3.3/etc/schema.Pg + +Fixing conflicts from fixing the same bugs as linda. + +------------------------------------------------------------------------ +r701 | leira | 2004-04-19 14:35:01 -0400 (Mon, 19 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/etc/acl.Pg + +One more acl fix. + +------------------------------------------------------------------------ +r700 | leira | 2004-04-19 14:16:08 -0400 (Mon, 19 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/etc/acl.Pg + M /rt/branches/rt-3.3/etc/schema.Pg + +Schema & acl fixes for Postgres. + +------------------------------------------------------------------------ +r695 | autrijus | 2004-04-16 15:33:06 -0400 (Fri, 16 Apr 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldSelect + +r3928@not: autrijus | 2004-04-16T19:32:35.970968Z + +Fix select CF display bug as reported by leira + +------------------------------------------------------------------------ +r685 | autrijus | 2004-04-14 05:29:23 -0400 (Wed, 14 Apr 2004) | 5 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldBinary + +r3851@not: autrijus | 2004-04-14T09:27:57.550568Z + +* make EditCustomFieldBinary's condition style agree with other + elements -- also avoids comparing an uninitialized value. + +------------------------------------------------------------------------ +r682 | leira | 2004-04-12 02:07:01 -0400 (Mon, 12 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/html/Admin/Groups/Modify.html + M /rt/branches/rt-3.3/html/Admin/Users/Modify.html + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldBinary + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldImage + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldSelect + M /rt/branches/rt-3.3/html/Elements/EditCustomFieldText + M /rt/branches/rt-3.3/html/Search/Elements/SelectPersonType + M /rt/branches/rt-3.3/html/Ticket/Elements/EditCustomFields + M /rt/branches/rt-3.3/html/Ticket/Modify.html + M /rt/branches/rt-3.3/html/Ticket/ModifyAll.html + M /rt/branches/rt-3.3/lib/RT/CustomField_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/CustomFields_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValues_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Record.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Transaction_Overlay.pm + +Fixes from autrijus. + +------------------------------------------------------------------------ +r665 | jesse | 2004-04-02 16:54:23 -0500 (Fri, 02 Apr 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3/html/Admin/Elements/PickObjects + +Allowing the custom field admin screens to add custom fields to all users +------------------------------------------------------------------------ +r664 | jesse | 2004-04-02 16:39:27 -0500 (Fri, 02 Apr 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Record.pm + M /rt/branches/rt-3.3/lib/RT/Transaction_Overlay.pm + +Pulling forward relationships fixes from 3.1; updating a transaction-related assertion for 3.3 +------------------------------------------------------------------------ +r662 | jesse | 2004-04-02 10:54:22 -0500 (Fri, 02 Apr 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3/etc/acl.Pg + M /rt/branches/rt-3.3/html/Admin/Elements/ModifyQueue + M /rt/branches/rt-3.3/html/Admin/Queues/Modify.html + A /rt/branches/rt-3.3/html/Elements/EditLinks + M /rt/branches/rt-3.3/html/Elements/MessageBox + M /rt/branches/rt-3.3/html/Elements/SelectMatch + A /rt/branches/rt-3.3/html/Elements/ShowLink + A /rt/branches/rt-3.3/html/Elements/ShowLinks + M /rt/branches/rt-3.3/html/Scope/Elements/ShowSummary + M /rt/branches/rt-3.3/html/Search/Build.html + M /rt/branches/rt-3.3/html/Search/Bulk.html + M /rt/branches/rt-3.3/html/Search/Elements/SelectPersonType + M /rt/branches/rt-3.3/html/SelfService/Display.html + M /rt/branches/rt-3.3/html/Ticket/Create.html + M /rt/branches/rt-3.3/html/Ticket/Display.html + A /rt/branches/rt-3.3/html/Ticket/Elements/LoadTextAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowSummary + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction + M /rt/branches/rt-3.3/html/Ticket/History.html + M /rt/branches/rt-3.3/html/Ticket/ModifyAll.html + M /rt/branches/rt-3.3/html/Ticket/ModifyLinks.html + M /rt/branches/rt-3.3/html/Ticket/Update.html + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Action/SendEmail.pm + M /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Attribute_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + M /rt/branches/rt-3.3/lib/RT/EmailParser.pm + A /rt/branches/rt-3.3/lib/RT/I18N/da.po + M /rt/branches/rt-3.3/lib/RT/I18N/fr.po + A /rt/branches/rt-3.3/lib/RT/I18N/hu.po + M /rt/branches/rt-3.3/lib/RT/Interface/Email/Auth/MailFrom.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/Record.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Transaction_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/URI/fsck_com_rt.pm + M /rt/branches/rt-3.3/lib/RT/User_Overlay.pm + +Took a hand-merging pass at 3.1->3.3 after autrijus manual baseless merge. +------------------------------------------------------------------------ +r661 | autrijus | 2004-04-02 08:57:08 -0500 (Fri, 02 Apr 2004) | 3 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + +* put Ticket_Overlay back to where it was. + + +------------------------------------------------------------------------ +r660 | autrijus | 2004-04-02 08:43:44 -0500 (Fri, 02 Apr 2004) | 1 line +Changed paths: + M /rt + M /rt/branches/rt-3.3 + M /rt/branches/rt-3.3/Makefile.in + A /rt/branches/rt-3.3/README.Oracle + M /rt/branches/rt-3.3/UPGRADING + M /rt/branches/rt-3.3/bin/mason_handler.fcgi.in + M /rt/branches/rt-3.3/bin/mason_handler.scgi.in + M /rt/branches/rt-3.3/bin/rt-crontool.in + M /rt/branches/rt-3.3/bin/rt-mailgate.in + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/config.layout + M /rt/branches/rt-3.3/configure.ac + M /rt/branches/rt-3.3/etc/initialdata + M /rt/branches/rt-3.3/etc/schema.Informix + M /rt/branches/rt-3.3/etc/schema.Oracle + M /rt/branches/rt-3.3/etc/schema.SQLite + A /rt/branches/rt-3.3/etc/upgrade/3.1.15 + A /rt/branches/rt-3.3/etc/upgrade/3.1.15/content + M /rt/branches/rt-3.3/html/Admin/Elements/EditScrip + M /rt/branches/rt-3.3/html/Admin/Elements/SelectStage + M /rt/branches/rt-3.3/html/Elements/Callback + M /rt/branches/rt-3.3/html/Elements/MessageBox + M /rt/branches/rt-3.3/html/Elements/SelectLang + M /rt/branches/rt-3.3/html/Elements/SelectMatch + M /rt/branches/rt-3.3/html/Elements/SelectWatcherType + M /rt/branches/rt-3.3/html/Elements/SetupSessionCookie + M /rt/branches/rt-3.3/html/Elements/SimpleSearch + M /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/default + M /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/history + M /rt/branches/rt-3.3/html/REST/1.0/autohandler + M /rt/branches/rt-3.3/html/REST/1.0/dhandler + M /rt/branches/rt-3.3/html/REST/1.0/search/ticket + M /rt/branches/rt-3.3/html/Scope/Elements/ShowHistory + M /rt/branches/rt-3.3/html/Scope/Elements/ShowTransaction + M /rt/branches/rt-3.3/html/Search/Elements/PickRestriction + M /rt/branches/rt-3.3/html/SelfService/Elements/MyRequests + M /rt/branches/rt-3.3/html/Ticket/Attachment/dhandler + M /rt/branches/rt-3.3/html/Ticket/Display.html + M /rt/branches/rt-3.3/html/Ticket/Elements/FindAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageStanza + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction + M /rt/branches/rt-3.3/html/Ticket/Elements/Tabs + M /rt/branches/rt-3.3/html/index.html + M /rt/branches/rt-3.3/lib/RT/Action/AutoOpen.pm + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Attachments_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Base.pm + M /rt/branches/rt-3.3/lib/RT/CustomField_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/EmailParser.pm + M /rt/branches/rt-3.3/lib/RT/Group_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Handle.pm + M /rt/branches/rt-3.3/lib/RT/I18N/fi.po + M /rt/branches/rt-3.3/lib/RT/I18N/fr.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_cn.po + M /rt/branches/rt-3.3/lib/RT/I18N/zh_tw.po + M /rt/branches/rt-3.3/lib/RT/I18N.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Email/Auth/MailFrom.pm + M /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + M /rt/branches/rt-3.3/lib/RT/Principal_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/StyleGuide.pod + M /rt/branches/rt-3.3/lib/RT/Template_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm + M /rt/branches/rt-3.3/lib/RT/Transaction_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/URI.pm + M /rt/branches/rt-3.3/lib/RT/User_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Users_Overlay.pm + M /rt/branches/rt-3.3/lib/t/03web.pl.in + M /rt/branches/rt-3.3/lib/t/04_send_email.pl.in + M /rt/branches/rt-3.3/sbin/license_tag + M /rt/branches/rt-3.3/sbin/rt-test-dependencies.in + +MERGE: 3.1 to 3.3 +------------------------------------------------------------------------ +r659 | jesse | 2004-04-01 21:23:57 -0500 (Thu, 01 Apr 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3/releng.cnf + +Updated releng.cnf +------------------------------------------------------------------------ +r656 | jesse | 2004-04-01 16:54:22 -0500 (Thu, 01 Apr 2004) | 2 lines +Changed paths: + M /rt/branches/rt-3.3/html/Admin/CustomFields/Objects.html + M /rt/branches/rt-3.3/html/Admin/CustomFields/index.html + M /rt/branches/rt-3.3/html/Admin/Elements/EditCustomFields + M /rt/branches/rt-3.3/html/Admin/Elements/PickCustomFields + M /rt/branches/rt-3.3/html/Admin/Elements/PickObjects + M /rt/branches/rt-3.3/html/Admin/Elements/QueueTabs + +UI updates to remove unneeded options and clarify some language + +------------------------------------------------------------------------ +r655 | jesse | 2004-04-01 16:53:29 -0500 (Thu, 01 Apr 2004) | 3 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/CustomField_Overlay.pm + +Updated how RT generates friendly name for which object a Custom Field applies to + + +------------------------------------------------------------------------ +r654 | jesse | 2004-04-01 16:52:31 -0500 (Thu, 01 Apr 2004) | 1 line +Changed paths: + M /rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm + +Added support for RT 3.0 compatible Transactions->Limit +------------------------------------------------------------------------ +r653 | autrijus | 2004-04-01 11:37:33 -0500 (Thu, 01 Apr 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/html/Admin/Elements/QueueTabs + +r3597@not: autrijus | 2004-04-01T16:36:37.019460Z + +* put global Cf editing back. + +------------------------------------------------------------------------ +r648 | autrijus | 2004-03-31 11:12:04 -0500 (Wed, 31 Mar 2004) | 4 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/I18N.pm + +r3556@not: autrijus | 2004-03-31T16:11:11.225511Z + +* lexicon path may contain spaces, esp. on win32. + +------------------------------------------------------------------------ +r645 | autrijus | 2004-03-31 01:20:10 -0500 (Wed, 31 Mar 2004) | 5 lines +Changed paths: + M /rt + M /rt/branches/rt-3.3/etc/schema.Informix + M /rt/branches/rt-3.3/etc/schema.Oracle + M /rt/branches/rt-3.3/etc/schema.Pg + M /rt/branches/rt-3.3/etc/schema.SQLite + M /rt/branches/rt-3.3/etc/schema.mysql + +r3541@not: autrijus | 2004-03-31T06:19:36.740253Z + +* port mysql schema to Pg. +* other database are partially ported -- OCF and OCFV currently not there + +------------------------------------------------------------------------ +r643 | autrijus | 2004-03-31 00:16:07 -0500 (Wed, 31 Mar 2004) | 1 line +Changed paths: + M /rt + M /rt/branches/rt-3.3/lib/RT/CustomFields_Overlay.pm + +hint to self: don't refactor when you're tired. +------------------------------------------------------------------------ +r612 | autrijus | 2004-03-22 13:46:04 -0500 (Mon, 22 Mar 2004) | 2 lines +Changed paths: + D /rt/branches/rt-3.3/html/Admin/Global/CustomField.html + D /rt/branches/rt-3.3/html/Admin/Global/CustomFields.html + +* remove unused "Global" CF admin pages. + +------------------------------------------------------------------------ +r611 | autrijus | 2004-03-20 10:40:58 -0500 (Sat, 20 Mar 2004) | 7 lines +Changed paths: + M /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + M /rt/branches/rt-3.3/lib/RT/CustomField_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/User_Overlay.pm + +* merge Jesse's $RT::SystemUser->LanguageHandle fix; corrected a + bug caused by it in setup database stage where there's no SystemUser. +* fixed two tests in RT::CustomField that incorrectly expected old-style + ->Type return values; they now test ->Type and ->MaxValues separately. +* change some ok() tests into is() and like() tests. + + +------------------------------------------------------------------------ +r597 | autrijus | 2004-03-17 13:12:25 -0500 (Wed, 17 Mar 2004) | 2 lines +Changed paths: + M /rt/branches + A /rt/branches/rt-3.3/html/Developer + A /rt/branches/rt-3.3/html/Developer/Log.html + A /rt/branches/rt-3.3/html/Developer/Perldoc.html + A /rt/branches/rt-3.3/html/Developer/autohandler + +* Developer tools. + +------------------------------------------------------------------------ +r585 | autrijus | 2004-03-16 14:22:32 -0500 (Tue, 16 Mar 2004) | 3 lines +Changed paths: + M /rt/branches + M /rt/branches/rt-3.3/bin/webmux.pl.in + M /rt/branches/rt-3.3/etc/acl.mysql + M /rt/branches/rt-3.3/lib/RT.pm.in + +* move class loading to RT::InitClasses. +* do not do acl if mysql is in skip-grant-tables mode. + +------------------------------------------------------------------------ +r584 | autrijus | 2004-03-16 14:07:50 -0500 (Tue, 16 Mar 2004) | 3 lines +Changed paths: + M /rt/branches + M /rt/branches/rt-3.3/Makefile.in + M /rt/branches/rt-3.3/etc/RT_Config.pm.in + +* it is possible that the DESTDIR is the current directory. +* also, hint on how to use MasonX::Profiler more concisely. + +------------------------------------------------------------------------ +r571 | autrijus | 2004-03-15 10:22:17 -0500 (Mon, 15 Mar 2004) | 2 lines +Changed paths: + M /rt/branches + M /rt/branches/rt-3.3/html/User/Prefs.html + +* backport lang handle setting from -elixus + +------------------------------------------------------------------------ +r560 | autrijus | 2004-03-12 21:44:05 -0500 (Fri, 12 Mar 2004) | 2 lines +Changed paths: + M /rt/branches + M /rt/branches/rt-3.3/README + M /rt/branches/rt-3.3/bin/rt-mailgate.in + M /rt/branches/rt-3.3/bin/rt.in + M /rt/branches/rt-3.3/etc/RT_Config.pm.in + M /rt/branches/rt-3.3/etc/schema.Oracle + M /rt/branches/rt-3.3/html/Admin/Users/Modify.html + M /rt/branches/rt-3.3/html/Elements/Footer + M /rt/branches/rt-3.3/html/Elements/Header + M /rt/branches/rt-3.3/html/Elements/Login + M /rt/branches/rt-3.3/html/Elements/SelectQueue + M /rt/branches/rt-3.3/html/Elements/TicketList + M /rt/branches/rt-3.3/html/NoAuth/webrt.css + M /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/attachments + M /rt/branches/rt-3.3/html/REST/1.0/ticket/comment + M /rt/branches/rt-3.3/html/Search/Build.html + M /rt/branches/rt-3.3/html/Search/Elements/BuildFormatString + M /rt/branches/rt-3.3/html/Search/Elements/PickBasics + M /rt/branches/rt-3.3/html/Search/Elements/PickRestriction + M /rt/branches/rt-3.3/html/Search/Results.html + M /rt/branches/rt-3.3/html/Search/Results.rdf + M /rt/branches/rt-3.3/html/Ticket/Display.html + A /rt/branches/rt-3.3/html/Ticket/Elements/FindAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/PreviewScrips + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowAttachments + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowSummary + M /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction + M /rt/branches/rt-3.3/html/Ticket/Elements/Tabs + M /rt/branches/rt-3.3/html/Ticket/History.html + M /rt/branches/rt-3.3/html/autohandler + M /rt/branches/rt-3.3/lib/RT/Action/Autoreply.pm + M /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + M /rt/branches/rt-3.3/lib/RT/Condition/OwnerChange.pm + M /rt/branches/rt-3.3/lib/RT/Handle.pm + M /rt/branches/rt-3.3/lib/RT/Link_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/Record.pm + M /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + M /rt/branches/rt-3.3/lib/RT/URI/fsck_com_rt.pm + M /rt/branches/rt-3.3/lib/RT/User_Overlay.pm + M /rt/branches/rt-3.3/releng.cnf + +* smerge rt-3.1 to rt-3.3. + +------------------------------------------------------------------------ +r559 | autrijus | 2004-03-12 21:22:26 -0500 (Fri, 12 Mar 2004) | 2 lines +Changed paths: + M /rt/branches + D /rt/branches/autrijus-3.1 + A /rt/branches/rt-3.3 + A /rt/branches/rt-3.3/COPYING + A /rt/branches/rt-3.3/HOWTO + A /rt/branches/rt-3.3/HOWTO/README + A /rt/branches/rt-3.3/HOWTO/change.txt + A /rt/branches/rt-3.3/HOWTO/release.txt + A /rt/branches/rt-3.3/HOWTO/version-control.txt + A /rt/branches/rt-3.3/Makefile.in + A /rt/branches/rt-3.3/README + A /rt/branches/rt-3.3/UPGRADING + A /rt/branches/rt-3.3/aclocal.m4 + A /rt/branches/rt-3.3/bin + A /rt/branches/rt-3.3/bin/mason_handler.fcgi.in + A /rt/branches/rt-3.3/bin/mason_handler.scgi.in + A /rt/branches/rt-3.3/bin/mason_handler.svc.in + A /rt/branches/rt-3.3/bin/rt-commit-handler.in + A /rt/branches/rt-3.3/bin/rt-crontool.in + A /rt/branches/rt-3.3/bin/rt-mailgate.in + A /rt/branches/rt-3.3/bin/rt.in + A /rt/branches/rt-3.3/bin/standalone_httpd.in + A /rt/branches/rt-3.3/bin/webmux.pl.in + A /rt/branches/rt-3.3/config.layout + A /rt/branches/rt-3.3/configure.ac + A /rt/branches/rt-3.3/docs + A /rt/branches/rt-3.3/docs/README.docs + A /rt/branches/rt-3.3/docs/Security + A /rt/branches/rt-3.3/docs/design_docs + A /rt/branches/rt-3.3/docs/design_docs/CARS + A /rt/branches/rt-3.3/docs/design_docs/TransactionTypes.txt + A /rt/branches/rt-3.3/docs/design_docs/acls + A /rt/branches/rt-3.3/docs/design_docs/approval_notices + A /rt/branches/rt-3.3/docs/design_docs/approval_template + A /rt/branches/rt-3.3/docs/design_docs/cf_search + A /rt/branches/rt-3.3/docs/design_docs/cli_spec + A /rt/branches/rt-3.3/docs/design_docs/cvs_integration + A /rt/branches/rt-3.3/docs/design_docs/delegation + A /rt/branches/rt-3.3/docs/design_docs/evil_plans + A /rt/branches/rt-3.3/docs/design_docs/groups_notes + A /rt/branches/rt-3.3/docs/design_docs/link-definitions.txt + A /rt/branches/rt-3.3/docs/design_docs/recursive_group_membership_algorithm + A /rt/branches/rt-3.3/docs/design_docs/rql_parser_machine.graphviz + A /rt/branches/rt-3.3/docs/design_docs/string-extraction-guide.txt + A /rt/branches/rt-3.3/docs/design_docs/subscription-definitions.txt + A /rt/branches/rt-3.3/docs/design_docs/ticket_templates + A /rt/branches/rt-3.3/docs/design_docs/users + A /rt/branches/rt-3.3/docs/rt3-schema-relationships.dot + A /rt/branches/rt-3.3/etc + A /rt/branches/rt-3.3/etc/RT_Config.pm.in + A /rt/branches/rt-3.3/etc/RT_SiteConfig.pm + A /rt/branches/rt-3.3/etc/acl.Informix + A /rt/branches/rt-3.3/etc/acl.Oracle + A /rt/branches/rt-3.3/etc/acl.Pg + A /rt/branches/rt-3.3/etc/acl.mysql + A /rt/branches/rt-3.3/etc/constraints.mysql + A /rt/branches/rt-3.3/etc/drop.Informix + A /rt/branches/rt-3.3/etc/drop.Oracle + A /rt/branches/rt-3.3/etc/initialdata + A /rt/branches/rt-3.3/etc/rt.spec + A /rt/branches/rt-3.3/etc/schema.Informix + A /rt/branches/rt-3.3/etc/schema.Oracle + A /rt/branches/rt-3.3/etc/schema.Pg + A /rt/branches/rt-3.3/etc/schema.SQLite + A /rt/branches/rt-3.3/etc/schema.mysql + A /rt/branches/rt-3.3/etc/upgrade + A /rt/branches/rt-3.3/etc/upgrade/2.1.71 + A /rt/branches/rt-3.3/html + A /rt/branches/rt-3.3/html/Admin + A /rt/branches/rt-3.3/html/Admin/CustomFields + A /rt/branches/rt-3.3/html/Admin/CustomFields/GroupRights.html + A /rt/branches/rt-3.3/html/Admin/CustomFields/Modify.html + A /rt/branches/rt-3.3/html/Admin/CustomFields/Objects.html + A /rt/branches/rt-3.3/html/Admin/CustomFields/UserRights.html + A /rt/branches/rt-3.3/html/Admin/CustomFields/index.html + A /rt/branches/rt-3.3/html/Admin/Elements + A /rt/branches/rt-3.3/html/Admin/Elements/AddCustomFieldValue + A /rt/branches/rt-3.3/html/Admin/Elements/CreateUserCalled + A /rt/branches/rt-3.3/html/Admin/Elements/CustomFieldTabs + A /rt/branches/rt-3.3/html/Admin/Elements/EditCustomField + A /rt/branches/rt-3.3/html/Admin/Elements/EditCustomFieldValues + A /rt/branches/rt-3.3/html/Admin/Elements/EditCustomFields + A /rt/branches/rt-3.3/html/Admin/Elements/EditQueueWatchers + A /rt/branches/rt-3.3/html/Admin/Elements/EditScrip + A /rt/branches/rt-3.3/html/Admin/Elements/EditScrips + A /rt/branches/rt-3.3/html/Admin/Elements/EditTemplates + A /rt/branches/rt-3.3/html/Admin/Elements/EditUserComments + A /rt/branches/rt-3.3/html/Admin/Elements/GroupTabs + A /rt/branches/rt-3.3/html/Admin/Elements/Header + A /rt/branches/rt-3.3/html/Admin/Elements/ListGlobalCustomFields + A /rt/branches/rt-3.3/html/Admin/Elements/ListGlobalScrips + A /rt/branches/rt-3.3/html/Admin/Elements/ModifyQueue + A /rt/branches/rt-3.3/html/Admin/Elements/ModifyTemplate + A /rt/branches/rt-3.3/html/Admin/Elements/ModifyUser + A /rt/branches/rt-3.3/html/Admin/Elements/ObjectCustomFields + A /rt/branches/rt-3.3/html/Admin/Elements/PickCustomFields + A /rt/branches/rt-3.3/html/Admin/Elements/PickObjects + A /rt/branches/rt-3.3/html/Admin/Elements/QueueRightsForUser + A /rt/branches/rt-3.3/html/Admin/Elements/QueueTabs + A /rt/branches/rt-3.3/html/Admin/Elements/SelectCustomFieldLookupType + A /rt/branches/rt-3.3/html/Admin/Elements/SelectCustomFieldType + A /rt/branches/rt-3.3/html/Admin/Elements/SelectGroups + A /rt/branches/rt-3.3/html/Admin/Elements/SelectModifyGroup + A /rt/branches/rt-3.3/html/Admin/Elements/SelectModifyQueue + A /rt/branches/rt-3.3/html/Admin/Elements/SelectModifyUser + A /rt/branches/rt-3.3/html/Admin/Elements/SelectNewGroupMembers + A /rt/branches/rt-3.3/html/Admin/Elements/SelectRights + A /rt/branches/rt-3.3/html/Admin/Elements/SelectScrip + A /rt/branches/rt-3.3/html/Admin/Elements/SelectScripAction + A /rt/branches/rt-3.3/html/Admin/Elements/SelectScripCondition + A /rt/branches/rt-3.3/html/Admin/Elements/SelectSingleOrMultiple + A /rt/branches/rt-3.3/html/Admin/Elements/SelectStage + A /rt/branches/rt-3.3/html/Admin/Elements/SelectTemplate + A /rt/branches/rt-3.3/html/Admin/Elements/SelectUsers + A /rt/branches/rt-3.3/html/Admin/Elements/SystemTabs + A /rt/branches/rt-3.3/html/Admin/Elements/Tabs + A /rt/branches/rt-3.3/html/Admin/Elements/UserTabs + A /rt/branches/rt-3.3/html/Admin/Global + A /rt/branches/rt-3.3/html/Admin/Global/CustomField.html + A /rt/branches/rt-3.3/html/Admin/Global/CustomFields.html + A /rt/branches/rt-3.3/html/Admin/Global/GroupRights.html + A /rt/branches/rt-3.3/html/Admin/Global/Scrip.html + A /rt/branches/rt-3.3/html/Admin/Global/Scrips.html + A /rt/branches/rt-3.3/html/Admin/Global/Template.html + A /rt/branches/rt-3.3/html/Admin/Global/Templates.html + A /rt/branches/rt-3.3/html/Admin/Global/UserRights.html + A /rt/branches/rt-3.3/html/Admin/Global/index.html + A /rt/branches/rt-3.3/html/Admin/Groups + A /rt/branches/rt-3.3/html/Admin/Groups/CustomFields.html + A /rt/branches/rt-3.3/html/Admin/Groups/GroupRights.html + A /rt/branches/rt-3.3/html/Admin/Groups/History.html + A /rt/branches/rt-3.3/html/Admin/Groups/Members.html + A /rt/branches/rt-3.3/html/Admin/Groups/Modify.html + A /rt/branches/rt-3.3/html/Admin/Groups/UserRights.html + A /rt/branches/rt-3.3/html/Admin/Groups/index.html + A /rt/branches/rt-3.3/html/Admin/Queues + A /rt/branches/rt-3.3/html/Admin/Queues/CustomField.html + A /rt/branches/rt-3.3/html/Admin/Queues/CustomFields.html + A /rt/branches/rt-3.3/html/Admin/Queues/GroupRights.html + A /rt/branches/rt-3.3/html/Admin/Queues/Modify.html + A /rt/branches/rt-3.3/html/Admin/Queues/People.html + A /rt/branches/rt-3.3/html/Admin/Queues/Scrip.html + A /rt/branches/rt-3.3/html/Admin/Queues/Scrips.html + A /rt/branches/rt-3.3/html/Admin/Queues/Template.html + A /rt/branches/rt-3.3/html/Admin/Queues/Templates.html + A /rt/branches/rt-3.3/html/Admin/Queues/UserRights.html + A /rt/branches/rt-3.3/html/Admin/Queues/index.html + A /rt/branches/rt-3.3/html/Admin/Users + A /rt/branches/rt-3.3/html/Admin/Users/CustomFields.html + A /rt/branches/rt-3.3/html/Admin/Users/History.html + A /rt/branches/rt-3.3/html/Admin/Users/Memberships.html + A /rt/branches/rt-3.3/html/Admin/Users/Modify.html + A /rt/branches/rt-3.3/html/Admin/Users/Prefs.html + A /rt/branches/rt-3.3/html/Admin/Users/index.html + A /rt/branches/rt-3.3/html/Admin/index.html + A /rt/branches/rt-3.3/html/Approvals + A /rt/branches/rt-3.3/html/Approvals/Display.html + A /rt/branches/rt-3.3/html/Approvals/Elements + A /rt/branches/rt-3.3/html/Approvals/Elements/Approve + A /rt/branches/rt-3.3/html/Approvals/Elements/PendingMyApproval + A /rt/branches/rt-3.3/html/Approvals/Elements/ShowDependency + A /rt/branches/rt-3.3/html/Approvals/Elements/Tabs + A /rt/branches/rt-3.3/html/Approvals/index.html + A /rt/branches/rt-3.3/html/Download + A /rt/branches/rt-3.3/html/Download/CustomFieldValue + A /rt/branches/rt-3.3/html/Download/CustomFieldValue/dhandler + A /rt/branches/rt-3.3/html/Download/Tabular + A /rt/branches/rt-3.3/html/Download/Tabular/dhandler + A /rt/branches/rt-3.3/html/Elements + A /rt/branches/rt-3.3/html/Elements/BevelBoxRaisedEnd + A /rt/branches/rt-3.3/html/Elements/BevelBoxRaisedStart + A /rt/branches/rt-3.3/html/Elements/Callback + A /rt/branches/rt-3.3/html/Elements/Checkbox + A /rt/branches/rt-3.3/html/Elements/CreateTicket + A /rt/branches/rt-3.3/html/Elements/EditCustomField + A /rt/branches/rt-3.3/html/Elements/EditCustomFieldBinary + A /rt/branches/rt-3.3/html/Elements/EditCustomFieldFreeform + A /rt/branches/rt-3.3/html/Elements/EditCustomFieldImage + A /rt/branches/rt-3.3/html/Elements/EditCustomFieldSelect + A /rt/branches/rt-3.3/html/Elements/EditCustomFieldText + A /rt/branches/rt-3.3/html/Elements/Error + A /rt/branches/rt-3.3/html/Elements/Footer + A /rt/branches/rt-3.3/html/Elements/GotoTicket + A /rt/branches/rt-3.3/html/Elements/Header + A /rt/branches/rt-3.3/html/Elements/ListActions + A /rt/branches/rt-3.3/html/Elements/Login + A /rt/branches/rt-3.3/html/Elements/Menu + A /rt/branches/rt-3.3/html/Elements/MessageBox + A /rt/branches/rt-3.3/html/Elements/MyRequests + A /rt/branches/rt-3.3/html/Elements/MyTickets + A /rt/branches/rt-3.3/html/Elements/PageLayout + A /rt/branches/rt-3.3/html/Elements/QuickCreate + A /rt/branches/rt-3.3/html/Elements/Quicksearch + A /rt/branches/rt-3.3/html/Elements/Refresh + A /rt/branches/rt-3.3/html/Elements/Section + A /rt/branches/rt-3.3/html/Elements/SelectAttachmentField + A /rt/branches/rt-3.3/html/Elements/SelectBoolean + A /rt/branches/rt-3.3/html/Elements/SelectCustomFieldOperator + A /rt/branches/rt-3.3/html/Elements/SelectCustomFieldValue + A /rt/branches/rt-3.3/html/Elements/SelectDate + A /rt/branches/rt-3.3/html/Elements/SelectDateRelation + A /rt/branches/rt-3.3/html/Elements/SelectDateType + A /rt/branches/rt-3.3/html/Elements/SelectEqualityOperator + A /rt/branches/rt-3.3/html/Elements/SelectGroups + A /rt/branches/rt-3.3/html/Elements/SelectLang + A /rt/branches/rt-3.3/html/Elements/SelectLinkType + A /rt/branches/rt-3.3/html/Elements/SelectMatch + A /rt/branches/rt-3.3/html/Elements/SelectNewTicketQueue + A /rt/branches/rt-3.3/html/Elements/SelectOwner + A /rt/branches/rt-3.3/html/Elements/SelectQueue + A /rt/branches/rt-3.3/html/Elements/SelectResultsPerPage + A /rt/branches/rt-3.3/html/Elements/SelectSortOrder + A /rt/branches/rt-3.3/html/Elements/SelectStatus + A /rt/branches/rt-3.3/html/Elements/SelectTicketSortBy + A /rt/branches/rt-3.3/html/Elements/SelectTicketTypes + A /rt/branches/rt-3.3/html/Elements/SelectUsers + A /rt/branches/rt-3.3/html/Elements/SelectWatcherType + A /rt/branches/rt-3.3/html/Elements/SetupSessionCookie + A /rt/branches/rt-3.3/html/Elements/ShadedBox + A /rt/branches/rt-3.3/html/Elements/ShadedInputRow + A /rt/branches/rt-3.3/html/Elements/ShadedRow + A /rt/branches/rt-3.3/html/Elements/ShowCustomFields + A /rt/branches/rt-3.3/html/Elements/ShowMemberships + A /rt/branches/rt-3.3/html/Elements/SimpleSearch + A /rt/branches/rt-3.3/html/Elements/Submit + A /rt/branches/rt-3.3/html/Elements/Tabs + A /rt/branches/rt-3.3/html/Elements/TicketList + A /rt/branches/rt-3.3/html/Elements/TitleBox + A /rt/branches/rt-3.3/html/Elements/TitleBoxEnd + A /rt/branches/rt-3.3/html/Elements/TitleBoxStart + A /rt/branches/rt-3.3/html/Elements/ViewUser + A /rt/branches/rt-3.3/html/NoAuth + A /rt/branches/rt-3.3/html/NoAuth/Logout.html + A /rt/branches/rt-3.3/html/NoAuth/Reminder.html + A /rt/branches/rt-3.3/html/NoAuth/images + A /rt/branches/rt-3.3/html/NoAuth/images/back_home.gif + A /rt/branches/rt-3.3/html/NoAuth/images/bplogo.gif + A /rt/branches/rt-3.3/html/NoAuth/images/favicon.png + A /rt/branches/rt-3.3/html/NoAuth/images/head_requestracker.gif + A /rt/branches/rt-3.3/html/NoAuth/images/rt.jpg + A /rt/branches/rt-3.3/html/NoAuth/images/space.gif + A /rt/branches/rt-3.3/html/NoAuth/images/spacer.gif + A /rt/branches/rt-3.3/html/NoAuth/images/squares_blue.gif + A /rt/branches/rt-3.3/html/NoAuth/webrt.css + A /rt/branches/rt-3.3/html/Projects + A /rt/branches/rt-3.3/html/Projects/Create.html + A /rt/branches/rt-3.3/html/Projects/Edit.html + A /rt/branches/rt-3.3/html/Projects/Elements + A /rt/branches/rt-3.3/html/Projects/Elements/CreateTask + A /rt/branches/rt-3.3/html/Projects/Elements/EditTask + A /rt/branches/rt-3.3/html/Projects/Elements/OverviewEntry + A /rt/branches/rt-3.3/html/Projects/Elements/SelectProjectTask + A /rt/branches/rt-3.3/html/Projects/Elements/SelectProjectTaskEntry + A /rt/branches/rt-3.3/html/Projects/Elements/Tabs + A /rt/branches/rt-3.3/html/Projects/Elements/TicketTabs + A /rt/branches/rt-3.3/html/Projects/Gantt.html + A /rt/branches/rt-3.3/html/Projects/History.html + A /rt/branches/rt-3.3/html/Projects/Overview.html + A /rt/branches/rt-3.3/html/Projects/Schedule.html + A /rt/branches/rt-3.3/html/Projects/ScheduleByActor.html + A /rt/branches/rt-3.3/html/Projects/index.html + A /rt/branches/rt-3.3/html/REST + A /rt/branches/rt-3.3/html/REST/1.0 + A /rt/branches/rt-3.3/html/REST/1.0/Forms + A /rt/branches/rt-3.3/html/REST/1.0/Forms/queue + A /rt/branches/rt-3.3/html/REST/1.0/Forms/queue/default + A /rt/branches/rt-3.3/html/REST/1.0/Forms/queue/ns + A /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket + A /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/attachments + A /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/default + A /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/history + A /rt/branches/rt-3.3/html/REST/1.0/Forms/ticket/links + A /rt/branches/rt-3.3/html/REST/1.0/Forms/user + A /rt/branches/rt-3.3/html/REST/1.0/Forms/user/default + A /rt/branches/rt-3.3/html/REST/1.0/Forms/user/ns + A /rt/branches/rt-3.3/html/REST/1.0/NoAuth + A /rt/branches/rt-3.3/html/REST/1.0/NoAuth/mail-gateway + A /rt/branches/rt-3.3/html/REST/1.0/autohandler + A /rt/branches/rt-3.3/html/REST/1.0/dhandler + A /rt/branches/rt-3.3/html/REST/1.0/logout + A /rt/branches/rt-3.3/html/REST/1.0/search + A /rt/branches/rt-3.3/html/REST/1.0/search/dhandler + A /rt/branches/rt-3.3/html/REST/1.0/search/ticket + A /rt/branches/rt-3.3/html/REST/1.0/ticket + A /rt/branches/rt-3.3/html/REST/1.0/ticket/comment + A /rt/branches/rt-3.3/html/REST/1.0/ticket/link + A /rt/branches/rt-3.3/html/REST/1.0/ticket/merge + A /rt/branches/rt-3.3/html/Scope + A /rt/branches/rt-3.3/html/Scope/Action.html + A /rt/branches/rt-3.3/html/Scope/Elements + A /rt/branches/rt-3.3/html/Scope/Elements/Header + A /rt/branches/rt-3.3/html/Scope/Elements/MessageBox + A /rt/branches/rt-3.3/html/Scope/Elements/ShowHistory + A /rt/branches/rt-3.3/html/Scope/Elements/ShowHistoryView + A /rt/branches/rt-3.3/html/Scope/Elements/ShowMessageHeaders + A /rt/branches/rt-3.3/html/Scope/Elements/ShowMessageStanza + A /rt/branches/rt-3.3/html/Scope/Elements/ShowSummary + A /rt/branches/rt-3.3/html/Scope/Elements/ShowTransaction + A /rt/branches/rt-3.3/html/Scope/History.html + A /rt/branches/rt-3.3/html/Scope/Search.html + A /rt/branches/rt-3.3/html/Scope/Update.html + A /rt/branches/rt-3.3/html/Scope/View.html + A /rt/branches/rt-3.3/html/Scope/Work.html + A /rt/branches/rt-3.3/html/Scope/index.html + A /rt/branches/rt-3.3/html/Search + A /rt/branches/rt-3.3/html/Search/Build.html + A /rt/branches/rt-3.3/html/Search/Bulk.html + A /rt/branches/rt-3.3/html/Search/Edit.html + A /rt/branches/rt-3.3/html/Search/Elements + A /rt/branches/rt-3.3/html/Search/Elements/BuildFormatString + A /rt/branches/rt-3.3/html/Search/Elements/DisplayOptions + A /rt/branches/rt-3.3/html/Search/Elements/EditFormat + A /rt/branches/rt-3.3/html/Search/Elements/EditSearches + A /rt/branches/rt-3.3/html/Search/Elements/NewListActions + A /rt/branches/rt-3.3/html/Search/Elements/PickBasics + A /rt/branches/rt-3.3/html/Search/Elements/PickCFs + A /rt/branches/rt-3.3/html/Search/Elements/PickCriteria + A /rt/branches/rt-3.3/html/Search/Elements/PickRestriction + A /rt/branches/rt-3.3/html/Search/Elements/SearchPrivacy + A /rt/branches/rt-3.3/html/Search/Elements/SelectAndOr + A /rt/branches/rt-3.3/html/Search/Elements/SelectGroup + A /rt/branches/rt-3.3/html/Search/Elements/SelectLinks + A /rt/branches/rt-3.3/html/Search/Elements/SelectPersonType + A /rt/branches/rt-3.3/html/Search/Elements/SelectSearchObject + A /rt/branches/rt-3.3/html/Search/Elements/SelectSearchesForObjects + A /rt/branches/rt-3.3/html/Search/Elements/TicketHeader + A /rt/branches/rt-3.3/html/Search/Elements/TicketHeaderCell + A /rt/branches/rt-3.3/html/Search/Elements/TicketRow + A /rt/branches/rt-3.3/html/Search/Listing.html + A /rt/branches/rt-3.3/html/Search/Results.html + A /rt/branches/rt-3.3/html/Search/Results.rdf + A /rt/branches/rt-3.3/html/Search/Results.tsv + A /rt/branches/rt-3.3/html/SelfService + A /rt/branches/rt-3.3/html/SelfService/Attachment + A /rt/branches/rt-3.3/html/SelfService/Attachment/dhandler + A /rt/branches/rt-3.3/html/SelfService/Closed.html + A /rt/branches/rt-3.3/html/SelfService/Create.html + A /rt/branches/rt-3.3/html/SelfService/Display.html + A /rt/branches/rt-3.3/html/SelfService/Elements + A /rt/branches/rt-3.3/html/SelfService/Elements/GotoTicket + A /rt/branches/rt-3.3/html/SelfService/Elements/Header + A /rt/branches/rt-3.3/html/SelfService/Elements/MyRequests + A /rt/branches/rt-3.3/html/SelfService/Elements/Tabs + A /rt/branches/rt-3.3/html/SelfService/Error.html + A /rt/branches/rt-3.3/html/SelfService/Prefs.html + A /rt/branches/rt-3.3/html/SelfService/Update.html + A /rt/branches/rt-3.3/html/SelfService/index.html + A /rt/branches/rt-3.3/html/Ticket + A /rt/branches/rt-3.3/html/Ticket/Attachment + A /rt/branches/rt-3.3/html/Ticket/Attachment/dhandler + A /rt/branches/rt-3.3/html/Ticket/Create.html + A /rt/branches/rt-3.3/html/Ticket/Display.html + A /rt/branches/rt-3.3/html/Ticket/Elements + A /rt/branches/rt-3.3/html/Ticket/Elements/AddWatchers + A /rt/branches/rt-3.3/html/Ticket/Elements/BulkLinks + A /rt/branches/rt-3.3/html/Ticket/Elements/EditBasics + A /rt/branches/rt-3.3/html/Ticket/Elements/EditCustomField + A /rt/branches/rt-3.3/html/Ticket/Elements/EditCustomFields + A /rt/branches/rt-3.3/html/Ticket/Elements/EditDates + A /rt/branches/rt-3.3/html/Ticket/Elements/EditLinks + A /rt/branches/rt-3.3/html/Ticket/Elements/EditPeople + A /rt/branches/rt-3.3/html/Ticket/Elements/EditWatchers + A /rt/branches/rt-3.3/html/Ticket/Elements/PreviewScrips + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowAttachments + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowBasics + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowCustomFields + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowDates + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowDependencies + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowHistory + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowLink + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowLinks + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowMemberOf + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowMembers + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageHeaders + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowMessageStanza + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowPeople + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowReferences + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowRequestor + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowSummary + A /rt/branches/rt-3.3/html/Ticket/Elements/ShowTransaction + A /rt/branches/rt-3.3/html/Ticket/Elements/Tabs + A /rt/branches/rt-3.3/html/Ticket/History.html + A /rt/branches/rt-3.3/html/Ticket/Modify.html + A /rt/branches/rt-3.3/html/Ticket/ModifyAll.html + A /rt/branches/rt-3.3/html/Ticket/ModifyDates.html + A /rt/branches/rt-3.3/html/Ticket/ModifyLinks.html + A /rt/branches/rt-3.3/html/Ticket/ModifyPeople.html + A /rt/branches/rt-3.3/html/Ticket/Update.html + A /rt/branches/rt-3.3/html/Tools + A /rt/branches/rt-3.3/html/Tools/MyDay.html + A /rt/branches/rt-3.3/html/User + A /rt/branches/rt-3.3/html/User/Delegation.html + A /rt/branches/rt-3.3/html/User/Elements + A /rt/branches/rt-3.3/html/User/Elements/DelegateRights + A /rt/branches/rt-3.3/html/User/Elements/GroupTabs + A /rt/branches/rt-3.3/html/User/Elements/Tabs + A /rt/branches/rt-3.3/html/User/Groups + A /rt/branches/rt-3.3/html/User/Groups/Members.html + A /rt/branches/rt-3.3/html/User/Groups/Modify.html + A /rt/branches/rt-3.3/html/User/Groups/index.html + A /rt/branches/rt-3.3/html/User/Prefs.html + A /rt/branches/rt-3.3/html/autohandler + A /rt/branches/rt-3.3/html/index.html + A /rt/branches/rt-3.3/html/l + A /rt/branches/rt-3.3/install-sh + A /rt/branches/rt-3.3/lib + A /rt/branches/rt-3.3/lib/RT + A /rt/branches/rt-3.3/lib/RT/ACE.pm + A /rt/branches/rt-3.3/lib/RT/ACE_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ACL.pm + A /rt/branches/rt-3.3/lib/RT/ACL_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Action + A /rt/branches/rt-3.3/lib/RT/Action/AutoOpen.pm + A /rt/branches/rt-3.3/lib/RT/Action/Autoreply.pm + A /rt/branches/rt-3.3/lib/RT/Action/CreateTickets.pm + A /rt/branches/rt-3.3/lib/RT/Action/EscalatePriority.pm + A /rt/branches/rt-3.3/lib/RT/Action/Generic.pm + A /rt/branches/rt-3.3/lib/RT/Action/Notify.pm + A /rt/branches/rt-3.3/lib/RT/Action/NotifyAsComment.pm + A /rt/branches/rt-3.3/lib/RT/Action/ResolveMembers.pm + A /rt/branches/rt-3.3/lib/RT/Action/SendEmail.pm + A /rt/branches/rt-3.3/lib/RT/Action/SetPriority.pm + A /rt/branches/rt-3.3/lib/RT/Action/UserDefined.pm + A /rt/branches/rt-3.3/lib/RT/Attachment.pm + A /rt/branches/rt-3.3/lib/RT/Attachment_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Attachments.pm + A /rt/branches/rt-3.3/lib/RT/Attachments_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Attribute.pm + A /rt/branches/rt-3.3/lib/RT/Attribute_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Attributes.pm + A /rt/branches/rt-3.3/lib/RT/Attributes_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Base.pm + A /rt/branches/rt-3.3/lib/RT/CachedGroupMember.pm + A /rt/branches/rt-3.3/lib/RT/CachedGroupMember_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/CachedGroupMembers.pm + A /rt/branches/rt-3.3/lib/RT/CachedGroupMembers_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Condition + A /rt/branches/rt-3.3/lib/RT/Condition/AnyTransaction.pm + A /rt/branches/rt-3.3/lib/RT/Condition/BeforeDue.pm + A /rt/branches/rt-3.3/lib/RT/Condition/Generic.pm + A /rt/branches/rt-3.3/lib/RT/Condition/Overdue.pm + A /rt/branches/rt-3.3/lib/RT/Condition/OwnerChange.pm + A /rt/branches/rt-3.3/lib/RT/Condition/PriorityExceeds.pm + A /rt/branches/rt-3.3/lib/RT/Condition/QueueChange.pm + A /rt/branches/rt-3.3/lib/RT/Condition/StatusChange.pm + A /rt/branches/rt-3.3/lib/RT/Condition/UserDefined.pm + A /rt/branches/rt-3.3/lib/RT/CurrentUser.pm + A /rt/branches/rt-3.3/lib/RT/CustomField.pm + A /rt/branches/rt-3.3/lib/RT/CustomFieldValue.pm + A /rt/branches/rt-3.3/lib/RT/CustomFieldValues.pm + A /rt/branches/rt-3.3/lib/RT/CustomFieldValues_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/CustomField_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/CustomFields.pm + A /rt/branches/rt-3.3/lib/RT/CustomFields_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Date.pm + A /rt/branches/rt-3.3/lib/RT/EmailParser.pm + A /rt/branches/rt-3.3/lib/RT/Group.pm + A /rt/branches/rt-3.3/lib/RT/GroupMember.pm + A /rt/branches/rt-3.3/lib/RT/GroupMember_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/GroupMembers.pm + A /rt/branches/rt-3.3/lib/RT/GroupMembers_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Group_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Groups.pm + A /rt/branches/rt-3.3/lib/RT/Groups_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Handle.pm + A /rt/branches/rt-3.3/lib/RT/I18N + A /rt/branches/rt-3.3/lib/RT/I18N/cs.pm + A /rt/branches/rt-3.3/lib/RT/I18N/cs.po + A /rt/branches/rt-3.3/lib/RT/I18N/de.po + A /rt/branches/rt-3.3/lib/RT/I18N/en.po + A /rt/branches/rt-3.3/lib/RT/I18N/en_malkovich.po + A /rt/branches/rt-3.3/lib/RT/I18N/es.po + A /rt/branches/rt-3.3/lib/RT/I18N/fi.po + A /rt/branches/rt-3.3/lib/RT/I18N/fr.po + A /rt/branches/rt-3.3/lib/RT/I18N/he.po + A /rt/branches/rt-3.3/lib/RT/I18N/i_default.pm + A /rt/branches/rt-3.3/lib/RT/I18N/it.po + A /rt/branches/rt-3.3/lib/RT/I18N/ja.po + A /rt/branches/rt-3.3/lib/RT/I18N/nl.po + A /rt/branches/rt-3.3/lib/RT/I18N/no.po + A /rt/branches/rt-3.3/lib/RT/I18N/pt_br.po + A /rt/branches/rt-3.3/lib/RT/I18N/ru.po + A /rt/branches/rt-3.3/lib/RT/I18N/zh_cn.po + A /rt/branches/rt-3.3/lib/RT/I18N/zh_tw.po + A /rt/branches/rt-3.3/lib/RT/I18N.pm + A /rt/branches/rt-3.3/lib/RT/Interface + A /rt/branches/rt-3.3/lib/RT/Interface/CLI.pm + A /rt/branches/rt-3.3/lib/RT/Interface/Email + A /rt/branches/rt-3.3/lib/RT/Interface/Email/Auth + A /rt/branches/rt-3.3/lib/RT/Interface/Email/Auth/GnuPG.pm + A /rt/branches/rt-3.3/lib/RT/Interface/Email/Auth/MailFrom.pm + A /rt/branches/rt-3.3/lib/RT/Interface/Email/Filter + A /rt/branches/rt-3.3/lib/RT/Interface/Email/Filter/SpamAssassin.pm + A /rt/branches/rt-3.3/lib/RT/Interface/Email.pm + A /rt/branches/rt-3.3/lib/RT/Interface/REST.pm + A /rt/branches/rt-3.3/lib/RT/Interface/Web.pm + A /rt/branches/rt-3.3/lib/RT/Link.pm + A /rt/branches/rt-3.3/lib/RT/Link_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Links.pm + A /rt/branches/rt-3.3/lib/RT/Links_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomField.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValue.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValue_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValues.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomFieldValues_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomField_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomFields.pm + A /rt/branches/rt-3.3/lib/RT/ObjectCustomFields_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Principal.pm + A /rt/branches/rt-3.3/lib/RT/Principal_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Principals.pm + A /rt/branches/rt-3.3/lib/RT/Principals_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Queue.pm + A /rt/branches/rt-3.3/lib/RT/Queue_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Queues.pm + A /rt/branches/rt-3.3/lib/RT/Queues_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Record.pm + A /rt/branches/rt-3.3/lib/RT/Scrip.pm + A /rt/branches/rt-3.3/lib/RT/ScripAction.pm + A /rt/branches/rt-3.3/lib/RT/ScripAction_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ScripActions.pm + A /rt/branches/rt-3.3/lib/RT/ScripActions_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ScripCondition.pm + A /rt/branches/rt-3.3/lib/RT/ScripCondition_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/ScripConditions.pm + A /rt/branches/rt-3.3/lib/RT/ScripConditions_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Scrip_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Scrips.pm + A /rt/branches/rt-3.3/lib/RT/Scrips_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Search + A /rt/branches/rt-3.3/lib/RT/Search/ActiveTicketsInQueue.pm + A /rt/branches/rt-3.3/lib/RT/Search/Generic.pm + A /rt/branches/rt-3.3/lib/RT/SearchBuilder.pm + A /rt/branches/rt-3.3/lib/RT/StyleGuide.pod + A /rt/branches/rt-3.3/lib/RT/System.pm + A /rt/branches/rt-3.3/lib/RT/Template.pm + A /rt/branches/rt-3.3/lib/RT/Template_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Templates.pm + A /rt/branches/rt-3.3/lib/RT/Templates_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Ticket.pm + A /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValue.pm + A /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValue_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValues.pm + A /rt/branches/rt-3.3/lib/RT/TicketCustomFieldValues_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Ticket_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Tickets.pm + A /rt/branches/rt-3.3/lib/RT/Tickets_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Tickets_Overlay_SQL.pm + A /rt/branches/rt-3.3/lib/RT/Transaction.pm + A /rt/branches/rt-3.3/lib/RT/Transaction_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Transactions.pm + A /rt/branches/rt-3.3/lib/RT/Transactions_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/URI + A /rt/branches/rt-3.3/lib/RT/URI/base.pm + A /rt/branches/rt-3.3/lib/RT/URI/fsck_com_rt.pm + A /rt/branches/rt-3.3/lib/RT/URI.pm + A /rt/branches/rt-3.3/lib/RT/User.pm + A /rt/branches/rt-3.3/lib/RT/User_Overlay.pm + A /rt/branches/rt-3.3/lib/RT/Users.pm + A /rt/branches/rt-3.3/lib/RT/Users_Overlay.pm + A /rt/branches/rt-3.3/lib/RT.pm.in + A /rt/branches/rt-3.3/lib/t + A /rt/branches/rt-3.3/lib/t/00smoke.t.in + A /rt/branches/rt-3.3/lib/t/01harness.t.in + A /rt/branches/rt-3.3/lib/t/02regression.t.in + A /rt/branches/rt-3.3/lib/t/03web.pl.in + A /rt/branches/rt-3.3/lib/t/04_send_email.pl.in + A /rt/branches/rt-3.3/lib/t/data + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/dir + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg1 + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg2 + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg3 + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg4 + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg5 + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg6 + A /rt/branches/rt-3.3/lib/t/data/8859-15-message-series/msg7 + A /rt/branches/rt-3.3/lib/t/data/crashes-file-based-parser + A /rt/branches/rt-3.3/lib/t/data/multipart-alternative-with-umlaut + A /rt/branches/rt-3.3/lib/t/data/multipart-report + A /rt/branches/rt-3.3/lib/t/data/nested-mime-sample + A /rt/branches/rt-3.3/lib/t/data/nested-rfc-822 + A /rt/branches/rt-3.3/lib/t/data/new-ticket-from-iso-8859-1 + A /rt/branches/rt-3.3/lib/t/data/new-ticket-from-iso-8859-1-full + A /rt/branches/rt-3.3/lib/t/data/notes-uuencoded + A /rt/branches/rt-3.3/lib/t/data/russian-subject-no-content-type + A /rt/branches/rt-3.3/lib/t/data/text-html-in-russian + A /rt/branches/rt-3.3/lib/t/data/text-html-with-umlaut + A /rt/branches/rt-3.3/lib/t/regression + A /rt/branches/rt-3.3/lib/t/regression/00placeholder + A /rt/branches/rt-3.3/lib/t/regression/mime_tests + A /rt/branches/rt-3.3/m4 + A /rt/branches/rt-3.3/m4/rt_enable_layout.m4 + A /rt/branches/rt-3.3/m4/rt_expand_var.m4 + A /rt/branches/rt-3.3/m4/rt_layout.m4 + A /rt/branches/rt-3.3/m4/rt_subst_expanded_arg.m4 + A /rt/branches/rt-3.3/releng.cnf + A /rt/branches/rt-3.3/sbin + A /rt/branches/rt-3.3/sbin/extract-message-catalog + A /rt/branches/rt-3.3/sbin/extract_pod_tests + A /rt/branches/rt-3.3/sbin/factory + A /rt/branches/rt-3.3/sbin/license_tag + A /rt/branches/rt-3.3/sbin/regression_harness + A /rt/branches/rt-3.3/sbin/rt-setup-database.in + A /rt/branches/rt-3.3/sbin/rt-test-dependencies.in + A /rt/branches/rt-3.3/spec + A /rt/branches/rt-3.3/spec/schema.txt + +* mv autrijus-3.1 to rt-3.3 + +------------------------------------------------------------------------ diff --git a/rt/FREESIDE_MODIFIED b/rt/FREESIDE_MODIFIED new file mode 100644 index 000000000..1b0c47c06 --- /dev/null +++ b/rt/FREESIDE_MODIFIED @@ -0,0 +1,31 @@ + sbin/rt-setup-database.in +config.layout +config.layout.in + etc/RT_SiteConfig.pm +lib/RT/Interface/Web_Vendor.pm +lib/RT/URI/freeside.pm +lib/RT/URI/freeside/Internal.pm +lib/RT/URI/freeside/XMLRPC.pm + html/Elements/Header + html/Elements/Menu + html/Elements/PageLayout + html/Elements/SimpleSearch + html/Elements/Tabs + html/Elements/Footer + html/Elements/CollectionAsTable/Row #backport from 3.3-TESTING +html/Ticket/Elements/AddCustomers +html/Ticket/Elements/EditCustomers +html/Ticket/Elements/ShowCustomers + html/Ticket/Elements/ShowSummary + html/Ticket/Elements/Tabs +html/Ticket/ModifyCustomers.html +html/NoAuth/images/small-logo.png + html/NoAuth/webrt.css + +html/Elements/TitleBoxStart +html/Search/Bulk.html + +html/Elements/FreesideNewCust +html/Elements/FreesideSearch +html/Elements/FreesideSvcSearch + diff --git a/rt/HOWTO/README b/rt/HOWTO/README deleted file mode 100644 index 942096b0a..000000000 --- a/rt/HOWTO/README +++ /dev/null @@ -1,14 +0,0 @@ -Here you'll find plain text documentation of how to handle various -project procedures. Files contained herein: - -change.txt - How changes are integrated, including generating and - distributing aedist change sets, and updating the CVS repository. - -release.txt - Steps to go through when releasing a new version of RT. - - -These procedures are based on documentation from the scons project -as http://www.scons.org/ - diff --git a/rt/HOWTO/change.txt b/rt/HOWTO/change.txt deleted file mode 100644 index de316450c..000000000 --- a/rt/HOWTO/change.txt +++ /dev/null @@ -1,67 +0,0 @@ -Handling a change set: - - -- Start the change: - - aedist -r [if it's a remote submission] - - -or- - - aedb {cnum} [if it's initiated locally] - - -- Normal development cycle: - - aecd -c {cnum} - aecp . # Copy the baseline to your working dir - # work on your change - aenf {new file names} - - aecpu -unch # Remove unchanged files, for faster diffs - aeb # Currently does nothing - aet # Currently does nothing - aed # Diff your change - aede # End the change - - -- As the reviewer: - - aerpass {cnum} - - -- As the integrator: - - aeib {cnum} - aeb - aet - aed - cd ~ # Get out of the current working directory - aeipass - - - - - -- Update the aedist baseline on the web site: - - aedist -s -bl -p rt.2.1 > rt.2.1.ae - scp rt.2.1.ae jesse@fsck.com:/home/ftp/pub/rt/devel/rt.2.1.ae - rm rt.2.1.ae - - [This will eventually be automated.] - - -- Distribute the change to CVS: - - WARNING. DOES NOT YET WORK - - export CVS_RSH=ssh - ae2cvs -n -aegis -p rt.2.1 -c {cnum} -u ~/SCons/scons - ae2cvs -X -aegis -p rt.2.1 -c {cnum} -u ~/SCons/scons - - If you need the "ae2cvs" Perl script, you can find a copy - checked in to the bin/subdirectory. - - [This may eventually be automated.] - - - - -- Grabbing the latest dev sources over ssh - - ssh fsck.com "aedist -s -p rt.2.1 -naa -bl -entire-source" | aedist -r - - diff --git a/rt/HOWTO/release.txt b/rt/HOWTO/release.txt deleted file mode 100644 index 285041c5b..000000000 --- a/rt/HOWTO/release.txt +++ /dev/null @@ -1,124 +0,0 @@ -Things to do to release a new version of rt: - - Build and test candidate packages - - Read through the README and src/README.txt files for any updates - - Prepare ChangeLog - - date -R the latest release - - should be current if this has been updated as each - change went in. - - [ Should be automated ] - - - TODO: nothing below this line is accurate for RT - - END THE BRANCH - - ae_p rt.2 - aede {5} - aerpass {5} - aeib {5} - aeb - aet - aet -reg - aed - aeipass - - START THE NEW BRANCH - - aenbr -p rt.2 {6} - aenc -p rt.2.{6} - - Call it something like, "Initialize the new - branch." Cause = internal_enhancement. Exempt - it from all tests (*_exempt = true). - - ae_p rt.2.{6} - - aedb 100 - - aecd - - # Change the hard-coded package version numbers - # in the following files. - aecp rttruct debian/changelog rpm/rt.spec - - vi rttruct debian/changelog rpm/rt.spec - - # Optionally, do the same in the following: - [optional] aecp HOWTO/change.txt - [optional] aecp HOWTO/release.txt - [optional] aecp debian/rt.postinst - - [optional] vi HOWTO/change.txt - [optional] vi HOWTO/release.txt - [optional] vi debian/rt.postinst - - aeb - - aet -reg - - aed - - aede - - etc. - - - Read through the FAQ for any updates - - Test downloading from the web site download page - - - In the Bugs Tracker, add a Group for the new release (0.05) - - Announce to the following mailing lists (template below): - - rt-announce@lists.fsck.com - - - Notify www.cmtoday.com/contribute.html - - [This guy wants an announcement no more frequently than - once a month, so save it for a future release if it's - been too soon since the previous one.] - - Notify freshmeat.net - - [Wait until the morning so the announcement hits the - main freshmeat.net page while people in the U.S. are - awake and working] - - - - -======================= - -Template release announcement: - - - -Version 2.1.XXX of rt has been released and is available for download -from the rt web site: - - http://bestpractical.com/rt/ - - - -WHAT'S NEW IN THIS RELEASE? - -Version 2.1.XXX of rt contains the following important changes: - - - XXX - -For a complete list of changes in version 2.1.XXX, see the CHANGES.txt -file in the release itself. - - -WHAT IS RT? - - FILL THIS IN diff --git a/rt/HOWTO/version-control.txt b/rt/HOWTO/version-control.txt deleted file mode 100644 index 06babfdf1..000000000 --- a/rt/HOWTO/version-control.txt +++ /dev/null @@ -1,41 +0,0 @@ -Using Aegis for RT development - - 1. The main line of RT development will be under the control - of the Aegis change management system, as administered by - Best Practical Solutions, LLC - - 2. We will use aedist to generate change sets for each change - checked in to the main Aegis repository. These change sets will be - either distributed by a mailing list or made available via the web, - or both. - - 3. Remote developers using Aegis will send aedist output for - their changes to rt-patches@bestpractical.com for review and - integration. - - 4. The aedist output should be sent to rt-patches@bestpractical.com - after the change has completed its local aede, but before aerpass. - - 5. If the change is rejected, the developer can aedeu to reopen - the change and fix whatever problems caused the review to not pass. - - 6. A baseline snapshot (aedist -bl) of the main Aegis repository - will be generated at least daily and made available via http - to provide a central location for synchronizing remote Aegis - repositories. - - 7. Changes to the main Aegis repository will also be propagated - automatically to the tracking CVS repository. - -Using CVS for RT development - - 1. CVS is accessed via anonymous cvs with the following CVSROOT: - - :pserver:anoncvs@cvs.fsck.com:/raid/cvsroot/rt-2-1 - - 2. Remote developers using CVS will send patches (cvs -diff - output) to rt-patches@bestpractical.com for integration into the - main Aegis repository. This allows anonymous CVS access to be used - for RT development by developers who are unable to use Aegis. - - diff --git a/rt/Makefile b/rt/Makefile index 644722109..0895874fb 100644 --- a/rt/Makefile +++ b/rt/Makefile @@ -1,20 +1,19 @@ # BEGIN LICENSE BLOCK # -# Copyright (c) 1996-2002 Jesse Vincent <jesse@bestpractical.com> +# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> # # (Except where explictly superceded by other copyright notices) # # 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 +# 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. # -# # Unless otherwise specified, all modifications, corrections or # extensions to this work which alter its source code become the # property of Best Practical Solutions, LLC when submitted for @@ -22,8 +21,6 @@ # # # END LICENSE BLOCK - - # # DO NOT HAND-EDIT the file named 'Makefile'. This file is autogenerated. # Have a look at "configure" and "Makefile.in" instead @@ -39,7 +36,7 @@ SITE_CONFIG_FILE = $(CONFIG_FILE_PATH)/RT_SiteConfig.pm RT_VERSION_MAJOR = 3 RT_VERSION_MINOR = 0 -RT_VERSION_PATCH = 4 +RT_VERSION_PATCH = 9 RT_VERSION = $(RT_VERSION_MAJOR).$(RT_VERSION_MINOR).$(RT_VERSION_PATCH) TAG = rt-$(RT_VERSION_MAJOR)-$(RT_VERSION_MINOR)-$(RT_VERSION_PATCH) @@ -101,8 +98,8 @@ RT_MODPERL_HANDLER = $(RT_BIN_PATH)/webmux.pl RT_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.fcgi # RT_WIN32_FASTCGI_HANDLER is the mason handler script for FastCGI RT_WIN32_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.svc -# RT's admin CLI -RT_CLI_ADMIN_BIN = $(RT_BIN_PATH)/rtadmin +# RT's CLI +RT_CLI_BIN = $(RT_BIN_PATH)/rt # RT's mail gateway RT_MAILGATE_BIN = $(RT_BIN_PATH)/rt-mailgate # RT's cron tool @@ -115,6 +112,7 @@ SETGID_BINARIES = $(DESTDIR)/$(RT_FASTCGI_HANDLER) \ BINARIES = $(DESTDIR)/$(RT_MODPERL_HANDLER) \ $(DESTDIR)/$(RT_MAILGATE_BIN) \ + $(DESTDIR)/$(RT_CLI_BIN) \ $(DESTDIR)/$(RT_CRON_BIN) \ $(SETGID_BINARIES) SYSTEM_BINARIES = $(DESTDIR)/$(RT_SBIN_PATH)/ @@ -128,6 +126,7 @@ SYSTEM_BINARIES = $(DESTDIR)/$(RT_SBIN_PATH)/ # DB_TYPE defines what sort of database RT trys to talk to # "mysql" is known to work. # "Pg" is known to work +# "Informix" is known to work DB_TYPE = mysql @@ -138,7 +137,8 @@ DB_TYPE = mysql # For mysql, you probably want 'root' # For Pg, you probably want 'postgres' -# For oracle, you want 'system' +# For Oracle, you want 'system' +# For Informix, you want 'informix' DB_DBA = root @@ -211,7 +211,7 @@ upgrade-instruct: @echo " $(RT_SBIN_PATH)/rt-setup-database --action insert --datafile etc/upgrade/<version>" -upgrade: dirs upgrade-noclobber upgrade-instruct +upgrade: config-install dirs files-install fixperms upgrade-instruct upgrade-noclobber: config-install libs-install html-install bin-install local-install doc-install fixperms @@ -312,13 +312,16 @@ config-install: test: $(PERL) -Ilib lib/t/00smoke.t -regression-nosetgid-quiet: config-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms-nosetgid apachectl +regression-install: config-install + $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)/$(CONFIG_FILE) + +regression-nosetgid-quiet: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms-nosetgid apachectl $(PERL) sbin/regression_harness -regression-nosetgid: config-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms-nosetgid apachectl +regression-nosetgid: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms-nosetgid apachectl $(PERL) lib/t/02regression.t -regression: config-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods apachectl +regression: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms apachectl $(PERL) lib/t/02regression.t regression-quiet: @@ -397,7 +400,9 @@ bin-install: -cp -rp \ bin/rt-mailgate \ bin/mason_handler.fcgi \ + bin/mason_handler.scgi \ bin/mason_handler.svc \ + bin/rt \ bin/webmux.pl \ bin/rt-crontool \ $(DESTDIR)/$(RT_BIN_PATH) diff --git a/rt/Makefile.in b/rt/Makefile.in index 245ec5ed3..43dcee18c 100644 --- a/rt/Makefile.in +++ b/rt/Makefile.in @@ -1,29 +1,48 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2002 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 +# 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. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. # +# CONTRIBUTION SUBMISSION POLICY: # -# END LICENSE BLOCK - - +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} # # DO NOT HAND-EDIT the file named 'Makefile'. This file is autogenerated. # Have a look at "configure" and "Makefile.in" instead @@ -61,6 +80,9 @@ LIBS_GROUP = @LIBS_GROUP@ WEB_USER = @WEB_USER@ WEB_GROUP = @WEB_GROUP@ + +APACHECTL = @APACHECTL@ + # {{{ Files and directories # DESTDIR allows you to specify that RT be installed somewhere other than @@ -79,6 +101,7 @@ RT_VAR_PATH = @RT_VAR_PATH@ RT_DOC_PATH = @RT_DOC_PATH@ RT_LOCAL_PATH = @RT_LOCAL_PATH@ LOCAL_ETC_PATH = @LOCAL_ETC_PATH@ +LOCAL_LIB_PATH = @LOCAL_LIB_PATH@ LOCAL_LEXICON_PATH = @LOCAL_LEXICON_PATH@ MASON_HTML_PATH = @MASON_HTML_PATH@ MASON_LOCAL_HTML_PATH = @MASON_LOCAL_HTML_PATH@ @@ -97,12 +120,16 @@ RT_READABLE_DIR_MODE = 0755 # RT_MODPERL_HANDLER is the mason handler script for mod_perl RT_MODPERL_HANDLER = $(RT_BIN_PATH)/webmux.pl +# RT_STANDALONE_SERVER is a stand-alone HTTP server +RT_STANDALONE_SERVER = $(RT_BIN_PATH)/standalone_httpd +# RT_SPEEDYCGI_HANDLER is the mason handler script for SpeedyCGI +RT_SPEEDYCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.scgi # RT_FASTCGI_HANDLER is the mason handler script for FastCGI RT_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.fcgi # RT_WIN32_FASTCGI_HANDLER is the mason handler script for FastCGI RT_WIN32_FASTCGI_HANDLER = $(RT_BIN_PATH)/mason_handler.svc -# RT's admin CLI -RT_CLI_ADMIN_BIN = $(RT_BIN_PATH)/rtadmin +# RT's CLI +RT_CLI_BIN = $(RT_BIN_PATH)/rt # RT's mail gateway RT_MAILGATE_BIN = $(RT_BIN_PATH)/rt-mailgate # RT's cron tool @@ -110,16 +137,17 @@ RT_CRON_BIN = $(RT_BIN_PATH)/rt-crontool # }}} -SETGID_BINARIES = $(DESTDIR)/$(RT_FASTCGI_HANDLER) \ - $(DESTDIR)/$(RT_WIN32_FASTCGI_HANDLER) BINARIES = $(DESTDIR)/$(RT_MODPERL_HANDLER) \ $(DESTDIR)/$(RT_MAILGATE_BIN) \ + $(DESTDIR)/$(RT_CLI_BIN) \ $(DESTDIR)/$(RT_CRON_BIN) \ - $(SETGID_BINARIES) + $(DESTDIR)/$(RT_STANDALONE_SERVER) \ + $(DESTDIR)/$(RT_SPEEDYCGI_HANDLER) \ + $(DESTDIR)/$(RT_FASTCGI_HANDLER) \ + $(DESTDIR)/$(RT_WIN32_FASTCGI_HANDLER) SYSTEM_BINARIES = $(DESTDIR)/$(RT_SBIN_PATH)/ - # }}} # {{{ Database setup @@ -128,6 +156,7 @@ SYSTEM_BINARIES = $(DESTDIR)/$(RT_SBIN_PATH)/ # DB_TYPE defines what sort of database RT trys to talk to # "mysql" is known to work. # "Pg" is known to work +# "Informix" is known to work DB_TYPE = @DB_TYPE@ @@ -138,7 +167,8 @@ DB_TYPE = @DB_TYPE@ # For mysql, you probably want 'root' # For Pg, you probably want 'postgres' -# For oracle, you want 'system' +# For Oracle, you want 'system' +# For Informix, you want 'informix' DB_DBA = @DB_DBA@ @@ -189,8 +219,11 @@ instruct: @echo "" @echo "You must now configure RT by editing $(SITE_CONFIG_FILE)." @echo "" - @echo "(You will definitely need to set RT's database password before continuing." - @echo " Not doing so could be very dangerous)" + @echo "(You will definitely need to set RT's database password in " + @echo "$(SITE_CONFIG_FILE) before continuing. Not doing so could be " + @echo "very dangerous. Note that you do not have to manually add a " + @echo "database user or set up a database for RT. These actions will be " + @echo "taken care of in the next step.)" @echo "" @echo "After that, you need to initialize RT's database by running" @echo " 'make initialize-database'" @@ -206,22 +239,27 @@ upgrade-instruct: @echo "$(CONFIG_FILE) for any necessary site customization. Additionally," @echo "you should update RT's system database objects by running " @echo " ls etc/upgrade" - @echo "For each file in that directory whose name is greater than" + @echo "" + @echo "For each item in that directory whose name is greater than" @echo "your previously installed RT version, run:" - @echo " $(RT_SBIN_PATH)/rt-setup-database --action insert --datafile etc/upgrade/<version>" + @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action schema --datadir etc/upgrade/<version>" + @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action acl --datadir etc/upgrade/<version>" + @echo " $(RT_SBIN_PATH)/rt-setup-database --dba $(DB_DBA) --prompt-for-dba-password --action insert --datadir etc/upgrade/<version>" -upgrade: dirs upgrade-noclobber upgrade-instruct +upgrade: config-install dirs files-install fixperms upgrade-instruct upgrade-noclobber: config-install libs-install html-install bin-install local-install doc-install fixperms # {{{ dependencies testdeps: - $(PERL) ./sbin/rt-test-dependencies --with-$(DB_TYPE) + $(PERL) ./sbin/rt-test-dependencies --verbose --with-$(DB_TYPE) + +depends: fixdeps fixdeps: - $(PERL) ./sbin/rt-test-dependencies --install --with-$(DB_TYPE) + $(PERL) ./sbin/rt-test-dependencies --verbose --install --with-$(DB_TYPE) #}}} @@ -241,18 +279,17 @@ fixperms: chmod 0500 $(DESTDIR)/$(RT_ETC_PATH)/* #TODO: the config file should probably be able to have its - # owner set seperately from the binaries. + # owner set separately from the binaries. chown -R $(BIN_OWNER) $(DESTDIR)/$(RT_ETC_PATH) chgrp -R $(RTGROUP) $(DESTDIR)/$(RT_ETC_PATH) chmod 0550 $(DESTDIR)/$(CONFIG_FILE) chmod 0550 $(DESTDIR)/$(SITE_CONFIG_FILE) - # Make the interfaces executable and setgid rt + # Make the interfaces executable chown $(BIN_OWNER) $(BINARIES) chgrp $(RTGROUP) $(BINARIES) chmod 0755 $(BINARIES) - chmod g+s $(SETGID_BINARIES) # Make the web ui readable by all. chmod -R u+rwX,go-w,go+rX $(DESTDIR)/$(MASON_HTML_PATH) \ @@ -272,12 +309,6 @@ fixperms: $(DESTDIR)/$(MASON_SESSION_PATH) # }}} -fixperms-nosetgid: fixperms - @echo "You should never be running RT this way. it's unsafe" - chmod 0555 $(SETGID_BINARIES) - chmod 0555 $(DESTDIR)/$(CONFIG_FILE) - chmod 0555 $(DESTDIR)/$(SITE_CONFIG_FILE) - # {{{ dirs dirs: mkdir -p $(DESTDIR)/$(RT_LOG_PATH) @@ -289,6 +320,7 @@ dirs: mkdir -p $(DESTDIR)/$(MASON_HTML_PATH) mkdir -p $(DESTDIR)/$(MASON_LOCAL_HTML_PATH) mkdir -p $(DESTDIR)/$(LOCAL_ETC_PATH) + mkdir -p $(DESTDIR)/$(LOCAL_LIB_PATH) mkdir -p $(DESTDIR)/$(LOCAL_LEXICON_PATH) # }}} @@ -298,7 +330,7 @@ files-install: libs-install etc-install bin-install sbin-install html-install lo config-install: mkdir -p $(DESTDIR)/$(CONFIG_FILE_PATH) - cp etc/RT_Config.pm $(DESTDIR)/$(CONFIG_FILE) + -cp etc/RT_Config.pm $(DESTDIR)/$(CONFIG_FILE) [ -f $(DESTDIR)/$(SITE_CONFIG_FILE) ] || cp etc/RT_SiteConfig.pm $(DESTDIR)/$(SITE_CONFIG_FILE) chgrp $(RTGROUP) $(DESTDIR)/$(CONFIG_FILE) @@ -312,14 +344,16 @@ config-install: test: $(PERL) -Ilib lib/t/00smoke.t -regression-nosetgid-quiet: config-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms-nosetgid apachectl - $(PERL) sbin/regression_harness +regression-install: config-install + $(PERL) -pi -e 's/Set\(\$$DatabaseName.*\);/Set\(\$$DatabaseName, "rt3regression"\);/' $(DESTDIR)/$(CONFIG_FILE) -regression-nosetgid: config-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms-nosetgid apachectl - $(PERL) lib/t/02regression.t +regression: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms apachectl run-regression -regression: config-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods apachectl - $(PERL) lib/t/02regression.t +run-regression: + prove -Ilib lib/t/setup_regression.t lib/t/autogen/ lib/t/regression/ + + +regression-noapache: regression-install dirs files-install libs-install sbin-install bin-install regression-instruct regression-reset-db testify-pods fixperms start-httpd run-regression regression-quiet: $(PERL) sbin/regression_harness @@ -331,9 +365,11 @@ regression-instruct: # {{{ database-installation regression-reset-db: - $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' + $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action drop --dba $(DB_DBA) --dba-password '' --force $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --dba-password '' +initdb :: initialize-database + initialize-database: $(PERL) $(DESTDIR)/$(RT_SBIN_PATH)/rt-setup-database --action init --dba $(DB_DBA) --prompt-for-dba-password @@ -346,13 +382,13 @@ insert-approval-data: # {{{ libs-install libs-install: - [ -d $(DESTDIR)/$(RT_LIB_PATH) ] || mkdir $(DESTDIR)/$(RT_LIB_PATH) + [ -d $(DESTDIR)/$(RT_LIB_PATH) ] || mkdir -p $(DESTDIR)/$(RT_LIB_PATH) -cp -rp lib/* $(DESTDIR)/$(RT_LIB_PATH) # }}} # {{{ html-install html-install: - [ -d $(DESTDIR)/$(MASON_HTML_PATH) ] || mkdir $(DESTDIR)/$(MASON_HTML_PATH) + [ -d $(DESTDIR)/$(MASON_HTML_PATH) ] || mkdir -p $(DESTDIR)/$(MASON_HTML_PATH) -cp -rp ./html/* $(DESTDIR)/$(MASON_HTML_PATH) # }}} @@ -360,7 +396,7 @@ html-install: doc-install: # RT 3.0.0 - RT 3.0.2 would accidentally create a file instead of a dir -[ -f $(DESTDIR)/$(RT_DOC_PATH) ] && rm $(DESTDIR)/$(RT_DOC_PATH) - [ -d $(DESTDIR)/$(RT_DOC_PATH) ] || mkdir $(DESTDIR)/$(RT_DOC_PATH) + [ -d $(DESTDIR)/$(RT_DOC_PATH) ] || mkdir -p $(DESTDIR)/$(RT_DOC_PATH) -cp -rp ./README $(DESTDIR)/$(RT_DOC_PATH) # }}} @@ -379,9 +415,12 @@ etc-install: sbin-install: mkdir -p $(DESTDIR)/$(RT_SBIN_PATH) - chmod +x sbin/rt-setup-database \ + chmod +x \ + sbin/rt-dump-database \ + sbin/rt-setup-database \ sbin/rt-test-dependencies -cp -rp \ + sbin/rt-dump-database \ sbin/rt-setup-database \ sbin/rt-test-dependencies \ $(DESTDIR)/$(RT_SBIN_PATH) @@ -397,7 +436,10 @@ bin-install: -cp -rp \ bin/rt-mailgate \ bin/mason_handler.fcgi \ + bin/mason_handler.scgi \ + bin/standalone_httpd \ bin/mason_handler.svc \ + bin/rt \ bin/webmux.pl \ bin/rt-crontool \ $(DESTDIR)/$(RT_BIN_PATH) @@ -417,8 +459,10 @@ POD2TEST_EXE = sbin/extract_pod_tests testify-pods: [ -d lib/t/autogen ] || mkdir lib/t/autogen - find lib -name \*pm |grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE) - find bin -type f |grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE) + find lib -name \*pm |grep -v .svn | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE) + find bin -type f |grep -v .svn | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE) + find lib -name \*pm |grep -v .svn | grep -v \*.in |xargs -n 1 $(PERL) $(POD2TEST_EXE) + find bin -type f |grep -v .svn | grep -v \~ | grep -v "\.in" | xargs -n 1 $(PERL) $(POD2TEST_EXE) @@ -431,55 +475,18 @@ license-tag: factory: initialize-database cd lib; $(PERL) ../sbin/factory $(DB_DATABASE) RT -commit: - aegis -build ; aegis -diff ; aegis -test; aegis -develop_end - -integrate: - aegis -integrate_begin; aegis -build; aegis -diff; aegis -test ; aegis -integrate_pass - -predist: commit tag-and-tar - -tag-and-release-baseline: - aegis -cp -ind Makefile -output /tmp/Makefile.tagandrelease; \ - $(MAKE) -f /tmp/Makefile.tagandrelease tag-and-release-never-by-hand - - -# Running this target in a working directory is -# WRONG WRONG WRONG. -# it will tag the current baseline with the version of RT defined -# in the currently-being-worked-on makefile. which is wrong. -# you want tag-and-release-baseline - -tag-and-release-never-by-hand: - aegis --delta-name $(TAG) - rm -rf /tmp/$(TAG) - mkdir /tmp/$(TAG) - cd /tmp/$(TAG); \ - aegis -cp -ind -delta $(TAG) . ;\ - make reconfigure;\ - chmod 600 Makefile;\ - aegis --report --project rt.$(RT_VERSION_MAJOR) \ - --page_width 80 \ - --page_length 9999 \ - --change $(RT_VERSION_MINOR) --output Changelog Change_Log - - cd /tmp; tar czvf /home/ftp/pub/rt/devel/$(TAG).tar.gz $(TAG)/ - chmod 644 /home/ftp/pub/rt/devel/$(TAG).tar.gz - - reconfigure: aclocal -I m4 autoconf chmod 755 ./configure ./configure -rpm: - (cd ..; tar czvf /usr/src/redhat/SOURCES/rt.tar.gz rt) - rpm -ba etc/rt.spec - +start-httpd: + $(PERL) bin/standalone_httpd 80 & apachectl: - apachectl stop - sleep 3 - apachectl start + $(APACHECTL) stop + sleep 10 + $(APACHECTL) start + sleep 5 # }}} @@ -1,88 +1,46 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -RT is an enterprise-grade issue tracking system. It allows -organizations to keep track of their to-do lists, who is working -on which tasks, what's already been done, and when tasks were -completed. It is available under the terms of version 2 of the GNU -General Public License (GPL), so it doesn't cost anything to set -up and use. +RT is an enterprise-grade issue tracking system. It allows organizations +to keep track of what needs to get done, who is working on which tasks, +what's already been done, and when tasks were (or weren't) completed. +RT doesn't cost anything to use, no matter how much you use it; it +is freely available under the terms of Version 2 of the GNU General +Public License. + +RT is commercially-supported software. To purchase support, training, +custom development, or professional services, please get in touch with +us at sales@bestpractical.com. + + Jesse Vincent + Best Practical Solutions, LLC + March, 2005 - Jesse Vincent - Best Practical Solutions, LLC - March 2003 REQUIRED PACKAGES: ------------------ -o Perl 5.8.0 or later (http://www.perl.com). +o Perl 5.8.3 or later (http://www.perl.com). - (If you intend to use the FastCGI or SpeedyCGI support, you - need to make sure that perl has been built with support for - setgid perl scripts.)` + Perl versions prior to 5.8.3 contain bugs that could result + in data corruption. We recommend strongly that you use 5.8.3 + or newer. - Perl 5.6.1 is currently deprecated and will be officially desupported - in a future release +o A supported SQL database -o A DB backend; MySQL is recommended ( http://www.mysql.com ) - Currently supported: Mysql 4.0.13 or later. + Currently supported: Mysql 4.0.13 or later with InnoDB support. Postgres 7.2 or later. - - Mysql 3.23.46 or newer with support for InnoDB - is currently deprecated and will be officially - desupported in a future release. + Oracle 9iR2 or later. + SQLite 3.0. (Not recommended for production) o Apache version 1.3.x or 2.x (http://httpd.apache.org) - with mod_perl -- (http://perl.apache.org ) - or a webserver with FastCGI support (www.fastcgi.com) - - mod_perl 2.0 isn't quite ready for prime_time just yet; - Best Practical Solutions strongly recommends that sites use - Apache 1.3 or FastCGI. + with mod_perl -- (http://perl.apache.org ) + or a webserver with FastCGI support (www.fastcgi.com) Compiling mod_perl on Apache 1.3.x as a DSO has been known - to have massive stability problems and is not recommended. - - mod_perl 1.x must be build with EVERYTHING=1 - - RT's FastCGI handler runs setgid to the 'rt' group to - protect RT's database password. You may need to install - a special "suidperl" package or reconfigure your perl - setup to support "setuid scripts" if you intend to use RT - with FastCGI. - - Debian GNU/* 3.0+: the package which installs suidperl is - called perl-suid, and should work without any tweaking. - - FreeBSD 4.2+: the package is called sperl, and should - install a suidperl that just works - - Conectiva Linux 6.0+: suidperl is installed by default when - perl is installed, but the program /bin/suidperl is not setuid. - You must use chmod to make it setuid. + to have massive stability problems and is not recommended. + mod_perl 1.x must be built with EVERYTHING=1 + RT's FastCGI handler needs to access RT's configuration file. o Various and sundry perl modules A tool included with RT takes care of the installation of @@ -90,133 +48,182 @@ o Various and sundry perl modules The tool supplied with RT uses Perl's CPAN system (http://www.cpan.org) to install modules. Some operating - systems package all or some of the modules required and + systems package all or some of the modules required, and you may be better off installing the modules that way. GENERAL INSTALLATION -------------------- -This is a rough guide to installing RT. For more detail, you'll want -to read 'Chapter 2: Installing' in RT's manual, available at -http://www.bestpractical.com/rt +This is a rough guide to installing RT. For more detail, you'll +want to read a more comprehensive installation guide at: + + http://wiki.bestpractical.com/index.cgi?InstallationGuides -1 Unpack this distribution SOMWHERE OTHER THAN where you want to install RT +1 Unpack this distribution other than where you want to install RT - Granted, you've already got it open. To do this cleanly: + To do this cleanly, run the following command: - tar xzvf rt.tar.gz -C /tmp + tar xzvf rt.tar.gz -C /tmp 2 Run the "configure" script. - ./configure --help to see the list of options - ./configure (with the flags you want) + ./configure --help to see the list of options + ./configure (with the flags you want) + + RT defaults to installing in /opt/rt3 with MySQL as its database. It + tries to guess which of www-data, www, apache or nobody your webserver + will run as, but you can override that behavior. + +3 Make sure that RT has everything it needs to run. + + Check for missing dependencies by running: + + make testdeps -3 Satisfy RT's myriad dependencies. +4 If the script reports any missing dependencies, install them by hand + or run the following command as a user who has permission to install perl + modules on your system: -3.1 Check for compliance: - - perl sbin/rt-test-dependencies \ - --with-<databasename> --with-<web-environment> + make fixdeps - databasename is one of: mysql, postgres - web-environment is one of: fastcgi, modperl1, modperl2 +5 Check to make sure everything was installed properly. + + make testdeps -3.2 If there are unsatisfied dependencies, install them by hand or run: + It might sometimes be necessary to run "make fixdeps" several times + to install all necessary perl modules. - perl sbin/rt-test-dependencies \ - --with-<databasename> --with-<web-environment> --install - +6 If this is a new installation: + + As a user with permission to install RT in your chosen directory, type: -3.3 Check to make sure everything was installed properly: + make install + + Set up etc/RT_SiteConfig.pm in your RT installation directory. + You'll need to add any values you need to change from the defaults + in etc/RT_Config.pm - perl sbin/rt-test-dependencies \ - --with-<databasename> --with-<web-environment> + As a user with permission to read RT's configuration file, type: + + make initialize-database -4 Create a group called 'rt' + If the make fails, type: + + make dropdb -5a FOR A NEW INSTALLATION: - - As root, type: - make install (replace "make" with the local name for - Make, if you need to) + and start over from step 6 - - make initialize-database +7 If you're upgrading from RT 3.0 or newer: + Read through the UPGRADING document included in this distribution. + + It includes special upgrade instructions that will help you get this + new version of RT up and running smoothly. - If the make fails, type: - make dropdb - and start over from step 5a + As a user with permission to install RT in your chosen installation + directory, type: -5b FOR UPGRADING: (Within the RT 3.0.x series) + make upgrade - As root, type: - make upgrade (replace "make" with the local name for - Make, if you need to) + This will install new binaries, config files and libraries without + overwriting your RT database. - This will build new binaries, config files and libraries without - overwriting your RT database. - - It may then instruct you to update your RT system database objects + Update etc/RT_SiteConfig.pm in your RT installation directory. + You'll need to add any new values you need to change from the defaults + in etc/RT_Config.pm -6 Edit etc/RT_SiteConfig.pm in your RT installation directory, by specifying - any values you need to change from the defaults in etc/RT_Config.pm + You may also need to update RT's database. To find out, type: -7 Configure the email and web gateways, as described below. + ls etc/upgrade -8 Stop and start your webserver, so it picks up your configuration changes. + For each item in that directory whose name is greater than + your previously installed RT version, run: + + /opt/rt3/sbin/rt-setup-database --action schema \ + --datadir etc/upgrade/<version> + /opt/rt3/sbin/rt-setup-database --action acl \ + --datadir etc/upgrade/<version> + /opt/rt3/sbin/rt-setup-database --action insert \ + --datadir etc/upgrade/<version> + +8 If you're upgrading from RT 2.0: + + Please upgrade from RT 2.0 to RT 3.2 and then follow the instructions + for section 7. + +9 Configure the email and web gateways, as described below. NOTE: root's password for the web interface is "password" - (without the quotes.) Not changing this is a SECURITY risk + (without the quotes). Not changing this is a SECURITY risk! -9 Configure RT per the instructions in RT's manual. +10 Set up users, groups, queues, scrips and access control. Until you do this, RT will not be able to send or receive email, nor will it be more than marginally functional. This is not an optional step. -THE WEB INTERFACE ------------------ +SETTING UP THE WEB INTERFACE +---------------------------- + +RT's web interface is based around HTML::Mason, which works well with +the mod_perl perl interpreter within Apache httpd and FastCGI -RT's web interface is based around HTML::Mason, which works best with the mod_perl -perl interpreter within Apache httpd. Alternatively, support for the FastCGI -(and plain CGI) interface is also provided as 'bin/mason_handler.fcgi'. +mod_perl +-------- -Apache - You'll need to add a few lines to your httpd.conf telling it about RT: +To install RT with mod_perl, you'll need to install the +apache database connection cache. To make sure it's installed, run +the following command: + + perl -MCPAN -e'install Apache::DBI' + +Next, add a few lines to your Apache configuration file, so that +it knows where to find RT: <VirtualHost your.ip.address> ServerName your.rt.server.hostname DocumentRoot /opt/rt3/share/html AddDefaultCharset UTF-8 - # this line applies to Apache2+mod_perl2 only - PerlModule Apache2 Apache::compat - PerlModule Apache::DBI PerlRequire /opt/rt3/bin/webmux.pl - # this section applies to Apache 1 only <Location /> - SetHandler perl-script - PerlHandler RT::Mason + SetHandler perl-script + PerlHandler RT::Mason </Location> +</VirtualHost> + +FastCGI +------- + +Installation with FastCGI is a little bit more complex and is documented +in detail at http://wiki.bestpractical.com/index.cgi?FastCGIConfiguration + +In the most basic configuration, you can set up your webserver to run +as a user who is a member of the "rt" unix group so that the FastCGI script +can read RT's configuration file. It's important to understand the security +implications of this configuration, which are discussed in the document +mentioned above. + +To install RT with FastCGI, you'll need to add a few lines to your +Apache configuration file telling it about RT: + +<VirtualHost rt.example.com> + + # Pass through requests to display images + Alias /NoAuth/images/ /opt/rt3/share/html/NoAuth/images/ + + # Tell FastCGI to put its temporary files somewhere sane. + FastCgiIpcDir /tmp + + FastCgiServer /opt/rt3/bin/mason_handler.fcgi -idle-timeout 120 - # this section applies to Apache2+mod_perl2 only - <FilesMatch "\.html$"> - SetHandler perl-script - PerlHandler RT::Mason - </FilesMatch> - <LocationMatch "/Attachment/"> - SetHandler perl-script - PerlHandler RT::Mason - </LocationMatch> - <LocationMatch "/REST/"> - SetHandler perl-script - PerlHandler RT::Mason - </LocationMatch> + AddHandler fastcgi-script fcgi + ScriptAlias / /opt/rt3/bin/mason_handler.fcgi/ + </VirtualHost> @@ -224,55 +231,63 @@ Apache SETTING UP THE MAIL GATEWAY --------------------------- -An alias for the initial queue will need to be made in either your -global mail aliases file (if you are using NIS) or locally on your -machine. - -Add the following lines to /etc/aliases (or your local equivalent) : +To let email flow to your RT server, you need to add a few lines of +configuration to your mail server's "aliases" file. These lines "pipe" +incoming email messages from your mail server to RT. -rt: "|/opt/rt3/bin/rt-mailgate --queue general --action correspond --url http://localhost/" -rt-comment: "|/opt/rt3/bin/rt-mailgate --queue general --action comment --url http://localhost/" - | | | - <queue-name>----/ | | - | | - <correspond or comment depending on whether | | - the mail should be resent to the requestor>---/ | - | - <URL for RT's web interface>---/ +Add the following lines to /etc/aliases (or your local equivalent) on your mail server: +rt: "|/opt/rt3/bin/rt-mailgate --queue general --action correspond --url http://rt.example.com/" +rt-comment: "|/opt/rt3/bin/rt-mailgate --queue general --action comment --url http://rt.example.com/" + +You'll need to add similar lines for each queue you want to be able +to send email to. To find out more about how to configure RT's email +gateway, type: + + perldoc /opt/rt3/bin/rt-mailgate -BUGS ----- -To report a bug, send email to rt-3.0-bugs@fsck.com. GETTING HELP ------------ If RT is mission-critical for you or if you use it heavily, we recommend that you purchase a commercial support contract. Details on support contracts -are available at http://www.bestpractical.com. +are available at http://www.bestpractical.com or by writing to +<sales@bestpractical.com>. If you're interested in having RT extended or customized or would like more information about commercial support options, please send email to <sales@bestpractical.com> to discuss rates and availability. -RT-USERS MAILINGLIST + +RT WEBSITE +---------- + +For current information about RT, check out the RT website at + http://www.bestpractical.com/ + +You'll find screenshots, a pointer to the current version of RT, contributed +patches, and lots of other great stuff. + + + +RT-USERS MAILING LIST -------------------- To keep up to date on the latest RT tips, techniques and extensions, you probably want to join the rt-users mailing list. Send a message to: - rt-users-request@lists.fsck.com + rt-users-request@lists.bestpractical.com -With the body of the message consisting of only the word: +with the body of the message consisting of only the word: - subscribe + subscribe If you're interested in hacking on RT, you'll want to subscribe to -rt-devel@lists.fsck.com. Subscribe to it with instructions similar to -those above. +rt-devel@lists.bestpractical.com. Subscribe to it with instructions +similar to those above. Address questions about the stable release to the rt-users list, and questions about the development version to the rt-devel list. If you feel @@ -280,21 +295,61 @@ your questions are best not asked publicly, send them personally to <jesse@bestpractical.com>. -RT WEBSITE ----------- - -For current information about RT, check out the RT website at - http://www.bestpractical.com/ - -You'll find screenshots, a pointer to the current version of RT, contributed -patches, and lots of other great stuff. +BUGS +---- -TROUBLESHOOTING ---------------- +RT's a pretty complex application, and as you get up to speed, you might +run into some trouble. Generally, it's best to ask about things you +run into on the rt-users mailinglist (or pick up a commercial support +contract from Best Practical). But, sometimes people do run into bugs. In +the exceedingly unlikely event that you hit a bug in RT, please report +it! We'd love to hear about problems you have with RT, so we can fix them. +To report a bug, send email to rt-bugs@fsck.com. -If the solution to the problem you're running into isn't obvious and you've -checked the FAQ, feel free to send mail to rt-users@fsck.com (for released -versions of RT) or rt-devel@fsck.com (for development versions). -Thanks! +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} diff --git a/rt/README.Oracle b/rt/README.Oracle new file mode 100644 index 000000000..41bec822c --- /dev/null +++ b/rt/README.Oracle @@ -0,0 +1,37 @@ +In order to install RT with Oracle, the database must first be +prepared. Ports of RT to other databases will automatically create +the RT schema. This is not done for Oracle because most sites wishing +to deploy RT on Oracle will have choose to make specific configuration +of the RT user, for example to select the appropriate tablespace or to +set up a resource profile. The RT user must have appropriate +privileges similar to the resource and connect roles and must have the +"query rewrite" system privilege. + Here is an example of commands to create an RT user called "RT" with +a password of "rt". + + create user rt identified by rt default tablespace users temporary + tablespace temp; + grant resource, connect, query rewrite to rt; + + +RT should not run its schema creation as the Oracle DBA; instead the +schema creation should be run as the RT user. To accomplish this set +the --with-rt-dba configuration parameter to the RT user, not to the +Oracle DBA. As an example, the following might be appropriate to +configure RT for the example.com Oracle database. + + ./configure --prefix /usr/local/rt --with-db-type=Oracle \ + --with-db-dba=rt --with-db-database=example.com \ + --with-db-rt-user=rt \ + --with-db-rt-pass=rt + + +As with all databases it is important to analyze the Schema and get +current statistics after any significant dataset change. Oracle's +cost-based optimizer can provide particularly bad performance when the +schema statistics are significantly inaccurate. To analyze the schema +of a user called rt, execute the following from withing Sqlplus. + + execute dbms_utility.analyze_schema( 'RT', 'estimate'); + + diff --git a/rt/UPGRADING b/rt/UPGRADING new file mode 100644 index 000000000..11a26e81e --- /dev/null +++ b/rt/UPGRADING @@ -0,0 +1,205 @@ +UPGRADING + +Detailed information about upgrading can be found in the README file. +This document is intended to supplement the instructions in that file. + +Additional information about upgrading from specific versions of RT is +contained below. + +******* +WARNING +******* + +Before making any changes to your database, always ensure that you have a +complete current backup. If you don't have a current backup, you could +accidentally damage your database and lose data or worse. + +******* + +UPGRADING FROM 3.3.14 and earlier - Changes: + +The "ModifyObjectCustomFieldValues" right name was too long. It's been changed to +"ModifyCustomField" + + +UPGRADING FROM 3.3.11 and earlier - Changes: + += Rights Changes = + +Custom Fields now have an additional right "ModifyCustomField". +This right governs whether a user can modify an object's custom field values +for a particular custom field. This includes adding, deleting and changing values. + + +UPGRADING FROM 3.2 and earlier - Changes: + += Rights changes = + +Now, if you want any user to be able to access the Admin tools (a.k.a. +the Configuration tab), you must grant that user the "ShowConfigTab" +right. Making the user a privileged user is no longer sufficient. + +"SuperUser" users are no longer automatically added to the list of users who can own tickets in a queue. You now need to explicitly give them the "own tickets" right. + + + +UPGRADING FROM 3.0.x - Changes: + += Installation = + +We recommend you move your existing /opt/rt3 tree completely out +of the way before installating the newversion of RT, to make sure +that you don't inadvertently leave old files hanging around. + += Rights changes = + +Now, if you want RT to automatically create new users upon ticket +submission, you MUST grant 'Everyone' the right to create tickets. +Granting this right only to "Unprivileged Users" is now insufficient. + + += FastCGI configuration = + +This section is a snapshot of the documentation available at: + +http://wiki.bestpractical.com/index.cgi?FastCGIConfiguration + +It's worth checking out that resource if these instructions don't +work right for you + + +RT 3.2 includes a signficant change to the FastCGI handler. It is +no longer "setgid" to the RT group. Perl's setid support has been +deprecated for the last several releases and a number of platforms +don't bundle the "sperl" or "suidperl" executable by default. +Additionally, when perl is run SetUID or SetGID, the interpreter +is automatically switched into /taint mode/, in which all incoming +data, no matter the source is considered suspect. At first, this +seems like a great idea. But perl's taint mode is a big sledgehammer +used to hit small nails. Many perl libraries aren't tested in taint +mode and will fail when least expected. Moving away from a SetGID +FastCGI handler will enable more users to have a smoother RT +experience. It does require some changes in how you set up and +configure RT. + +Beginning with RT 3.2, you have several choices about how to configure +RT to run as a FastCGI: + + +== Install RT as the user your webserver runs as == + +Pros: Very easy to configure + +Cons: Your webserver has access to RT's private database password + + +=== How To + +When installing RT, run: + + ./configure --with-web-user="webuser" --with-web-group="webgroup" \ + --with-rt-user="webuser" --with-rt-group="webgroup" + +(Don't forget to include other configuration options that matter to you) + +If you're using apache, you'll want to add something like the following +to your httpd.conf: + + <VirtualHost rt.example.com> + + # Pass through requests to display images + Alias /NoAuth/images/ /opt/rt3/share/html/NoAuth/images/ + + # Tell FastCGI to put its temporary files somewhere sane. + FastCgiIpcDir /tmp + + FastCgiServer /opt/rt3/bin/mason_handler.fcgi -idle-timeout 120 + + AddHandler fastcgi-script fcgi + ScriptAlias / /opt/rt3/bin/mason_handler.fcgi/ + + </VirtualHost> + + +== Make your webserver user a member of the "rt" group == + +Pros: Easy to configure + +Cons: Your webserver has access to RT's private database password + + +=== How To + +Install RT normally. Add whichever user your webserver runs as +(whatever you set --with-web-user to) to the "rt" group (whatever +you set --with-rt-group to) in /etc/groups. + +To find out what user your webserver runs as, look for the line + + User some-user-name + +in your apache httpd.conf. Common values are www, www-data, web and nobody. + + + +== Run RT using _suexec_ or a similar mechanism + + +Pros: More secure + +Cons: Sometimes very difficult to configure + +Apache's _suexec_ utility allows you run CGI programs as specific +users. Because that's a relatively heavy responsibility, it's very, +very conservative about what it's willing to do for you. On top of +that, Apache's mod_fastcgi plugin doesn't respect all of suexec's +features. While suexec is designed to execute CGI scripts in a +given virtual host's !DocumentRoot, It can only execute FastCGI +scripts in the system's *main* !DocumentRoot. + +This means you have to copy the RT FastCGI handler into your main +!DocumentRoot + +The following example !VirtualHost will run RT as a FastCGI on +Apache 1.3 on a Debian Linux server. + + + <VirtualHost rt.example.com> + + DocumentRoot /opt/rt3/share/html + + # Set the rt user and group as the executing user for this virtual host + User rt + Group rt + + + # Pass through requests to display images + Alias /NoAuth/images/ /opt/rt3/share/html/NoAuth/images/ + + # Tell FastCGI to put its temporary files somewhere sane. + FastCgiIpcDir /tmp + + # Tell FastCGI that it should use apache's "suexec" binary to call any + # FastCGI script. + # This is a GLOBAL setting + FastCgiWrapper /usr/lib/apache/suexec + + # You need to copy the rt mason_handler.fcgi into a directory inside + # the main server DocumentRoot + # That directory must be owned by the user and group that will execute + # the FastCGI script + # In this case, that directory is /var/www/rt + + # To find the local DocumentRoot, run "suexec -V" as root and look for the + # -D DOC_ROOT parameter. + + # Apache 1.3 discards the user and group parameters on the FastCgiServer + # line. Apache 2.0 requires them. + + FastCgiServer /var/www/rt/mason_handler.fcgi -idle-timeout 120 -user rt -group rt + + AddHandler fastcgi-script fcgi + ScriptAlias / /var/www/rt/mason_handler.fcgi/ + + </VirtualHost> + diff --git a/rt/aclocal.m4 b/rt/aclocal.m4 index 475b3890d..67ff30d7c 100644 --- a/rt/aclocal.m4 +++ b/rt/aclocal.m4 @@ -1,6 +1,6 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4-p4 +dnl aclocal.m4 generated automatically by aclocal 1.4-p6 -dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. diff --git a/rt/autom4te.cache/output.0 b/rt/autom4te.cache/output.0 index 51a8aaf63..3d27db94f 100644 --- a/rt/autom4te.cache/output.0 +++ b/rt/autom4te.cache/output.0 @@ -1,7 +1,7 @@ @%:@! /bin/sh @%:@ From configure.ac Revision: 1.1 . @%:@ Guess values for system-dependent variables and create Makefiles. -@%:@ Generated by GNU Autoconf 2.53 for RT 3.0.4. +@%:@ Generated by GNU Autoconf 2.53 for RT 3.0.9. @%:@ @%:@ Report bugs to <rt-3.0-bugs@fsck.com>. @%:@ @@ -257,8 +257,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='RT' PACKAGE_TARNAME='rt' -PACKAGE_VERSION='3.0.4' -PACKAGE_STRING='RT 3.0.4' +PACKAGE_VERSION='3.0.9' +PACKAGE_STRING='RT 3.0.9' PACKAGE_BUGREPORT='rt-3.0-bugs@fsck.com' ac_unique_file="lib/RT.pm.in" @@ -711,7 +711,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.0.4 to adapt to many kinds of systems. +\`configure' configures RT 3.0.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -768,7 +768,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of RT 3.0.4:";; + short | recursive ) echo "Configuration of RT 3.0.9:";; esac cat <<\_ACEOF @@ -786,8 +786,8 @@ Optional Packages: --with-bin-owner=OWNER user that will own rt binaries (default root) --with-libs-owner=OWNER user that will own RT libraries (default root) --with-libs-group=GROUP group that will own rt binaries (default bin) - --with-db-type=TYPE sort of database RT will use (default: mysql) (mysql - and Pg are valid) + --with-db-type=TYPE sort of database RT will use (default: mysql) + (mysql, Pg, Oracle and Informix are valid) --with-db-host=HOSTNAME FQDN of database server (default: localhost) --with-db-port=PORT port on which the database listens on --with-db-rt-host=HOSTNAME @@ -802,6 +802,7 @@ Optional Packages: password for database user (default: rt_pass) --with-web-user=USER user the web server runs as (default: www) --with-web-group=GROUP group the web server runs as (default: www) + --with-my-user-group set all users and groups to current user/group Some influential environment variables: PERL Perl interpreter command @@ -872,7 +873,7 @@ fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -RT configure 3.0.4 +RT configure 3.0.9 generated by GNU Autoconf 2.53 Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 @@ -887,7 +888,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.0.4, which was +It was created by RT $as_me 3.0.9, which was generated by GNU Autoconf 2.53. Invocation command line was $ $0 $@ @@ -1171,7 +1172,7 @@ rt_version_major=3 rt_version_minor=0 -rt_version_patch=4 +rt_version_patch=9 test "x$rt_version_major" = 'x' && rt_version_major=0 test "x$rt_version_minor" = 'x' && rt_version_minor=0 @@ -1703,13 +1704,21 @@ if test "${with_db_type+set}" = set; then else DB_TYPE=mysql fi; -if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite'; then - { { echo "$as_me:$LINENO: error: Only Pg and mysql are valid db types" >&5 -echo "$as_me: error: Only Pg and mysql are valid db types" >&2;} +if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite' -a "$DB_TYPE" != 'Oracle' -a "$DB_TYPE" != 'Informix' ; then + { { echo "$as_me:$LINENO: error: Only Oracle, Informix, Pg and mysql are valid db types" >&5 +echo "$as_me: error: Only Oracle, Informix, Pg and mysql are valid db types" >&2;} { (exit 1); exit 1; }; } fi +if test "$DB_TYPE" = 'Oracle'; then + test "x$ORACLE_HOME" = 'x' && { { echo "$as_me:$LINENO: error: Please declare the ORACLE_HOME environment variable" >&5 +echo "$as_me: error: Please declare the ORACLE_HOME environment variable" >&2;} + { (exit 1); exit 1; }; } + ORACLE_ENV_PREF="\$ENV{'ORACLE_HOME'} = '$ORACLE_HOME';" +fi + + # Check whether --with-db-host or --without-db-host was given. if test "${with_db_host+set}" = set; then @@ -1800,6 +1809,19 @@ else fi; +my_group=$(groups|cut -f1 -d' ') + +# Check whether --with-my-user-group or --without-my-user-group was given. +if test "${with_my_user_group+set}" = set; then + withval="$with_my_user_group" + RTGROUP=$my_group + BIN_OWNER=$USER + LIBS_OWNER=$USER + LIBS_GROUP=$my_group + WEB_USER=$USER + WEB_GROUP=$my_group +fi; + RT_VERSION_MAJOR=${rt_version_major} @@ -1848,7 +1870,7 @@ RT_LOG_PATH=${exp_logfiledir} -ac_config_files="$ac_config_files sbin/rt-setup-database sbin/rt-test-dependencies Makefile etc/RT_Config.pm lib/RT.pm lib/t/00smoke.t lib/t/01harness.t lib/t/02regression.t lib/t/03web.pl lib/t/04_send_email.pl bin/mason_handler.fcgi bin/mason_handler.scgi bin/mason_handler.svc bin/rt-commit-handler bin/rt-crontool bin/rt-mailgate bin/webmux.pl" +ac_config_files="$ac_config_files sbin/rt-setup-database sbin/rt-test-dependencies Makefile etc/RT_Config.pm lib/RT.pm lib/t/00smoke.t lib/t/01harness.t lib/t/02regression.t lib/t/03web.pl lib/t/04_send_email.pl bin/mason_handler.fcgi bin/mason_handler.scgi bin/mason_handler.svc bin/rt-commit-handler bin/rt-crontool bin/rt-mailgate bin/rt bin/webmux.pl" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -2206,7 +2228,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by RT $as_me 3.0.4, which was +This file was extended by RT $as_me 3.0.9, which was generated by GNU Autoconf 2.53. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -2260,7 +2282,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -RT config.status 3.0.4 +RT config.status 3.0.9 configured by $0, generated by GNU Autoconf 2.53, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" @@ -2363,6 +2385,7 @@ do "bin/rt-commit-handler" ) CONFIG_FILES="$CONFIG_FILES bin/rt-commit-handler" ;; "bin/rt-crontool" ) CONFIG_FILES="$CONFIG_FILES bin/rt-crontool" ;; "bin/rt-mailgate" ) CONFIG_FILES="$CONFIG_FILES bin/rt-mailgate" ;; + "bin/rt" ) CONFIG_FILES="$CONFIG_FILES bin/rt" ;; "bin/webmux.pl" ) CONFIG_FILES="$CONFIG_FILES bin/webmux.pl" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} @@ -2487,6 +2510,7 @@ s,@BIN_OWNER@,$BIN_OWNER,;t t s,@LIBS_OWNER@,$LIBS_OWNER,;t t s,@LIBS_GROUP@,$LIBS_GROUP,;t t s,@DB_TYPE@,$DB_TYPE,;t t +s,@ORACLE_ENV_PREF@,$ORACLE_ENV_PREF,;t t s,@DB_HOST@,$DB_HOST,;t t s,@DB_PORT@,$DB_PORT,;t t s,@DB_RT_HOST@,$DB_RT_HOST,;t t diff --git a/rt/autom4te.cache/traces.0 b/rt/autom4te.cache/traces.0 index 962f400e7..f13276211 100644 --- a/rt/autom4te.cache/traces.0 +++ b/rt/autom4te.cache/traces.0 @@ -52,7 +52,7 @@ m4trace:configure.ac:9: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:9: -1- AC_SUBST([LIBS]) m4trace:configure.ac:14: -1- AC_SUBST([rt_version_major], [3]) m4trace:configure.ac:16: -1- AC_SUBST([rt_version_minor], [0]) -m4trace:configure.ac:18: -1- AC_SUBST([rt_version_patch], [4]) +m4trace:configure.ac:18: -1- AC_SUBST([rt_version_patch], [9]) m4trace:configure.ac:24: -1- AC_PROG_INSTALL m4trace:configure.ac:24: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:24: -1- AC_SUBST([INSTALL_SCRIPT]) @@ -104,38 +104,39 @@ m4trace:configure.ac:57: -1- AC_SUBST([BIN_OWNER]) m4trace:configure.ac:65: -1- AC_SUBST([LIBS_OWNER]) m4trace:configure.ac:73: -1- AC_SUBST([LIBS_GROUP]) m4trace:configure.ac:84: -1- AC_SUBST([DB_TYPE]) -m4trace:configure.ac:92: -1- AC_SUBST([DB_HOST]) -m4trace:configure.ac:100: -1- AC_SUBST([DB_PORT]) -m4trace:configure.ac:108: -1- AC_SUBST([DB_RT_HOST]) -m4trace:configure.ac:116: -1- AC_SUBST([DB_DBA]) -m4trace:configure.ac:124: -1- AC_SUBST([DB_DATABASE]) -m4trace:configure.ac:132: -1- AC_SUBST([DB_RT_USER]) -m4trace:configure.ac:140: -1- AC_SUBST([DB_RT_PASS]) -m4trace:configure.ac:148: -1- AC_SUBST([WEB_USER]) -m4trace:configure.ac:156: -1- AC_SUBST([WEB_GROUP]) -m4trace:configure.ac:163: -1- AC_SUBST([RT_VERSION_MAJOR], [${rt_version_major}]) -m4trace:configure.ac:164: -1- AC_SUBST([RT_VERSION_MINOR], [${rt_version_minor}]) -m4trace:configure.ac:165: -1- AC_SUBST([RT_VERSION_PATCH], [${rt_version_patch}]) -m4trace:configure.ac:168: -1- AC_SUBST([RT_PATH], [${exp_prefix}]) -m4trace:configure.ac:169: -1- AC_SUBST([RT_DOC_PATH], [${exp_manualdir}]) -m4trace:configure.ac:170: -1- AC_SUBST([RT_LOCAL_PATH], [${exp_customdir}]) -m4trace:configure.ac:171: -1- AC_SUBST([RT_LIB_PATH], [${exp_libdir}]) -m4trace:configure.ac:172: -1- AC_SUBST([RT_ETC_PATH], [${exp_sysconfdir}]) -m4trace:configure.ac:173: -1- AC_SUBST([CONFIG_FILE_PATH], [${exp_sysconfdir}]) -m4trace:configure.ac:174: -1- AC_SUBST([RT_BIN_PATH], [${exp_bindir}]) -m4trace:configure.ac:175: -1- AC_SUBST([RT_SBIN_PATH], [${exp_sbindir}]) -m4trace:configure.ac:176: -1- AC_SUBST([RT_VAR_PATH], [${exp_localstatedir}]) -m4trace:configure.ac:177: -1- AC_SUBST([RT_MAN_PATH], [${exp_mandir}]) -m4trace:configure.ac:178: -1- AC_SUBST([MASON_DATA_PATH], [${exp_masonstatedir}]) -m4trace:configure.ac:179: -1- AC_SUBST([MASON_SESSION_PATH], [${exp_sessionstatedir}]) -m4trace:configure.ac:180: -1- AC_SUBST([MASON_HTML_PATH], [${exp_htmldir}]) -m4trace:configure.ac:181: -1- AC_SUBST([LOCAL_ETC_PATH], [${exp_custometcdir}]) -m4trace:configure.ac:182: -1- AC_SUBST([MASON_LOCAL_HTML_PATH], [${exp_customhtmldir}]) -m4trace:configure.ac:183: -1- AC_SUBST([LOCAL_LEXICON_PATH], [${exp_customlexdir}]) -m4trace:configure.ac:184: -1- AC_SUBST([LOCAL_LIB_PATH], [${exp_customlibdir}]) -m4trace:configure.ac:185: -1- AC_SUBST([DESTDIR], [${exp_prefix}]) -m4trace:configure.ac:186: -1- AC_SUBST([RT_LOG_PATH], [${exp_logfiledir}]) -m4trace:configure.ac:208: -1- AC_CONFIG_FILES([ +m4trace:configure.ac:91: -1- AC_SUBST([ORACLE_ENV_PREF]) +m4trace:configure.ac:99: -1- AC_SUBST([DB_HOST]) +m4trace:configure.ac:107: -1- AC_SUBST([DB_PORT]) +m4trace:configure.ac:115: -1- AC_SUBST([DB_RT_HOST]) +m4trace:configure.ac:123: -1- AC_SUBST([DB_DBA]) +m4trace:configure.ac:131: -1- AC_SUBST([DB_DATABASE]) +m4trace:configure.ac:139: -1- AC_SUBST([DB_RT_USER]) +m4trace:configure.ac:147: -1- AC_SUBST([DB_RT_PASS]) +m4trace:configure.ac:155: -1- AC_SUBST([WEB_USER]) +m4trace:configure.ac:163: -1- AC_SUBST([WEB_GROUP]) +m4trace:configure.ac:182: -1- AC_SUBST([RT_VERSION_MAJOR], [${rt_version_major}]) +m4trace:configure.ac:183: -1- AC_SUBST([RT_VERSION_MINOR], [${rt_version_minor}]) +m4trace:configure.ac:184: -1- AC_SUBST([RT_VERSION_PATCH], [${rt_version_patch}]) +m4trace:configure.ac:187: -1- AC_SUBST([RT_PATH], [${exp_prefix}]) +m4trace:configure.ac:188: -1- AC_SUBST([RT_DOC_PATH], [${exp_manualdir}]) +m4trace:configure.ac:189: -1- AC_SUBST([RT_LOCAL_PATH], [${exp_customdir}]) +m4trace:configure.ac:190: -1- AC_SUBST([RT_LIB_PATH], [${exp_libdir}]) +m4trace:configure.ac:191: -1- AC_SUBST([RT_ETC_PATH], [${exp_sysconfdir}]) +m4trace:configure.ac:192: -1- AC_SUBST([CONFIG_FILE_PATH], [${exp_sysconfdir}]) +m4trace:configure.ac:193: -1- AC_SUBST([RT_BIN_PATH], [${exp_bindir}]) +m4trace:configure.ac:194: -1- AC_SUBST([RT_SBIN_PATH], [${exp_sbindir}]) +m4trace:configure.ac:195: -1- AC_SUBST([RT_VAR_PATH], [${exp_localstatedir}]) +m4trace:configure.ac:196: -1- AC_SUBST([RT_MAN_PATH], [${exp_mandir}]) +m4trace:configure.ac:197: -1- AC_SUBST([MASON_DATA_PATH], [${exp_masonstatedir}]) +m4trace:configure.ac:198: -1- AC_SUBST([MASON_SESSION_PATH], [${exp_sessionstatedir}]) +m4trace:configure.ac:199: -1- AC_SUBST([MASON_HTML_PATH], [${exp_htmldir}]) +m4trace:configure.ac:200: -1- AC_SUBST([LOCAL_ETC_PATH], [${exp_custometcdir}]) +m4trace:configure.ac:201: -1- AC_SUBST([MASON_LOCAL_HTML_PATH], [${exp_customhtmldir}]) +m4trace:configure.ac:202: -1- AC_SUBST([LOCAL_LEXICON_PATH], [${exp_customlexdir}]) +m4trace:configure.ac:203: -1- AC_SUBST([LOCAL_LIB_PATH], [${exp_customlibdir}]) +m4trace:configure.ac:204: -1- AC_SUBST([DESTDIR], [${exp_prefix}]) +m4trace:configure.ac:205: -1- AC_SUBST([RT_LOG_PATH], [${exp_logfiledir}]) +m4trace:configure.ac:228: -1- AC_CONFIG_FILES([ sbin/rt-setup-database sbin/rt-test-dependencies Makefile @@ -152,5 +153,6 @@ m4trace:configure.ac:208: -1- AC_CONFIG_FILES([ bin/rt-commit-handler bin/rt-crontool bin/rt-mailgate + bin/rt bin/webmux.pl ]) diff --git a/rt/bin/mason_handler.fcgi b/rt/bin/mason_handler.fcgi index 431eccbd3..93d1f8855 100755 --- a/rt/bin/mason_handler.fcgi +++ b/rt/bin/mason_handler.fcgi @@ -27,7 +27,7 @@ use strict; use File::Basename; require ('/opt/rt3/bin/webmux.pl'); -my $h = &RT::Interface::Web::NewCGIHandler(); +my $h = &RT::Interface::Web::NewCGIHandler(@RT::MasonParameters); # Enter CGI::Fast mode, which should also work as a vanilla CGI script. require CGI::Fast; @@ -44,11 +44,25 @@ while ( my $cgi = CGI::Fast->new ) { $ENV{'ENV'} = '' if defined $ENV{'ENV'}; $ENV{'IFS'} = '' if defined $ENV{'IFS'}; - unless ($h->interp->comp_exists($cgi->path_info)) { - $cgi->path_info($cgi->path_info . "/index.html"); + RT::ConnectToDatabase(); + + if ( ( !$h->interp->comp_exists( $cgi->path_info ) ) + && ( $h->interp->comp_exists( $cgi->path_info . "/index.html" ) ) ) { + $cgi->path_info( $cgi->path_info . "/index.html" ); + } + + eval { $h->handle_cgi_object($cgi); }; + if ($@) { + $RT::Logger->crit($@); + } + + + if ($RT::Handle->TransactionDepth) { + $RT::Handle->ForceRollback; + $RT::Logger->crit("Transaction not committed. Usually indicates a software fault. Data loss may have occurred") ; } - $h->handle_cgi_object($cgi); - # _should_ always be tied + + } 1; diff --git a/rt/bin/mason_handler.fcgi.in b/rt/bin/mason_handler.fcgi.in index e932bfc29..193eaae57 100644 --- a/rt/bin/mason_handler.fcgi.in +++ b/rt/bin/mason_handler.fcgi.in @@ -1,9 +1,15 @@ #!@PERL@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,26 +21,41 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} +package RT::Mason; use strict; +use vars '$Handler'; use File::Basename; require ('@RT_BIN_PATH@/webmux.pl'); -my $h = &RT::Interface::Web::NewCGIHandler(); - # Enter CGI::Fast mode, which should also work as a vanilla CGI script. require CGI::Fast; RT::Init(); -# Response loop while ( my $cgi = CGI::Fast->new ) { # the whole point of fastcgi requires the env to get reset here.. # So we must squash it again @@ -44,11 +65,20 @@ while ( my $cgi = CGI::Fast->new ) { $ENV{'ENV'} = '' if defined $ENV{'ENV'}; $ENV{'IFS'} = '' if defined $ENV{'IFS'}; - unless ($h->interp->comp_exists($cgi->path_info)) { - $cgi->path_info($cgi->path_info . "/index.html"); + Module::Refresh->refresh if $RT::DevelMode; + RT::ConnectToDatabase(); + + if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) ) + && ( $Handler->interp->comp_exists( $cgi->path_info . "/index.html" ) ) ) { + $cgi->path_info( $cgi->path_info . "/index.html" ); } - $h->handle_cgi_object($cgi); - # _should_ always be tied + + eval { $Handler->handle_cgi_object($cgi); }; + if ($@) { + $RT::Logger->crit($@); + } + RT::Interface::Web::Handler->CleanupRequest(); + } 1; diff --git a/rt/bin/mason_handler.scgi b/rt/bin/mason_handler.scgi index 8e1135c2f..7774189ee 100755 --- a/rt/bin/mason_handler.scgi +++ b/rt/bin/mason_handler.scgi @@ -26,16 +26,18 @@ use strict; require ('/opt/rt3/bin/webmux.pl'); -my $h = &RT::Interface::Web::NewCGIHandler(); +my $h = &RT::Interface::Web::NewCGIHandler(@RT::MasonParameters); require CGI; RT::Init(); my $cgi = CGI->new; -unless ($h->interp->comp_exists($cgi->path_info)) { - $cgi->path_info($cgi->path_info . "/index.html"); +if ( ( !$h->interp->comp_exists( $cgi->path_info ) ) + && ( $h->interp->comp_exists( $cgi->path_info . "/index.html" ) ) ) { + $cgi->path_info( $cgi->path_info . "/index.html" ); } + $h->handle_cgi_object($cgi); 1; diff --git a/rt/bin/mason_handler.scgi.in b/rt/bin/mason_handler.scgi.in index 37d8380c2..2b38c9340 100644 --- a/rt/bin/mason_handler.scgi.in +++ b/rt/bin/mason_handler.scgi.in @@ -1,9 +1,15 @@ #!@SPEEDY_BIN@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,27 +21,45 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::Mason; use strict; +use vars '$Handler'; require ('@RT_BIN_PATH@/webmux.pl'); -my $h = &RT::Interface::Web::NewCGIHandler(); - require CGI; RT::Init(); my $cgi = CGI->new; -unless ($h->interp->comp_exists($cgi->path_info)) { - $cgi->path_info($cgi->path_info . "/index.html"); +if ( ( !$Handler->interp->comp_exists( $cgi->path_info ) ) + && ( $Handler->interp->comp_exists( $cgi->path_info . "/index.html" ) ) ) { + $cgi->path_info( $cgi->path_info . "/index.html" ); } -$h->handle_cgi_object($cgi); +$Handler->handle_cgi_object($cgi); +RT::Interface::Web::Handler->CleanupRequest(); 1; diff --git a/rt/bin/mason_handler.svc b/rt/bin/mason_handler.svc index e6d83784c..c05d21e69 100644 --- a/rt/bin/mason_handler.svc +++ b/rt/bin/mason_handler.svc @@ -197,7 +197,7 @@ BEGIN { warn "Begin listening on $ENV{'FCGI_SOCKET_PATH'}\n"; require CGI::Fast; -my $h = &RT::Interface::Web::NewCGIHandler(); +my $h = &RT::Interface::Web::NewCGIHandler(@RT::MasonParameters); RT::Init(); diff --git a/rt/bin/mason_handler.svc.in b/rt/bin/mason_handler.svc.in index cc12c0ef0..7be566deb 100644 --- a/rt/bin/mason_handler.svc.in +++ b/rt/bin/mason_handler.svc.in @@ -1,9 +1,15 @@ #!@PERL@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,13 +21,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} =head1 NAME @@ -55,8 +77,11 @@ registry setting will also be automatically populated. =cut +package RT::Mason; + use strict; use File::Basename; +use vars '$Handler'; require (dirname(__FILE__) . '/webmux.pl'); use Cwd; @@ -197,7 +222,6 @@ BEGIN { warn "Begin listening on $ENV{'FCGI_SOCKET_PATH'}\n"; require CGI::Fast; -my $h = &RT::Interface::Web::NewCGIHandler(); RT::Init(); @@ -212,7 +236,8 @@ while( my $cgi = CGI::Fast->new ) { warn "Serving $comp\n"; - $h->handle_cgi($comp); + $Handler->handle_cgi($comp); + RT::Interface::Web::Handler->CleanupRequest(); # _should_ always be tied } diff --git a/rt/bin/rt b/rt/bin/rt deleted file mode 100755 index 41220bb56..000000000 --- a/rt/bin/rt +++ /dev/null @@ -1,1391 +0,0 @@ -#!!!PERL!! -w -# -# $Header: /home/cvs/cvsroot/freeside/rt/bin/Attic/rt,v 1.1 2002-08-12 06:17:07 ivan Exp $ -# RT is (c) 1996-2001 Jesse Vincent <jesse@bestpractical.com> - -use strict; -use Carp; -use Getopt::Long; - -use lib "!!RT_LIB_PATH!!"; -use lib "!!RT_ETC_PATH!!"; - -use RT::Interface::CLI qw(CleanEnv LoadConfig DBConnect - GetCurrentUser GetMessageContent); - -#Clean out all the nasties from the environment -CleanEnv(); - -#Load etc/config.pm and drop privs -LoadConfig(); - -#Connect to the database and get RT::SystemUser and RT::Nobody loaded -DBConnect(); - -#Drop setgid permissions -RT::DropSetGIDPermissions(); - -#Get the current user all loaded -my $CurrentUser = GetCurrentUser(); - -unless ($CurrentUser->Id) { - print "No RT user found. Please consult your RT administrator.\n"; - exit(1); -} - - -# {{{ commandline flags - -my ( @id, - @limit_queue, - @limit_status, - @limit_owner, - @limit_priority, - @limit_final_priority, - @limit_requestor, - @limit_subject, - @limit_body, - @limit_created, - @limit_resolved, - @limit_lastupdated, - @limit_dependson, - @limit_dependedonby, - @limit_memberof, - @limit_hasmember, - @limit_refersto, - @limit_referredtoby, - @limit_keyword, - - @limit_due, - @limit_starts, - @limit_started, - $limit_first, - $limit_rows, - $history, - $summary, - $create, - @requestors, - @cc, - @admincc, - $status, - $subject, - $owner, - $steal, - $queue, - $time_left, - $priority, - $final_priority, - $due, - $starts, - $started, - $contacted, - $comment, - $reply, - $source, - $edit, - @dependson, - @memberof, - @refersto, - $mergeinto, - @keywords, - $time_taken, - $verbose, - $debug, - $help, - $version); - -# }}} - -# Set defaults for cli args - -$edit = 1; # Assume the user wants to edit replies and comments - # unless they specify --noedit - -# {{{ args - -my @args =("id=s" => \@id, - "limit-queue=s" => \@limit_queue, - "limit-status=s" => \@limit_status, - "limit-owner=s" => \@limit_owner, - "limit-priority=s" => \@limit_priority, - "limit-final-priority=s" => \@limit_final_priority, - "limit-requestor=s" => \@limit_requestor, - "limit-subject=s" => \@limit_subject, - "limit-body=s", \@limit_body, - "limit-created=s" => \@limit_created, - "limit-due=s" => \@limit_due, - "limit-last-updated=s" => \@limit_lastupdated, - "limit-keyword=s" => \@limit_keyword, - - "limit-member-of=s" => \@limit_memberof, - "limit-has-member=s" => \@limit_hasmember, - "limit-depended-on-by=s" => \@limit_dependedonby, - "limit-depends-on=s" => \@limit_dependson, - "limit-referred-to-by=s" => \@limit_referredtoby, - "limit-refers-to=s" => \@limit_refersto, - - "limit-starts=s" => \@limit_starts, - "limit-started=s" => \@limit_started, - "limit-first=i" => \$limit_first, - "limit-rows=i" => \$limit_rows, - "history|show" => \$history, - "summary:s" => \$summary, - "create" => \$create, - "keywords=s" => \@keywords, - "requestor|requestors=s" => \@requestors, - "cc=s" => \@cc, - "admincc=s" => \@admincc, - "status=s" => \$status, - "subject=s" => \$subject, - "owner=s" => \$owner, - "steal" => \$steal, - "queue=s" => \$queue, - - - "priority=i" => \$priority, - "final-priority=i" => \$final_priority, - "due=s" => \$due, - "starts=s" => \$starts, - "started=s" => \$started, - "contacted=s" => \$contacted, - "comment", \$comment, - "reply|respond", \$reply, - "source=s" => \$source, - "edit!" => \$edit, - "depends-on=s" => \@dependson, - "member-of=s" => \@memberof, - "merge-into=s" => \$mergeinto, - "refers-to=s" => \@refersto, - "time-left=i" => \$time_left, - "time-taken=i" => \$time_taken, - "verbose+" => \$verbose, - "debug" => \$debug, - "version" => \$version, - "help|h|usage" => \$help - ); - -# }}} - - - -GetOptions(@args); - -print join(':',@keywords); -# {{{ If they want it, print a usage message and get out - -if ($help) { - - -print <<EOUSAGE; - -Limit the set of records returned: - ---id=[first][-][last] - Specify a single ticket, a range, or to start with (n-) or end with (-n) -a specific ticket. - - --limit-queue=<queue> - --limit-status=[!](new|open|stalled|resolved) - - --limit-owner=[!]<userid> - --limit-priority=[starts][-][ends] - --limit-final-priority=[starts][-][ends] - starts is less than ends - --limit-requestor=[!]<userid>|<email> - --limit-subject=[!]<text> - --limit-body=[!]<text> - --limit-keyword=[!]<select>/<keyword> - - Links - --limit-member-of=<ticketid> - --limit-has-member=<ticketid> - --limit-refers-to=<ticketid> - --limit-referred-to-by=<ticketid> - --limit-depends-on=<ticketid> - --limit-depended-on-by=<ticketid> - - - Dates - --limit-created=[starts][-][ends] - --limit-due=[starts][-][ends] - --limit-starts=[starts][-][ends] - --limit-started=[starts][-][ends] - --limit-resolved=[starts][-][ends] - --limit-last-updated=[starts][-][ends] - starts and ends are dates. starts can not be less than ends - - --limit-first=<first row returned> - --limit-rows=<row count> - - --history | --show - show a history of the tickets found - - - --summary [format-string] - show a listing-style summary of the tickets found. If format string - is ommitted, uses \$RT_SUMMARY_FORMAT or an internal default - - - #TODO: doc summary - format: <atom>%<format> - atom: <name><size> - size: <integer> - name: (grep for # {{{ attribs for the array of ok values) - - - --create - create a new ticket. Any attributes that you can modify on an existing ticket - can also be used for ticket creation. - - - -Attributes - Basics - --status=<new|open|stalled|resolved|dead> - sets status - --subject=<subject> - sets subject - --owner=<userid> - set owner to - --steal - Become the owner, even if someone else owns the ticket - --queue=<queueid> - set queue to - - --priority=<int> - - --final-priority=<int> - - Watchers - --requestors=[+|-]<userid|email address> - add or remove this user as a ticket requestor - --cc=[+|-]<userid|email address> - add or remove this user as a ticket cc - --admincc=[+|-]<userid|email address> - add or remove this user as a ticket admincc - - (When creating tickets, just leave off the + or - ) - - Keywords - --keywords[+|-]<keyword_select>/<keyword> - Add or remove a keyword. - - - - Dates - --due=<date> - --starts=<date> - --started=<date> - --contacted=<date> - - --time-left=<int> - - --time-taken=<int> - - - Link related manipulation: - - --depends-on=[+|-]<ticketid> - --member-of=[+|-]<ticketid> - --refers-to=[+|-]<ticketid> - --merge-into=<ticketid> - -Comments and replies - - --comment - --reply|respond - --source <path> - Specify the path to the source file for this ticket update - - --noedit - Don't invoke \$EDITOR to edit the content of this update - - - - - Condiments - - --verbose - --debug - --version - --help|h|usage - You're reading it. - -EOUSAGE - - exit(0); -} - -# Print version, and leave -if ($version) { - print "RT $RT::VERSION for $RT::rtname. Copyright 1996-2001 Jesse Vincent <jesse\@fsck.com>\n"; - exit(0); -} - -# }}} - -# {{{ Validate any options that were passed in. normalize them. - -#if a queue was specified -if ($queue) { - # make sure that $queue is a valid queue and load it into $queue_obj -} - -#For each date in: $due, $starts, $started - -# load up an RT::Date object and parse it into a normalized form -# if it can't parse it, log an error and null out the variable - -# }}} - -# {{{ Check if we're creating, if so, create the ticket and be done - -if ($create) { - $RT::Logger->debug("Creating a new ticket"); - - #Make sure the current user can create tickets in this queue - - #Make sure that the owner specified can own tickets in this queue - - - - my $linesref = GetMessageContent( Edit => $edit, Source => $source, - CurrentUser => $CurrentUser - ); - - require MIME::Entity; - my $MIMEObj; - - if ($linesref) { - $MIMEObj = MIME::Entity->build(Data => $linesref); - } - - use RT::Ticket; - my $Ticket=new RT::Ticket($CurrentUser); - my ($ticket, $trans, $msg) = - $Ticket->Create(Queue => $queue, - Owner => $owner, - Status => $status || 'new' , - Subject => $subject, - Requestor => \@requestors, - Cc => \@cc, - AdminCc => \@admincc, - Due => $due, - Starts => $starts, - Started => $started, - TimeLeft => $time_left, - InitialPriority => $priority, - FinalPriority => $final_priority, - MIMEObj => $MIMEObj - ); - print $msg . "\n"; -} - -# }}} - -else { - #Apply restrictions - use RT::Tickets; - my $Tickets = new RT::Tickets($CurrentUser); - - # {{{ Limit our search - my $value; #to use when iterating through restrictions - my $queue_id; #to use when limiting by keyword - - # {{{ limit on id - - foreach $value (@id) { - if ($value =~ /^(\d+)$/) { - $Tickets->LimitId ( VALUE => $1, - OPERATOR => '='); - } - elsif ($value =~ /^(\d*)\D?(\d*)$/) { - my $start = $1; - my $end = $2; - $Tickets->LimitId( - VALUE => "$start", - OPERATOR => '>=') if ($start); - $Tickets->LimitId( - VALUE => "$end", - OPERATOR => '<=') if ($end); - } - } - - - # }}} - - # {{{ limit on status - - foreach $value (@limit_status) { - if ($value =~ /^(=|!=|!|)(.*)$/) { - my $op = $1; - my $val = $2; - - - $op = ParseBooleanOp($op); - $Tickets->LimitStatus(VALUE => "$val", - OPERATOR => "$op"); - } - } - - # }}} - - - - # {{{ limit on queue - foreach $value (@limit_queue) { - if ($value =~ /^(\W?)(.*?)$/i) { - my $op = $1; - my $val = $2; - - $op = ParseBooleanOp($op); - - my $queue_obj = new RT::Queue($RT::SystemUser); - - unless ($queue_obj->Load($val)) { - $RT::Logger->debug("Queue '$val' not found"); - print STDERR "Queue '$val' not found\n"; - exit(-1); - } - $RT::Logger->debug ("Limiting queue to $op ".$queue_obj->Name); - $Tickets->LimitQueue(VALUE => $queue_obj->Name, - OPERATOR => $op); - $queue_id=$queue_obj->id; - } - } - - # {{{ limit on keyword - foreach $value (@limit_keyword) { - if ($value =~ /^(\W?)(.*?)\/(.*)$/i) { - my $op = $1; - my $select = $2; - my $keyword = $3; - - $op = ParseBooleanOp($op); - - # load the keyword select - my $keyselect = RT::KeywordSelect->new($RT::SystemUser); - unless ($keyselect->LoadByName(Name=>$select, Queue=>$queue_id)) { - $RT::Logger->debug("KeywordSelect '$select' not found"); - print STDERR "KeywordSelect '$select' not fount\n"; - exit(-1); - } - - # load the keyword - my $k = RT::Keyword->new($RT::SystemUser); - unless ($k->LoadByNameAndParentId($keyword, $keyselect->Keyword)) { - $RT::Logger->debug("Keyword '$keyword' not found"); - print STDERR "Keyword '$keyword' not found\n"; - exit(-1); - } - $Tickets->LimitKeyword(OPERATOR => $op, - KEYWORDSELECT => $keyselect->id, - KEYWORD => $k->id); - $RT::Logger->debug ("Limiting keyword to $op ".$k->Path); - } - } - # }}} - # {{{ limit on owner - foreach $value (@limit_owner) { - if ($value =~ /^(\W?)(.*?)$/i) { - my $op = $1; - my $val = $2; - - $op = ParseBooleanOp($op); - - my $user_obj = new RT::User($RT::SystemUser); - - unless ($user_obj->Load($val)) { - $RT::Logger->debug("User '$val' not found"); - print STDERR "User '$val' not found\n"; - exit(-1); - } - $val = $user_obj->id(); - - $RT::Logger->debug ("Limiting owner to $op $val"); - $Tickets->LimitOwner(VALUE => "$val", - OPERATOR => "$op"); - } - } - # }}} - # {{{ limt on priority - - foreach $value (@limit_priority) { - my ($start, $end) = ParseRange($value); - if ($start == $end) { - $Tickets->LimitPriority( VALUE => $start, - OPERATOR => '='); - } elsif ($start) { - $Tickets->LimitPriority( VALUE => $start, - OPERATOR => '>='); - } elsif ($end) { - $Tickets->LimitPriority( VALUE => $end, - OPERATOR => '<='); - } - - } - foreach $value (@limit_final_priority) { - my ($start, $end) = ParseRange($value); - if ($start == $end) { - $Tickets->LimitFinalPriority( VALUE => $start, - OPERATOR => '='); - } elsif ($start) { - $Tickets->LimitFinalPriority( VALUE => $start, - OPERATOR => '>='); - } elsif ($end) { - $Tickets->LimitFinalPriority( VALUE => $end, - OPERATOR => '<='); - } - } - # }}} - - foreach $value (@limit_requestor) { - if ($value =~ /^(\W?)(.*?)$/i) { - my $op = $1; - my $val = $2; - - $op = ParseBooleanOp($op); - $Tickets->LimitRequestor(VALUE => $val, - OPERATOR => $op ); - } - - } - foreach $value (@limit_subject) { - - if ($value =~ /^(\W?)(.*?)$/i) { - my $op = $1; - my $val = $2; - - $op = ParseLikeOp($op); - - $Tickets->LimitSubject(VALUE => $val, - OPERATOR => $op ); - } - } - - foreach $value (@limit_body) { - if ($value =~ /^(\W?)(.*?)$/i) { - my $op = $1; - my $val = $2; - - $op = ParseLikeOp($op); - - $Tickets->LimitBody(VALUE => $val, - OPERATOR => $op ); - } - - } - - - - # Dates - foreach my $date (@limit_created) { - my ($start, $end) = ParseDateRange($date); - $Tickets->LimitCreated ( VALUE => $start, - OPERATOR => '>=' ) if ($start); - $Tickets->LimitCreated ( VALUE => $end, - OPERATOR => '<=' ) if ($end); - } - - foreach my $date (@limit_due) { - my ($start, $end) = ParseDateRange($date); - $Tickets->LimitDue ( VALUE => $start, - OPERATOR => '>=' ) if ($start); - $Tickets->LimitDue ( VALUE => $end, - OPERATOR => '<=' ) if ($end); - } - - foreach my $date (@limit_starts) { - my ($start, $end) = ParseDateRange($date); - $Tickets->LimitStarts ( VALUE => $start, - OPERATOR => '>=' ) if ($start); - $Tickets->LimitStarts ( VALUE => $end, - OPERATOR => '<=' ) if ($end); - } - - foreach my $date (@limit_started) { - my ($start, $end) = ParseDateRange($date); - $Tickets->LimitStarted ( VALUE => $start, - OPERATOR => '>=' ) if ($start); - $Tickets->LimitStarted ( VALUE => $end, - OPERATOR => '<=' ) if ($end); - } - - foreach my $date (@limit_resolved) { - my ($start, $end) = ParseDateRange($date); - $Tickets->LimitResolved ( VALUE => $start, - OPERATOR => '>=' ) if ($start); - $Tickets->LimitResolved ( VALUE => $end, - OPERATOR => '<=' ) if ($end); - } - - foreach my $date (@limit_lastupdated) { - my ($start, $end) = ParseDateRange($date); - $Tickets->LimitLastUpdated( VALUE => $start, - OPERATOR => '>=' ) if ($start); - $Tickets->LimitLastUpdated ( VALUE => $end, - OPERATOR => '<=' ) if ($end); - } - - foreach my $link (@limit_memberof) { - $Tickets->LimitMemberOf($link); - } - - foreach my $link (@limit_hasmember) { - $Tickets->LimitHasMember($link); - } - - foreach my $link (@limit_dependson) { - $Tickets->LimitDependsOn($link); - } - - foreach my $link (@limit_dependedonby) { - $Tickets->LimitDependedOnBy($link); - } - foreach my $link (@limit_refersto) { - $Tickets->LimitRefersTo($link); - } - - foreach my $link (@limit_referredtoby) { - $Tickets->LimitReferredToBy($link); - } - - - if ($limit_first){ - } - if ($limit_rows){ - } - -# }}} - - # {{{ Iterate through all tickets we found - - - my ($format, $titles, $code); - - #Set up the summary format if we need to - if (defined $summary) { - my $format_string = $summary || $ENV{'RT_SUMMARY_FORMAT'} || "%id4%status4%queue7%subject40%requestor16"; - - ($format, $titles, $code) = BuildListingFormat($format_string); - printf "$format\n", eval "$titles"; - } - - - - while (my $Ticket = $Tickets->Next()) { - $RT::Logger->debug ("Now working on ticket ". $Ticket->id); - - #Run through all the ticket modifications we might want to do - #TODO: these are all insufficiently lazy and should be replaced with some - # nice foreaches. - - - # {{{ deal with watchers - - # add / delete requestors - foreach $value (@requestors) { - if ($value =~ /^(\W?)(.*)$/) { - my $op = $1; - my $addr = $2; - - $Ticket->AddRequestor(Email => $addr) if ($op eq '+'); - $Ticket->DeleteRequestor( $addr) if ($op eq '-'); - } - } - - # add / delete ccs - foreach $value (@cc) { - if ($value =~ /^(\W?)(.*)$/) { - my $op = $1; - my $addr = $2; - $Ticket->AddCc(Email => $addr) if ($op eq '+'); - $Ticket->DeleteCc($addr) if ($op eq '-'); - } - } - - # add / delete adminccs - $RT::Logger->debug("Looking at admin ccs"); - foreach $value (@admincc) { - if ($value =~ /^(\W?)(.*)$/) { - my $op = $1; - my $addr = $2; - $Ticket->AddAdminCc(Email => $addr) if ($op eq '+'); - $Ticket->DeleteAdminCc($addr) if ($op eq '-'); - } - } - - # }}} - - # {{{ Deal with ticket keywords - - my $KeywordSelects = $Ticket->QueueObj->KeywordSelects(); - $RT::Logger->debug ("Looking at keywords"); - foreach $value (@keywords) { - $RT::Logger->debug("Looking at --keyword=$value"); - if ($value =~ /^(\W?)(.*?)\/(.*)$/) { - my $op = $1; - my $select = $2; - my $keyword = $3; - - $RT::Logger->debug("Going to $op Keyword $select / $keyword"); - while (my $ks = $KeywordSelects->Next) { - $RT::Logger->debug("$select is select ".$ks->Name." is found"); - next unless ($ks->Name =~ /$select/i); - $RT::Logger->debug ("Found a match for $select\n"); - my $kids = $ks->KeywordObj->Descendents; - - my ($kid); - foreach $kid (keys %{$kids}) { - $RT::Logger->debug("Now comparing $keyword with ".$kids->{$kid}. "\n"); - next unless ($kids->{$kid} =~ /^$keyword$/i); - $RT::Logger->debug("Going to $op $select / $keyword (".$kids->{$kid} .")"); - $Ticket->DeleteKeyword(KeywordSelect => $ks->id, - Keyword => $kid) if ($op eq '-'); - - $Ticket->AddKeyword(KeywordSelect => $ks->id, - Keyword => $kid) if ($op eq '+'); - } - - } - } - } - # }}} - - # {{{ deal with links - - # Deal with merging { - if ($mergeinto) { - my ($trans, $msg) =$Ticket->MergeInto($mergeinto); - print $msg."\n"; - } - # add /delete depends-ons - - foreach my $value (@dependson) { - if ($value =~ /^(\W?)(.*)$/) { - my $op = $1; - my $ticket = $2; - if (!$op or ($op eq '+')) { - my ($trans, $msg) = - $Ticket->AddLink(Type => 'DependsOn', Target => $ticket); - print $msg."\n"; - } - elsif ($op eq '-') { - my ($trans, $msg) = - $Ticket->DeleteLink(Type => 'DependsOn', Target => $ticket); - print $msg."\n"; - } - - } - } - # add /delete member-of - foreach my $value (@memberof) { - if ($value =~ /^(\W?)(.*)$/) { - my $op = $1; - my $ticket = $2; - if ($op eq '+') { - my ($trans, $msg) = - $Ticket->AddLink(Type => 'MemberOf', Target => $ticket); - print $msg; - } - elsif ($op eq '-') { - my ($trans, $msg) = - $Ticket->DeleteLink(Type => 'MemberOf', Target => $ticket); - print $msg; - } - - } - } - # add / delete refers-to - foreach my $value (@refersto) { - if ($value =~ /^(\W?)(.*)$/) { - my $op = $1; - my $ticket = $2; - if ($op eq '+') { - my ($trans, $msg) = - $Ticket->AddLink(Type => 'RefersTo', Target => $ticket); - print $msg; - } - elsif ($op eq '-') { - my ($trans, $msg) = - $Ticket->DeleteLink(Type => 'RefersTo', Target => $ticket); - print $msg; - } - - } - } - - # }}} - - # {{{ deal with dates - - #set due - if ($due) { - my $iso = ParseDateToISO($due); - if ($iso) { - $RT::Logger->debug("Setting due date to $iso ($due)"); - my ($trans, $msg) = - $Ticket->SetDue($iso); - print $msg; - } - else { - print "Due date '$due' could not be parsed"; - } - } - - #set starts - if ($starts) { - my $iso = ParseDateToISO($due); - if ($iso) { - my ($trans, $msg) = - $Ticket->SetStarts($iso); - print $msg."\n"; - } - else { - print "Starts date '$starts' could not be parsed"; - } - } - #set started - if ($started) { - my $iso = ParseDateToISO($started); - if ($iso) { - my ($trans, $msg) = - $Ticket->SetStarted($iso); - print $msg."\n"; - } - else { - print "Started date '$started' could not be parsed"; - } - } - #set contacted - if ($contacted) { - my $iso = ParseDateToISO($contacted); - if ($iso) { - my ($trans, $msg) = - $Ticket->SetContacted($iso); - print $msg."\n"; - } - else { - print "Contacted date '$contacted' could not be parsed"; - } - } - - # }}} - - # {{{ set other attributes - - #Set subject - if ($subject) { - my ($trans, $msg) = $Ticket->SetSubject($subject); - print $msg."\n"; - } - - #Set priority - if ($priority) { - my ($trans, $msg) = - $Ticket->SetPriority($priority); - print $msg."\n"; - } - - #Set final priority - if ($final_priority) { - my ($trans, $msg) = - $Ticket->SetFinalPriority($final_priority); - print $msg."\n"; - } - - #Set status - if ($status) { - my ($trans, $msg) = - $Ticket->SetStatus($status); - print $msg."\n"; - } - - #Set time left - if ($time_left) { - my ($trans, $msg) = - $Ticket->SetTimeLeft($time_left); - print $msg."\n"; - } - - #Set time_taken - if ($time_taken) { - my ($trans, $msg) = - $Ticket->SetTimeTaken($time_taken); - print $msg."\n"; - } - - #Set owner - if ($owner) { - my ($trans, $msg) = - $Ticket->SetOwner($owner); - print $msg."\n"; - } - - # Steal - if ($steal) { - my ($trans, $msg) = - $Ticket->Steal(); - print $msg . "\n"; - } - #Set queue - if ($queue) { - my ($trans, $msg) = - $Ticket->SetQueue($queue); - print $msg."\n"; - } - - # }}} - - - - # {{{ Perform ticket comments/replies - if ($reply) { - $RT::Logger->debug("Replying to ticket ".$Ticket->Id); - - my $linesref = GetMessageContent( Edit => $edit, Source => $source, - CurrentUser => $CurrentUser - ); - - #TODO build this entity - require MIME::Entity; - my $MIMEObj = MIME::Entity->build(Data => $linesref); - - $Ticket->Correspond( MIMEObj => $MIMEObj , - TimeTaken => $time_taken); - } - - elsif ($comment) { - $RT::Logger->debug("Commenting on ticket ".$Ticket->Id); - - my $linesref =GetMessageContent(Edit => $edit, Source => $source, - CurrentUser => $CurrentUser); - #TODO build this entity - require MIME::Entity; - my $MIMEObj = MIME::Entity->build(Data => $linesref); - - $Ticket->Comment( MIMEObj => $MIMEObj, - TimeTaken => $time_taken); - } - - # }}} - - # {{{ Display whatever we need to display - - # {{{ Display a full ticket listing and history - if ($history) { - #Display the history - $RT::Logger->debug("Show history for ".$Ticket->id); - - if ($Ticket->CurrentUserHasRight("ShowTicket")) { - &ShowSummary($Ticket); - print "\n"; - &ShowHistory($Ticket); - } - else { - print "You don't have permission to view that ticket.\n"; - } - } - - # }}} - - # {{{ Display a summary if we need to - if (defined $summary) { - $RT::Logger->debug ("Show ticket summary with format $format"); - - printf $format."\n", eval $code; - - } - # }}} - - # }}} - - } - - # }}} - -} - - -$RT::Handle->Disconnect(); - - - - - - - -# {{{ sub ParseBooleanOp - -=head2 ParseBooleanOp - - Takes an option modifier. returns the apropriate SQL operator. - If it's handed ! or -, returns !=. Otherwise returns =. - -=cut - -sub ParseBooleanOp { - - my $op = shift; - - #so that !new limits to not new, etc - if ($op =~ /^(\!|-)/) { - $op = "!="; - } - else { - $op = "="; - } - - return($op); -} - -# }}} - -# {{{ sub ParseLikeOp -=head2 ParseLikeOp - - Takes an option modifier. returns the apropriate SQL operator. - If it's handed ! or -, returns NOT LIKE. Otherwise returns LIKE - -=cut - -sub ParseLikeOp { - - my $op = shift; - - #so that !new limits to not new, etc - if ($op =~ /^(\!|-)/) { - $op = "NOT LIKE"; - } - else { - $op = "LIKE"; - } - - return($op); -} -# }}} - -# {{{ sub ParseDateToISO - -=head2 ParseDateToISO - -Takes a date in an arbitrary format. -Returns an ISO date and time in GMT - -=cut - -sub ParseDateToISO { - my $date = shift; - - my $date_obj = new RT::Date($CurrentUser); - $date_obj->Set( Format => 'unknown', - Value => $date - ); - return ($date_obj->ISO); -} - -# }}} - -# {{{ sub ParseDateRange - -=head2 ParseDateRange [RANGE] - -Takes a range of dates of the form [<date>][-][<date>] and returns -starting and ending dates (as ISOs) If a date is specified as neither a starting nor ending -date, we parse it it as "midnight tonight to midnight tomorrow" - -=cut - -sub ParseDateRange { - my $in = shift; - my ($start, $end); - - - use RT::Date; - my $start_obj = new RT::Date($CurrentUser); - my $end_obj = new RT::Date($CurrentUser); - - if ($in =~ /^(.*?)-(.*?)$/) { - $start = $1; - $end = $2; - - if ($start) { - $start_obj->Set(Format => 'unknown', - Value => $start); - } - if ($end) { - $end_obj->Set(Format => 'unknown', - Value => $end); - } - } - else { - $start = $in; - $end = $in; - - $start_obj->Set(Format => 'unknown', - Value => $start); - - $end_obj->Set(Format => 'unknown', - Value => $end); - - $start_obj->SetToMidnight(); - $end_obj->SetToMidnight(); - $end_obj->AddDay(); - } - - if ($start) { - $start = $start_obj->ISO; - } - if ($end) { - $end = $end_obj->ISO; - } - - return ($start, $end); -} - -# }}} - -# {{{ ParseRange -=head2 ParseRange [RANGE] - -Takes a range of the form [<int>][-][<int>] and returns -a first and a last value. If the - is omitted, both $start and $end are the same. -=cut - -sub ParseRange { - my $in = shift; - my ($start, $end); - - if ($in =~ /(.*?)-(.*?)/) { - $start = $1; - $end = $2; - } - else { - $start = $in; - $end = $in; - } - - return ($start, $end); - - - -} - -# }}} - -# {{{ sub ShowSummary - -sub ShowSummary { - my $Ticket = shift; - - - print <<EOFORM; -Serial Number: @{[$Ticket->Id]} Status:@{[$Ticket->Status]} Worked: @{[$Ticket->TimeWorked]} minutes Queue:@{[$Ticket->QueueObj->Name]} - Subject: @{[$Ticket->Subject]} - Requestors: @{[$Ticket->RequestorsAsString]} - Cc: @{[$Ticket->CcAsString]} - Admin Cc: @{[$Ticket->AdminCcAsString]} - Owner: @{[$Ticket->OwnerObj->Name]} - Priority: @{[$Ticket->Priority]} / @{[$Ticket->FinalPriority]} - Due: @{[$Ticket->DueAsString]} - Created: @{[$Ticket->CreatedAsString]} (@{[$Ticket->AgeAsString]}) - Last Contact: @{[$Ticket->ToldAsString]} (@{[$Ticket->LongSinceToldAsString]}) - Last Update: @{[$Ticket->LastUpdatedAsString]} by @{[$Ticket->LastUpdatedByObj->Name]} - -EOFORM - -my $selects = $Ticket->QueueObj->KeywordSelects(); - #get the keyword selects - print "Keywords:\n"; - while (my $select = $selects->Next) { - print "\t" .$select->Name .": "; - my $keys = $Ticket->KeywordsObj($select->id); - while (my $key = $keys->Next) { - print $key->KeywordObj->RelativePath($select->KeywordObj) . " "; - - } - print "\n"; - } - -#iterate through the keyword selects. -#print the keyword select and all the related keywords - - - -#TODO: finish link descriptions -print "Dependencies: \n"; - while (my $l=$Ticket->DependedOnBy->Next) { - print $l->BaseObj->id," (",$l->BaseObj->Subject,") ",$l->Type," this ticket\n"; - } - while (my $l=$Ticket->DependsOn->Next) { - print "This ticket ",$l->Type," ",$l->TargetObj->Id," (",$l->TargetObj->Subject,")\n"; - } -} - -# }}} - -# {{{ sub ShowHistory -sub ShowHistory { - my $Ticket = shift; - my $Transaction; - my $Transactions = $Ticket->Transactions; - - while ($Transaction = $Transactions->Next) { - &ShowTransaction($Transaction); - } - } -# }}} - -# {{{ sub ShowTransaction -sub ShowTransaction { - my $transaction = shift; - -print <<EOFORM; -========================================================================== -Date: @{[$transaction->CreatedAsString]} (@{[$transaction->TimeTaken]} minutes) -@{[$transaction->Description]} -EOFORM - ; - my $attachments=$transaction->Attachments(); - while (my $message=$attachments->Next) { - print <<EOFORM; --------------------------------------------------------------------------- -@{[$message->Headers]} -EOFORM - - if ($message->ContentType =~ m{^(text/plain|message|text$)}) { - print $message->Content; - } else { - print $message->ContentType, " not shown"; - } - } - print "\n"; - return(); -} -# }}} - - -# {{{ sub BuildListingFormat - -sub BuildListingFormat { - my $format_string = shift; - - my ($id, @format, @code, @titles); - my ($field,$titles,$length, $format); - - my $code = ""; - - # {{{ attribs - my $attribs = { id => { chars => '4', - justify => 'r', - title => 'id', - value => '$Ticket->id', - }, - - queue => { chars => '8', - justify => 'l', - title => 'Queue', - value => '$Ticket->QueueObj->Name' - }, - subject => { chars => '30', - justify => 'l', - title => 'Subject', - value => '$Ticket->Subject', - }, - priority => { chars => '2', - justify => 'r', - title => 'Pri', - value => '$Ticket->Priority', - }, - final_priority => { chars => '2', - justify => 'r', - title => 'Fin', - value => '$Ticket->FinalPriority', - }, - time_worked => { chars => '6', - justify => 'r', - title => 'Worked', - value => '$Ticket->TimeWorked', - }, - time_left => { chars => '5', - justify => 'r', - title => 'Left', - value => '$Ticket->TimeLeft', - - }, - - status => { chars => '6', - justify => 'r', - title => 'Status', - value => '$Ticket->Status', - }, - owner => { chars => '10', - justify => 'r', - title => 'Owner', - value => '$Ticket->OwnerObj->Name' - }, - requestor => { chars => '10', - justify => 'r', - title => 'Requestor', - value => '$Ticket->RequestorsAsString' - }, - created => { chars => '12', - justify => 'r', - title => 'Created', - value => '$Ticket->CreatedAsString' - }, - updated => { chars => '12', - justify => 'r', - title => 'Updated', - value => '$Ticket->LastUpdatedAsString' - }, - due => { chars => '12', - justify => 'r', - title => 'Due', - value => '$Ticket->DueAsString' - }, - told => { chars => '12', - justify => 'r', - title => 'Told', - value => '$Ticket->ToldAsString' - }, - - - - }; - - # }}} - - - foreach $field (split ('%',$format_string)) { - - if ($field =~ /^(\D*?)(\d*?)$/) { - $id = $1; - $length = $2; - } - else { - $RT::Logger->debug ("Error parsing $field\n"); - } - if ($length) { - push (@format, "%".$length.".".$length."s "); - - push (@code, $attribs->{"$id"}->{'value'}); - - push (@titles, "'". $attribs->{"$id"}->{title}. "'"); - } - - - } - $code = join (',', @code); - $format = join (" ", @format); - $titles = join (', ', @titles); - - - return ($format, $titles, $code); -} - -# }}} - - - -1; diff --git a/rt/bin/rt-commit-handler.in b/rt/bin/rt-commit-handler.in deleted file mode 100644 index 02b01abff..000000000 --- a/rt/bin/rt-commit-handler.in +++ /dev/null @@ -1,846 +0,0 @@ -#!@PERL@ -w -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK - -# {{{ Docs -# -*-Perl-*- -# -#ident "@(#)ccvs/contrib:$Name: $:$Id: rt-commit-handler.in,v 1.1 2003-07-15 13:16:15 ivan Exp $" -# -# Perl filter to handle the log messages from the checkin of files in multiple -# directories. This script will group the lists of files by log message, and -# send one piece of mail per unique message, no matter how many files are -# committed. - -=head1 NAME rt-commit-handler - -=head1 USAGE - - - -=head2 Regular use - -Stick the following in in CVSROOT/commitinfo - - ALL @RT_BIN_PATH@/rt-commit-handler --record-last-dir - -Stick the following in CVSROOT/loginfo - - ALL @RT_BIN_PATH@/rt-commit-handler --cvs-root /pathtocvs/root --rt %{Vvts} - -=head2 Invocation (advanced use) - -rt-commit-handler --cvs-root /path/to/cvs/root [-d] [-D] [-r] [-M module] \ - [[-m mailto] ...] [[-R replyto] ...] [-f logfile] - - - -d - turn on debugging - -m mailto - send mail to "mailto" (multiple) - -R replyto - set the "Reply-To:" to "replyto" (multiple) - -M modulename - set module name to "modulename" - -f logfile - write commit messages to logfile too - -D - generate diff commands - --rt - invoke RT commit handler - --cvs-root - specify your CVS root - - --record-last-dir - Record the last directory with changes in - pre-commit (commitinfo) mode - - -=cut - -# }}} - -use strict; -use Carp; -use Getopt::Long; -use Text::Wrap; -use Digest::MD5; -use MIME::Entity; - -use lib ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); - -use RT::Interface::CLI qw(CleanEnv GetCurrentUser GetMessageContent loc); - -use vars - qw(@MAILER $TMPDIR $FILE_PREFIX $LASTDIR_FILE $HASH_FILE $VERSION_FILE $MESSAGE_FILE $MAIL_FILE $DEBUG $MAILTO $REPLYTO $id $MODULE_NAME - $LOGIN $COMMITLOG $CVS_ROOT $RT_HANDLER); - -#Clean out all the nasties from the environment -CleanEnv(); - -#Load etc/config.pm and drop privs -RT::LoadConfig(); - -#Drop setgid permissions -RT::DropSetGIDPermissions(); - -# {{{ Variable setup -$TMPDIR = '/tmp'; -$FILE_PREFIX = $TMPDIR . '/#cvs.'; - -# The root of your CVS install. we should get this from some smarter place. -# It needs a trailing / - -$LASTDIR_FILE = $FILE_PREFIX . "lastdir"; -$HASH_FILE = $FILE_PREFIX . "hash"; -$VERSION_FILE = $FILE_PREFIX . "version"; -$MESSAGE_FILE = $FILE_PREFIX . "message"; -$MAIL_FILE = $FILE_PREFIX . "mail"; - -$DEBUG = 0; -$RT_HANDLER = 1; - -$MAILTO = ''; - -my @files = (); -my (@log_lines); -my $do_diff = 0; -my $id = getpgrp(); # note, you *must* use a shell which does setpgrp() -$LOGIN = getpwuid($<); - -# }}} - -die "User could not be found" unless ($LOGIN); - -# {{{ parse command line arguments (file list is seen as one arg) -# -while ( my $arg = shift @ARGV ) { - - if ( $arg eq '-d' ) { - $DEBUG = 1; - warn "Debug turned on...\n"; - } - elsif ( $arg =~ /^--record-last-dir$/i ) { - record_last_dir( $id, $ARGV[0] ); - exit(0); - } - elsif ( $arg eq '-m' ) { - $MAILTO .= ", " if $MAILTO; - $MAILTO .= shift @ARGV; - } - elsif ( $arg eq '--rt' ) { - $RT_HANDLER = 1; - } - elsif ( $arg eq '-R' ) { - $REPLYTO .= ", " if $REPLYTO; - $REPLYTO .= shift @ARGV; - } - elsif ( $arg eq '-M' ) { - die ("too many '-M' args\n") if $MODULE_NAME; - $MODULE_NAME = shift @ARGV; - } - elsif ( $arg eq '--cvs-root' ) { - $CVS_ROOT = shift @ARGV; - $CVS_ROOT .= "/" unless ( $CVS_ROOT =~ /\/$/ ); - } - elsif ( $arg eq '-f' ) { - die ("too many '-f' args\n") if $COMMITLOG; - $COMMITLOG = shift @ARGV; - - # This is a disgusting hack to untaint $COMMITLOG if we're running from - # setgid cvs. - $COMMITLOG = untaint($COMMITLOG); - } - elsif ( $arg eq '-D' ) { - $do_diff = 1; - } - else { - @files = split ( ' ', $arg ); - last; - } -} - -# }}} - -$REPLYTO = $LOGIN unless ($REPLYTO); - -# for now, the first "file" is the repository directory being committed, -# relative to the $CVSROOT location -# -my $dir = shift @files; - -# XXX there are some ugly assumptions in here about module names and -# XXX directories relative to the $CVSROOT location -- really should -# XXX read $CVSROOT/CVSROOT/modules, but that's not so easy to do, since -# XXX we have to parse it backwards. -# -# XXX For now we set the `module' name to the top-level directory name. -# -unless ($MODULE_NAME) { - ($MODULE_NAME) = split ( '/', $dir, 2 ); -} - -if ($DEBUG) { - warn "module - ", $MODULE_NAME, "\n"; - warn "dir - ", $dir, "\n"; - warn "files - ", join ( " ", @files ), "\n"; - warn "id - ", $id, "\n"; -} - -# {{{ Check for a new directory or an import command. - -# -# files[0] - "-" -# files[1] - "New" -# files[2] - "directory" -# -# files[0] - "-" -# files[1] - "Imported" -# files[2] - "sources" -# -if ( $files[0] eq "-" ) { - - #we just don't care about New Directory notes - unless ( $files[1] eq "New" && $files[2] eq "directory" ) { - - my @text = (); - - push @text, build_header(); - push @text, ""; - - while ( my $line = <STDIN> ) { - chop $line; # Drop the newline - push @text, $line; - } - - append_logfile( $COMMITLOG, @text ) if ($COMMITLOG); - - mail_notification( $id, @text ); - } - - exit 0; -} - -# }}} - -# {{{ Collect just the log message from stdin. -# - -while ( my $line = <STDIN> ) { - chop $line; # strip the newline - last if ( $line =~ /^Log Message:$/ ); -} -while ( my $line = <STDIN> ) { - chop $line; # strip the newline - $line =~ s/\s+$//; # strip trailing white space - push @log_lines, $line; -} - -my $md5 = Digest::MD5->new(); -foreach my $line (@log_lines) { - $md5->add( $line . "\n" ); -} -my $hash = $md5->hexdigest(); - -warn "hash = $hash\n" if ($DEBUG); - -if ( !-e "$MESSAGE_FILE.$id.$hash" ) { - append_logfile( "$HASH_FILE.$id", $hash ); - write_file( "$MESSAGE_FILE.$id.$hash", @log_lines ); -} - -# }}} - -# Spit out the information gathered in this pass. - -append_logfile( "$VERSION_FILE.$id.$hash", $dir . '/', @files ); - -# {{{ Check whether this is the last directory. If not, quit. - -warn "Checking current dir against last dir $LASTDIR_FILE.$id\n" if ($DEBUG); - -my @last_dir = read_file("$LASTDIR_FILE.$id"); - -unless ($CVS_ROOT) { - die "No cvs root specified with --cvs-root. Can't continue."; -} - -if ( $last_dir[0] ne $CVS_ROOT . $dir ) { - warn "Current directory $CVS_ROOT$dir is not last directory $last_dir[0].\n" - if ($DEBUG); - exit 0; -} - -# }}} - -# {{{ End Of Commits! -# - -# This is it. The commits are all finished. Lump everything together -# into a single message, fire a copy off to the mailing list, and drop -# it on the end of the Changes file. -# - -# -# Produce the final compilation of the log messages -# - -my @hashes = read_file("$HASH_FILE.$id"); -my (@text); - -push @text, build_header(); -push @text, ""; - -my ( @added_files, @modified_files, @removed_files ); - -foreach my $hash (@hashes) { - - # In case we're running setgid, make sure the hash file hasn't been hacked. - $hash =~ m/([a-z0-9]*)/ || die "*** Hacking attempt detected\n"; - $hash = $1; - - my @files = read_file("$VERSION_FILE.$id.$hash"); - my @log_lines = read_file("$MESSAGE_FILE.$id.$hash"); - - my $working_on_dir; # gets set as we iterate through the files. - foreach my $file (@files) { - - #If we've entered a new directory, make a note of that and remove the trailing / - - if ( $file =~ s'\/$'' ) { - $working_on_dir = $file; - next; - } - - my @file_entry = ( split ( ',', $file, 4 ), $working_on_dir ); - - # file_entry looks like ths: - - # 0 1 2 3 4 - # Old rev : new rev : tag: file :directory - my $entry = {}; - $entry->{'old'} = $file_entry[0]; - $entry->{'new'} = $file_entry[1]; - $entry->{'tag'} = $file_entry[2]; - $entry->{'file'} = $file_entry[3]; - $entry->{'dir'} = $file_entry[4]; - - if ( $file_entry[0] eq 'NONE' ) { - $entry->{'old'} = '0'; - push @added_files, $entry; - } - elsif ( $file_entry[1] eq 'NONE' ) { - $entry->{'new'} = '0'; - push @removed_files, $entry; - } - else { - push @modified_files, $entry; - } - } -} - -# }}} - -# {{{ start building up the body - -# Strip leading and trailing blank lines from the log message. Also -# compress multiple blank lines in the body of the message down to a -# single blank line. -# - -my $blank = 1; -@log_lines = map { - my $wasblank = $blank; - $blank = $_ eq ''; - $blank && $wasblank ? () : $_; -} @log_lines; - -pop @log_lines if $blank; - -@modified_files = order_and_summarize_diffs(@modified_files); -@added_files = order_and_summarize_diffs(@added_files); -@removed_files = order_and_summarize_diffs(@removed_files); - -push @text, "Modified Files:", format_lists(@modified_files) - if (@modified_files); - -push @text, "Added Files:", format_lists(@added_files) if (@added_files); - -push @text, "Removed Files:", format_lists(@removed_files) if (@removed_files); - -push @text, "", "Log Message", @log_lines if (@log_lines); - -push @text, ""; - -if ($RT_HANDLER) { - rt_handler( - @log_lines, "\n", - loc("To generate a diff of this commit:\n"), "\n", - format_diffs( @modified_files, @added_files, @removed_files ) - ); -} - -if ($COMMITLOG) { - append_logfile( $COMMITLOG, @text ); -} - -if ($do_diff) { - push @text, ""; - push @text, loc("To generate a diff of this commit:"); - push @text, format_diffs( @modified_files, @added_files, @removed_files ); - push @text, ""; -} - -# }}} - -# {{{ Mail out the notification. - -mail_notification( $id, @text ); - -# }}} - -# {{{ clean up - -unless ($DEBUG) { - $hash = untaint($hash); - $id = untaint($id); - unlink "$VERSION_FILE.$id.$hash"; - unlink "$MESSAGE_FILE.$id.$hash"; - unlink "$MAIL_FILE.$id"; - unlink "$LASTDIR_FILE.$id"; - unlink "$HASH_FILE.$id"; -} - -# }}} - -exit 0; - -# {{{ Subroutines -# - -# {{{ append_logfile -sub append_logfile { - my $filename = shift; - my (@lines) = @_; - - $filename = untaint($filename); - - open( FILE, ">>$filename" ) - || die ("Cannot open file $filename for append.\n"); - foreach my $line (@lines) { - print FILE $line . "\n"; - } - close(FILE); -} - -# }}} - -# {{{ write_file -sub write_file { - my $filename = shift; - my (@lines) = @_; - - $filename = untaint($filename); - - open( FILE, ">$filename" ) - || die ("Cannot open file $filename for write.\n"); - foreach my $line (@lines) { - print FILE $line . "\n"; - } - close(FILE); -} - -# }}} - -# {{{ read_file -sub read_file { - my $filename = shift; - my (@lines); - - open( FILE, "<$filename" ) - || die ("Cannot open file $filename for read.\n"); - while ( my $line = <FILE> ) { - chop $line; - push @lines, $line; - } - close(FILE); - - return (@lines); -} - -# }}} - -# {{{ sub format_lists - -sub format_lists { - my @items = (@_); - - my $files = ""; - map { - $_->{'files'} && ( $files .= ' ' . join ( ' ', @{ $_->{'files'} } ) ); - } @items; - - my @lines = wrap( "\t", "\t\t", $files ); - return (@lines); - -} - -# }}} - -# {{{ sub format_diffs - -sub format_diffs { - my @items = (@_); - - my @lines; - foreach my $item (@items) { - next unless ( $item->{'files'} ); - push ( @lines, - "cvs diff -r" - . $item->{'old'} . " -r" - . $item->{'new'} . " " - . join ( " ", @{ $item->{'files'} } ) . "\n" ); - - } - - @lines = fill( "\t", "\t\t", @lines ); - - return (@lines); -} - -# }}} - -# {{{ sub order_and_summarize_diffs { - -# takes an array of file items -# returns a sorted array of fileset items, which are like file items, except they can have an array of files, rather than -# a singleton file. - -sub order_and_summarize_diffs { - - my @files = (@_); - - # Sort by tag, dir, file. - @files = sort { - $a->{'tag'} cmp $b->{'tag'} - || $a->{'dir'} cmp $b->{'dir'} - || $a->{'file'} cmp $b->{'file'}; - } @files; - - # Combine adjacent rows that are the same modulo the file name. - - my @items = (undef); - - foreach my $file (@files) { - if ( $#items == -1 #if it's empty - || ( !defined $items[-1]->{'old'} - || $items[-1]->{'old'} ne $file->{'old'} ) - || ( !defined $items[-1]->{'new'} - || $items[-1]->{'new'} ne $file->{'new'} ) - || ( !defined $items[-1]->{'tag'} - || $items[-1]->{'tag'} ne $file->{'tag'} ) ) - { - - push ( @items, $file ); - } - push ( @{ $items[-1]->{'files'} }, - $file->{'dir'} . "/" . $file->{'file'} ); - } - - return (@items); -} - -# }}} - -# {{{ build_header - -sub build_header { - my $now = gmtime; - my $header = - sprintf( "Module Name:\t%s\nCommitted By:\t%s\nDate:\t\t%s %s %s", - $MODULE_NAME, $LOGIN, substr( $now, 0, 19 ), "UTC", - substr( $now, 20, 4 ) ); - return ($header); -} - -# }}} - -# {{{ mail_notification -sub mail_notification { - my $id = shift; - my (@text) = @_; - write_file( "$MAIL_FILE.$id", "From: " . $LOGIN, - "Subject: CVS commit: " . $MODULE_NAME, "To: " . $MAILTO, - "Reply-To: " . $REPLYTO, "", "", @text ); - - my $entity = MIME::Entity->build( - From => $LOGIN, - To => $MAILTO, - Subject => "CVS commit: " . $MODULE_NAME, - 'Reply-To' => $REPLYTO, - Data => join ( "\n", @text ) - ); - if ( $RT::MailCommand eq 'sendmailpipe' ) { - open( MAIL, "|$RT::SendmailPath $RT::SendmailArguments" ) - || die "Couldn't send mail: " . $@ . "\n"; - print MAIL $entity->as_string; - close(MAIL); - } - else { - $entity->send( $RT::MailCommand, $RT::MailParams ); - } - -} - -# }}} - -# {{{ sub record_last_dir - -sub record_last_dir { - my $id = shift; - my $dir = shift; - - # make a note of this directory. later, we'll use this to - # figure out if we've gone through the whole commit, - # for something that is a bad mockery of attomic commits. - - warn "about to write $dir to $LASTDIR_FILE.$id" if ($DEBUG); - - write_file( "$LASTDIR_FILE.$id", $dir ); -} - -# }}} - -# {{{ Get the RT stuff set up - -# {{{ sub rt_handler - -sub rt_handler { - my (@LogMessage) = (@_); - - #Connect to the database and get RT::SystemUser and RT::Nobody loaded - RT::Init; - - require RT::Ticket; - - #Get the current user all loaded - my $CurrentUser = GetCurrentUser(); - - if ( !$CurrentUser->Id ) { - print -loc("No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\n"); - return; - } - - my (@commands) = find_commands( \@LogMessage ); - - my ( @tickets, @errors ); - - # Get the list of tickets we're working with out of commands - grep { $_ =~ /^RT-Ticket:\s*(.*?)$/i && push ( @tickets, $1 ) } @commands; - - my $message = new MIME::Entity; - $message->build( - From => $CurrentUser->EmailAddress, - Subject => 'CVS Commit', - Data => \@LogMessage - ); - - # {{{ comment or correspond, as needed - - foreach my $ticket (@tickets) { - my $TicketObj = RT::Ticket->new($CurrentUser); - $TicketObj->Load($ticket); - my ( $id, $msg ); - unless ( $TicketObj->Id ) { - push ( @errors, -"Couldn't load ticket #$ticket. Not adding commit log to ticket history.\n" - ); - } - - if ( $LogMessage[0] =~ /^(comment|private)$/ ) { - ( $id, $msg ) = $TicketObj->Comment( MIMEObj => $message ); - - } - else { - ( $id, $msg ) = $TicketObj->Correspond( MIMEObj => $message ); - } - - push ( @errors, ">> Log message", - "Ticket #" . $TicketObj->Id . ": " . $msg ); - - } - - # }}} - - my ($reply) = ActOnPseudoHeaders( $CurrentUser, @commands ); - print "$reply\n" if ($reply); - print join ( "\n", @errors ); - print "\n"; - -} - -# }}} - -# {{{ sub find_commands - -sub find_commands { - my $lines = shift; - my (@pseudoheaders); - - while ( my $line = shift @{$lines} ) { - next if $line =~ /^\s*?$/; - if ( $line =~ /^RT-/i ) { - - push ( @pseudoheaders, $line ); - } - - #If we find a line that's not a command, get out. - else { - unshift ( @{$lines}, $line ); - last; - } - } - - return (@pseudoheaders); - -} - -# }}} - -# {{{ sub ActOnPseudoHeaders - -=item ActOnPseudoHeaders $PseudoHeaders - -Takes a string of pseudo-headers, iterates through them and does what they tell it to. - -=cut - -sub ActOnPseudoHeaders { - my $CurrentUser = shift; - my (@actions) = (@_); - - my $ResultsMessage = ''; - my $Ticket = RT::Ticket->new($CurrentUser); - - foreach my $action (@actions) { - my ($val); - my $msg = ''; - - $ResultsMessage .= ">>> $action\n"; - - if ( $action =~ /^RT-(.*?):\s*(.*)$/i ) { - my $command = $1; - my $args = $2; - - if ( $command =~ /^ticket$/i ) { - - $val = $Ticket->Load($args); - unless ($val) { - $ResultsMessage .= - loc("ERROR: Couldn't load ticket '[_1]': [_2].\n", $1, $msg); - . loc("Aborting to avoid unintended ticket modifications.\n") - . loc("The following commands were not proccessed:\n\n") - . join ( "\n", @actions ); - return ($ResultsMessage); - } - $ResultsMessage .= loc("Ticket [_1] loaded\n", $Ticket->Id); - } - else { - unless ( $Ticket->Id ) { - $ResultsMessage .= loc("No Ticket specified. Aborting ticket ") - . loc("modifications\n\n") - . loc("The following commands were not proccessed:\n\n") - . join ( "\n", @actions ); - return ($ResultsMessage); - } - - # Deal with the basics - if ( $command =~ /^(Subject|Owner|Status|Queue)$/i ) { - my $method = 'Set' . ucfirst( lc($1) ); - ( $val, $msg ) = $Ticket->$method($args); - } - - # Deal with the dates - elsif ( $command =~ /^(due|starts|started|resolved)$/i ) { - my $method = 'Set' . ucfirst( lc($1) ); - my $date = new RT::Date($CurrentUser); - $date->Set( Format => 'unknown', Value => $args ); - ( $val, $msg ) = $Ticket->$method( $date->ISO ); - } - - # Deal with the watchers - elsif ( $command =~ /^(requestor|requestors|cc|admincc)$/i ) { - my $operator = "+"; - my ($type); - if ( $args =~ /^(\+|\-)(.*)$/ ) { - $operator = $1; - $args = $2; - } - $type = 'Requestor' if ( $command =~ /^requestor/i ); - $type = 'Cc' if ( $command =~ /^cc/i ); - $type = 'AdminCc' if ( $command =~ /^admincc/i ); - - my $user = RT::User->new($CurrentUser); - $user->Load($args); - - if ($operator eq '+') { - ($val, $msg) = $Ticket->AddWatcher( Type => $type, - PrincipalId => $user->PrincipalId); - } elsif ($operator eq '-') { - ($val, $msg) = $Ticket->DeleteWatcher( Type => $type, - PrincipalId => $user->PrincipalId); - } - - } - $ResultsMessage .= $msg . "\n"; - } - - } - return ($ResultsMessage); - -} - -# }}} - -# {{{ sub untaint -sub untaint { - my $val = shift; - - if ( $val =~ /^([-\#\/\w.]+)$/ ) { - $val = $1; # $data now untainted - } - else { - die loc("Bad data in [_1]", $val); # log this somewhere - } - return ($val); -} - -# }}} - -=head1 AUTHOR - - - - rt-commit-handler is a rewritten version of the NetBSD commit handler, - which was placed in the public domain by Charles Hannum. It bore the following - authors statement: - - Contributed by David Hampton <hampton@cisco.com> - Hacked greatly by Greg A. Woods <woods@planix.com> - Rewritten by Charles M. Hannum <mycroft@netbsd.org> - -=cut - diff --git a/rt/bin/rt-crontool b/rt/bin/rt-crontool index ede874a0c..cdbc3cbc9 100644 --- a/rt/bin/rt-crontool +++ b/rt/bin/rt-crontool @@ -197,7 +197,7 @@ sub help { ) . "\n\n"; - print " sbin/cron_shim \\\n"; + print " bin/rt-cron-tool \\\n"; print " --search RT::Search::ActiveTicketsInQueue --search-arg general \\\n"; print @@ -205,6 +205,16 @@ sub help { print " --action RT::Action::SetPriority --action-arg 99 \\\n"; print " --verbose\n"; + print "\n"; + print loc("Escalate tickets"); + print "rt-crontool \\\n"; + print " --search RT::Search::ActiveTicketsInQueue --search-arg thequeuename \\\n"; + print " --action RT::Action::EscalatePriority \\\n"; + + + + + exit(0); } diff --git a/rt/bin/rt-crontool.in b/rt/bin/rt-crontool.in index 73b80aa90..76b08c344 100644 --- a/rt/bin/rt-crontool.in +++ b/rt/bin/rt-crontool.in @@ -1,9 +1,15 @@ #!@PERL@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,18 +21,33 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} use strict; use Carp; -use lib ("@RT_LIB_PATH@", "@LOCAL_LIB_PATH@"); +use lib ("@LOCAL_LIB_PATH@", "@RT_LIB_PATH@"); package RT; @@ -45,9 +66,6 @@ RT::LoadConfig(); #Connect to the database and get RT::SystemUser and RT::Nobody loaded RT::Init(); -#Drop setgid permissions -RT::DropSetGIDPermissions(); - #Get the current user all loaded my $CurrentUser = GetCurrentUser(); @@ -68,7 +86,7 @@ GetOptions( "search=s" => \$search, "help" => \$help, "verbose|v" => \$verbose ); -help() if $help; +help() if $help or not $search or not $action; # We _must_ have a search object load_module($search); @@ -78,15 +96,19 @@ load_module($condition) if ($condition); # load template if specified my $template_obj; if ($template_id) { - $template_obj = RT::Template->new($RT::Nobody); - $template_obj->LoadById($template_id); + $template_obj = RT::Template->new($CurrentUser); + $template_obj->Load($template_id); } #At the appointed time: #find a bunch of tickets my $tickets = RT::Tickets->new($CurrentUser); -my $search = $search->new( TicketsObj => $tickets, Argument => $search_arg ); +my $search = $search->new( + TicketsObj => $tickets, + Argument => $search_arg, + CurrentUser => $CurrentUser +); $search->Prepare(); @@ -95,12 +117,13 @@ my $tickets = $search->TicketsObj; #for each ticket we've found while ( my $ticket = $tickets->Next() ) { - print "\n" . $ticket->Id() . ": " if ($verbose); + print $ticket->Id() . ": " if ($verbose); # perform some more advanced check if ($condition) { my $condition_obj = $condition->new( TicketObj => $ticket, - Argument => $condition_arg ); + Argument => $condition_arg, + CurrentUser => $CurrentUser ); # if the condition doesn't apply, get out of here @@ -109,9 +132,12 @@ while ( my $ticket = $tickets->Next() ) { } #prepare our action - my $action_obj = $action->new( TicketObj => $ticket, - TemplateObj => $template_obj, - Argument => $action_arg ); + my $action_obj = $action->new( + TicketObj => $ticket, + TemplateObj => $template_obj, + Argument => $action_arg, + CurrentUser => $CurrentUser + ); #if our preparation, move onto the next ticket next unless ( $action_obj->Prepare ); @@ -119,7 +145,7 @@ while ( my $ticket = $tickets->Next() ) { #commit our action. next unless ( $action_obj->Commit ); - print loc("Action committed.") if ($verbose); + print loc("Action committed.\n") if ($verbose); } # {{{ load_module @@ -197,14 +223,22 @@ sub help { ) . "\n\n"; - print " sbin/cron_shim \\\n"; - print - " --search RT::Search::ActiveTicketsInQueue --search-arg general \\\n"; - print - " --condition RT::Condition::UntouchedInHours --condition-arg 4 \\\n"; + print " bin/rt-crontool \\\n"; + print " --search RT::Search::ActiveTicketsInQueue --search-arg general \\\n"; + print " --condition RT::Condition::UntouchedInHours --condition-arg 4 \\\n"; print " --action RT::Action::SetPriority --action-arg 99 \\\n"; print " --verbose\n"; + print "\n"; + print loc("Escalate tickets"). "\n"; + print " bin/rt-crontool \\\n"; + print " --search RT::Search::ActiveTicketsInQueue --search-arg general \\\n"; + print " --action RT::Action::EscalatePriority\n"; + + + + + exit(0); } diff --git a/rt/bin/rt-mailgate b/rt/bin/rt-mailgate index b30443638..8af800227 100755 --- a/rt/bin/rt-mailgate +++ b/rt/bin/rt-mailgate @@ -1,26 +1,26 @@ #!/usr/bin/perl -w # BEGIN LICENSE BLOCK -# +# # Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# +# # (Except where explictly superceded by other copyright notices) -# +# # 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. -# +# # Unless otherwise specified, all modifications, corrections or # extensions to this work which alter its source code become the # property of Best Practical Solutions, LLC when submitted for # inclusion in the work. -# -# +# +# # END LICENSE BLOCK =head1 NAME @@ -31,10 +31,25 @@ rt-mailgate - Mail interface to RT3. use RT::I18N; +# Make sure that when we call the mailgate wrong, it tempfails + +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://bad.address"), "Opened the mailgate - The error below is expected - $@"); +print MAIL <<EOF; +From: root\@localhost +To: rt\@example.com +Subject: This is a test of new ticket creation + +Foob! +EOF +close (MAIL); + +# Check the return value +is ( $? >> 8, 75, "The error message above is expected The mail gateway exited with a failure. yay"); + # {{{ Test new ticket creation by root who is privileged and superuser -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); print MAIL <<EOF; From: root\@localhost To: rt\@example.com @@ -45,6 +60,9 @@ Foob! EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + use RT::Tickets; my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); @@ -59,7 +77,7 @@ 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, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); print MAIL <<EOF; From: doesnotexist\@example.com To: rt\@example.com @@ -69,6 +87,8 @@ Blah! Foob! EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); @@ -94,7 +114,7 @@ ok ($val, "Granted everybody the right to create tickets - $msg"); sleep(60); # gotta sleep so the remote process' ACL cache times out -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); print MAIL <<EOF; From: doesnotexist\@example.com To: rt\@example.com @@ -104,6 +124,8 @@ Blah! Foob! EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); $tickets = RT::Tickets->new($RT::SystemUser); @@ -126,7 +148,7 @@ ok( $u->Id != 0, " user does not exist and was created by ticket submission"); #ok ($val, "Granted everybody the right to create tickets - $msg"); #sleep(60); # gotta sleep so the remote process' ACL cache times out -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); print MAIL <<EOF; From: doesnotexist-2\@example.com To: rt\@example.com @@ -136,6 +158,8 @@ Blah! Foob! EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); $u = RT::User->new($RT::SystemUser); $u->Load('doesnotexist-2@example.com'); @@ -148,7 +172,7 @@ ok( $u->Id == 0, " user does not exist and was not created by ticket corresponde ok ($val, "Granted everybody the right to reply to tickets - $msg"); sleep(60); # gotta sleep so the remote process' ACL cache times out -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); print MAIL <<EOF; From: doesnotexist-2\@example.com To: rt\@example.com @@ -158,6 +182,8 @@ Blah! Foob! EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); $u = RT::User->new($RT::SystemUser); @@ -173,7 +199,7 @@ ok( $u->Id != 0, " user exists and was created by ticket correspondence submissi #ok ($val, "Granted everybody the right to create tickets - $msg"); #sleep(60); # gotta sleep so the remote process' ACL cache times out -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action comment"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action comment"), "Opened the mailgate - $@"); print MAIL <<EOF; From: doesnotexist-3\@example.com To: rt\@example.com @@ -184,6 +210,9 @@ Foob! EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + $u = RT::User->new($RT::SystemUser); $u->Load('doesnotexist-3@example.com'); ok( $u->Id == 0, " user does not exist and was not created by ticket comment submission"); @@ -196,7 +225,7 @@ ok( $u->Id == 0, " user does not exist and was not created by ticket comment sub ok ($val, "Granted everybody the right to reply to tickets - $msg"); sleep(60); # gotta sleep so the remote process' ACL cache times out -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action comment"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action comment"), "Opened the mailgate - $@"); print MAIL <<EOF; From: doesnotexist-3\@example.com To: rt\@example.com @@ -207,6 +236,8 @@ Foob! EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); $u = RT::User->new($RT::SystemUser); $u->Load('doesnotexist-3@example.com'); @@ -227,17 +258,20 @@ my $entity = MIME::Entity->build( From => 'root@localhost', Data => ['This is a test of a binary attachment']); # currently in lib/t/autogen -$entity->attach(Path => '../../../html/NoAuth/images/spacer.gif', +$entity->attach(Path => '/opt/rt3/share/html/NoAuth/images/spacer.gif', Type => 'image/gif', Encoding => 'base64'); # Create a ticket with a binary attachment -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); $entity->print(\*MAIL); close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); @@ -273,7 +307,7 @@ use LWP::UserAgent; # Grab the binary attachment via the web ui my $ua = LWP::UserAgent->new(); -my $full_url = "http://localhost/Ticket/Attachment/".$attachment->TransactionId."/".$attachment->id."/spacer.gif?&user=root&pass=password"; +my $full_url = "http://localhost".$RT::WebPath."/Ticket/Attachment/".$attachment->TransactionId."/".$attachment->id."/spacer.gif?&user=root&pass=password"; my $r = $ua->get( $full_url); @@ -286,7 +320,7 @@ is($file, $r->content, 'The attachment isn\'t screwed up in download'); # {{{ Simple I18N testing -ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); print MAIL <<EOF; From: root\@localhost @@ -301,6 +335,9 @@ bye EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + my $unitickets = RT::Tickets->new($RT::SystemUser); $unitickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $unitickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); @@ -317,7 +354,7 @@ 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, "|/opt/rt3/bin/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); +ok(open(MAIL, "|/opt/rt3/bin/rt-mailgate --url http://localhost".$RT::WebPath."/ --queue general --action correspond"), "Opened the mailgate - $@"); print MAIL <<EOF; From: root\@localhost @@ -332,6 +369,9 @@ bye EOF close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + my $tickets2 = RT::Tickets->new($RT::SystemUser); $tickets2->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets2->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); @@ -367,7 +407,7 @@ use LWP::UserAgent; use constant EX_TEMPFAIL => 75; my %opts; -GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s" ); +GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s", "timeout=i" ); if ( $opts{help} ) { require Pod::Usage; @@ -381,17 +421,18 @@ for (qw(url)) { } undef $/; -my $message = <>; my $ua = LWP::UserAgent->new(); $ua->cookie_jar( { file => $opts{jar} } ); my %args = ( queue => $opts{queue}, action => $opts{action}, - message => $message, SessionType => 'REST', # Surpress login box ); +# Read the message in from STDIN +$args{'message'} = <>; + if ($opts{'extension'}) { $args{$opts{'extension'}} = $ENV{'EXTENSION'}; @@ -404,6 +445,7 @@ warn "Connecting to $full_url" if $opts{'debug'}; +$ua->timeout(exists($opts{'timeout'}) ? $opts{'timeout'} : 180); my $r = $ua->post( $full_url, {%args} ); check_failure($r); @@ -414,7 +456,7 @@ if ( $content !~ /^(ok|not ok)/ ) { # It's not the server's fault if the mail is bogus. We just want to know that # *something* came out of the server. - die <<EOF + warn <<EOF; RT server error. The RT server which handled your email did not behave as expected. It @@ -423,8 +465,13 @@ said: $content EOF +exit EX_TEMPFAIL; + } +exit; + + sub check_failure { my $r = shift; return if $r->is_success(); @@ -455,7 +502,11 @@ Usual invocation (from MTA): rt-mailgate --action (correspond|comment) --queue queuename --url http://your.rt.server/ - [ --extension (queue|action|ticket) + [ --debug ] + [ --extension (queue|action|ticket) ] + [ --timeout seconds ] + + See C<man rt-mailgate> for more. @@ -486,6 +537,16 @@ submitted to will be set to the value of $EXTENSION. By specifying is related to. "action" will allow the user to specify either "comment" or "correspond" in the address extension. +=item C<--debug> OPTIONAL + +Print debugging output to standard error + + +=item C<--timeout> OPTIONAL + +Configure the timeout for posting the message to the web server. The +default timeout is 3 minutes (180 seconds). + =head1 DESCRIPTION diff --git a/rt/bin/rt-mailgate.in b/rt/bin/rt-mailgate.in index 304fcbcd6..5ac9469d8 100644 --- a/rt/bin/rt-mailgate.in +++ b/rt/bin/rt-mailgate.in @@ -1,362 +1,54 @@ #!@PERL@ -w -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} =head1 NAME rt-mailgate - Mail interface to RT3. -=begin testing - -use RT::I18N; - - -# {{{ Test new ticket creation by root who is privileged and superuser - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); -print MAIL <<EOF; -From: root\@localhost -To: rt\@example.com -Subject: This is a test of new ticket creation - -Blah! -Foob! -EOF -close (MAIL); - -use RT::Tickets; -my $tickets = RT::Tickets->new($RT::SystemUser); -$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); -ok (UNIVERSAL::isa($tick,'RT::Ticket')); -ok ($tick->Id, "found ticket ".$tick->Id); -ok ($tick->Subject eq 'This is a test of new ticket creation', "Created the ticket"); - -# }}} - - -# {{{This is a test of new ticket creation as an unknown user - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); -print MAIL <<EOF; -From: doesnotexist\@example.com -To: rt\@example.com -Subject: This is a test of new ticket creation as an unknown user - -Blah! -Foob! -EOF -close (MAIL); - -$tickets = RT::Tickets->new($RT::SystemUser); -$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -$tick = $tickets->First(); -ok ($tick->Id, "found ticket ".$tick->Id); -ok ($tick->Subject ne 'This is a test of new ticket creation as an unknown user', "failed to create the new ticket from an unprivileged account"); -my $u = RT::User->new($RT::SystemUser); -$u->Load('doesnotexist@example.com'); -ok( $u->Id == 0, " user does not exist and was not created by failed ticket submission"); - - -# }}} - -# {{{ now everybody can create tickets. can a random unkown user create tickets? - -my $g = RT::Group->new($RT::SystemUser); -$g->LoadSystemInternalGroup('Everyone'); -ok( $g->Id, "Found 'everybody'"); - -my ($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket'); -ok ($val, "Granted everybody the right to create tickets - $msg"); - -sleep(60); # gotta sleep so the remote process' ACL cache times out - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); -print MAIL <<EOF; -From: doesnotexist\@example.com -To: rt\@example.com -Subject: This is a test of new ticket creation as an unknown user - -Blah! -Foob! -EOF -close (MAIL); - - -$tickets = RT::Tickets->new($RT::SystemUser); -$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -$tick = $tickets->First(); -ok ($tick->Id, "found ticket ".$tick->Id); -ok ($tick->Subject eq 'This is a test of new ticket creation as an unknown user', "failed to create the new ticket from an unprivileged account"); -my $u = RT::User->new($RT::SystemUser); -$u->Load('doesnotexist@example.com'); -ok( $u->Id != 0, " user does not exist and was created by ticket submission"); - -# }}} - - -# {{{ can another random reply to a ticket without being granted privs? answer should be no. - - -#($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket'); -#ok ($val, "Granted everybody the right to create tickets - $msg"); -#sleep(60); # gotta sleep so the remote process' ACL cache times out - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); -print MAIL <<EOF; -From: doesnotexist-2\@example.com -To: rt\@example.com -Subject: [example.com #@{[$tick->Id]}] This is a test of a reply as an unknown user - -Blah! -Foob! -EOF -close (MAIL); - -$u = RT::User->new($RT::SystemUser); -$u->Load('doesnotexist-2@example.com'); -ok( $u->Id == 0, " user does not exist and was not created by ticket correspondence submission"); -# }}} -# {{{ can another random reply to a ticket after being granted privs? answer should be yes - - -($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'ReplyToTicket'); -ok ($val, "Granted everybody the right to reply to tickets - $msg"); -sleep(60); # gotta sleep so the remote process' ACL cache times out - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); -print MAIL <<EOF; -From: doesnotexist-2\@example.com -To: rt\@example.com -Subject: [example.com #@{[$tick->Id]}] This is a test of a reply as an unknown user - -Blah! -Foob! -EOF -close (MAIL); - - -$u = RT::User->new($RT::SystemUser); -$u->Load('doesnotexist-2@example.com'); -ok( $u->Id != 0, " user exists and was created by ticket correspondence submission"); - -# }}} - -# {{{ can another random comment on a ticket without being granted privs? answer should be no. - - -#($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CreateTicket'); -#ok ($val, "Granted everybody the right to create tickets - $msg"); -#sleep(60); # gotta sleep so the remote process' ACL cache times out - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action comment"), "Opened the mailgate - $@"); -print MAIL <<EOF; -From: doesnotexist-3\@example.com -To: rt\@example.com -Subject: [example.com #@{[$tick->Id]}] This is a test of a comment as an unknown user - -Blah! -Foob! -EOF -close (MAIL); - -$u = RT::User->new($RT::SystemUser); -$u->Load('doesnotexist-3@example.com'); -ok( $u->Id == 0, " user does not exist and was not created by ticket comment submission"); - -# }}} -# {{{ can another random reply to a ticket after being granted privs? answer should be yes - - -($val,$msg) = $g->PrincipalObj->GrantRight(Right => 'CommentOnTicket'); -ok ($val, "Granted everybody the right to reply to tickets - $msg"); -sleep(60); # gotta sleep so the remote process' ACL cache times out - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action comment"), "Opened the mailgate - $@"); -print MAIL <<EOF; -From: doesnotexist-3\@example.com -To: rt\@example.com -Subject: [example.com #@{[$tick->Id]}] This is a test of a comment as an unknown user - -Blah! -Foob! -EOF -close (MAIL); - - -$u = RT::User->new($RT::SystemUser); -$u->Load('doesnotexist-3@example.com'); -ok( $u->Id != 0, " user exists and was created by ticket comment submission"); - -# }}} - -# {{{ Testing preservation of binary attachments - -# Get a binary blob (Best Practical logo) - -# Create a mime entity with an attachment - -use MIME::Entity; -my $entity = MIME::Entity->build( From => 'root@localhost', - To => 'rt@localhost', - Subject => 'binary attachment test', - Data => ['This is a test of a binary attachment']); - -# currently in lib/t/autogen -$entity->attach(Path => '../../../html/NoAuth/images/spacer.gif', - Type => 'image/gif', - Encoding => 'base64'); - -# Create a ticket with a binary attachment -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); - -$entity->print(\*MAIL); - -close (MAIL); - -my $tickets = RT::Tickets->new($RT::SystemUser); -$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); - $tick = $tickets->First(); -ok (UNIVERSAL::isa($tick,'RT::Ticket')); -ok ($tick->Id, "found ticket ".$tick->Id); -ok ($tick->Subject eq 'binary attachment test', "Created the ticket - ".$tick->Id); - -my $file = `cat ../../../html/NoAuth/images/spacer.gif`; -ok ($file, "Read in the logo image"); - - - use Digest::MD5; -warn "for the raw file the content is ".Digest::MD5::md5_base64($file); - - - -# Verify that the binary attachment is valid in the database -my $attachments = RT::Attachments->new($RT::SystemUser); -$attachments->Limit(FIELD => 'ContentType', VALUE => 'image/gif'); -ok ($attachments->Count == 1, 'Found only one gif in the database'); -my $attachment = $attachments->First; -my $acontent = $attachment->Content; - - warn "coming from the database, the content is ".Digest::MD5::md5_base64($acontent); - -is( $acontent, $file, 'The attachment isn\'t screwed up in the database.'); -# Log in as root -use Getopt::Long; -use LWP::UserAgent; - - -# Grab the binary attachment via the web ui -my $ua = LWP::UserAgent->new(); - -my $full_url = "http://localhost/Ticket/Attachment/".$attachment->TransactionId."/".$attachment->id."/spacer.gif?&user=root&pass=password"; -my $r = $ua->get( $full_url); - - -# Verify that the downloaded attachment is the same as what we uploaded. -is($file, $r->content, 'The attachment isn\'t screwed up in download'); - - - -# }}} - -# {{{ Simple I18N testing - -ok(open(MAIL, "|@RT_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); - -print MAIL <<EOF; -From: root\@localhost -To: rtemail\@example.com -Subject: This is a test of I18N ticket creation -Content-Type: text/plain; charset="utf-8" - -2 accented lines -\303\242\303\252\303\256\303\264\303\273 -\303\241\303\251\303\255\303\263\303\272 -bye -EOF -close (MAIL); - -my $unitickets = RT::Tickets->new($RT::SystemUser); -$unitickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$unitickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); -my $unitick = $unitickets->First(); -ok (UNIVERSAL::isa($unitick,'RT::Ticket')); -ok ($unitick->Id, "found ticket ".$unitick->Id); -ok ($unitick->Subject eq 'This is a test of I18N ticket creation', "Created the ticket - ". $unitick->Subject); - - - -my $unistring = "\303\241\303\251\303\255\303\263\303\272"; -Encode::_utf8_on($unistring); -is ($unitick->Transactions->First->Content, $unitick->Transactions->First->Attachments->First->Content, "Content is ". $unitick->Transactions->First->Attachments->First->Content); -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_BIN_PATH@/rt-mailgate --url http://localhost/ --queue general --action correspond"), "Opened the mailgate - $@"); - -print MAIL <<EOF; -From: root\@localhost -To: rtemail\@example.com -Subject: This is a test of I18N ticket creation -Content-Type: text/plain; charset="utf-8" - -2 accented lines -\303\242\303\252\303\256\303\264\303\273 -\303\241\303\251\303\255\303\263\303\272 -bye -EOF -close (MAIL); - -my $tickets2 = RT::Tickets->new($RT::SystemUser); -$tickets2->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$tickets2->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); -my $tick2 = $tickets2->First(); -ok (UNIVERSAL::isa($tick2,'RT::Ticket')); -ok ($tick2->Id, "found ticket ".$tick2->Id); -ok ($tick2->Subject eq 'This is a test of I18N ticket creation', "Created the ticket"); - - - -my $unistring = "\303\241\303\251\303\255\303\263\303\272"; -Encode::_utf8_on($unistring); - -ok ($tick2->Transactions->First->Content =~ $unistring, "It appears to be unicode - ".$tick2->Transactions->First->Content); - -# }}} - - -($val,$msg) = $g->PrincipalObj->RevokeRight(Right => 'CreateTicket'); -ok ($val, $msg); - - - -=end testing - =cut @@ -367,7 +59,7 @@ use LWP::UserAgent; use constant EX_TEMPFAIL => 75; my %opts; -GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s" ); +GetOptions( \%opts, "queue=s", "action=s", "url=s", "jar=s", "help", "debug", "extension=s", "timeout=i" ); if ( $opts{help} ) { require Pod::Usage; @@ -380,18 +72,22 @@ for (qw(url)) { die "$0 invoked improperly\n\nNo $_ provided to mail gateway!\n" unless $opts{$_}; } -undef $/; -my $message = <>; my $ua = LWP::UserAgent->new(); $ua->cookie_jar( { file => $opts{jar} } ); my %args = ( queue => $opts{queue}, action => $opts{action}, - message => $message, SessionType => 'REST', # Surpress login box ); +# Read the message in from STDIN +$args{'message'} = do { local (@ARGV, $/); <> }; + +unless ( $args{message} =~ /\S/ ) { + print STDERR "$0: no message passed on STDIN!\n"; + exit 0; +} if ($opts{'extension'}) { $args{$opts{'extension'}} = $ENV{'EXTENSION'}; @@ -404,6 +100,7 @@ warn "Connecting to $full_url" if $opts{'debug'}; +$ua->timeout(exists($opts{'timeout'}) ? $opts{'timeout'} : 180); my $r = $ua->post( $full_url, {%args} ); check_failure($r); @@ -414,7 +111,7 @@ if ( $content !~ /^(ok|not ok)/ ) { # It's not the server's fault if the mail is bogus. We just want to know that # *something* came out of the server. - die <<EOF + warn <<EOF; RT server error. The RT server which handled your email did not behave as expected. It @@ -423,8 +120,13 @@ said: $content EOF +exit EX_TEMPFAIL; + } +exit; + + sub check_failure { my $r = shift; return if $r->is_success(); @@ -453,9 +155,13 @@ sub check_failure { Usual invocation (from MTA): - rt-mailgate --action (correspond|comment) --queue queuename + rt-mailgate --action (correspond|comment|...) --queue queuename --url http://your.rt.server/ - [ --extension (queue|action|ticket) + [ --debug ] + [ --extension (queue|action|ticket) ] + [ --timeout seconds ] + + See C<man rt-mailgate> for more. @@ -465,15 +171,31 @@ See C<man rt-mailgate> for more. =item C<--action> -Specifies whether this is a correspondence or comment address. +Specifies what happens to email sent to this alias. The avaliable +basic actions are: C<correspond>, C<comment>. + + +If you've set the RT configuration variable B<$RT::UnsafeEmailCommands>, +C<take> and C<resolve> are also available. You can execute two or more +actions on a single message using a C<-> separated list. RT will execute +the actions in the listed order. For example you can use C<take-comment>, +C<correspond-resolve> or C<take-comment-resolve> as actions. + +Note that C<take> and C<resolve> actions ignore message text if used +alone. Include a C<comment> or C<correspond> action if you want RT +to record the incoming message. + +The default action is C<correspond>. =item C<--queue> -Reflects which queue this address handles. +This flag determines which queue this alias should create a ticket in if no ticket identifier +is found. =item C<--url> -The location of the web server for your RT instance. +This flag tells the mail gateway where it can find your RT server. You should +probably use the same URL that users use to log into RT. =item C<--extension> OPTIONAL @@ -486,6 +208,16 @@ submitted to will be set to the value of $EXTENSION. By specifying is related to. "action" will allow the user to specify either "comment" or "correspond" in the address extension. +=item C<--debug> OPTIONAL + +Print debugging output to standard error + + +=item C<--timeout> OPTIONAL + +Configure the timeout for posting the message to the web server. The +default timeout is 3 minutes (180 seconds). + =head1 DESCRIPTION @@ -554,6 +286,7 @@ several parameters: =item Message A C<MIME::Entity> object representing the email + =item CurrentUser An C<RT::CurrentUser> object diff --git a/rt/bin/rt.in b/rt/bin/rt.in new file mode 100644 index 000000000..d12460b06 --- /dev/null +++ b/rt/bin/rt.in @@ -0,0 +1,1890 @@ +#!@PERL@ -w +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +# Designed and implemented for Best Practical Solutions, LLC by +# Abhijit Menon-Sen <ams@wiw.org> + +use strict; + +# This program is intentionally written to have as few non-core module +# dependencies as possible. It should stay that way. + +use Cwd; +use LWP; +use Text::ParseWords; +use HTTP::Request::Common; + +# We derive configuration information from hardwired defaults, dotfiles, +# and the RT* environment variables (in increasing order of precedence). +# Session information is stored in ~/.rt_sessions. + +my $VERSION = 0.02; +my $HOME = eval{(getpwuid($<))[7]} + || $ENV{HOME} || $ENV{LOGDIR} || $ENV{HOMEPATH} + || "."; +my %config = ( + ( + debug => 0, + user => eval{(getpwuid($<))[0]} || $ENV{USER} || $ENV{USERNAME}, + passwd => undef, + server => 'http://localhost/rt/', + query => undef, + orderby => undef, + ), + config_from_file($ENV{RTCONFIG} || ".rtrc"), + config_from_env() +); +my $session = new Session("$HOME/.rt_sessions"); +my $REST = "$config{server}/REST/1.0"; + +sub whine; +sub DEBUG { warn @_ if $config{debug} >= shift } + +# These regexes are used by command handlers to parse arguments. +# (XXX: Ask Autrijus how i18n changes these definitions.) + +my $name = '[\w.-]+'; +my $field = '[a-zA-Z][a-zA-Z0-9_-]*'; +my $label = '[a-zA-Z0-9@_.+-]+'; +my $labels = "(?:$label,)*$label"; +my $idlist = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+'; + +# Our command line looks like this: +# +# rt <action> [options] [arguments] +# +# We'll parse just enough of it to decide upon an action to perform, and +# leave the rest to per-action handlers to interpret appropriately. + +my %handlers = ( +# handler => [ ...aliases... ], + version => ["version", "ver"], + shell => ["shell"], + logout => ["logout"], + help => ["help", "man"], + show => ["show", "cat"], + edit => ["create", "edit", "new", "ed"], + list => ["search", "list", "ls"], + comment => ["comment", "correspond"], + link => ["link", "ln"], + merge => ["merge"], + grant => ["grant", "revoke"], +); + +my %actions; +foreach my $fn (keys %handlers) { + foreach my $alias (@{ $handlers{$fn} }) { + $actions{$alias} = \&{"$fn"}; + } +} + +# Once we find and call an appropriate handler, we're done. + +sub handler { + my $action; + + if (@ARGV && exists $actions{$ARGV[0]}) { + $action = shift @ARGV; + } + $actions{$action || "help"}->($action || ()); +} + +handler(); +exit; + +# Handler functions. +# ------------------ +# +# The following subs are handlers for each entry in %actions. + +sub shell { + $|=1; + print "rt> "; + while (<>) { + chomp; + next if /^#/ || /^\s*$/; + + @ARGV = shellwords($_); + handler(); + print "rt> "; + } + print "\n"; +} + +sub version { + print "rt $VERSION\n"; +} + +sub logout { + submit("$REST/logout") if defined $session->cookie; +} + +my %help; +sub help { + my ($action, $type) = @_; + my $key; + + # What help topics do we know about? + if (!%help) { + local $/ = undef; + foreach my $item (@{ Form::parse(<DATA>) }) { + my $title = $item->[2]{Title}; + my @titles = ref $title eq 'ARRAY' ? @$title : $title; + + foreach $title (grep $_, @titles) { + $help{$title} = $item->[2]{Text}; + } + } + } + + # What does the user want help with? + undef $action if ($action && $actions{$action} eq \&help); + unless ($action || $type) { + # If we don't know, we'll look for clues in @ARGV. + foreach (@ARGV) { + if (exists $help{$_}) { $key = $_; last; } + } + unless ($key) { + # Tolerate possibly plural words. + foreach (@ARGV) { + if ($_ =~ s/s$// && exists $help{$_}) { $key = $_; last; } + } + } + } + + if ($type && $action) { + $key = "$type.$action"; + } + $key ||= $type || $action || "introduction"; + + # Find a suitable topic to display. + while (!exists $help{$key}) { + if ($type && $action) { + if ($key eq "$type.$action") { $key = $action; } + elsif ($key eq $action) { $key = $type; } + else { $key = "introduction"; } + } + else { + $key = "introduction"; + } + } + + print STDERR $help{$key}, "\n\n"; +} + +# Displays a list of objects that match some specified condition. + +sub list { + my ($q, $type, %data); + my $orderby = $config{orderby}; + + if ($config{orderby}) { + $data{orderby} = $config{orderby}; + } + my $bad = 0; + + while (@ARGV) { + $_ = shift @ARGV; + + if (/^-t$/) { + $bad = 1, last unless defined($type = get_type_argument()); + } + elsif (/^-S$/) { + $bad = 1, last unless get_var_argument(\%data); + } + elsif (/^-o$/) { + $data{'orderby'} = shift @ARGV; + } + elsif (/^-([isl])$/) { + $data{format} = $1; + } + elsif (/^-f$/) { + if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) { + whine "No valid field list in '-f $ARGV[0]'."; + $bad = 1; last; + } + $data{fields} = shift @ARGV; + } + elsif (!defined $q && !/^-/) { + $q = $_; + } + else { + my $datum = /^-/ ? "option" : "argument"; + whine "Unrecognised $datum '$_'."; + $bad = 1; last; + } + } + if (!defined $q) { + $q = $config{query}; + } + + $type ||= "ticket"; + unless ($type && defined $q) { + my $item = $type ? "query string" : "object type"; + whine "No $item specified."; + $bad = 1; + } + return help("list", $type) if $bad; + + my $r = submit("$REST/search/$type", { query => $q, %data }); + print $r->content; +} + +# Displays selected information about a single object. + +sub show { + my ($type, @objects, %data); + my $slurped = 0; + my $bad = 0; + + while (@ARGV) { + $_ = shift @ARGV; + + if (/^-t$/) { + $bad = 1, last unless defined($type = get_type_argument()); + } + elsif (/^-S$/) { + $bad = 1, last unless get_var_argument(\%data); + } + elsif (/^-([isl])$/) { + $data{format} = $1; + } + elsif (/^-$/ && !$slurped) { + chomp(my @lines = <STDIN>); + foreach (@lines) { + unless (is_object_spec($_, $type)) { + whine "Invalid object on STDIN: '$_'."; + $bad = 1; last; + } + push @objects, $_; + } + $slurped = 1; + } + elsif (/^-f$/) { + if ($ARGV[0] !~ /^(?:(?:$field,)*$field)$/) { + whine "No valid field list in '-f $ARGV[0]'."; + $bad = 1; last; + } + $data{fields} = shift @ARGV; + } + elsif (my $spec = is_object_spec($_, $type)) { + push @objects, $spec; + } + else { + my $datum = /^-/ ? "option" : "argument"; + whine "Unrecognised $datum '$_'."; + $bad = 1; last; + } + } + + unless (@objects) { + whine "No objects specified."; + $bad = 1; + } + return help("show", $type) if $bad; + + my $r = submit("$REST/show", { id => \@objects, %data }); + print $r->content; +} + +# To create a new object, we ask the server for a form with the defaults +# filled in, allow the user to edit it, and send the form back. +# +# To edit an object, we must ask the server for a form representing that +# object, make changes requested by the user (either on the command line +# or interactively via $EDITOR), and send the form back. + +sub edit { + my ($action) = @_; + my (%data, $type, @objects); + my ($cl, $text, $edit, $input, $output); + + use vars qw(%set %add %del); + %set = %add = %del = (); + my $slurped = 0; + my $bad = 0; + + while (@ARGV) { + $_ = shift @ARGV; + + if (/^-e$/) { $edit = 1 } + elsif (/^-i$/) { $input = 1 } + elsif (/^-o$/) { $output = 1 } + elsif (/^-t$/) { + $bad = 1, last unless defined($type = get_type_argument()); + } + elsif (/^-S$/) { + $bad = 1, last unless get_var_argument(\%data); + } + elsif (/^-$/ && !($slurped || $input)) { + chomp(my @lines = <STDIN>); + foreach (@lines) { + unless (is_object_spec($_, $type)) { + whine "Invalid object on STDIN: '$_'."; + $bad = 1; last; + } + push @objects, $_; + } + $slurped = 1; + } + elsif (/^set$/i) { + my $vars = 0; + + while (@ARGV && $ARGV[0] =~ /^($field)([+-]?=)(.*)$/) { + my ($key, $op, $val) = ($1, $2, $3); + my $hash = ($op eq '=') ? \%set : ($op =~ /^\+/) ? \%add : \%del; + + vpush($hash, lc $key, $val); + shift @ARGV; + $vars++; + } + unless ($vars) { + whine "No variables to set."; + $bad = 1; last; + } + $cl = $vars; + } + elsif (/^(?:add|del)$/i) { + my $vars = 0; + my $hash = ($_ eq "add") ? \%add : \%del; + + while (@ARGV && $ARGV[0] =~ /^($field)=(.*)$/) { + my ($key, $val) = ($1, $2); + + vpush($hash, lc $key, $val); + shift @ARGV; + $vars++; + } + unless ($vars) { + whine "No variables to set."; + $bad = 1; last; + } + $cl = $vars; + } + elsif (my $spec = is_object_spec($_, $type)) { + push @objects, $spec; + } + else { + my $datum = /^-/ ? "option" : "argument"; + whine "Unrecognised $datum '$_'."; + $bad = 1; last; + } + } + + if ($action =~ /^ed(?:it)?$/) { + unless (@objects) { + whine "No objects specified."; + $bad = 1; + } + } + else { + if (@objects) { + whine "You shouldn't specify objects as arguments to $action."; + $bad = 1; + } + unless ($type) { + whine "What type of object do you want to create?"; + $bad = 1; + } + @objects = ("$type/new"); + } + return help($action, $type) if $bad; + + # We need a form to make changes to. We usually ask the server for + # one, but we can avoid that if we are fed one on STDIN, or if the + # user doesn't want to edit the form by hand, and the command line + # specifies only simple variable assignments. + + if ($input) { + local $/ = undef; + $text = <STDIN>; + } + elsif ($edit || %add || %del || !$cl) { + my $r = submit("$REST/show", { id => \@objects, format => 'l' }); + $text = $r->content; + } + + # If any changes were specified on the command line, apply them. + if ($cl) { + if ($text) { + # We're updating forms from the server. + my $forms = Form::parse($text); + + foreach my $form (@$forms) { + my ($c, $o, $k, $e) = @$form; + my ($key, $val); + + next if ($e || !@$o); + + local %add = %add; + local %del = %del; + local %set = %set; + + # Make changes to existing fields. + foreach $key (@$o) { + if (exists $add{lc $key}) { + $val = delete $add{lc $key}; + vpush($k, $key, $val); + $k->{$key} = vsplit($k->{$key}) if $val =~ /[,\n]/; + } + if (exists $del{lc $key}) { + $val = delete $del{lc $key}; + my %val = map {$_=>1} @{ vsplit($val) }; + $k->{$key} = vsplit($k->{$key}); + @{$k->{$key}} = grep {!exists $val{$_}} @{$k->{$key}}; + } + if (exists $set{lc $key}) { + $k->{$key} = delete $set{lc $key}; + } + } + + # Then update the others. + foreach $key (keys %set) { vpush($k, $key, $set{$key}) } + foreach $key (keys %add) { + vpush($k, $key, $add{$key}); + $k->{$key} = vsplit($k->{$key}); + } + push @$o, (keys %add, keys %set); + } + + $text = Form::compose($forms); + } + else { + # We're rolling our own set of forms. + my @forms; + foreach (@objects) { + my ($type, $ids, $args) = + m{^($name)/($idlist|$labels)(?:(/.*))?$}o; + + $args ||= ""; + foreach my $obj (expand_list($ids)) { + my %set = (%set, id => "$type/$obj$args"); + push @forms, ["", [keys %set], \%set]; + } + } + $text = Form::compose(\@forms); + } + } + + if ($output) { + print $text; + return; + } + + my $synerr = 0; + +EDIT: + # We'll let the user edit the form before sending it to the server, + # unless we have enough information to submit it non-interactively. + if ($edit || (!$input && !$cl)) { + my $newtext = vi($text); + # We won't resubmit a bad form unless it was changed. + $text = ($synerr && $newtext eq $text) ? undef : $newtext; + } + + if ($text) { + my $r = submit("$REST/edit", {content => $text, %data}); + if ($r->code == 409) { + # If we submitted a bad form, we'll give the user a chance + # to correct it and resubmit. + if ($edit || (!$input && !$cl)) { + $text = $r->content; + $synerr = 1; + goto EDIT; + } + else { + print $r->content; + return; + } + } + print $r->content; + } +} + +# We roll "comment" and "correspond" into the same handler. + +sub comment { + my ($action) = @_; + my (%data, $id, @files, @bcc, @cc, $msg, $wtime, $edit); + my $bad = 0; + + while (@ARGV) { + $_ = shift @ARGV; + + if (/^-e$/) { + $edit = 1; + } + elsif (/^-[abcmw]$/) { + unless (@ARGV) { + whine "No argument specified with $_."; + $bad = 1; last; + } + + if (/-a/) { + unless (-f $ARGV[0] && -r $ARGV[0]) { + whine "Cannot read attachment: '$ARGV[0]'."; + return; + } + push @files, shift @ARGV; + } + elsif (/-([bc])/) { + my $a = $_ eq "-b" ? \@bcc : \@cc; + @$a = split /\s*,\s*/, shift @ARGV; + } + elsif (/-m/) { + $msg = shift @ARGV; + if ( $msg =~ /^-$/ ) { + undef $msg; + while (<STDIN>) { $msg .= $_ } + } + } + + elsif (/-w/) { $wtime = shift @ARGV } + } + elsif (!$id && m|^(?:ticket/)?($idlist)$|) { + $id = $1; + } + else { + my $datum = /^-/ ? "option" : "argument"; + whine "Unrecognised $datum '$_'."; + $bad = 1; last; + } + } + + unless ($id) { + whine "No object specified."; + $bad = 1; + } + return help($action, "ticket") if $bad; + + my $form = [ + "", + [ "Ticket", "Action", "Cc", "Bcc", "Attachment", "TimeWorked", "Text" ], + { + Ticket => $id, + Action => $action, + Cc => [ @cc ], + Bcc => [ @bcc ], + Attachment => [ @files ], + TimeWorked => $wtime || '', + Text => $msg || '', + Status => '' + } + ]; + + my $text = Form::compose([ $form ]); + + if ($edit || !$msg) { + my $error = 0; + my ($c, $o, $k, $e); + + do { + my $ntext = vi($text); + return if ($error && $ntext eq $text); + $text = $ntext; + $form = Form::parse($text); + $error = 0; + + ($c, $o, $k, $e) = @{ $form->[0] }; + if ($e) { + $error = 1; + $c = "# Syntax error."; + goto NEXT; + } + elsif (!@$o) { + return; + } + @files = @{ vsplit($k->{Attachment}) }; + + NEXT: + $text = Form::compose([[$c, $o, $k, $e]]); + } while ($error); + } + + my $i = 1; + foreach my $file (@files) { + $data{"attachment_$i"} = bless([ $file ], "Attachment"); + $i++; + } + $data{content} = $text; + + my $r = submit("$REST/ticket/comment/$id", \%data); + print $r->content; +} + +# Merge one ticket into another. + +sub merge { + my @id; + my $bad = 0; + + while (@ARGV) { + $_ = shift @ARGV; + + if (/^\d+$/) { + push @id, $_; + } + else { + whine "Unrecognised argument: '$_'."; + $bad = 1; last; + } + } + + unless (@id == 2) { + my $evil = @id > 2 ? "many" : "few"; + whine "Too $evil arguments specified."; + $bad = 1; + } + return help("merge", "ticket") if $bad; + + my $r = submit("$REST/ticket/merge/$id[0]", {into => $id[1]}); + print $r->content; +} + +# Link one ticket to another. + +sub link { + my ($bad, $del, %data) = (0, 0, ()); + my %ltypes = map { lc $_ => $_ } qw(DependsOn DependedOnBy RefersTo + ReferredToBy HasMember MemberOf); + + while (@ARGV && $ARGV[0] =~ /^-/) { + $_ = shift @ARGV; + + if (/^-d$/) { + $del = 1; + } + else { + whine "Unrecognised option: '$_'."; + $bad = 1; last; + } + } + + if (@ARGV == 3) { + my ($from, $rel, $to) = @ARGV; + if ($from !~ /^\d+$/ || $to !~ /^\d+$/) { + my $bad = $from =~ /^\d+$/ ? $to : $from; + whine "Invalid ticket ID '$bad' specified."; + $bad = 1; + } + unless (exists $ltypes{lc $rel}) { + whine "Invalid link '$rel' specified."; + $bad = 1; + } + %data = (id => $from, rel => $rel, to => $to, del => $del); + } + else { + my $bad = @ARGV < 3 ? "few" : "many"; + whine "Too $bad arguments specified."; + $bad = 1; + } + return help("link", "ticket") if $bad; + + my $r = submit("$REST/ticket/link", \%data); + print $r->content; +} + +# Grant/revoke a user's rights. + +sub grant { + my ($cmd) = @_; + + my $revoke = 0; + while (@ARGV) { + } + + $revoke = 1 if $cmd->{action} eq 'revoke'; +} + +# Client <-> Server communication. +# -------------------------------- +# +# This function composes and sends an HTTP request to the RT server, and +# interprets the response. It takes a request URI, and optional request +# data (a string, or a reference to a set of key-value pairs). + +sub submit { + my ($uri, $content) = @_; + my ($req, $data); + my $ua = new LWP::UserAgent(agent => "RT/3.0b", env_proxy => 1); + + # Did the caller specify any data to send with the request? + $data = []; + if (defined $content) { + unless (ref $content) { + # If it's just a string, make sure LWP handles it properly. + # (By pretending that it's a file!) + $content = [ content => [undef, "", Content => $content] ]; + } + elsif (ref $content eq 'HASH') { + my @data; + foreach my $k (keys %$content) { + if (ref $content->{$k} eq 'ARRAY') { + foreach my $v (@{ $content->{$k} }) { + push @data, $k, $v; + } + } + else { push @data, $k, $content->{$k} } + } + $content = \@data; + } + $data = $content; + } + + # Should we send authentication information to start a new session? + if (!defined $session->cookie) { + push @$data, ( user => $config{user} ); + push @$data, ( pass => $config{passwd} || read_passwd() ); + } + + # Now, we construct the request. + if (@$data) { + $req = POST($uri, $data, Content_Type => 'form-data'); + } + else { + $req = GET($uri); + } + $session->add_cookie_header($req); + + # Then we send the request and parse the response. + DEBUG(3, $req->as_string); + my $res = $ua->request($req); + DEBUG(3, $res->as_string); + + if ($res->is_success) { + # The content of the response we get from the RT server consists + # of an HTTP-like status line followed by optional header lines, + # a blank line, and arbitrary text. + + my ($head, $text) = split /\n\n/, $res->content, 2; + my ($status, @headers) = split /\n/, $head; + $text =~ s/\n*$/\n/ if ($text); + + # "RT/3.0.1 401 Credentials required" + if ($status !~ m#^RT/\d+(?:\S+) (\d+) ([\w\s]+)$#) { + warn "rt: Malformed RT response from $config{server}.\n"; + warn "(Rerun with RTDEBUG=3 for details.)\n" if $config{debug} < 3; + exit -1; + } + + # Our caller can pretend that the server returned a custom HTTP + # response code and message. (Doing that directly is apparently + # not sufficiently portable and uncomplicated.) + $res->code($1); + $res->message($2); + $res->content($text); + $session->update($res) if ($res->is_success || $res->code != 401); + + if (!$res->is_success) { + # We can deal with authentication failures ourselves. Either + # we sent invalid credentials, or our session has expired. + if ($res->code == 401) { + my %d = @$data; + if (exists $d{user}) { + warn "rt: Incorrect username or password.\n"; + exit -1; + } + elsif ($req->header("Cookie")) { + # We'll retry the request with credentials, unless + # we only wanted to logout in the first place. + $session->delete; + return submit(@_) unless $uri eq "$REST/logout"; + } + } + # Conflicts should be dealt with by the handler and user. + # For anything else, we just die. + elsif ($res->code != 409) { + warn "rt: ", $res->content; + exit; + } + } + } + else { + warn "rt: Server error: ", $res->message, " (", $res->code, ")\n"; + exit -1; + } + + return $res; +} + +# Session management. +# ------------------- +# +# Maintains a list of active sessions in the ~/.rt_sessions file. +{ + package Session; + my ($s, $u); + + # Initialises the session cache. + sub new { + my ($class, $file) = @_; + my $self = { + file => $file || "$HOME/.rt_sessions", + sids => { } + }; + + # The current session is identified by the currently configured + # server and user. + ($s, $u) = @config{"server", "user"}; + + bless $self, $class; + $self->load(); + + return $self; + } + + # Returns the current session cookie. + sub cookie { + my ($self) = @_; + my $cookie = $self->{sids}{$s}{$u}; + return defined $cookie ? "RT_SID_$cookie" : undef; + } + + # Deletes the current session cookie. + sub delete { + my ($self) = @_; + delete $self->{sids}{$s}{$u}; + } + + # Adds a Cookie header to an outgoing HTTP request. + sub add_cookie_header { + my ($self, $request) = @_; + my $cookie = $self->cookie(); + + $request->header(Cookie => $cookie) if defined $cookie; + } + + # Extracts the Set-Cookie header from an HTTP response, and updates + # session information accordingly. + sub update { + my ($self, $response) = @_; + my $cookie = $response->header("Set-Cookie"); + + if (defined $cookie && $cookie =~ /^RT_SID_(.[^;,\s]+=[0-9A-Fa-f]+);/) { + $self->{sids}{$s}{$u} = $1; + } + } + + # Loads the session cache from the specified file. + sub load { + my ($self, $file) = @_; + $file ||= $self->{file}; + local *F; + + open(F, $file) && do { + $self->{file} = $file; + my $sids = $self->{sids} = {}; + while (<F>) { + chomp; + next if /^$/ || /^#/; + next unless m#^https?://[^ ]+ \w+ [^;,\s]+=[0-9A-Fa-f]+$#; + my ($server, $user, $cookie) = split / /, $_; + $sids->{$server}{$user} = $cookie; + } + return 1; + }; + return 0; + } + + # Writes the current session cache to the specified file. + sub save { + my ($self, $file) = shift; + $file ||= $self->{file}; + local *F; + + open(F, ">$file") && do { + my $sids = $self->{sids}; + foreach my $server (keys %$sids) { + foreach my $user (keys %{ $sids->{$server} }) { + my $sid = $sids->{$server}{$user}; + if (defined $sid) { + print F "$server $user $sid\n"; + } + } + } + close(F); + chmod 0600, $file; + return 1; + }; + return 0; + } + + sub DESTROY { + my $self = shift; + $self->save; + } +} + +# Form handling. +# -------------- +# +# Forms are RFC822-style sets of (field, value) specifications with some +# initial comments and interspersed blank lines allowed for convenience. +# Sets of forms are separated by --\n (in a cheap parody of MIME). +# +# Each form is parsed into an array with four elements: commented text +# at the start of the form, an array with the order of keys, a hash with +# key/value pairs, and optional error text if the form syntax was wrong. + +# Returns a reference to an array of parsed forms. +sub Form::parse { + my $state = 0; + my @forms = (); + my @lines = split /\n/, $_[0]; + my ($c, $o, $k, $e) = ("", [], {}, ""); + + LINE: + while (@lines) { + my $line = shift @lines; + + next LINE if $line eq ''; + + if ($line eq '--') { + # We reached the end of one form. We'll ignore it if it was + # empty, and store it otherwise, errors and all. + if ($e || $c || @$o) { + push @forms, [ $c, $o, $k, $e ]; + $c = ""; $o = []; $k = {}; $e = ""; + } + $state = 0; + } + elsif ($state != -1) { + if ($state == 0 && $line =~ /^#/) { + # Read an optional block of comments (only) at the start + # of the form. + $state = 1; + $c = $line; + while (@lines && $lines[0] =~ /^#/) { + $c .= "\n".shift @lines; + } + $c .= "\n"; + } + elsif ($state <= 1 && $line =~ /^($field):(?:\s+(.*))?$/) { + # Read a field: value specification. + my $f = $1; + my @v = ($2 || ()); + + # Read continuation lines, if any. + while (@lines && ($lines[0] eq '' || $lines[0] =~ /^\s+/)) { + push @v, shift @lines; + } + pop @v while (@v && $v[-1] eq ''); + + # Strip longest common leading indent from text. + my $ws = ""; + foreach my $ls (map {/^(\s+)/} @v[1..$#v]) { + $ws = $ls if (!$ws || length($ls) < length($ws)); + } + s/^$ws// foreach @v; + + push(@$o, $f) unless exists $k->{$f}; + vpush($k, $f, join("\n", @v)); + + $state = 1; + } + elsif ($line !~ /^#/) { + # We've found a syntax error, so we'll reconstruct the + # form parsed thus far, and add an error marker. (>>) + $state = -1; + $e = Form::compose([[ "", $o, $k, "" ]]); + $e.= $line =~ /^>>/ ? "$line\n" : ">> $line\n"; + } + } + else { + # We saw a syntax error earlier, so we'll accumulate the + # contents of this form until the end. + $e .= "$line\n"; + } + } + push(@forms, [ $c, $o, $k, $e ]) if ($e || $c || @$o); + + foreach my $l (keys %$k) { + $k->{$l} = vsplit($k->{$l}) if (ref $k->{$l} eq 'ARRAY'); + } + + return \@forms; +} + +# Returns text representing a set of forms. +sub Form::compose { + my ($forms) = @_; + my @text; + + foreach my $form (@$forms) { + my ($c, $o, $k, $e) = @$form; + my $text = ""; + + if ($c) { + $c =~ s/\n*$/\n/; + $text = "$c\n"; + } + if ($e) { + $text .= $e; + } + elsif ($o) { + my @lines; + + foreach my $key (@$o) { + my ($line, $sp); + my $v = $k->{$key}; + my @values = ref $v eq 'ARRAY' ? @$v : $v; + + $sp = " "x(length("$key: ")); + $sp = " "x4 if length($sp) > 16; + + foreach $v (@values) { + if ($v =~ /\n/) { + $v =~ s/^/$sp/gm; + $v =~ s/^$sp//; + + if ($line) { + push @lines, "$line\n\n"; + $line = ""; + } + elsif (@lines && $lines[-1] !~ /\n\n$/) { + $lines[-1] .= "\n"; + } + push @lines, "$key: $v\n\n"; + } + elsif ($line && + length($line)+length($v)-rindex($line, "\n") >= 70) + { + $line .= ",\n$sp$v"; + } + else { + $line = $line ? "$line, $v" : "$key: $v"; + } + } + + $line = "$key:" unless @values; + if ($line) { + if ($line =~ /\n/) { + if (@lines && $lines[-1] !~ /\n\n$/) { + $lines[-1] .= "\n"; + } + $line .= "\n"; + } + push @lines, "$line\n"; + } + } + + $text .= join "", @lines; + } + else { + chomp $text; + } + push @text, $text; + } + + return join "\n--\n\n", @text; +} + +# Configuration. +# -------------- + +# Returns configuration information from the environment. +sub config_from_env { + my %env; + + foreach my $k ("DEBUG", "USER", "PASSWD", "SERVER", "QUERY", "ORDERBY") { + if (exists $ENV{"RT$k"}) { + $env{lc $k} = $ENV{"RT$k"}; + } + } + + return %env; +} + +# Finds a suitable configuration file and returns information from it. +sub config_from_file { + my ($rc) = @_; + + if ($rc =~ m#^/#) { + # We'll use an absolute path if we were given one. + return parse_config_file($rc); + } + else { + # Otherwise we'll use the first file we can find in the current + # directory, or in one of its (increasingly distant) ancestors. + + my @dirs = split /\//, cwd; + while (@dirs) { + my $file = join('/', @dirs, $rc); + if (-r $file) { + return parse_config_file($file); + } + + # Remove the last directory component each time. + pop @dirs; + } + + # Still nothing? We'll fall back to some likely defaults. + for ("$HOME/$rc", "/etc/rt.conf") { + return parse_config_file($_) if (-r $_); + } + } + + return (); +} + +# Makes a hash of the specified configuration file. +sub parse_config_file { + my %cfg; + my ($file) = @_; + local $_; # $_ may be aliased to a constant, from line 1163 + + open(CFG, $file) && do { + while (<CFG>) { + chomp; + next if (/^#/ || /^\s*$/); + + if (/^(user|passwd|server|query|orderby)\s+(.*)\s?$/) { + $cfg{$1} = $2; + } + else { + die "rt: $file:$.: unknown configuration directive.\n"; + } + } + }; + + return %cfg; +} + +# Helper functions. +# ----------------- + +sub whine { + my $sub = (caller(1))[3]; + $sub =~ s/^main:://; + warn "rt: $sub: @_\n"; + return; +} + +sub read_passwd { + eval 'require Term::ReadKey'; + if ($@) { + die "No password specified (and Term::ReadKey not installed).\n"; + } + + print "Password: "; + Term::ReadKey::ReadMode('noecho'); + chomp(my $passwd = Term::ReadKey::ReadLine(0)); + Term::ReadKey::ReadMode('restore'); + print "\n"; + + return $passwd; +} + +sub vi { + my ($text) = @_; + my $file = "/tmp/rt.form.$$"; + my $editor = $ENV{EDITOR} || $ENV{VISUAL} || "vi"; + + local *F; + local $/ = undef; + + open(F, ">$file") || die "$file: $!\n"; print F $text; close(F); + system($editor, $file) && die "Couldn't run $editor.\n"; + open(F, $file) || die "$file: $!\n"; $text = <F>; close(F); + unlink($file); + + return $text; +} + +# Add a value to a (possibly multi-valued) hash key. +sub vpush { + my ($hash, $key, $val) = @_; + my @val = ref $val eq 'ARRAY' ? @$val : $val; + + if (exists $hash->{$key}) { + unless (ref $hash->{$key} eq 'ARRAY') { + my @v = $hash->{$key} ne '' ? $hash->{$key} : (); + $hash->{$key} = \@v; + } + push @{ $hash->{$key} }, @val; + } + else { + $hash->{$key} = $val; + } +} + +# "Normalise" a hash key that's known to be multi-valued. +sub vsplit { + my ($val) = @_; + my ($word, @words); + my @values = ref $val eq 'ARRAY' ? @$val : $val; + + foreach my $line (map {split /\n/} @values) { + # XXX: This should become a real parser, Ã la Text::ParseWords. + $line =~ s/^\s+//; + $line =~ s/\s+$//; + push @words, split /\s*,\s*/, $line; + } + + return \@words; +} + +sub expand_list { + my ($list) = @_; + my ($elt, @elts, %elts); + + foreach $elt (split /,/, $list) { + if ($elt =~ /^(\d+)-(\d+)$/) { push @elts, ($1..$2) } + else { push @elts, $elt } + } + + @elts{@elts}=(); + return sort {$a<=>$b} keys %elts; +} + +sub get_type_argument { + my $type; + + if (@ARGV) { + $type = shift @ARGV; + unless ($type =~ /^[A-Za-z0-9_.-]+$/) { + # We want whine to mention our caller, not us. + @_ = ("Invalid type '$type' specified."); + goto &whine; + } + } + else { + @_ = ("No type argument specified with -t."); + goto &whine; + } + + $type =~ s/s$//; # "Plural". Ugh. + return $type; +} + +sub get_var_argument { + my ($data) = @_; + + if (@ARGV) { + my $kv = shift @ARGV; + if (my ($k, $v) = $kv =~ /^($field)=(.*)$/) { + push @{ $data->{$k} }, $v; + } + else { + @_ = ("Invalid variable specification: '$kv'."); + goto &whine; + } + } + else { + @_ = ("No variable argument specified with -S."); + goto &whine; + } +} + +sub is_object_spec { + my ($spec, $type) = @_; + + $spec =~ s|^(?:$type/)?|$type/| if defined $type; + return $spec if ($spec =~ m{^$name/(?:$idlist|$labels)(?:/.*)?$}o); + return; +} + +__DATA__ + +Title: intro +Title: introduction +Text: + + ** THIS IS AN UNSUPPORTED PREVIEW RELEASE ** + ** PLEASE REPORT BUGS TO rt-bugs@fsck.com ** + + This is a command-line interface to RT 3. + + It allows you to interact with an RT server over HTTP, and offers an + interface to RT's functionality that is better-suited to automation + and integration with other tools. + + In general, each invocation of this program should specify an action + to perform on one or more objects, and any other arguments required + to complete the desired action. + + For more information: + + - rt help actions (a list of possible actions) + - rt help objects (how to specify objects) + - rt help usage (syntax information) + + - rt help config (configuration details) + - rt help examples (a few useful examples) + - rt help topics (a list of help topics) + +-- + +Title: usage +Title: syntax +Text: + + Syntax: + + rt <action> [options] [arguments] + + Each invocation of this program must specify an action (e.g. "edit", + "create"), options to modify behaviour, and other arguments required + by the specified action. (For example, most actions expect a list of + numeric object IDs to act upon.) + + The details of the syntax and arguments for each action are given by + "rt help <action>". Some actions may be referred to by more than one + name ("create" is the same as "new", for example). + + Objects are identified by a type and an ID (which can be a name or a + number, depending on the type). For some actions, the object type is + implied (you can only comment on tickets); for others, the user must + specify it explicitly. See "rt help objects" for details. + + In syntax descriptions, mandatory arguments that must be replaced by + appropriate value are enclosed in <>, and optional arguments are + indicated by [] (for example, <action> and [options] above). + + For more information: + + - rt help objects (how to specify objects) + - rt help actions (a list of actions) + - rt help types (a list of object types) + +-- + +Title: conf +Title: config +Title: configuration +Text: + + This program has two major sources of configuration information: its + configuration files, and the environment. + + The program looks for configuration directives in a file named .rtrc + (or $RTCONFIG; see below) in the current directory, and then in more + distant ancestors, until it reaches /. If no suitable configuration + files are found, it will also check for ~/.rtrc and /etc/rt.conf. + + Configuration directives: + + The following directives may occur, one per line: + + - server <URL> URL to RT server. + - user <username> RT username. + - passwd <passwd> RT user's password. + - query <RT Query> Default RT Query for list action + - orderby <order> Default RT order for list action + + Blank and #-commented lines are ignored. + + Environment variables: + + The following environment variables override any corresponding + values defined in configuration files: + + - RTUSER + - RTPASSWD + - RTSERVER + - RTDEBUG Numeric debug level. (Set to 3 for full logs.) + - RTCONFIG Specifies a name other than ".rtrc" for the + configuration file. + - RTQUERY Default RT Query for rt list + - RTORDERBY Default order for rt list + +-- + +Title: objects +Text: + + Syntax: + + <type>/<id>[/<attributes>] + + Every object in RT has a type (e.g. "ticket", "queue") and a numeric + ID. Some types of objects can also be identified by name (like users + and queues). Furthermore, objects may have named attributes (such as + "ticket/1/history"). + + An object specification is like a path in a virtual filesystem, with + object types as top-level directories, object IDs as subdirectories, + and named attributes as further subdirectories. + + A comma-separated list of names, numeric IDs, or numeric ranges can + be used to specify more than one object of the same type. Note that + the list must be a single argument (i.e., no spaces). For example, + "user/root,1-3,5,7-10,ams" is a list of ten users; the same list + can also be written as "user/ams,root,1,2,3,5,7,8-10". + + Examples: + + ticket/1 + ticket/1/attachments + ticket/1/attachments/3 + ticket/1/attachments/3/content + ticket/1-3/links + ticket/1-3,5-7/history + + user/ams + user/ams/rights + user/ams,rai,1/rights + + For more information: + + - rt help <action> (action-specific details) + - rt help <type> (type-specific details) + +-- + +Title: actions +Title: commands +Text: + + You can currently perform the following actions on all objects: + + - list (list objects matching some condition) + - show (display object details) + - edit (edit object details) + - create (create a new object) + + Each type may define actions specific to itself; these are listed in + the help item about that type. + + For more information: + + - rt help <action> (action-specific details) + - rt help types (a list of possible types) + +-- + +Title: types +Text: + + You can currently operate on the following types of objects: + + - tickets + - users + - groups + - queues + + For more information: + + - rt help <type> (type-specific details) + - rt help objects (how to specify objects) + - rt help actions (a list of possible actions) + +-- + +Title: ticket +Text: + + Tickets are identified by a numeric ID. + + The following generic operations may be performed upon tickets: + + - list + - show + - edit + - create + + In addition, the following ticket-specific actions exist: + + - link + - merge + - comment + - correspond + + Attributes: + + The following attributes can be used with "rt show" or "rt edit" + to retrieve or edit other information associated with tickets: + + links A ticket's relationships with others. + history All of a ticket's transactions. + history/type/<type> Only a particular type of transaction. + history/id/<id> Only the transaction of the specified id. + attachments A list of attachments. + attachments/<id> The metadata for an individual attachment. + attachments/<id>/content The content of an individual attachment. + +-- + +Title: user +Title: group +Text: + + Users and groups are identified by name or numeric ID. + + The following generic operations may be performed upon them: + + - list + - show + - edit + - create + + In addition, the following type-specific actions exist: + + - grant + - revoke + + Attributes: + + The following attributes can be used with "rt show" or "rt edit" + to retrieve or edit other information associated with users and + groups: + + rights Global rights granted to this user. + rights/<queue> Queue rights for this user. + +-- + +Title: queue +Text: + + Queues are identified by name or numeric ID. + + Currently, they can be subjected to the following actions: + + - show + - edit + - create + +-- + +Title: logout +Text: + + Syntax: + + rt logout + + Terminates the currently established login session. You will need to + provide authentication credentials before you can continue using the + server. (See "rt help config" for details about authentication.) + +-- + +Title: ls +Title: list +Title: search +Text: + + Syntax: + + rt <ls|list|search> [options] "query string" + + Displays a list of objects matching the specified conditions. + ("ls", "list", and "search" are synonyms.) + + Conditions are expressed in the SQL-like syntax used internally by + RT3. (For more information, see "rt help query".) The query string + must be supplied as one argument. + + (Right now, the server doesn't support listing anything but tickets. + Other types will be supported in future; this client will be able to + take advantage of that support without any changes.) + + Options: + + The following options control how much information is displayed + about each matching object: + + -i Numeric IDs only. (Useful for |rt edit -; see examples.) + -s Short description. + -l Longer description. + + In addition, + + -o +/-<field> Orders the returned list by the specified field. + -S var=val Submits the specified variable with the request. + -t type Specifies the type of object to look for. (The + default is "ticket".) + + Examples: + + rt ls "Priority > 5 and Status='new'" + rt ls -o +Subject "Priority > 5 and Status='new'" + rt ls -o -Created "Priority > 5 and Status='new'" + rt ls -i "Priority > 5"|rt edit - set status=resolved + rt ls -t ticket "Subject like '[PATCH]%'" + +-- + +Title: show +Text: + + Syntax: + + rt show [options] <object-ids> + + Displays details of the specified objects. + + For some types, object information is further classified into named + attributes (for example, "1-3/links" is a valid ticket specification + that refers to the links for tickets 1-3). Consult "rt help <type>" + and "rt help objects" for further details. + + This command writes a set of forms representing the requested object + data to STDOUT. + + Options: + + - Read IDs from STDIN instead of the command-line. + -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. + + 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 -t user 2 + +-- + +Title: new +Title: edit +Title: create +Text: + + Syntax: + + rt edit [options] <object-ids> set field=value [field=value] ... + add field=value [field=value] ... + del field=value [field=value] ... + + Edits information corresponding to the specified objects. + + If, instead of "edit", an action of "new" or "create" is specified, + then a new object is created. In this case, no numeric object IDs + may be specified, but the syntax and behaviour remain otherwise + unchanged. + + This command typically starts an editor to allow you to edit object + data in a form for submission. If you specified enough information + on the command-line, however, it will make the submission directly. + + The command line may specify field-values in three different ways. + "set" sets the named field to the given value, "add" adds a value + to a multi-valued field, and "del" deletes the corresponding value. + Each "field=value" specification must be given as a single argument. + + For some types, object information is further classified into named + attributes (for example, "1-3/links" is a valid ticket specification + that refers to the links for tickets 1-3). These attributes may also + be edited. Consult "rt help <type>" and "rt help object" for further + details. + + Options: + + - Read numeric IDs from STDIN instead of the command-line. + (Useful with rt ls ... | rt edit -; see examples below.) + -i Read a completed form from STDIN before submitting. + -o Dump the completed form to STDOUT instead of submitting. + -e Allows you to edit the form even if the command-line has + enough information to make a submission directly. + -S var=val + Submits the specified variable with the request. + -t type Specifies object type. + + Examples: + + # Interactive (starts $EDITOR with a form). + rt edit ticket/3 + rt create -t ticket + + # Non-interactive. + rt edit ticket/1-3 add cc=foo@example.com set priority=3 + rt ls -t tickets -i 'Priority > 5' | rt edit - set status=resolved + rt edit ticket/4 set priority=3 owner=bar@example.com \ + add cc=foo@example.com bcc=quux@example.net + rt create -t ticket subject='new ticket' priority=10 \ + add cc=foo@example.com + +-- + +Title: comment +Title: correspond +Text: + + Syntax: + + rt <comment|correspond> [options] <ticket-id> + + Adds a comment (or correspondence) to the specified ticket (the only + difference being that comments aren't sent to the requestors.) + + This command will typically start an editor and allow you to type a + comment into a form. If, however, you specified all the necessary + information on the command line, it submits the comment directly. + + (See "rt help forms" for more information about forms.) + + Options: + + -m <text> Specify comment text. + -a <file> Attach a file to the comment. (May be used more + than once to attach multiple files.) + -c <addrs> A comma-separated list of Cc addresses. + -b <addrs> A comma-separated list of Bcc addresses. + -w <time> Specify the time spent working on this ticket. + -e Starts an editor before the submission, even if + arguments from the command line were sufficient. + + Examples: + + rt comment -m 'Not worth fixing.' -a stddisclaimer.h 23 + +-- + +Title: merge +Text: + + Syntax: + + rt merge <from-id> <to-id> + + Merges the two specified tickets. + +-- + +Title: link +Text: + + Syntax: + + rt link [-d] <id-A> <link> <id-B> + + Creates (or, with -d, deletes) a link between the specified tickets. + The link can (irrespective of case) be any of: + + DependsOn/DependedOnBy: A depends upon B (or vice versa). + RefersTo/ReferredToBy: A refers to B (or vice versa). + MemberOf/HasMember: A is a member of B (or vice versa). + + To view a ticket's links, use "rt show ticket/3/links". (See + "rt help ticket" and "rt help show".) + + Options: + + -d Deletes the specified link. + + Examples: + + rt link 2 dependson 3 + rt link -d 4 referredtoby 6 # 6 no longer refers to 4 + +-- + +Title: grant +Title: revoke +Text: + +-- + +Title: query +Text: + + RT3 uses an SQL-like syntax to specify object selection constraints. + See the <RT:...> documentation for details. + + (XXX: I'm going to have to write it, aren't I?) + +-- + +Title: form +Title: forms +Text: + + This program uses RFC822 header-style forms to represent object data + in a form that's suitable for processing both by humans and scripts. + + A form is a set of (field, value) specifications, with some initial + commented text and interspersed blank lines allowed for convenience. + Field names may appear more than once in a form; a comma-separated + list of multiple field values may also be specified directly. + + Field values can be wrapped as in RFC822, with leading whitespace. + The longest sequence of leading whitespace common to all the lines + is removed (preserving further indentation). There is no limit on + the length of a value. + + Multiple forms are separated by a line containing only "--\n". + + (XXX: A more detailed specification will be provided soon. For now, + the server-side syntax checking will suffice.) + +-- + +Title: topics +Text: + + Use "rt help <topic>" for help on any of the following subjects: + + - tickets, users, groups, queues. + - show, edit, ls/list/search, new/create. + + - query (search query syntax) + - forms (form specification) + + - objects (how to specify objects) + - types (a list of object types) + - actions/commands (a list of actions) + - usage/syntax (syntax details) + - conf/config/configuration (configuration details) + - examples (a few useful examples) + +-- + +Title: example +Title: examples +Text: + + This section will be filled in with useful examples, once it becomes + more clear what examples may be useful. + + For the moment, please consult examples provided with each action. + +-- diff --git a/rt/bin/standalone_httpd.in b/rt/bin/standalone_httpd.in new file mode 100755 index 000000000..6ba799833 --- /dev/null +++ b/rt/bin/standalone_httpd.in @@ -0,0 +1,66 @@ +#!@PERL@ -w +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +use warnings; +use strict; + +BEGIN { + use lib( "@LOCAL_LIB_PATH@", "@RT_LIB_PATH@"); + use RT; + RT::LoadConfig(); + if ($RT::DevelMode) { require Module::Refresh; } +} + +RT::Init(); + +use RT::Interface::Web::Standalone; + +my $server = RT::Interface::Web::Standalone->new; +$server->port(shift @ARGV) if ($ARGV[0]); +$server->run(); + + diff --git a/rt/bin/webmux.pl b/rt/bin/webmux.pl deleted file mode 100755 index 21cb83f5e..000000000 --- a/rt/bin/webmux.pl +++ /dev/null @@ -1,125 +0,0 @@ -#!/usr/bin/perl -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK - -use strict; - -BEGIN { - $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need - $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'}; - $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'}; - $ENV{'ENV'} = '' if defined $ENV{'ENV'}; - $ENV{'IFS'} = '' if defined $ENV{'IFS'}; -} - -use lib ("/opt/rt3/local/lib", "/opt/rt3/lib"); -use RT; - -package RT::Mason; - -use CGI qw(-private_tempfiles); #bring this in before mason, to make sure we - #set private_tempfiles - -BEGIN { - if ($CGI::MOD_PERL) { - require HTML::Mason::ApacheHandler; - } - else { - require HTML::Mason::CGIHandler; - } -} - -use HTML::Mason; # brings in subpackages: Parser, Interp, etc. - -use vars qw($Nobody $SystemUser $r); - -#This drags in RT's config.pm -RT::LoadConfig(); - -use Carp; - -{ - package HTML::Mason::Commands; - use vars qw(%session); - - use RT::Tickets; - use RT::Transactions; - use RT::Users; - use RT::CurrentUser; - use RT::Templates; - use RT::Queues; - use RT::ScripActions; - use RT::ScripConditions; - use RT::Scrips; - use RT::Groups; - use RT::GroupMembers; - use RT::CustomFields; - use RT::CustomFieldValues; - use RT::TicketCustomFieldValues; - - use RT::Interface::Web; - use MIME::Entity; - use Text::Wrapper; - use CGI::Cookie; - use Time::ParseDate; - use HTML::Entities; -} - - -# Activate the following if running httpd as root (the normal case). -# Resets ownership of all files created by Mason at startup. -# Note that mysql uses DB for sessions, so there's no need to do this. -unless ($RT::DatabaseType =~ /(mysql|Pg)/) { - # Clean up our umask to protect session files - umask(0077); - -if ( $CGI::MOD_PERL) { - chown( Apache->server->uid, Apache->server->gid, [$RT::MasonSessionDir] ) - if Apache->server->can('uid'); - } - # Die if WebSessionDir doesn't exist or we can't write to it - stat($RT::MasonSessionDir); - die "Can't read and write $RT::MasonSessionDir" - unless ( ( -d _ ) and ( -r _ ) and ( -w _ ) ); -} - -my $ah = &RT::Interface::Web::NewApacheHandler() if $CGI::MOD_PERL; - -sub handler { - ($r) = @_; - - RT::Init(); - - # We don't need to handle non-text items - return -1 if defined( $r->content_type ) && $r->content_type !~ m|^text/|io; - - my %session; - my $status = $ah->handle_request($r); - undef (%session); - - $RT::Logger->crit("Transaction not committed. Usually indicates a software fault. Data loss may have occurred") if $RT::Handle->TransactionDepth; - return $status; -} - -1; diff --git a/rt/bin/webmux.pl.in b/rt/bin/webmux.pl.in index 12aad85b3..73b10143d 100644 --- a/rt/bin/webmux.pl.in +++ b/rt/bin/webmux.pl.in @@ -1,9 +1,15 @@ #!@PERL@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,110 +21,114 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} use strict; BEGIN { - $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need + $ENV{'PATH'} = '/bin:/usr/bin'; # or whatever you need $ENV{'CDPATH'} = '' if defined $ENV{'CDPATH'}; $ENV{'SHELL'} = '/bin/sh' if defined $ENV{'SHELL'}; $ENV{'ENV'} = '' if defined $ENV{'ENV'}; $ENV{'IFS'} = '' if defined $ENV{'IFS'}; + + use CGI qw(-private_tempfiles); #bring this in before mason, to make sure we + #set private_tempfiles + + die "RT does not support mod_perl 1.99. Please upgrade to mod_perl 2.0" + if $ENV{'MOD_PERL'} + and $ENV{'MOD_PERL'} =~ m{mod_perl/(?:1\.9)}; + } -use lib ("@LOCAL_LIB_PATH@", "@RT_LIB_PATH@"); +use lib ( "@LOCAL_LIB_PATH@", "@RT_LIB_PATH@" ); use RT; package RT::Mason; -use CGI qw(-private_tempfiles); #bring this in before mason, to make sure we - #set private_tempfiles +use vars qw($Nobody $SystemUser $Handler $r); +#This drags in RT's config.pm BEGIN { - if ($CGI::MOD_PERL) { - require HTML::Mason::ApacheHandler; - } - else { - require HTML::Mason::CGIHandler; - } + RT::LoadConfig(); + if ($RT::DevelMode) { require Module::Refresh; } } -use HTML::Mason; # brings in subpackages: Parser, Interp, etc. - -use vars qw($Nobody $SystemUser $r); - -#This drags in RT's config.pm -RT::LoadConfig(); - -use Carp; { + package HTML::Mason::Commands; use vars qw(%session); - - use RT::Tickets; - use RT::Transactions; - use RT::Users; - use RT::CurrentUser; - use RT::Templates; - use RT::Queues; - use RT::ScripActions; - use RT::ScripConditions; - use RT::Scrips; - use RT::Groups; - use RT::GroupMembers; - use RT::CustomFields; - use RT::CustomFieldValues; - use RT::TicketCustomFieldValues; - - use RT::Interface::Web; - use MIME::Entity; - use Text::Wrapper; - use CGI::Cookie; - use Time::ParseDate; - use HTML::Entities; } - -# Activate the following if running httpd as root (the normal case). -# Resets ownership of all files created by Mason at startup. -# Note that mysql uses DB for sessions, so there's no need to do this. -unless ($RT::DatabaseType =~ /(mysql|Pg)/) { - # Clean up our umask to protect session files - umask(0077); - -if ( $CGI::MOD_PERL) { - chown( Apache->server->uid, Apache->server->gid, [$RT::MasonSessionDir] ) - if Apache->server->can('uid'); - } - # Die if WebSessionDir doesn't exist or we can't write to it - stat($RT::MasonSessionDir); - die "Can't read and write $RT::MasonSessionDir" - unless ( ( -d _ ) and ( -r _ ) and ( -w _ ) ); +use RT::Interface::Web; +use RT::Interface::Web::Handler; +$Handler = RT::Interface::Web::Handler->new(@RT::MasonParameters); + +if ($ENV{'MOD_PERL'} && !$RT::DevelMode) { + # Under static_source, we need to purge the component cache + # each time we restart, so newer components may be reloaded. + # + # We can't do this in FastCGI or we'll blow away the component root _every_ time a new server starts + # which happens every few hits. + + use File::Path qw( rmtree ); + use File::Glob qw( bsd_glob ); + rmtree([ bsd_glob("$RT::MasonDataDir/obj/*") ], 0, 1); } -my $ah = &RT::Interface::Web::NewApacheHandler() if $CGI::MOD_PERL; - sub handler { ($r) = @_; - RT::Init(); + local $SIG{__WARN__}; + local $SIG{__DIE__}; - # We don't need to handle non-text items - return -1 if defined( $r->content_type ) && $r->content_type !~ m|^text/|io; + # We don't need to handle non-text, non-xml items + if ($r->content_type =~ m/^httpd\b.*\bdirectory/i) { + use File::Spec::Unix; + # Our DirectoryIndex is always index.html, regardless of httpd settings + $r->filename( File::Spec::Unix->catfile( $r->filename, 'index.html' ) ); + } + elsif (defined( $r->content_type )) { + $r->content_type =~ m!(^text/|\bxml\b)!i or return -1; + } + + Module::Refresh->refresh if $RT::DevelMode; + + RT::Init(); my %session; - my $status = $ah->handle_request($r); - undef (%session); + my $status; + eval { $status = $Handler->handle_request($r) }; + if ($@) { + $RT::Logger->crit($@); + } + + undef(%session); + + RT::Interface::Web::Handler->CleanupRequest(); - $RT::Logger->crit("Transaction not committed. Usually indicates a software fault. Data loss may have occurred") if $RT::Handle->TransactionDepth; return $status; } diff --git a/rt/config b/rt/config deleted file mode 100644 index b9418a66d..000000000 --- a/rt/config +++ /dev/null @@ -1,256 +0,0 @@ -/* - * This is the project ``config'' file. It controls many aspects of - * how Aegis interacts with your project. - * - * There are several sections of this file, each dealing with a different - * aspect of the interaction between Aegis and the tools used to manage - * yout project. - */ - -/* - * ------------------------------------------------------------------------- - * - * The build tool is delegated. - */ - -/* - * The build_command field of the config file is used to invoke the relevant - * build command. The following command tells cook where to find the recipes. - * The ${s Howto.cook} expands to a path into the baseline during development - * if the file is not in the change. Look in aesub(5) for more information - * about command substitutions. - */ -build_command = - ""; - -/* cook -book ${s Howto.cook} search_path=$search_path \ -project=$p change=$c version=$v -star -no-log -action -notouch"; - -/* - * The recipes in the User Guide will all remove their targets before - * constructing them, which qualifies them to use the following entry in the - * config file. The targets MUST be removed first if this field is true, - * otherwise the baseline would cease to be self-consistent. - * - * Fortunately, Cook has a nifty ``set unlink;'' statement which is - * placed at the top of the cookbook. - */ -link_integration_directory = true; - - -/* - * ------------------------------------------------------------------------- - * - * The history tool is delegated. - * - * The fhist program was written by David I. Bell and is admirably - * suited to providing a history mechanism with out the "cruft" that - * SCCS and RCS impose. The fhist program also comes with two other - * utilities, fcomp and fmerge, which use the same minimal difference - * algorithm. - * - * Please note that the [# edit #] feature needs to be avoided, or the - * -Fored_Update (-fu) flag needs to be used in addition to the - * -Conditional_Update (-cu) flag, otherwise updates will complain that - * ``Input file "XXX" contains edit A instead of B for module "YYY"'' - * - * The history_create_command and the history_put_command are - * intentionally identical. This minimizes problems when using - * branches. - * - * The ${quote ...} construct is used to quote filesnames whicg contain - * shell special characters. A minimum of quoting is performed, so if - * the filenames do not contail shell special characters, no quotes will - * be used. - */ - -/* - * This command is used to create a new project history. The command is - * always executed as the project owner. Note he the source is left in - * the baseline. The following substitutions are available: - * - * ${Input} - * absolute path of the source file - * ${History} - * absolute path of the history file - * - * The history_create_command and the history_put_command are - * intentionally identical. This minimizes problems when using - * branches. - */ -history_create_command = - "fhist ${quote ${basename $input}} -cr -cu -i ${quote $input} \ --p ${quote ${dirname $history}} -r"; - -/* - * This command is used to get a specific edit back from history. The - * command may be executed by developers. The following substitutions - * are available: - * - * ${History} - * absolute path of the history file - * ${Edit} - * edit number, as given by history_query_command - * ${Output} - * absolute path of the destination file - * - * Note that the destination filename will never look anything like the - * history source filename, so the -p is essential. - */ -history_get_command = - "fhist ${quote ${basename $history}} -e ${quote $e} \ --o ${quote $output} -p ${quote ${dirname $history}}"; - -/* - * This command is used to add a new "top-most" entry to the history - * file. This command is always executed as the project owner. Note - * that the source file is left in the baseline. The following - * substitutions are available: - * - * ${Input} - * absolute path of source file - * ${History} - * absolute path of history file - * - * The history_create_command and the history_put_command are - * intentionally identical. This minimizes problems when using - * branches. - */ -history_put_command = - "fhist ${quote ${basename $input}} -cr -cu -i ${quote $input} \ --p ${quote ${dirname $history}} -r"; - -/* - * This command is used to query what the history mechanism calls the - * "top-most" edit of a history file. The result may be any arbitrary - * string, it need not be anything like a number, just so long as it - * uniquely identifies the edit for use by the history_get_command at a - * later date. The edit number is to be printed on the standard output. - * This command may be executed by developers. The following - * substitutions are available: - * - * ${History} - * absolute path of the history file - */ -history_query_command = - "fhist ${quote ${basename $history}} -l 0 \ --p ${quote ${dirname $history}} -q"; - -/* - * ------------------------------------------------------------------------- - * - * The difference and merge tools are delegated. - */ - -/* - * Compare two files using fcomp. The -w option produces an output of - * the entire file, with insertions an deletions marked by "change bars" - * in the left margin. This is superior to context difference, as it - * shows the entire file as context. The -s option could be added to - * compare runs of white space as equal. - * - * This command is used by aed(1) to produce a difference listing when - * file in the development directory was originally copied from the - * current version in the baseline. - * - * All of the command substitutions described in aesub(5) are available. - * In addition, the following substitutions are also available: - * - * ${ORiginal} - * The absolute path name of a file containing the version - * originally copied. Usually in the baseline. - * ${Input} - * The absolute path name of the edited version of the file. - * Usually in the development directory. - * ${Output} - * The absolute path name of the file in which to write the - * difference listing. Usually in the development directory. - * - * An exit status of 0 means successful, even of the files differ (and - * they usually do). An exit status which is non-zero means something - * is wrong. - * - * The non-zero exit status may be used to overload this command with - * extra tests, such as line length limits. The difference files must - * be produced in addition to these extra tests. - */ -diff_command = - "fcomp -w ${quote $original} ${quote $input} -o ${quote $output}"; - -/* - * Compare three files using fmerge. Conflicts are marked in the - * output. - * - * This command is used by aed(1) to produce a difference listing when a - * file in the development directory is out of date compared to the - * current version in the baseline. - * - * All of the command substitutions described in aesub(5) are available. - * In addition, the following substitutions are also available: - * - * ${ORiginal} - * The absolute path name of a file containing the common ancestor - * version of ${MostRecent} and {$Input}. Usually the version - * originally copied into the change. Usually in a temporary file. - * ${Most_Recent} - * The absolute path name of a file containing the most recent - * version. Usually in the baseline. - * ${Input} - * The absolute path name of the edited version of the file. - * Usually in the development directory. - * ${Output} - * The absolute path name of the file in which to write the - * difference listing. Usually in the development directory. - * - * An exit status of 0 means successful, even of the files differ (and - * they usually do). An exit status which is non-zero means something - * is wrong. - */ -merge_command = - "fmerge ${quote $original} ${quote $MostRecent} ${quote $input} \ --o ${quote $output} -c /dev/null"; - -/* - * ------------------------------------------------------------------------- - * - * The new file templates are very handy. They allow all sorts of things - * to be se automatically. You need to edit them to add your own name, - * and copyright conditions. - */ - -file_template = -[ - { - pattern = [ "*" ]; - body = "${read_file ${source etc/template/generic abs}}"; - - } -]; - -/* ------------------------------------------------------------------------- - * - * The integrate_begin_exceptions are files which are not hard linked - * from the baseline to the integration directory. In this case, this - * is done to ensure the version stmp is updated appropriately. - */ - -integrate_begin_exceptions = [ ]; - - - - -/* ------------------------------------------------------------------------- - * - * The trojan_horse_suspect field is a list of filename patterns which - * indicate files which *could* host a Trojan horse attack. It makes - * aedist --receive more cautions. It is NOT a silver bullet: just - * about ANY file can host a Trojan, one way or the other. - */ - -trojan_horse_suspect = [ ]; - -build_covers_all_architectures = true; - -test_command = "make test"; - -build_time_adjust=dont_adjust; diff --git a/rt/config.layout b/rt/config.layout.in index 81917f18c..a08f48948 100644 --- a/rt/config.layout +++ b/rt/config.layout.in @@ -37,6 +37,27 @@ customlexdir: ${customdir}/po customlibdir: ${customdir}/lib </Layout> +<Layout inplace> + prefix: `pwd` + exec_prefix: ${prefix} + bindir: ${exec_prefix}/bin + sbindir: ${exec_prefix}/sbin + sysconfdir: ${prefix}/etc + mandir: ${prefix}/man + libdir: ${prefix}/lib + datadir: ${prefix}/share + htmldir: ${prefix}/html + manualdir: ${datadir}/doc + localstatedir: ${prefix}/var + logfiledir: ${localstatedir}/log + masonstatedir: ${localstatedir}/mason_data + sessionstatedir: ${localstatedir}/session_data + customdir: ${prefix}/local + custometcdir: ${customdir}/etc + customhtmldir: ${customdir}/html + customlexdir: ${customdir}/po + customlibdir: ${customdir}/lib +</Layout> <Layout FreeBSD> prefix: /usr/local @@ -81,3 +102,26 @@ customlexdir: ${customdir}/po customlibdir: ${customdir}/lib </Layout> + +<Layout Freeside> + prefix: /opt/rt3 + exec_prefix: ${prefix} + bindir: ${exec_prefix}/bin + sbindir: ${exec_prefix}/sbin + sysconfdir: ${prefix}/etc + mandir: ${prefix}/man + libdir: ${prefix}/lib + datadir: ${prefix}/share + htmldir: %%%FREESIDE_DOCUMENT_ROOT%%%/rt + manualdir: ${datadir}/doc + localstatedir: ${prefix}/var + logfiledir: ${localstatedir}/log + masonstatedir: %%%MASONDATA%%% + sessionstatedir: ${localstatedir}/session_data + customdir: ${prefix}/local + custometcdir: ${customdir}/etc + customhtmldir: ${customdir}/html + customlexdir: ${customdir}/po + customlibdir: ${customdir}/lib +</Layout> + diff --git a/rt/config.log b/rt/config.log index f8549485d..24e15e3cf 100644 --- a/rt/config.log +++ b/rt/config.log @@ -1,7 +1,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by RT configure 3.0.4, which was +It was created by RT configure 3.0.9, which was generated by GNU Autoconf 2.53. Invocation command line was $ ./configure @@ -47,20 +47,20 @@ PATH: . ## Core tests. ## ## ----------- ## -configure:1217: checking for a BSD-compatible install -configure:1271: result: /usr/bin/install -c -configure:1285: checking for perl -configure:1303: found /usr/bin/perl -configure:1316: result: /usr/bin/perl -configure:1638: checking for chosen layout -configure:1653: result: RT3 -configure:1964: creating ./config.status +configure:1218: checking for a BSD-compatible install +configure:1272: result: /usr/bin/install -c +configure:1286: checking for perl +configure:1304: found /usr/bin/perl +configure:1317: result: /usr/bin/perl +configure:1639: checking for chosen layout +configure:1654: result: RT3 +configure:1986: creating ./config.status ## ---------------------- ## ## Running config.status. ## ## ---------------------- ## -This file was extended by RT config.status 3.0.4, which was +This file was extended by RT config.status 3.0.9, which was generated by GNU Autoconf 2.53. Invocation command line was CONFIG_FILES = @@ -71,23 +71,24 @@ generated by GNU Autoconf 2.53. Invocation command line was on pallas -config.status:637: creating sbin/rt-setup-database -config.status:637: creating sbin/rt-test-dependencies -config.status:637: creating Makefile -config.status:637: creating etc/RT_Config.pm -config.status:637: creating lib/RT.pm -config.status:637: creating lib/t/00smoke.t -config.status:637: creating lib/t/01harness.t -config.status:637: creating lib/t/02regression.t -config.status:637: creating lib/t/03web.pl -config.status:637: creating lib/t/04_send_email.pl -config.status:637: creating bin/mason_handler.fcgi -config.status:637: creating bin/mason_handler.scgi -config.status:637: creating bin/mason_handler.svc -config.status:637: creating bin/rt-commit-handler -config.status:637: creating bin/rt-crontool -config.status:637: creating bin/rt-mailgate -config.status:637: creating bin/webmux.pl +config.status:639: creating sbin/rt-setup-database +config.status:639: creating sbin/rt-test-dependencies +config.status:639: creating Makefile +config.status:639: creating etc/RT_Config.pm +config.status:639: creating lib/RT.pm +config.status:639: creating lib/t/00smoke.t +config.status:639: creating lib/t/01harness.t +config.status:639: creating lib/t/02regression.t +config.status:639: creating lib/t/03web.pl +config.status:639: creating lib/t/04_send_email.pl +config.status:639: creating bin/mason_handler.fcgi +config.status:639: creating bin/mason_handler.scgi +config.status:639: creating bin/mason_handler.svc +config.status:639: creating bin/rt-commit-handler +config.status:639: creating bin/rt-crontool +config.status:639: creating bin/rt-mailgate +config.status:639: creating bin/rt +config.status:639: creating bin/webmux.pl ## ---------------- ## ## Cache variables. ## @@ -110,8 +111,8 @@ ac_cv_path_install='/usr/bin/install -c' #define PACKAGE_NAME "RT" #define PACKAGE_TARNAME "rt" -#define PACKAGE_VERSION "3.0.4" -#define PACKAGE_STRING "RT 3.0.4" +#define PACKAGE_VERSION "3.0.9" +#define PACKAGE_STRING "RT 3.0.9" #define PACKAGE_BUGREPORT "rt-3.0-bugs@fsck.com" configure: exit 0 diff --git a/rt/config.status b/rt/config.status index e7d835894..e7d81b358 100755 --- a/rt/config.status +++ b/rt/config.status @@ -237,7 +237,7 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by RT $as_me 3.0.4, which was +This file was extended by RT $as_me 3.0.9, which was generated by GNU Autoconf 2.53. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -249,7 +249,7 @@ generated by GNU Autoconf 2.53. Invocation command line was _CSEOF echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 echo >&5 -config_files=" sbin/rt-setup-database sbin/rt-test-dependencies Makefile etc/RT_Config.pm lib/RT.pm lib/t/00smoke.t lib/t/01harness.t lib/t/02regression.t lib/t/03web.pl lib/t/04_send_email.pl bin/mason_handler.fcgi bin/mason_handler.scgi bin/mason_handler.svc bin/rt-commit-handler bin/rt-crontool bin/rt-mailgate bin/webmux.pl" +config_files=" sbin/rt-setup-database sbin/rt-test-dependencies Makefile etc/RT_Config.pm lib/RT.pm lib/t/00smoke.t lib/t/01harness.t lib/t/02regression.t lib/t/03web.pl lib/t/04_send_email.pl bin/mason_handler.fcgi bin/mason_handler.scgi bin/mason_handler.svc bin/rt-commit-handler bin/rt-crontool bin/rt-mailgate bin/rt bin/webmux.pl" ac_cs_usage="\ \`$as_me' instantiates files from templates according to the @@ -269,7 +269,7 @@ $config_files Report bugs to <bug-autoconf@gnu.org>." ac_cs_version="\ -RT config.status 3.0.4 +RT config.status 3.0.9 configured by ./configure, generated by GNU Autoconf 2.53, with options \"\" @@ -358,6 +358,7 @@ do "bin/rt-commit-handler" ) CONFIG_FILES="$CONFIG_FILES bin/rt-commit-handler" ;; "bin/rt-crontool" ) CONFIG_FILES="$CONFIG_FILES bin/rt-crontool" ;; "bin/rt-mailgate" ) CONFIG_FILES="$CONFIG_FILES bin/rt-mailgate" ;; + "bin/rt" ) CONFIG_FILES="$CONFIG_FILES bin/rt" ;; "bin/webmux.pl" ) CONFIG_FILES="$CONFIG_FILES bin/webmux.pl" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} @@ -410,8 +411,8 @@ s,@SHELL@,/bin/sh,;t t s,@PATH_SEPARATOR@,:,;t t s,@PACKAGE_NAME@,RT,;t t s,@PACKAGE_TARNAME@,rt,;t t -s,@PACKAGE_VERSION@,3.0.4,;t t -s,@PACKAGE_STRING@,RT 3.0.4,;t t +s,@PACKAGE_VERSION@,3.0.9,;t t +s,@PACKAGE_STRING@,RT 3.0.9,;t t s,@PACKAGE_BUGREPORT@,rt-3.0-bugs@fsck.com,;t t s,@exec_prefix@,/opt/rt3,;t t s,@prefix@,/opt/rt3,;t t @@ -431,14 +432,14 @@ s,@mandir@,/opt/rt3/man,;t t s,@build_alias@,,;t t s,@host_alias@,,;t t s,@target_alias@,,;t t -s,@DEFS@,-DPACKAGE_NAME=\"RT\" -DPACKAGE_TARNAME=\"rt\" -DPACKAGE_VERSION=\"3.0.4\" -DPACKAGE_STRING=\"RT\ 3.0.4\" -DPACKAGE_BUGREPORT=\"rt-3.0-bugs@fsck.com\" ,;t t +s,@DEFS@,-DPACKAGE_NAME=\"RT\" -DPACKAGE_TARNAME=\"rt\" -DPACKAGE_VERSION=\"3.0.9\" -DPACKAGE_STRING=\"RT\ 3.0.9\" -DPACKAGE_BUGREPORT=\"rt-3.0-bugs@fsck.com\" ,;t t s,@ECHO_C@,,;t t s,@ECHO_N@,-n,;t t s,@ECHO_T@,,;t t s,@LIBS@,,;t t s,@rt_version_major@,3,;t t s,@rt_version_minor@,0,;t t -s,@rt_version_patch@,4,;t t +s,@rt_version_patch@,9,;t t s,@INSTALL_PROGRAM@,${INSTALL},;t t s,@INSTALL_SCRIPT@,${INSTALL},;t t s,@INSTALL_DATA@,${INSTALL} -m 644,;t t @@ -479,6 +480,7 @@ s,@BIN_OWNER@,root,;t t s,@LIBS_OWNER@,root,;t t s,@LIBS_GROUP@,bin,;t t s,@DB_TYPE@,mysql,;t t +s,@ORACLE_ENV_PREF@,,;t t s,@DB_HOST@,localhost,;t t s,@DB_PORT@,,;t t s,@DB_RT_HOST@,localhost,;t t @@ -490,7 +492,7 @@ s,@WEB_USER@,www,;t t s,@WEB_GROUP@,www,;t t s,@RT_VERSION_MAJOR@,3,;t t s,@RT_VERSION_MINOR@,0,;t t -s,@RT_VERSION_PATCH@,4,;t t +s,@RT_VERSION_PATCH@,9,;t t s,@RT_PATH@,/opt/rt3,;t t s,@RT_DOC_PATH@,/opt/rt3/share/doc,;t t s,@RT_LOCAL_PATH@,/opt/rt3/local,;t t diff --git a/rt/configure b/rt/configure index c89d759fd..395fc0b19 100755 --- a/rt/configure +++ b/rt/configure @@ -1,22 +1,13 @@ #! /bin/sh -# From configure.ac Revision: 1.1 . +# From configure.ac Revision: 3070 . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.53 for RT 3.0.4. +# Generated by GNU Autoconf 2.59 for RT 3.4.4. # -# Report bugs to <rt-3.0-bugs@fsck.com>. +# Report bugs to <rt-bugs@fsck.com>. # -# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 -# Free Software Foundation, Inc. +# Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. - -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - - ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## @@ -25,46 +16,57 @@ fi if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi +DUALCASE=1; export DUALCASE # for MKS sh -# NLS nuisances. # Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi -(set +x; test -n "`(LANG=C; export LANG) 2>&1`") && - { $as_unset LANG || test "${LANG+set}" != set; } || - { LANG=C; export LANG; } -(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && - { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || - { LC_ALL=C; export LC_ALL; } -(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && - { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || - { LC_TIME=C; export LC_TIME; } -(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && - { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || - { LC_CTYPE=C; export LC_CTYPE; } -(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && - { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || - { LANGUAGE=C; export LANGUAGE; } -(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && - { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || - { LC_COLLATE=C; export LC_COLLATE; } -(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && - { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || - { LC_NUMERIC=C; export LC_NUMERIC; } -(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && - { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || - { LC_MESSAGES=C; export LC_MESSAGES; } + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi # Name of the executable. -as_me=`(basename "$0") 2>/dev/null || +as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ @@ -75,6 +77,7 @@ echo X/"$0" | /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` + # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' @@ -85,15 +88,15 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conftest.sh - echo "exit 0" >>conftest.sh - chmod +x conftest.sh - if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi - rm -f conftest.sh + rm -f conf$$.sh fi @@ -141,6 +144,8 @@ do as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} @@ -213,13 +218,20 @@ else fi rm -f conf$$ conf$$.exe conf$$.file +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS @@ -229,7 +241,7 @@ as_nl=' IFS=" $as_nl" # CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } +$as_unset CDPATH # Name of the host. @@ -243,6 +255,7 @@ exec 6>&1 # Initializations. # ac_default_prefix=/usr/local +ac_config_libobj_dir=. cross_compiling=no subdirs= MFLAGS= @@ -257,12 +270,14 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='RT' PACKAGE_TARNAME='rt' -PACKAGE_VERSION='3.0.4' -PACKAGE_STRING='RT 3.0.4' -PACKAGE_BUGREPORT='rt-3.0-bugs@fsck.com' +PACKAGE_VERSION='3.4.4' +PACKAGE_STRING='RT 3.4.4' +PACKAGE_BUGREPORT='rt-bugs@fsck.com' ac_unique_file="lib/RT.pm.in" ac_default_prefix=/opt/rt3 +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS rt_version_major rt_version_minor rt_version_patch INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA PERL SPEEDY_BIN exp_prefix exp_exec_prefix exp_bindir exp_sbindir exp_sysconfdir exp_mandir exp_libdir exp_datadir htmldir exp_htmldir manualdir exp_manualdir exp_localstatedir logfiledir exp_logfiledir masonstatedir exp_masonstatedir sessionstatedir exp_sessionstatedir customdir exp_customdir custometcdir exp_custometcdir customhtmldir exp_customhtmldir customlexdir exp_customlexdir customlibdir exp_customlibdir rt_layout_name BIN_OWNER LIBS_OWNER LIBS_GROUP DB_TYPE DATABASE_ENV_PREF DB_HOST DB_PORT DB_RT_HOST DB_DBA DB_DATABASE DB_RT_USER DB_RT_PASS WEB_USER WEB_GROUP RTGROUP APACHECTL RT_DEVEL_MODE RT_VERSION_MAJOR RT_VERSION_MINOR RT_VERSION_PATCH RT_PATH RT_DOC_PATH RT_LOCAL_PATH RT_LIB_PATH RT_ETC_PATH CONFIG_FILE_PATH RT_BIN_PATH RT_SBIN_PATH RT_VAR_PATH RT_MAN_PATH MASON_DATA_PATH MASON_SESSION_PATH MASON_HTML_PATH LOCAL_ETC_PATH MASON_LOCAL_HTML_PATH LOCAL_LEXICON_PATH LOCAL_LIB_PATH DESTDIR RT_LOG_PATH LIBOBJS LTLIBOBJS' +ac_subst_files='' # Initialize some variables set by options. ac_init_help= @@ -620,7 +635,7 @@ done # Be sure to have absolute paths. for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir + localstatedir libdir includedir oldincludedir infodir mandir do eval ac_val=$`echo $ac_var` case $ac_val in @@ -660,10 +675,10 @@ if test -z "$srcdir"; then # Try the directory containing this script, then its parent. ac_confdir=`(dirname "$0") 2>/dev/null || $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || echo X"$0" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } @@ -686,6 +701,9 @@ if test ! -r $srcdir/$ac_unique_file; then { (exit 1); exit 1; }; } fi fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` ac_env_build_alias_set=${build_alias+set} ac_env_build_alias_value=$build_alias @@ -711,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.0.4 to adapt to many kinds of systems. +\`configure' configures RT 3.4.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -736,9 +754,9 @@ _ACEOF cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -768,7 +786,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of RT 3.0.4:";; + short | recursive ) echo "Configuration of RT 3.4.4:";; esac cat <<\_ACEOF @@ -782,12 +800,11 @@ Optional Packages: --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-speedycgi=/path/to/speedy path to your speedycgi binary, if it exists - --with-rt-group=GROUP group to own all files (default: rt) - --with-bin-owner=OWNER user that will own rt binaries (default root) + --with-bin-owner=OWNER user that will own RT binaries (default root) --with-libs-owner=OWNER user that will own RT libraries (default root) - --with-libs-group=GROUP group that will own rt binaries (default bin) - --with-db-type=TYPE sort of database RT will use (default: mysql) (mysql - and Pg are valid) + --with-libs-group=GROUP group that will own RT binaries (default bin) + --with-db-type=TYPE sort of database RT will use (default: mysql) + (mysql, Pg, Oracle, Informix and SQLite are valid) --with-db-host=HOSTNAME FQDN of database server (default: localhost) --with-db-port=PORT port on which the database listens on --with-db-rt-host=HOSTNAME @@ -802,6 +819,11 @@ Optional Packages: password for database user (default: rt_pass) --with-web-user=USER user the web server runs as (default: www) --with-web-group=GROUP group the web server runs as (default: www) + --with-rt-group=GROUP group to own all files (default: rt) + --with-my-user-group set all users and groups to current user/group + --with-apachectl instruct RT where to find your apachectl + --with-devel-mode Turn on development aids that might hurt you in + production Some influential environment variables: PERL Perl interpreter command @@ -809,7 +831,7 @@ Some influential environment variables: Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. -Report bugs to <rt-3.0-bugs@fsck.com>. +Report bugs to <rt-bugs@fsck.com>. _ACEOF fi @@ -843,12 +865,45 @@ case $srcdir in ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac -# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be -# absolute. -ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` -ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` -ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` -ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac cd $ac_dir # Check for guested configure; otherwise get Cygnus style configure. @@ -859,24 +914,23 @@ ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` echo $SHELL $ac_srcdir/configure --help=recursive elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then + test -f $ac_srcdir/configure.in; then echo $ac_configure --help else echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi - cd $ac_popdir + cd "$ac_popdir" done fi test -n "$ac_init_help" && exit 0 if $ac_init_version; then cat <<\_ACEOF -RT configure 3.0.4 -generated by GNU Autoconf 2.53 +RT configure 3.4.4 +generated by GNU Autoconf 2.59 -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 -Free Software Foundation, Inc. +Copyright (C) 2003 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -887,8 +941,8 @@ 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.0.4, which was -generated by GNU Autoconf 2.53. Invocation command line was +It was created by RT $as_me 3.4.4, which was +generated by GNU Autoconf 2.59. Invocation command line was $ $0 $@ @@ -940,27 +994,54 @@ _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= +ac_configure_args0= +ac_configure_args1= ac_sep= -for ac_arg +ac_must_keep_next=false +for ac_pass in 1 2 do - case $ac_arg in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n ) continue ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - ac_sep=" " ;; - esac - # Get rid of the leading space. + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there @@ -971,6 +1052,7 @@ trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo + cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## @@ -983,16 +1065,45 @@ _ASBOX case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in *ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" ;; *) sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## @@ -1000,14 +1111,14 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h + sed "/^$/d" confdefs.h | sort echo fi test "$ac_signal" != 0 && echo "$as_me: caught signal $ac_signal" echo "$as_me: exit $exit_status" } >&5 - rm -f core core.* *.core && + rm -f core *.core && rm -rf conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 @@ -1087,7 +1198,7 @@ fi # value. ac_cache_corrupted=false for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val="\$ac_cv_env_${ac_var}_value" @@ -1104,13 +1215,13 @@ echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + ac_cache_corrupted=: fi;; esac # Pass precious variables to config.status. @@ -1167,9 +1278,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu + rt_version_major=3 -rt_version_minor=0 +rt_version_minor=4 rt_version_patch=4 @@ -1213,6 +1325,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 @@ -1229,6 +1342,7 @@ do case $as_dir/ in ./ | .// | /cC/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1236,20 +1350,20 @@ case $as_dir/ in # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi done done ;; @@ -1326,6 +1440,8 @@ echo "$as_me: error: cannot use $PACKAGE_NAME without perl" >&2;} { (exit 1); exit 1; }; } fi + + # Check whether --with-speedycgi or --without-speedycgi was given. if test "${with_speedycgi+set}" = set; then withval="$with_speedycgi" @@ -1656,13 +1772,13 @@ fi -# Check whether --with-rt-group or --without-rt-group was given. -if test "${with_rt_group+set}" = set; then - withval="$with_rt_group" - RTGROUP=$withval -else - RTGROUP=rt -fi; +# ACRT_USER_EXISTS( users, variable, default ) +# - users is a list of users [www apache www-docs] +# from highest to lowest priority to high priority (i.e. first match) +# - variable is what you set with the result +# + + @@ -1703,10 +1819,25 @@ if test "${with_db_type+set}" = set; then else DB_TYPE=mysql fi; -if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite'; then - { { echo "$as_me:$LINENO: error: Only Pg and mysql are valid db types" >&5 -echo "$as_me: error: Only Pg and mysql are valid db types" >&2;} +if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite' -a "$DB_TYPE" != 'Oracle' -a "$DB_TYPE" != 'Informix' -a "$DB_TYPE" != 'Sybase' ; then + { { echo "$as_me:$LINENO: error: Only Oracle, Informix, Pg, mysql and SQLite are valid db types" >&5 +echo "$as_me: error: Only Oracle, Informix, Pg, mysql and SQLite are valid db types" >&2;} + { (exit 1); exit 1; }; } +fi + + +if test "$DB_TYPE" = 'Oracle'; then + test "x$ORACLE_HOME" = 'x' && { { echo "$as_me:$LINENO: error: Please declare the ORACLE_HOME environment variable" >&5 +echo "$as_me: error: Please declare the ORACLE_HOME environment variable" >&2;} { (exit 1); exit 1; }; } + DATABASE_ENV_PREF="\$ENV{'ORACLE_HOME'} = '$ORACLE_HOME';" +fi + +if test "$DB_TYPE" = 'Sybase'; then + test "x$SYBASE" = 'x' && { { echo "$as_me:$LINENO: error: Please declare the SYBASE_HOME environment variable" >&5 +echo "$as_me: error: Please declare the SYBASE_HOME environment variable" >&2;} + { (exit 1); exit 1; }; } + DATABASE_ENV_PREF="\$ENV{'SYBASE'} = '$SYBASE';" fi @@ -1786,7 +1917,22 @@ if test "${with_web_user+set}" = set; then withval="$with_web_user" WEB_USER=$withval else - WEB_USER=www + + WEB_USER=www + for x in www www-data apache httpd nobody; do + echo "$as_me:$LINENO: checking if user $x exists" >&5 +echo $ECHO_N "checking if user $x exists... $ECHO_C" >&6 + if $PERL -e"exit( defined getpwnam('$x') ? 0 : 1)" ; then + echo "$as_me:$LINENO: result: found" >&5 +echo "${ECHO_T}found" >&6; WEB_USER=$x ; break +else + echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6 +fi + + done + + fi; @@ -1796,11 +1942,84 @@ if test "${with_web_group+set}" = set; then withval="$with_web_group" WEB_GROUP=$withval else - WEB_GROUP=www + + WEB_GROUP=www + for x in www www-data apache httpd nogroup nobody; do + echo "$as_me:$LINENO: checking if group $x exists" >&5 +echo $ECHO_N "checking if group $x exists... $ECHO_C" >&6 + if $PERL -e"exit( defined getgrnam('$x') ? 0 : 1)" ; then + echo "$as_me:$LINENO: result: found" >&5 +echo "${ECHO_T}found" >&6; WEB_GROUP=$x ; break +else + echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6 +fi + + done + fi; +# Check whether --with-rt-group or --without-rt-group was given. +if test "${with_rt_group+set}" = set; then + withval="$with_rt_group" + RTGROUP=$withval +else + + RTGROUP=rt + for x in rt3 rt $WEB_GROUP; do + echo "$as_me:$LINENO: checking if group $x exists" >&5 +echo $ECHO_N "checking if group $x exists... $ECHO_C" >&6 + if $PERL -e"exit( defined getgrnam('$x') ? 0 : 1)" ; then + echo "$as_me:$LINENO: result: found" >&5 +echo "${ECHO_T}found" >&6; RTGROUP=$x ; break +else + echo "$as_me:$LINENO: result: not found" >&5 +echo "${ECHO_T}not found" >&6 +fi + + done + +fi; + + +my_group=$(groups|cut -f1 -d' ') +my_user=${USER:-$LOGNAME} + +# Check whether --with-my-user-group or --without-my-user-group was given. +if test "${with_my_user_group+set}" = set; then + withval="$with_my_user_group" + RTGROUP=$my_group + BIN_OWNER=$my_user + LIBS_OWNER=$my_user + LIBS_GROUP=$my_group + WEB_USER=$my_user + WEB_GROUP=$my_group +fi; + + + + +# Check whether --with-apachectl or --without-apachectl was given. +if test "${with_apachectl+set}" = set; then + withval="$with_apachectl" + APACHECTL=$withval +else + APACHECTL=`which apachectl` +fi; + + + +# Check whether --with-devel-mode or --without-devel-mode was given. +if test "${with_devel_mode+set}" = set; then + withval="$with_devel_mode" + RT_DEVEL_MODE="1" +else + RT_DEVEL_MODE="0" +fi; + + RT_VERSION_MAJOR=${rt_version_major} RT_VERSION_MINOR=${rt_version_minor} @@ -1848,7 +2067,10 @@ RT_LOG_PATH=${exp_logfiledir} -ac_config_files="$ac_config_files sbin/rt-setup-database sbin/rt-test-dependencies Makefile etc/RT_Config.pm lib/RT.pm lib/t/00smoke.t lib/t/01harness.t lib/t/02regression.t lib/t/03web.pl lib/t/04_send_email.pl bin/mason_handler.fcgi bin/mason_handler.scgi bin/mason_handler.svc bin/rt-commit-handler bin/rt-crontool bin/rt-mailgate bin/webmux.pl" + ac_config_files="$ac_config_files sbin/rt-dump-database sbin/rt-setup-database sbin/rt-test-dependencies bin/mason_handler.fcgi bin/mason_handler.scgi bin/standalone_httpd bin/rt-crontool bin/rt-mailgate bin/rt" + + + ac_config_files="$ac_config_files Makefile etc/RT_Config.pm lib/RT.pm bin/mason_handler.svc bin/webmux.pl" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -1860,7 +2082,7 @@ cat >confcache <<\_ACEOF # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # -# `ac_cv_env_foo' variables (set or unset) will be overriden when +# `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. @@ -1878,13 +2100,13 @@ _ACEOF # `set' does not quote correctly, so add quotes (double-quote # substitution turns \\\\ into \\, and sed turns \\ into \). sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" ;; esac; } | @@ -1895,7 +2117,7 @@ _ACEOF t end /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ : end' >>confcache -if cmp -s $cache_file confcache; then :; else +if diff $cache_file confcache >/dev/null 2>&1; then :; else if test -w $cache_file; then test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" cat confcache >$cache_file @@ -1914,13 +2136,13 @@ test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ + ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/; s/:*\${srcdir}:*/:/; s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; +s/^\([^=]*=[ ]*\):*/\1/; s/:*$//; -s/^[^=]*=[ ]*$//; +s/^[^=]*=[ ]*$//; }' fi @@ -1934,13 +2156,13 @@ fi cat >confdef2opt.sed <<\_ACEOF t clear : clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g t quote -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g t quote d : quote -s,[ `~#$^&*(){}\\|;'"<>?],\\&,g +s,[ `~#$^&*(){}\\|;'"<>?],\\&,g s,\[,\\&,g s,\],\\&,g s,\$,$$,g @@ -1957,6 +2179,21 @@ DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` rm -f confdef2opt.sed +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + : ${CONFIG_STATUS=./config.status} ac_clean_files_save=$ac_clean_files @@ -1971,11 +2208,12 @@ cat >$CONFIG_STATUS <<_ACEOF # configure, is in config.log if it exists. debug=false +ac_cs_recheck=false +ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF - ## --------------------- ## ## M4sh Initialization. ## ## --------------------- ## @@ -1984,46 +2222,57 @@ cat >>$CONFIG_STATUS <<\_ACEOF if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posix fi +DUALCASE=1; export DUALCASE # for MKS sh -# NLS nuisances. # Support unset when possible. -if (FOO=FOO; unset FOO) >/dev/null 2>&1; then +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then as_unset=unset else as_unset=false fi -(set +x; test -n "`(LANG=C; export LANG) 2>&1`") && - { $as_unset LANG || test "${LANG+set}" != set; } || - { LANG=C; export LANG; } -(set +x; test -n "`(LC_ALL=C; export LC_ALL) 2>&1`") && - { $as_unset LC_ALL || test "${LC_ALL+set}" != set; } || - { LC_ALL=C; export LC_ALL; } -(set +x; test -n "`(LC_TIME=C; export LC_TIME) 2>&1`") && - { $as_unset LC_TIME || test "${LC_TIME+set}" != set; } || - { LC_TIME=C; export LC_TIME; } -(set +x; test -n "`(LC_CTYPE=C; export LC_CTYPE) 2>&1`") && - { $as_unset LC_CTYPE || test "${LC_CTYPE+set}" != set; } || - { LC_CTYPE=C; export LC_CTYPE; } -(set +x; test -n "`(LANGUAGE=C; export LANGUAGE) 2>&1`") && - { $as_unset LANGUAGE || test "${LANGUAGE+set}" != set; } || - { LANGUAGE=C; export LANGUAGE; } -(set +x; test -n "`(LC_COLLATE=C; export LC_COLLATE) 2>&1`") && - { $as_unset LC_COLLATE || test "${LC_COLLATE+set}" != set; } || - { LC_COLLATE=C; export LC_COLLATE; } -(set +x; test -n "`(LC_NUMERIC=C; export LC_NUMERIC) 2>&1`") && - { $as_unset LC_NUMERIC || test "${LC_NUMERIC+set}" != set; } || - { LC_NUMERIC=C; export LC_NUMERIC; } -(set +x; test -n "`(LC_MESSAGES=C; export LC_MESSAGES) 2>&1`") && - { $as_unset LC_MESSAGES || test "${LC_MESSAGES+set}" != set; } || - { LC_MESSAGES=C; export LC_MESSAGES; } + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi # Name of the executable. -as_me=`(basename "$0") 2>/dev/null || +as_me=`$as_basename "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)$' \| \ @@ -2034,6 +2283,7 @@ echo X/"$0" | /^X\/\(\/\).*/{ s//\1/; q; } s/.*/./; q'` + # PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' @@ -2044,15 +2294,15 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conftest.sh - echo "exit 0" >>conftest.sh - chmod +x conftest.sh - if (PATH=".;."; conftest.sh) >/dev/null 2>&1; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi - rm -f conftest.sh + rm -f conf$$.sh fi @@ -2101,6 +2351,8 @@ do as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` test "x$as_lineno_1" != "x$as_lineno_2" && test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } CONFIG_SHELL=$as_dir/$as_base export CONFIG_SHELL exec "$CONFIG_SHELL" "$0" ${1+"$@"} @@ -2174,13 +2426,20 @@ else fi rm -f conf$$ conf$$.exe conf$$.file +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + as_executable_p="test -f" # Sed expression to map a string onto a valid CPP name. -as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. -as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" # IFS @@ -2190,7 +2449,7 @@ as_nl=' IFS=" $as_nl" # CDPATH. -$as_unset CDPATH || test "${CDPATH+set}" != set || { CDPATH=$PATH_SEPARATOR; export CDPATH; } +$as_unset CDPATH exec 6>&1 @@ -2206,8 +2465,8 @@ _ASBOX } >&5 cat >&5 <<_CSEOF -This file was extended by RT $as_me 3.0.4, which was -generated by GNU Autoconf 2.53. Invocation command line was +This file was extended by RT $as_me 3.4.4, which was +generated by GNU Autoconf 2.59. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -2247,10 +2506,11 @@ Usage: $0 [OPTIONS] [FILE]... -h, --help print this help, then exit -V, --version print version number, then exit + -q, --quiet do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] - instantiate the configuration file FILE + instantiate the configuration file FILE Configuration files: $config_files @@ -2260,12 +2520,11 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -RT config.status 3.0.4 -configured by $0, generated by GNU Autoconf 2.53, +RT config.status 3.4.4 +configured by $0, generated by GNU Autoconf 2.59, with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" -Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 -Free Software Foundation, Inc. +Copyright (C) 2003 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." srcdir=$srcdir @@ -2282,25 +2541,25 @@ do --*=*) ac_option=`expr "x$1" : 'x\([^=]*\)='` ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` - shift - set dummy "$ac_option" "$ac_optarg" ${1+"$@"} - shift + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift ;; - -*);; *) # This is not an option, so the user has probably given explicit # arguments. + ac_option=$1 ac_need_defaults=false;; esac - case $1 in + case $ac_option in # Handling of the options. _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running $SHELL $0 " $ac_configure_args " --no-create --no-recursion" - exec $SHELL $0 $ac_configure_args --no-create --no-recursion ;; -_ACEOF cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; --version | --vers* | -V ) echo "$ac_cs_version"; exit 0 ;; --he | --h) @@ -2315,13 +2574,16 @@ Try \`$0 --help' for more information." >&2;} --debug | --d* | -d ) debug=: ;; --file | --fil | --fi | --f ) - shift - CONFIG_FILES="$CONFIG_FILES $1" + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" ac_need_defaults=false;; --header | --heade | --head | --hea ) - shift - CONFIG_HEADERS="$CONFIG_HEADERS $1" + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; # This is an error. -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 @@ -2336,6 +2598,20 @@ Try \`$0 --help' for more information." >&2;} shift done +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + _ACEOF @@ -2347,22 +2623,19 @@ for ac_config_target in $ac_config_targets do case "$ac_config_target" in # Handling of arguments. + "sbin/rt-dump-database" ) CONFIG_FILES="$CONFIG_FILES sbin/rt-dump-database" ;; "sbin/rt-setup-database" ) CONFIG_FILES="$CONFIG_FILES sbin/rt-setup-database" ;; "sbin/rt-test-dependencies" ) CONFIG_FILES="$CONFIG_FILES sbin/rt-test-dependencies" ;; - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "etc/RT_Config.pm" ) CONFIG_FILES="$CONFIG_FILES etc/RT_Config.pm" ;; - "lib/RT.pm" ) CONFIG_FILES="$CONFIG_FILES lib/RT.pm" ;; - "lib/t/00smoke.t" ) CONFIG_FILES="$CONFIG_FILES lib/t/00smoke.t" ;; - "lib/t/01harness.t" ) CONFIG_FILES="$CONFIG_FILES lib/t/01harness.t" ;; - "lib/t/02regression.t" ) CONFIG_FILES="$CONFIG_FILES lib/t/02regression.t" ;; - "lib/t/03web.pl" ) CONFIG_FILES="$CONFIG_FILES lib/t/03web.pl" ;; - "lib/t/04_send_email.pl" ) CONFIG_FILES="$CONFIG_FILES lib/t/04_send_email.pl" ;; "bin/mason_handler.fcgi" ) CONFIG_FILES="$CONFIG_FILES bin/mason_handler.fcgi" ;; "bin/mason_handler.scgi" ) CONFIG_FILES="$CONFIG_FILES bin/mason_handler.scgi" ;; - "bin/mason_handler.svc" ) CONFIG_FILES="$CONFIG_FILES bin/mason_handler.svc" ;; - "bin/rt-commit-handler" ) CONFIG_FILES="$CONFIG_FILES bin/rt-commit-handler" ;; + "bin/standalone_httpd" ) CONFIG_FILES="$CONFIG_FILES bin/standalone_httpd" ;; "bin/rt-crontool" ) CONFIG_FILES="$CONFIG_FILES bin/rt-crontool" ;; "bin/rt-mailgate" ) CONFIG_FILES="$CONFIG_FILES bin/rt-mailgate" ;; + "bin/rt" ) CONFIG_FILES="$CONFIG_FILES bin/rt" ;; + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "etc/RT_Config.pm" ) CONFIG_FILES="$CONFIG_FILES etc/RT_Config.pm" ;; + "lib/RT.pm" ) CONFIG_FILES="$CONFIG_FILES lib/RT.pm" ;; + "bin/mason_handler.svc" ) CONFIG_FILES="$CONFIG_FILES bin/mason_handler.svc" ;; "bin/webmux.pl" ) CONFIG_FILES="$CONFIG_FILES bin/webmux.pl" ;; *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 echo "$as_me: error: invalid argument: $ac_config_target" >&2;} @@ -2378,6 +2651,9 @@ if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. # Create a temporary directory, and hook for its removal unless debugging. $debug || { @@ -2386,17 +2662,17 @@ $debug || } # Create a (secure) tmp directory for tmp files. -: ${TMPDIR=/tmp} + { - tmp=`(umask 077 && mktemp -d -q "$TMPDIR/csXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=$TMPDIR/cs$$-$RANDOM + tmp=./confstat$$-$RANDOM (umask 077 && mkdir $tmp) } || { - echo "$me: cannot create a temporary directory in $TMPDIR" >&2 + echo "$me: cannot create a temporary directory in ." >&2 { (exit 1); exit 1; } } @@ -2482,11 +2758,11 @@ s,@exp_customlexdir@,$exp_customlexdir,;t t s,@customlibdir@,$customlibdir,;t t s,@exp_customlibdir@,$exp_customlibdir,;t t s,@rt_layout_name@,$rt_layout_name,;t t -s,@RTGROUP@,$RTGROUP,;t t s,@BIN_OWNER@,$BIN_OWNER,;t t s,@LIBS_OWNER@,$LIBS_OWNER,;t t s,@LIBS_GROUP@,$LIBS_GROUP,;t t s,@DB_TYPE@,$DB_TYPE,;t t +s,@DATABASE_ENV_PREF@,$DATABASE_ENV_PREF,;t t s,@DB_HOST@,$DB_HOST,;t t s,@DB_PORT@,$DB_PORT,;t t s,@DB_RT_HOST@,$DB_RT_HOST,;t t @@ -2496,6 +2772,9 @@ s,@DB_RT_USER@,$DB_RT_USER,;t t s,@DB_RT_PASS@,$DB_RT_PASS,;t t s,@WEB_USER@,$WEB_USER,;t t s,@WEB_GROUP@,$WEB_GROUP,;t t +s,@RTGROUP@,$RTGROUP,;t t +s,@APACHECTL@,$APACHECTL,;t t +s,@RT_DEVEL_MODE@,$RT_DEVEL_MODE,;t t s,@RT_VERSION_MAJOR@,$RT_VERSION_MAJOR,;t t s,@RT_VERSION_MINOR@,$RT_VERSION_MINOR,;t t s,@RT_VERSION_PATCH@,$RT_VERSION_PATCH,;t t @@ -2518,6 +2797,8 @@ s,@LOCAL_LEXICON_PATH@,$LOCAL_LEXICON_PATH,;t t s,@LOCAL_LIB_PATH@,$LOCAL_LIB_PATH,;t t s,@DESTDIR@,$DESTDIR,;t t s,@RT_LOG_PATH@,$RT_LOG_PATH,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t CEOF _ACEOF @@ -2547,9 +2828,9 @@ _ACEOF (echo ':t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" fi ac_sed_frag=`expr $ac_sed_frag + 1` ac_beg=$ac_end @@ -2567,46 +2848,51 @@ for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". case $ac_file in - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; * ) ac_file_in=$ac_file.in ;; esac # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. ac_dir=`(dirname "$ac_file") 2>/dev/null || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } /^X\(\/\/\)[^/].*/{ s//\1/; q; } /^X\(\/\/\)$/{ s//\1/; q; } /^X\(\/\).*/{ s//\1/; q; } s/.*/./; q'` - { case "$ac_dir" in - [\\/]* | ?:[\\/]* ) as_incr_dir=;; - *) as_incr_dir=.;; -esac -as_dummy="$ac_dir" -for as_mkdir_dir in `IFS='/\\'; set X $as_dummy; shift; echo "$@"`; do - case $as_mkdir_dir in - # Skip DOS drivespec - ?:) as_incr_dir=$as_mkdir_dir ;; - *) - as_incr_dir=$as_incr_dir/$as_mkdir_dir - test -d "$as_incr_dir" || - mkdir "$as_incr_dir" || - { { echo "$as_me:$LINENO: error: cannot create \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; } - ;; - esac -done; } + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } ac_builddir=. @@ -2633,12 +2919,45 @@ case $srcdir in ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_builddir$srcdir ;; esac -# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be -# absolute. -ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` -ac_abs_top_builddir=`cd "$ac_dir" && cd $ac_top_builddir && pwd` -ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` -ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac case $INSTALL in @@ -2646,11 +2965,6 @@ ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` *) ac_INSTALL=$ac_top_builddir$INSTALL ;; esac - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ @@ -2660,7 +2974,7 @@ echo "$as_me: creating $ac_file" >&6;} configure_input="$ac_file. " fi configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." + sed 's,.*/,,'` by configure." # First look for the input files in the build tree, otherwise in the # src tree. @@ -2669,26 +2983,32 @@ echo "$as_me: creating $ac_file" >&6;} case $f in -) echo $tmp/stdin ;; [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } - echo $f;; + echo "$f";; *) # Relative - if test -f "$f"; then - # Build tree - echo $f - elif test -f "$srcdir/$f"; then - # Source tree - echo $srcdir/$f - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 echo "$as_me: error: cannot find input file: $f" >&2;} { (exit 1); exit 1; }; } - fi;; + fi;; esac done` || { (exit 1); exit 1; } + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF sed "$ac_vpsub @@ -2716,6 +3036,27 @@ s,@INSTALL@,$ac_INSTALL,;t t rm -f $tmp/out fi + # Run the commands associated with the file. + case $ac_file in + sbin/rt-dump-database ) chmod ug+x $ac_file + ;; + sbin/rt-setup-database ) chmod ug+x $ac_file + ;; + sbin/rt-test-dependencies ) chmod ug+x $ac_file + ;; + bin/mason_handler.fcgi ) chmod ug+x $ac_file + ;; + bin/mason_handler.scgi ) chmod ug+x $ac_file + ;; + bin/standalone_httpd ) chmod ug+x $ac_file + ;; + bin/rt-crontool ) chmod ug+x $ac_file + ;; + bin/rt-mailgate ) chmod ug+x $ac_file + ;; + bin/rt ) chmod ug+x $ac_file + ;; + esac done _ACEOF @@ -2737,8 +3078,11 @@ ac_clean_files=$ac_clean_files_save # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null - $SHELL $CONFIG_STATUS || ac_cs_success=false + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. diff --git a/rt/configure.ac b/rt/configure.ac index cd82c4460..1d0b95f51 100644 --- a/rt/configure.ac +++ b/rt/configure.ac @@ -1,12 +1,13 @@ +autoconf; exec ./configure $@ 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 $)dnl +AC_REVISION($Revision: 1.1.1.5 $)dnl dnl Setup autoconf AC_PREREQ(2.53) -AC_INIT(RT, [3.0.4], [rt-3.0-bugs@fsck.com]) +AC_INIT(RT, [3.4.4], [rt-bugs@fsck.com]) AC_CONFIG_SRCDIR([lib/RT.pm.in]) dnl Extract RT version number components @@ -27,6 +28,8 @@ AC_PATH_PROG([PERL], [perl], [not found]) if test "$PERL" = 'not found'; then AC_MSG_ERROR([cannot use $PACKAGE_NAME without perl]) fi + + dnl SPEED_BIN AC_ARG_WITH(speedycgi, AC_HELP_STRING([--with-speedycgi=/path/to/speedy], @@ -40,18 +43,38 @@ dnl Defaults paths for installation AC_PREFIX_DEFAULT([/opt/rt3]) RT_ENABLE_LAYOUT -dnl RTGROUP -AC_ARG_WITH(rt-group, - AC_HELP_STRING([--with-rt-group=GROUP], - [group to own all files (default: rt)]), - RTGROUP=$withval, - RTGROUP=rt) -AC_SUBST(RTGROUP) + +# ACRT_USER_EXISTS( users, variable, default ) +# - users is a list of users [www apache www-docs] +# from highest to lowest priority to high priority (i.e. first match) +# - variable is what you set with the result +# + +AC_DEFUN([ACRT_USER_GUESS], + [ + $2=$3 + for x in $1; do + AC_MSG_CHECKING([if user $x exists]) + AS_IF([ $PERL -e"exit( defined getpwnam('$x') ? 0 : 1)" ], + [ AC_MSG_RESULT([found]); $2=$x ; break], + [ AC_MSG_RESULT([not found]) ]) + done + ]) +AC_DEFUN([ACRT_GROUP_GUESS], + [ + $2=$3 + for x in $1; do + AC_MSG_CHECKING([if group $x exists]) + AS_IF([ $PERL -e"exit( defined getgrnam('$x') ? 0 : 1)" ], + [ AC_MSG_RESULT([found]); $2=$x ; break], + [ AC_MSG_RESULT([not found]) ]) + done + ]) dnl BIN_OWNER AC_ARG_WITH(bin-owner, AC_HELP_STRING([--with-bin-owner=OWNER], - [user that will own rt binaries (default root)]), + [user that will own RT binaries (default root)]), BIN_OWNER=$withval, BIN_OWNER=root) AC_SUBST(BIN_OWNER) @@ -67,7 +90,7 @@ AC_SUBST(LIBS_OWNER) dnl LIBS_GROUP AC_ARG_WITH(libs-group, AC_HELP_STRING([--with-libs-group=GROUP], - [group that will own rt binaries (default bin)]), + [group that will own RT binaries (default bin)]), LIBS_GROUP=$withval, LIBS_GROUP=bin) AC_SUBST(LIBS_GROUP) @@ -75,14 +98,27 @@ AC_SUBST(LIBS_GROUP) dnl DB_TYPE AC_ARG_WITH(db-type, AC_HELP_STRING([--with-db-type=TYPE], - [sort of database RT will use (default: mysql) (mysql and Pg are valid)]), + [sort of database RT will use (default: mysql) (mysql, Pg, Oracle, Informix and SQLite are valid)]), DB_TYPE=$withval, DB_TYPE=mysql) -if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite'; then - AC_MSG_ERROR([Only Pg and mysql are valid db types]) +if test "$DB_TYPE" != 'mysql' -a "$DB_TYPE" != 'Pg' -a "$DB_TYPE" != 'SQLite' -a "$DB_TYPE" != 'Oracle' -a "$DB_TYPE" != 'Informix' -a "$DB_TYPE" != 'Sybase' ; then + AC_MSG_ERROR([Only Oracle, Informix, Pg, mysql and SQLite are valid db types]) fi AC_SUBST(DB_TYPE) +dnl DATABASE_ENV_PREF +if test "$DB_TYPE" = 'Oracle'; then + test "x$ORACLE_HOME" = 'x' && AC_MSG_ERROR([Please declare the ORACLE_HOME environment variable]) + DATABASE_ENV_PREF="\$ENV{'ORACLE_HOME'} = '$ORACLE_HOME';" +fi + +dnl DATABASE_ENV_PREF +if test "$DB_TYPE" = 'Sybase'; then + test "x$SYBASE" = 'x' && AC_MSG_ERROR([Please declare the SYBASE_HOME environment variable]) + DATABASE_ENV_PREF="\$ENV{'SYBASE'} = '$SYBASE';" +fi +AC_SUBST(DATABASE_ENV_PREF) + dnl DB_HOST AC_ARG_WITH(db-host, AC_HELP_STRING([--with-db-host=HOSTNAME], @@ -144,17 +180,58 @@ AC_ARG_WITH(web-user, AC_HELP_STRING([--with-web-user=USER], [user the web server runs as (default: www)]), WEB_USER=$withval, - WEB_USER=www) + ACRT_USER_GUESS([www www-data apache httpd nobody],[WEB_USER],[www]) +) AC_SUBST(WEB_USER) dnl WEB_GROUP AC_ARG_WITH(web-group, - AC_HELP_STRING([--with-web-group=GROUP], + AC_HELP_STRING([--with-web-group=GROUP], [group the web server runs as (default: www)]), WEB_GROUP=$withval, - WEB_GROUP=www) + ACRT_GROUP_GUESS([www www-data apache httpd nogroup nobody],[WEB_GROUP], [www])) AC_SUBST(WEB_GROUP) +dnl RTGROUP +AC_ARG_WITH(rt-group, + AC_HELP_STRING([--with-rt-group=GROUP], + [group to own all files (default: rt)]), + RTGROUP=$withval, + ACRT_GROUP_GUESS([rt3 rt $WEB_GROUP],[RTGROUP], [rt])) +AC_SUBST(RTGROUP) + +dnl INSTALL AS ME +my_group=$(groups|cut -f1 -d' ') +my_user=${USER:-$LOGNAME} +AC_ARG_WITH(my-user-group, + AC_HELP_STRING([--with-my-user-group], + [set all users and groups to current user/group]), + RTGROUP=$my_group + BIN_OWNER=$my_user + LIBS_OWNER=$my_user + LIBS_GROUP=$my_group + WEB_USER=$my_user + WEB_GROUP=$my_group) + + + +dnl Set the value of apachectl +AC_ARG_WITH(apachectl, + AC_HELP_STRING([--with-apachectl], + [instruct RT where to find your apachectl]), + + APACHECTL=$withval, + APACHECTL=`which apachectl`) +AC_SUBST(APACHECTL) + +dnl RT's "maintainer mode" +AC_ARG_WITH(devel-mode, + AC_HELP_STRING([--with-devel-mode], + [Turn on development aids that might hurt you in production]), + + RT_DEVEL_MODE="1", + RT_DEVEL_MODE="0") +AC_SUBST(RT_DEVEL_MODE) dnl This section maps the variable names this script 'natively' generates dnl to their existing names. They should be removed from here as the .in dnl files are changed to use the new names. @@ -187,23 +264,26 @@ AC_SUBST([RT_LOG_PATH], ${exp_logfiledir}) dnl Configure the output files, and generate them. +dnl Binaries that should be +x AC_CONFIG_FILES([ + sbin/rt-dump-database sbin/rt-setup-database - sbin/rt-test-dependencies - Makefile - etc/RT_Config.pm - lib/RT.pm - lib/t/00smoke.t - lib/t/01harness.t - lib/t/02regression.t - lib/t/03web.pl - lib/t/04_send_email.pl + sbin/rt-test-dependencies bin/mason_handler.fcgi bin/mason_handler.scgi - bin/mason_handler.svc - bin/rt-commit-handler + bin/standalone_httpd bin/rt-crontool bin/rt-mailgate - bin/webmux.pl] - ) + bin/rt], + [chmod ug+x $ac_file] + ) + +dnl All other generated files +AC_CONFIG_FILES([ + Makefile + etc/RT_Config.pm + lib/RT.pm + bin/mason_handler.svc + bin/webmux.pl], + ) AC_OUTPUT diff --git a/rt/docs/design_docs/3.3-schema-redesign.txt b/rt/docs/design_docs/3.3-schema-redesign.txt new file mode 100644 index 000000000..518eccd4d --- /dev/null +++ b/rt/docs/design_docs/3.3-schema-redesign.txt @@ -0,0 +1,57 @@ +-- --------------------------------------- -- +-- RT 3.3 Schema redesign v7: 2004-11-08 -- +-- --------------------------------------- -- + +TABLE CustomFields ( + id INTEGER NOT NULL AUTO_INCREMENT, + Name varchar(200) NULL , + Type varchar(200) NULL , -- Changed: see MaxValues below + MaxValues integer, -- New: 1 = Single, 0 = Multiple + Pattern varchar(255) NULL , -- New: regex to validate against + Repeated int2 NOT NULL DEFAULT 0 , -- New: repeated table entry + LookupType varchar(255) NOT NULL, -- New: "RT::Queue-RT::Ticket" + Description varchar(255) NULL , + SortOrder integer NOT NULL DEFAULT 0 , -- only used on "pick CF" screen +) + +-- This table replaces the "Queue" field in CustomFields +TABLE ObjectCustomFields ( + id INTEGER NOT NULL AUTO_INCREMENT, + CustomField int NOT NULL , -- CustomField ID + ObjectId integer NOT NULL, -- Final id of toplevel parent, or + -- the object itself if ParentType + -- is empty; 0 means global as usual + SortOrder integer NOT NULL DEFAULT 0 , -- this is used to sort the CFs +); + +-- This table replaces TicketCustomFieldValues +TABLE ObjectCustomFieldValues ( + id INTEGER NOT NULL AUTO_INCREMENT, + CustomField int NOT NULL , + ObjectType varchar(255) NOT NULL, -- Final target of the Object + ObjectId int NOT NULL , -- New: replaces the "Ticket" field + SortOrder integer NOT NULL DEFAULT 0 , -- New: for Repeated fields + + Content varchar(255) NULL , + LargeContent LONGTEXT NULL, -- New: data longer than 255 bytes + ContentType varchar(80) NULL, -- New: MIME type of LargeContent + ContentEncoding varchar(80) NULL , -- New: for binary LargeContent + Disabled int2 NOT NULL DEFAULT 0 , -- New: whether this is deleted +) + +TABLE Transactions ( + id INTEGER NOT NULL AUTO_INCREMENT, + ObjectType varchar(255) NULL, -- Final target of the Object + ObjectId integer NOT NULL DEFAULT 0 , -- New: replaces the "Ticket" field + TimeTaken integer NOT NULL DEFAULT 0 , + Type varchar(20) NULL , + Field varchar(40) NULL , + OldValue varchar(255) NULL , + NewValue varchar(255) NULL , + ReferenceType varchar(255) NULL, -- NeW: Currently "RT::OCFV" only + OldReference integer NULL , -- New: Id of ReferenceType + NewReference integer NULL , -- New: Id of ReferenceType + Data varchar(255) NULL , +) + +-- vim: filetype=mysql shiftwidth=4 expandtab diff --git a/rt/docs/design_docs/cvs_integration b/rt/docs/design_docs/cvs_integration index 35c8737ed..45a758fbe 100644 --- a/rt/docs/design_docs/cvs_integration +++ b/rt/docs/design_docs/cvs_integration @@ -85,14 +85,14 @@ marc: I think the idea is to force you to mention the ticket closing in the commit message. () jesse@FSCK.COM: but yeah, state changing - and 'update messages' are seperate concepts that should both be + and 'update messages' are separate concepts that should both be supported. () jesse@FSCK.COM: part of the idea is to drag the commit message into the BTS () jhawk: Err, I think it quite frequent that I want - to put seperate info in both the commit message and the ticket system, + to put separate info in both the commit message and the ticket system, and entering them at the same time seems cool. () jesse@FSCK.COM: ok. noted. I'll see if diff --git a/rt/docs/design_docs/link-definitions.txt b/rt/docs/design_docs/link-definitions.txt index 30b903567..e109744cf 100644 --- a/rt/docs/design_docs/link-definitions.txt +++ b/rt/docs/design_docs/link-definitions.txt @@ -92,7 +92,7 @@ For 2.0, those Linking actions should be supported: Based on user feedback, merged tickets will be displayed as the same ticket within RT's user interfaces. but the original tickets' transactions will be -kept seperated in the database. this may require some magic. +kept separated in the database. this may require some magic. 4. RefersTo / No Action link (linking) diff --git a/rt/docs/design_docs/realflow.txt b/rt/docs/design_docs/realflow.txt new file mode 100644 index 000000000..3717e273b --- /dev/null +++ b/rt/docs/design_docs/realflow.txt @@ -0,0 +1,191 @@ +- I have a MonitoredQueue that sets tickets to "Monitored" + if its subject matches /monitored/. + +- I want to have a kind of Ticket that are 'Monitored'. +- I want all monitored tickets, when they are overdue for + 14 days, to: + - send notification to manager + - mark as stalled +- I want all monitored tickets, when they are overdue for + 28 days, to: + - mark as rejected +- I want to query all tickets that are monitored as such +- I want to modify 14 => 15 and have it affect all existing + tickets that are monitored + +{ +- I want to add a new "overdue for 27 days, add a 'ultimatum' + correspondence to it" rule for all monitored tickets. +- I want to add a new "overdue for 27 days, add a 'ultimatum' + correspondence to it" rule for all _new_ monitored tickets + without affecting existing ones. +} + +- The user of OrderRequest queue needs to fill a numeric "CF", + called "Price". +- On creation, it needs to create following approvals: + - "Manager" approval if CF.Price is > 1000 + - "President" approval if CF.Price is > 2000 +- When all of "M", "P" are resolved (if any, or if there were none + to begin with), Create a new approval, "Finance". +- If any approvals above is rejected, reject the original ticket. +- If "Finance" is resolved, resolve original ticket. +- If "Finance" is rejected, create an approval for "CEO". +- If "CEO" is resolved, resolve the original ticket. +- If "CEO" is rejected, reject the original ticket. + +[RuleAction CreateTicketWithRuleset] + -> ReleaseMyLockOnRuleset $ruleset + -> UnlessLockOnRuleset $ruleset + # i.e. if no active tickets still have a lock on it + -> ForceCreateTicketWithRuleset $ruleset + +[Queue OrderRequest] + -> Condition: OnCreate + Action: AddTicketRuleSet "PurchaseApproval" + # Triggers immediately + +[RuleSet: PurchaseApproval] + -> Condition: OnCreate + Condition: CF.Price > 1000 + Action: CreateTicketWithRuleset "ManagerApproval" + -> Condition: OnCreate + Condition: CF.Price > 2000 + Action: CreateTicketWithRuleset "PresidentApproval" + -> Condition: OnCreate + Action: CreateTicketWithRuleset "FinanceApproval" + -> Condition: OnReject + Action: DeleteTree + +[RuleSet: ManagerApproval] + -> Condition: OnCreate + Action: Prohibit Ruleset "FinanceApproval" + -> Condition: OnResolve + Action: CreateTicketWithRuleset "FinanceApproval" + -> Condition: OnReject + Action: RejectTicket TOP + +[RuleSet: PresidentApproval] + -> Condition: OnCreate + Action: Prohibit CreateTicketWithRuleset "FinanceApproval" + -> Condition: OnResolve + Action: CreateTicketWithRuleset "FinanceApproval" + -> Condition: OnReject + Action: RejectTicket TOP + +[RuleSet: FinanceApproval] + -> Condition: OnCreate + Action: Prohibit RuleSet "CEOApproval" + -> Condition: OnResolve + Action: ResolveTicket TOP + -> Condition: OnReject + Action: CreateTicketWithRuleset "CEOApproval" + +[RuleSet: CEOApproval] + -> Condition: OnResolve + Action: ResolveTicket TOP + -> Condition: OnReject + Action: RejectTicket TOP + + + +Prohibit Ticket Operation: + Ruleset CEOApproval + + + + + + + + ,--------. +[TOP] --> [M] --> [F] + ` `-> [P] -' + ` + `-> [X] --> [Y] + + +[TOP] => [Approval] + -> Queue: B + -> Rule: yyy + -> Workflow: W + -> Stage: Approval + -> Rule: xxx + +isa_ok( $Approval->Type, 'RT::Ticket' ); +is( $Approval->Workflow->Name, 'W' ); +is( $Approval->Stage->Name, 'Approval' ); + +[Queue: A] + -> Workflow: W + +[Workflow: W] + -> Stage: TOP + -> Stage: Approval + -> Stage: SUCCESS + -> Stage: FAIL + +"RuleCollections" + +[Stage: TOP] + -> Rule: OnCreate RunStage Approval + +ok( TicketA->Rules->HasEntry($ApprovalRule) ) +ok( TicketB->Rules->HasEntry($ApprovalRule) ) + +[Rule: Approval] + -> Rule: OnResolve RunStage SUCCESS + -> Rule: OnReject RunStage FAIL + +[Stage: SUCCESS] + -> Rule: OnCreate SetStatus('resolved') TOP + +[Stage: FAIL] + -> Rule: OnCreate SetStatus('rejected') TOP + +[Unassociated] + - Rule FOO: OnAnything { + CreateTicketIfNotBlocked StageFOO + AddLink DependedOnBy TOP to Stage1 + AssignRule DoStage2 to Stage1 + AssignRule DoStage3 to Stage1 + } + - Rule BAR: OnAnything { + CreateTicketIfNotBlocked StageBAR + DoSomethingBizzare + } + + ,==> [Stage0] ==>. + , . +[TOP] ==> [Stage1] ==> [Stage3] + ` ' + `==> [Stage2] ==>' + +OnTransaction: + $self->Ticket->Queues->Scrips->Apply + +OnTransaction: + $self->Ticket->Queues->Scrips->Apply + ->Scrips->Apply + +OnTransaction: + $self->Ticket->Queues->Scrips->Apply + ->Stages->Scrips->Apply + +[QueueX] + - Rule: + OnCreate: + RunRule FOO + +[QueueY] + - Rule: + OnWhatever: + RunRule FOO + + +[TOP] => [Stage1] => [Stage2] => [END] + `- => [Stage3] => [END] + ` -> [Stage4] + +[Stages] + -> diff --git a/rt/docs/design_docs/rt-mvc b/rt/docs/design_docs/rt-mvc new file mode 100644 index 000000000..3518b7d9a --- /dev/null +++ b/rt/docs/design_docs/rt-mvc @@ -0,0 +1,32 @@ +Goals: + + + Never write an init block for a page that just views/edits pages + No style embedded in view/edit pages + + Validation / Error display and re-editing. + + +Implementation. + + + For a given object's fields: + + print a label for the field + print the current values for the field + print an edit widget for create + print an edit widget for update + + + + for a given form buttons for "perform the action" "don't perform the main action" + + +Edit widgets + + + text input + hidden + fixed enum as { dropdown, select multiple, sleect single, radio} + checkbox fixed enum + diff --git a/rt/docs/rt3-schema-relationships.dot b/rt/docs/rt3-schema-relationships.dot new file mode 100644 index 000000000..e290f8bcf --- /dev/null +++ b/rt/docs/rt3-schema-relationships.dot @@ -0,0 +1,89 @@ +digraph g { +graph [ +rankdir = "RL", + concentrate = true, +ratio = auto +]; +node [ +fontsize = "18", +shape = record, fontsize = 18 +]; +edge [ +]; + +"Records" [shape = record, fontsize = 18, label = "(Any RT::Record)" ]; +"Records" -> "Principals" [label = "Creator -> id"]; +"ACL" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"ACL" -> "Principals" [label="PrincipalId -> id"]; +"ACL" -> "Principals" [label="DelegatedBy -> id"]; +"ACL" -> "ACL" [label="DelegatedFrom -> id"]; + +"Attachments" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Attachments" -> "Transactions" [label="TransactionId -> id"]; +"Attachments" -> "Attachments" [label="Parent -> id"]; + +"CachedGroupMemers" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"CachedGroupMemers" -> "Groups" [label="GroupId -> id", weight=2]; +"CachedGroupMemers" -> "Principals" [label="MemberId -> id"]; +"CachedGroupMemers" -> "CachedGroupMemers" [label="Via -> id"]; +"CachedGroupMemers" -> "Groups" [label="ImmediateParentId -> id"]; + +"CustomFields" [shape = record, fontsize = 18, label = "<col0> \N " ]; + +"CustomFieldValues" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"CustomFieldValues" -> "CustomFields" [label="CustomField -> id"]; + +"GroupMembers" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"GroupMembers" -> "Groups" [label="GroupId -> id", weight=2]; +"GroupMembers" -> "Principals" [label="MemberId -> id", weight = 2]; + +"Groups" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Groups" -> "Principals" [label="Groups.id -> id"]; + +"Links" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Links" -> "Tickets" [label="LocalBase => id (usually)", style="dotted"]; +"Links" -> "Tickets" [label="LocalTarget => id (usually)", style="dotted"]; + +"Principals" [shape = record, fontsize = 18, label = "<col0> \N " ]; + +"Attributes" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Attributes" -> "Records" [label="ObjectId -> id"]; + +"Queues" [shape = record, fontsize = 18, label = "<col0> \N " ]; + +"ScripActions" [shape = record, fontsize = 18, label = "<col0> \N " ]; + +"ScripConditions" [shape = record, fontsize = 18, label = "<col0> \N " ]; + +"Scrips" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Scrips" -> "ScripConditions" [label="ScripCondition -> id"]; +"Scrips" -> "ScripActions" [label="ScripAction -> id"]; +"Scrips" -> "Templates" [label="Template -> id"]; +"Scrips" -> "Queues" [label="Queue -> id"]; + +"Templates" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Templates" -> "Queues" [label ="Queue -> id" ]; + +"ObjectCustomFields" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"ObjectCustomFields" -> "CustomFields" [label="CustomField -> id"]; +"ObjectCustomFields" -> "Records" [label="ObjectId -> id"]; + +"ObjectCustomFieldValues" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"ObjectCustomFieldValues" -> "CustomFields" [label="CustomField -> id"]; +"ObjectCustomFieldValues" -> "Records" [label="ObjectId -> id"]; + +"Tickets" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Tickets" -> "Tickets" [label="EffectiveId -> id"]; +"Tickets" -> "Principals" [label="Owner -> id"]; +"Queues" -> "Tickets" [style="invis"]; +"Tickets" -> "Queues" [label="Queue -> id"]; + +"Transactions" [shape = record, fontsize = 18, label = "<col0> \N " ]; +"Transactions" -> "Records" [label="ObjectId -> id"]; + +"Users" [shape = record, fontsize = 18, label = "<col0> \N " ]; + +"Users" -> "Principals" [label="id -> id"]; + + +} diff --git a/rt/etc/RT_Config.pm b/rt/etc/RT_Config.pm index 2b3f4f9fe..5386a8e05 100644 --- a/rt/etc/RT_Config.pm +++ b/rt/etc/RT_Config.pm @@ -47,7 +47,7 @@ Set($Timezone , 'US/Eastern'); # {{{ Database Configuration # Database driver beeing used. Case matters -# Valid types are "mysql" and "Pg" +# Valid types are "mysql", "Oracle" and "Pg" Set($DatabaseType , 'mysql'); @@ -164,9 +164,9 @@ Set($SenderMustExistInExternalDatabase , undef); # and comment mail tracked by RT, unless overridden by a queue-specific # address. -Set($CorrespondAddress , 'RT::CorrespondAddress.not.set'); +Set($CorrespondAddress , 'RT_CorrespondAddressNotSet'); -Set($CommentAddress , 'RT::CommentAddress.not.set'); +Set($CommentAddress , 'RT_CommentAddressNotSet'); #Sendmail Configuration @@ -268,9 +268,6 @@ Set($WebBaseURL , "http://RT::WebBaseURL.not.configured:80"); Set($WebURL , $WebBaseURL . $WebPath . "/"); # $WebImagesURL points to the base URL where RT can find its images. -# If you're running the FastCGI version of the RT web interface, -# you should make RT's WebRT/html/NoAuth/images directory available on -# a static web server and supply that URL as $WebImagesURL. Set($WebImagesURL , $WebURL . "NoAuth/images/"); @@ -278,6 +275,15 @@ Set($WebImagesURL , $WebURL . "NoAuth/images/"); Set($LogoURL , $WebImagesURL . "rt.jpg"); +# For message boxes, set the entry box width and what type of wrapping +# to use. +# +# Default width: 72 +Set($MessageBoxWidth , 72); + +# Default wrapping: "HARD" (choices "SOFT", "HARD") +Set($MessageBoxWrap, "HARD"); + # if TrustHTMLAttachments is not defined, we will display them # as text. This prevents malicious HTML and javascript from being # sent in a request (although there is probably more to it than that) @@ -310,6 +316,25 @@ Set($WebExternalAuto , undef); # Set($WebSessionClass , 'Apache::Session::File'); +# $MaxInlineBody is the maximum attachment size that we want to see +# inline when viewing a transaction. 13456 is a random sane-sounding +# default. + +Set($MaxInlineBody, 13456); + +# $MyTicketsLength is the length of the 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 some time off. + +Set($MyTicketsLength, 10); + +# @MasonParameters is the list of parameters for the constructor of +# HTML::Mason's Apache or CGI Handler. This is normally only useful +# for debugging, eg. profiling individual components with +# (preamble => 'my $p = MasonX::Profiler->new($m, $r);'); + +@MasonParameters = () unless (@MasonParameters); + # }}} # {{{ RT UTF-8 Settings diff --git a/rt/etc/RT_Config.pm.in b/rt/etc/RT_Config.pm.in index 5f97eb0a0..773e3e2dc 100644 --- a/rt/etc/RT_Config.pm.in +++ b/rt/etc/RT_Config.pm.in @@ -17,7 +17,7 @@ use RT::Config; # {{{ Base Configuration -# $rtname the string that RT will look for in mail messages to +# $rtname is the string that RT will look for in mail messages to # figure out what ticket a new piece of mail belongs to # Your domain name is recommended, so as not to pollute the namespace. @@ -26,6 +26,28 @@ use RT::Config; Set($rtname , "example.com"); + +# This regexp controls what subject tags RT recognizes as its own. +# If you're not dealing with historical $rtname values, you'll likely +# never have to enable this feature. +# +# Be VERY CAREFUL with it. Note that it overrides $rtname for subject +# token matching and that you should use only "non-capturing" parenthesis +# grouping. For example: +# +# Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/ ); +# +# and NOT +# +# Set($EmailSubjectTagRegex, qr/(example.com|example.org)/ ); +# +# This setting would make RT behave exactly as it does without the +# setting enabled. +# +# Set($EmailSubjectTagRegex, qr/\Q$rtname\E/ ); + + + # You should set this to your organization's DNS domain. For example, # fsck.com or asylum.arkham.ma.us. It's used by the linking interface to # guarantee that ticket URIs are unique and easy to construct. @@ -42,12 +64,10 @@ Set($Timezone , 'US/Eastern'); # }}} -# }}} - # {{{ Database Configuration # Database driver beeing used. Case matters -# Valid types are "mysql" and "Pg" +# Valid types are "mysql", "Oracle" and "Pg" Set($DatabaseType , '@DB_TYPE@'); @@ -89,7 +109,7 @@ Set($OwnerEmail , 'root'); Set($LoopsToRTOwner , 1); -# If $StoreLoopss is defined, RT will record messages that it believes +# If $StoreLoops is defined, RT will record messages that it believes # to be part of mail loops. # As it does this, it will try to be careful not to send mail to the # sender of these messages @@ -106,12 +126,12 @@ Set($StoreLoops , undef); Set($MaxAttachmentSize , 10000000); # $TruncateLongAttachments: if this is set to a non-undef value, -# RT will truncate attachments longer than MaxAttachmentLength. +# RT will truncate attachments longer than MaxAttachmentSize. Set($TruncateLongAttachments , undef); # $DropLongAttachments: if this is set to a non-undef value, -# RT will silently drop attachments longer than MaxAttachmentLength. +# RT will silently drop attachments longer than MaxAttachmentSize. Set($DropLongAttachments , undef); @@ -135,8 +155,12 @@ Set($RTAddressRegexp , '^rt\@example.com$'); # (These values are passed to the CanonicalizeEmailAddress subroutine in RT/User.pm) # By default, that routine performs a s/$Match/$Replace/gi on any address passed to it -Set($CanonicalizeEmailAddressMatch , 'subdomain.example.com$'); -Set($CanonicalizeEmailAddressReplace , 'example.com'); +#Set($CanonicalizeEmailAddressMatch , '@subdomain\.example\.com$'); +#Set($CanonicalizeEmailAddressReplace , '@example.com'); + +# set this to true and the create new user page will use the values that you +# enter in the form but use the function CanonicalizeUserInfo in User_Local.pm +Set($CanonicalizeOnCreate , 0); # If $SenderMustExistInExternalDatabase is true, RT will refuse to # create non-privileged accounts for unknown users if you are using @@ -164,9 +188,9 @@ Set($SenderMustExistInExternalDatabase , undef); # and comment mail tracked by RT, unless overridden by a queue-specific # address. -Set($CorrespondAddress , 'RT::CorrespondAddress.not.set'); +Set($CorrespondAddress , 'RT_CorrespondAddressNotSet'); -Set($CommentAddress , 'RT::CommentAddress.not.set'); +Set($CommentAddress , 'RT_CommentAddressNotSet'); #Sendmail Configuration @@ -175,7 +199,7 @@ Set($CommentAddress , 'RT::CommentAddress.not.set'); # If 'sendmailpipe' doesn't work well for you, try 'sendmail' # # Note that you should remove the '-t' from $SendmailArguments -# if you use 'sendmail rather than 'sendmailpipe' +# if you use 'sendmail' rather than 'sendmailpipe' Set($MailCommand , 'sendmailpipe'); @@ -216,12 +240,15 @@ Set($UseFriendlyToLine , 0); # are WatcherType and TicketId. Set($FriendlyToLineFormat, "\"%s of $RT::rtname Ticket #%s\":;"); -# By default RT doesn't notify the person who performs an update, as they +# By default, RT doesn't notify the person who performs an update, as they # already know what they've done. If you'd like to change this behaviour, # Set $NotifyActor to 1 Set($NotifyActor, 0); +# By default, RT records each message it sends out to its own internal database.# To change this behaviour, set $RecordOutgoingEmail to 0 + +Set($RecordOutgoingEmail, 1); # }}} @@ -247,6 +274,14 @@ Set($LogToFile , undef); Set($LogDir, '@RT_LOG_PATH@'); Set($LogToFileNamed , "rt.log"); #log to rt.log +# On Solaris or UnixWare, set to ( socket => 'inet' ). Options here +# override any other options RT passes to Log::Dispatch::Syslog. +# Other interesting flags include facility and logopt. (See the +# Log::Dispatch::Syslog documentation for more information.) (Maybe +# ident too, if you have multiple RT installations.) + +@LogToSyslogConf = () unless (@LogToSyslogConf); + # }}} # {{{ Web interface configuration @@ -263,26 +298,51 @@ Set($WebPath , ""); # This is the Scheme, server and port for constructing urls to webrt # $WebBaseURL doesn't need a trailing / -Set($WebBaseURL , "http://RT::WebBaseURL.not.configured:80"); +Set($WebBaseURL , "http://localhost"); Set($WebURL , $WebBaseURL . $WebPath . "/"); # $WebImagesURL points to the base URL where RT can find its images. -# If you're running the FastCGI version of the RT web interface, -# you should make RT's WebRT/html/NoAuth/images directory available on -# a static web server and supply that URL as $WebImagesURL. -Set($WebImagesURL , $WebURL . "NoAuth/images/"); +Set($WebImagesURL , $WebPath . "/NoAuth/images/"); + +# $LogoURL points to the URL of the RT logo displayed in the web UI -# $RTLogoURL points to the URL of the RT logo displayed in the web UI +Set($LogoURL , $WebImagesURL . "bplogo.gif"); + +# WebNoAuthRegex - What portion of RT's URLspace should not require +# authentication. +Set($WebNoAuthRegex, qr!^(?:/+NoAuth/| + /+REST/\d+\.\d+/NoAuth/)!x ); + +# For message boxes, set the entry box width and what type of wrapping +# to use. +# +# Default width: 72 +Set($MessageBoxWidth , 72); -Set($LogoURL , $WebImagesURL . "rt.jpg"); +# Default wrapping: "HARD" (choices "SOFT", "HARD") +Set($MessageBoxWrap, "HARD"); # if TrustHTMLAttachments is not defined, we will display them # as text. This prevents malicious HTML and javascript from being # sent in a request (although there is probably more to it than that) Set($TrustHTMLAttachments , undef); +# Should RT redistribute correspondence that it identifies as +# machine generated? A true value (the default) will do so, setting +# this to '0' will cause no such messages to be redistributed. +# You can also use 'privileged', which will redistribute only to +# privileged users. This is seful if you get malformed bounces caused by +# autocreated requestors with bogus addresses. +Set($RedistributeAutoGeneratedMessages, 1); + +# If PreferRichText is set to a true value, RT will show HTML/Rich text +# messages in preference to their plaintext alternatives. RT "scrubs" the +# html to show only a minimal subset of HTML to avoid possible contamination +# by cross-site-scripting attacks. +Set($PreferRichText, undef); + # If $WebExternalAuth is defined, RT will defer to the environment's # REMOTE_USER variable. @@ -310,13 +370,66 @@ Set($WebExternalAuto , undef); # Set($WebSessionClass , 'Apache::Session::File'); +# By default, RT clears its database cache after every page view. +# This ensures that you've always got the most current information +# when working in a multi-process (mod_perl or FastCGI) Environment +# Setting $WebFlushDbCacheEveryRequest to '0' will turn this off, +# which will speed RT up a bit, at the expense of a tiny bit of data +# accuracy + +Set($WebFlushDbCacheEveryRequest, '1'); + + +# $MaxInlineBody is the maximum attachment size that we want to see +# inline when viewing a transaction. 13456 is a random sane-sounding +# default. + +Set($MaxInlineBody, 13456); + +# $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 +# some time off. + +Set($MyTicketsLength, 10); + +# $MyRequestsLength is the length of the requested tickets table +# on the front page. + +Set($MyRequestsLength, 10); + +# @MasonParameters is the list of parameters for the constructor of +# HTML::Mason's Apache or CGI Handler. This is normally only useful +# for debugging, eg. profiling individual components with: +# use MasonX::Profiler; # available on CPAN +# @MasonParameters = (preamble => 'my $p = MasonX::Profiler->new($m, $r);'); + +@MasonParameters = () unless (@MasonParameters); + +# $DefaultSearchResultFormat is the default format for RT search results +Set ($DefaultSearchResultFormat, qq{ + '<B><A HREF="$RT::WebPath/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#', + '<B><A HREF="$RT::WebPath/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject', + Status, + QueueName, + OwnerName, + Priority, + '__NEWLINE__', + '', + '<small>__Requestors__</small>', + '<small>__CreatedRelative__</small>', + '<small>__ToldRelative__</small>', + '<small>__LastUpdatedRelative__</small>', + '<small>__TimeLeft__</small>'}); + + # }}} # {{{ RT UTF-8 Settings # An array that contains languages supported by RT's internationalization -# interface. Defaults to all *.po lexicons; set it to qw(en ja) will make -# RT bilingual instead of multilingual, but will save same memory. +# interface. Defaults to all *.po lexicons; setting it to qw(en ja) will make +# RT bilingual instead of multilingual, but will save some memory. @LexiconLanguages = qw(*) unless (@LexiconLanguages); @@ -346,4 +459,35 @@ Set($AmbiguousDayInPast , 1); # }}} +# {{{ Miscellaneous RT Settings + +# You can define new statuses and even reorder existing statuses here. +# WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT +# will break horribly. + +@ActiveStatus = qw(new open stalled) unless @ActiveStatus; +@InactiveStatus = qw(resolved rejected deleted) unless @InactiveStatus; + +# }}} + + +# {{{ Development Mode +# +# RT comes with a "Development mode" setting. +# This setting, as a convenience for developers, turns on +# all sorts of development options that you most likely don't want in +# production: +# +# * Turns off Mason's 'static_source' directive. By default, you can't +# edit RT's web ui components on the fly and have RT magically pick up +# your changes. (It's a big performance hit) +# +# * More to come +# + +Set($DevelMode, '@RT_DEVEL_MODE@'); + +# }}} + + 1; diff --git a/rt/etc/RT_SiteConfig.pm b/rt/etc/RT_SiteConfig.pm index 0afc6045c..affd36bb3 100644 --- a/rt/etc/RT_SiteConfig.pm +++ b/rt/etc/RT_SiteConfig.pm @@ -1 +1,40 @@ +# Any configuration directives you include here will override +# RT's default configuration file, RT_Config.pm +# +# To include a directive here, just copy the equivalent statement +# from RT_Config.pm and change the value. We've included a single +# sample value below. +# +# This file is actually a perl module, so you can include valid +# perl code, as well. +# +# The converse is also true, if this file isn't valid perl, you're +# going to run into trouble. To check your SiteConfig file, use +# this comamnd: +# +# perl -c /path/to/your/etc/RT_SiteConfig.pm + +#Set( $rtname, 'example.com'); + +$RT::rtname = '%%%RT_DOMAIN%%%'; +$RT::Organization = '%%%RT_DOMAIN%%%'; + +$RT::Timezone = '%%%RT_TIMEZONE%%%'; + +$RT::WebBaseURL = ''; +$RT::WebPath = '/freeside/rt'; + +$RT::WebExternalAuth = 1; +$RT::WebFallbackToInternal = 1; #no +$RT::WebExternalAuto = 1; + +$RT::URI::freeside::IntegrationType = 'Internal'; +$RT::URI::freeside::URL = '%%%FREESIDE_URL%%%'; + +Set($DatabaseHost , ''); + +#perl 5.8.0 - 5.8.2 experiment +#@EmailInputEncodings = qw(iso-8859-1 us-ascii utf-8); # unless (@EmailInputEncodings); +#Set($EmailOutputEncoding , 'iso-8859-1'); + 1; diff --git a/rt/etc/acl.Informix b/rt/etc/acl.Informix new file mode 100644 index 000000000..bca0408dd --- /dev/null +++ b/rt/etc/acl.Informix @@ -0,0 +1,5 @@ +sub acl { +return ( +"GRANT RESOURCE TO ${RT::DatabaseUser};"); +} +1; diff --git a/rt/etc/acl.Oracle b/rt/etc/acl.Oracle index c8667c031..ac29215c2 100644 --- a/rt/etc/acl.Oracle +++ b/rt/etc/acl.Oracle @@ -1,10 +1,10 @@ sub acl { return ( -"CREATE USER ${RT::DatabaseUser} identified by ${RT::DatabasePassword}". -"temporary tablespace TEMP" . -"default tablespace USERS" . -"quota unlimited on USERS;" , -"grant connect, resource to ${RT::DatabaseUser};", -"exit;"); +"CREATE USER ${RT::DatabaseUser} identified by ${RT::DatabasePassword} ". +"default tablespace USERS " . +"temporary tablespace TEMP " . +"quota unlimited on USERS" , +"grant connect, resource to ${RT::DatabaseUser}" +); } 1; diff --git a/rt/etc/acl.Pg b/rt/etc/acl.Pg index 16ea71b2d..fb625592d 100755 --- a/rt/etc/acl.Pg +++ b/rt/etc/acl.Pg @@ -7,38 +7,42 @@ sub acl { attachments_id_seq Attachments + Attributes + attributes_id_seq queues_id_seq - Queues + Queues links_id_seq - Links + Links principals_id_seq - Principals + Principals groups_id_seq - Groups + Groups scripconditions_id_seq - ScripConditions + ScripConditions transactions_id_seq - Transactions + Transactions scrips_id_seq - Scrips + Scrips acl_id_seq - ACL + ACL groupmembers_id_seq - GroupMembers + GroupMembers cachedgroupmembers_id_seq - CachedGroupMembers + CachedGroupMembers users_id_seq - Users + Users tickets_id_seq - Tickets + Tickets scripactions_id_seq - ScripActions + ScripActions templates_id_seq - Templates - ticketcustomfieldvalues_id_s - TicketCustomFieldValues + Templates + objectcustomfieldvalues_id_s + ObjectCustomFieldValues customfields_id_seq - CustomFields + CustomFields + objectcustomfields_id_s + ObjectCustomFields customfieldvalues_id_seq CustomFieldValues sessions diff --git a/rt/etc/acl.Sybase b/rt/etc/acl.Sybase new file mode 100644 index 000000000..6192b4ebe --- /dev/null +++ b/rt/etc/acl.Sybase @@ -0,0 +1,6 @@ +sub acl { +return ( +"SP_ADDLOGIN ${RT::DatabaseUser}, ${RT::DatabasePassword}, ${RT::DatabaseName} ", +); +} +1; diff --git a/rt/etc/acl.mysql b/rt/etc/acl.mysql index 0ecaa3b15..621ef121c 100755 --- a/rt/etc/acl.mysql +++ b/rt/etc/acl.mysql @@ -1,8 +1,9 @@ sub acl { +return () if !$RT::DatabaseUser or $RT::DatabaseUser eq 'root'; return ( "USE mysql;", "DELETE FROM user WHERE user = '${RT::DatabaseUser}';", "DELETE FROM db where db = '${RT::DatabaseName}';", -"GRANT SELECT,INSERT,CREATE,INDEX,UPDATE,DELETE ON ${RT::DatabaseName}.* TO ${RT::DatabaseUser}\@${RT::DatabaseRTHost} IDENTIFIED BY '${RT::DatabasePassword}';"); +"GRANT SELECT,INSERT,CREATE,INDEX,UPDATE,DELETE ON ${RT::DatabaseName}.* TO ${RT::DatabaseUser}\@'${RT::DatabaseRTHost}' IDENTIFIED BY '${RT::DatabasePassword}';"); } 1; diff --git a/rt/etc/constraints.mysql b/rt/etc/constraints.mysql index 33a037673..355d2c5e5 100644 --- a/rt/etc/constraints.mysql +++ b/rt/etc/constraints.mysql @@ -1,52 +1,85 @@ -#ALTER TABLE Users ADD FOREIGN KEY (Creator) REFERENCES Users(id); -#ALTER TABLE Users ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); - ALTER TABLE Links ADD FOREIGN KEY (LocalBase) REFERENCES Tickets(id) ; + + ALTER TABLE Links ADD INDEX(LocalBase); + ALTER TABLE Links ADD FOREIGN KEY (LocalBase) REFERENCES Tickets(id); + ALTER TABLE Links ADD INDEX(LocalTarget); ALTER TABLE Links ADD FOREIGN KEY (LocalTarget) REFERENCES Tickets(id); - ObjectId integer, # FOREIGN KEY to Users or Groups, depending + ALTER TABLE Tickets ADD INDEX(Queue); ALTER TABLE Tickets ADD FOREIGN KEY (Queue) REFERENCES Queues(id); + ALTER TABLE Tickets ADD INDEX(EffectiveId); ALTER TABLE Tickets ADD FOREIGN KEY (EffectiveId) REFERENCES Tickets(id); + ALTER TABLE Tickets ADD INDEX(Owner); ALTER TABLE Tickets ADD FOREIGN KEY (Owner) REFERENCES Principals(id); + ALTER TABLE Tickets ADD INDEX(Creator); + ALTER TABLE Tickets ADD INDEX(LastUpdatedBy); ALTER TABLE Tickets ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE Tickets ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); + ALTER TABLE Transactions ADD INDEX(Creator); + ALTER TABLE Transactions ADD INDEX (Ticket) ; + ALTER TABLE Transactions ADD INDEX (EffectiveTicket) ; ALTER TABLE Transactions ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE Transactions ADD FOREIGN KEY (Ticket) REFERENCES Tickets(id); ALTER TABLE Transactions ADD FOREIGN KEY (EffectiveTicket) REFERENCES Tickets(id); + ALTER TABLE Attachments ADD INDEX (TransactionId) ; + ALTER TABLE Attachments ADD INDEX (Parent) ; ALTER TABLE Attachments ADD FOREIGN KEY (TransactionId) REFERENCES Transactions(id); ALTER TABLE Attachments ADD FOREIGN KEY (Parent) REFERENCES Attachments(id); + ALTER TABLE Scrips ADD INDEX (ScripCondition) ; + ALTER TABLE Scrips ADD INDEX (ScripAction) ; + ALTER TABLE Scrips ADD INDEX (Template) ; + ALTER TABLE Scrips ADD INDEX (Queue) ; + ALTER TABLE Scrips ADD INDEX (Creator) ; + ALTER TABLE Scrips ADD INDEX (LastUpdatedBy) ; ALTER TABLE Scrips ADD FOREIGN KEY (ScripCondition) REFERENCES ScripConditions(id); ALTER TABLE Scrips ADD FOREIGN KEY (ScripAction) REFERENCES ScripActions(id); ALTER TABLE Scrips ADD FOREIGN KEY (Template) REFERENCES Templates(id); ALTER TABLE Scrips ADD FOREIGN KEY (Queue) REFERENCES Queues(id); ALTER TABLE Scrips ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE Scrips ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); - PrincipalId integer NOT NULL , #ALTER TABLE ADD FOREIGN KEY to principals - DelegatedBy integer NOT NULL default 0, #ALTER TABLE ADD FOREIGN KEY to principals with a userid - DelegatedFrom integer NOT NULL default 0, #ALTER TABLE ADD FOREIGN KEY to ACL + ALTER TABLE ACL ADD INDEX (PrincipalId) ; + ALTER TABLE ACL ADD INDEX (DelegatedBy) ; + ALTER TABLE ACL ADD INDEX (DelegatedFrom) ; ALTER TABLE ACL ADD FOREIGN KEY (PrincipalId) REFERENCES Principals(id); ALTER TABLE ACL ADD FOREIGN KEY (DelegatedBy) REFERENCES Principals(id); ALTER TABLE ACL ADD FOREIGN KEY (DelegatedFrom) REFERENCES ACL(id); - ALTER TABLE GroupMembers ADD FOREIGN KEY (GroupId) REFERENCES Principals(id); + ALTER TABLE GroupMembers ADD INDEX (MemberId); + ALTER TABLE GroupMembers ADD INDEX (GroupId); + ALTER TABLE GroupMembers ADD FOREIGN KEY (GroupId) REFERENCES Groups(id); ALTER TABLE GroupMembers ADD FOREIGN KEY (MemberId) REFERENCES Principals(id); - GroupId int, # ALTER TABLE ADD FOREIGN KEY to Principals - MemberId int, # ALTER TABLE ADD FOREIGN KEY to Principals - Via int, #ALTER TABLE ADD FOREIGN KEY to CachedGroupMembers. (may point to $self->id) - ImmediateParentId int, #ALTER TABLE ADD FOREIGN KEY to prinicpals. + ALTER TABLE CachedGroupMembers ADD INDEX (ImmediateParentId) ; + ALTER TABLE CachedGroupMembers ADD INDEX (GroupId) ; + ALTER TABLE CachedGroupMembers ADD INDEX (MemberId) ; + ALTER TABLE CachedGroupMembers ADD INDEX (Via) ; ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (ImmediateParentId) REFERENCES Principals(id); ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (GroupId) REFERENCES Principals(id); ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (MemberId) REFERENCES Principals(id); ALTER TABLE CachedGroupMembers ADD FOREIGN KEY (Via) REFERENCES CachedGroupMembers(id); + ALTER TABLE ScripActions ADD INDEX(Creator); + ALTER TABLE ScripActions ADD INDEX(LastUpdatedBy); ALTER TABLE ScripActions ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE ScripActions ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); + ALTER TABLE Templates ADD INDEX(Queue); + ALTER TABLE Templates ADD INDEX(Creator); + ALTER TABLE Templates ADD INDEX(LastUpdatedBy); ALTER TABLE Templates ADD FOREIGN KEY (Queue) REFERENCES Queues(id); ALTER TABLE Templates ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE Templates ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); + ALTER TABLE CustomFields ADD INDEX(Queue); + ALTER TABLE CustomFields ADD INDEX(Creator); + ALTER TABLE CustomFields ADD INDEX(LastUpdatedBy); ALTER TABLE CustomFields ADD FOREIGN KEY (Queue) REFERENCES Queues(id); ALTER TABLE CustomFields ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE CustomFields ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); - ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (Ticket) REFERENCES Ticketss(id); + ALTER TABLE TicketCustomFieldValues ADD INDEX(Ticket); + ALTER TABLE TicketCustomFieldValues ADD INDEX(CustomField); + ALTER TABLE TicketCustomFieldValues ADD INDEX(Creator); + ALTER TABLE TicketCustomFieldValues ADD INDEX(LastUpdatedBy); + ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (Ticket) REFERENCES Tickets(id); ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (CustomField) REFERENCES CustomFields(id); ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE TicketCustomFieldValues ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); + ALTER TABLE CustomFieldValues ADD INDEX(CustomField); + ALTER TABLE CustomFieldValues ADD INDEX(Creator); + ALTER TABLE CustomFieldValues ADD INDEX(LastUpdatedBy); ALTER TABLE CustomFieldValues ADD FOREIGN KEY (CustomField) REFERENCES CustomFields(id); ALTER TABLE CustomFieldValues ADD FOREIGN KEY (Creator) REFERENCES Users(id); ALTER TABLE CustomFieldValues ADD FOREIGN KEY (LastUpdatedBy) REFERENCES Users(id); diff --git a/rt/etc/drop.Informix b/rt/etc/drop.Informix new file mode 100644 index 000000000..ce7cc0181 --- /dev/null +++ b/rt/etc/drop.Informix @@ -0,0 +1,19 @@ +DROP TABLE ACL; +DROP TABLE ATTACHMENTS; +DROP TABLE CACHEDGROUPMEMBERS; +DROP TABLE CUSTOMFIELDS; +DROP TABLE CUSTOMFIELDVALUES; +DROP TABLE GROUPMEMBERS; +DROP TABLE GROUPS; +DROP TABLE LINKS; +DROP TABLE PRINCIPALS; +DROP TABLE QUEUES; +DROP TABLE SCRIPACTIONS; +DROP TABLE SCRIPCONDITIONS; +DROP TABLE SCRIPS; +DROP TABLE SESSIONS; +DROP TABLE TEMPLATES; +DROP TABLE TICKETCUSTOMFIELDVALUES; +DROP TABLE TICKETS; +DROP TABLE TRANSACTIONS; +DROP TABLE USERS; diff --git a/rt/etc/drop.Oracle b/rt/etc/drop.Oracle new file mode 100644 index 000000000..4ce5de475 --- /dev/null +++ b/rt/etc/drop.Oracle @@ -0,0 +1,39 @@ +DROP TABLE ACL; +DROP TABLE ATTACHMENTS; +DROP TABLE ATTRIBUTES; +DROP TABLE CACHEDGROUPMEMBERS; +DROP TABLE CUSTOMFIELDS; +DROP TABLE CUSTOMFIELDVALUES; +DROP TABLE GROUPMEMBERS; +DROP TABLE GROUPS; +DROP TABLE LINKS; +DROP TABLE PRINCIPALS; +DROP TABLE QUEUES; +DROP TABLE SCRIPACTIONS; +DROP TABLE SCRIPCONDITIONS; +DROP TABLE SCRIPS; +DROP TABLE SESSIONS; +DROP TABLE TEMPLATES; +DROP TABLE TICKETCUSTOMFIELDVALUES; +DROP TABLE TICKETS; +DROP TABLE TRANSACTIONS; +DROP TABLE USERS; +DROP SEQUENCE ACL_seq; +DROP SEQUENCE ATTACHMENTS_seq; +DROP SEQUENCE ATTRIBUTES_seq; +DROP SEQUENCE CACHEDGROUPMEMBERS_seq; +DROP SEQUENCE CUSTOMFIELDS_seq; +DROP SEQUENCE CUSTOMFIELDVALUES_seq; +DROP SEQUENCE GROUPMEMBERS_seq; +DROP SEQUENCE GROUPS_seq; +DROP SEQUENCE LINKS_seq; +DROP SEQUENCE PRINCIPALS_seq; +DROP SEQUENCE QUEUES_seq; +DROP SEQUENCE SCRIPACTIONS_seq; +DROP SEQUENCE SCRIPCONDITIONS_seq; +DROP SEQUENCE SCRIPS_seq; +DROP SEQUENCE TEMPLATES_seq; +DROP SEQUENCE TICKETCUSTOMFIELDVALUES_seq; +DROP SEQUENCE TICKETS_seq; +DROP SEQUENCE TRANSACTIONS_seq; +DROP SEQUENCE USERS_seq; diff --git a/rt/etc/initialdata b/rt/etc/initialdata index 62b35ace2..3a21ce1f6 100644 --- a/rt/etc/initialdata +++ b/rt/etc/initialdata @@ -86,6 +86,14 @@ Description => 'Sends mail to the owner', # loc ExecModule => 'Notify', Argument => 'Owner' }, + { Name => 'Notify Ccs as Comment', # loc + Description => 'Sends mail to the Ccs as a comment', # loc + ExecModule => 'NotifyAsComment', + Argument => 'Cc' }, + { Name => 'Notify Ccs', # loc + Description => 'Sends mail to the Ccs', # loc + ExecModule => 'Notify', + Argument => 'Cc' }, { Name => 'Notify AdminCcs as Comment', # loc Description => 'Sends mail to the administrative Ccs as a comment', # loc ExecModule => 'NotifyAsComment', @@ -166,6 +174,13 @@ }, { + Name => 'On Priority Change', # loc + Description => 'Whenever a ticket\'s priority changes', # loc + ApplicableTransTypes => 'Set', + ExecModule => 'PriorityChange', + }, + { + Name => 'On Owner Change', # loc Description => 'Whenever a ticket\'s owner changes', # loc ApplicableTransTypes => 'Any', @@ -307,7 +322,7 @@ This is a comment. It is not sent to the Requestor(s): Queue => '0', Name => 'Resolved', # loc Description => 'Ticket Resolved', # loc - Content => 'Subject: Ticket Resolved + Content => 'Subject: Resolved: {$Ticket->Subject} According to our records, your request has been resolved. If you have any further questions or concerns, please respond to this message. @@ -336,7 +351,7 @@ batch-process all your pending approvals. Name => "Approval Passed", # loc Description => "Notify Owner of their ticket has been approved by some approver", # loc - Content => 'Subject: Ticket Rejected: {$Ticket->Subject} + Content => 'Subject: Ticket Approved: {$Ticket->Subject} Greetings, @@ -348,7 +363,7 @@ Other approvals may be pending. Name => "All Approvals Passed", # loc Description => "Notify Owner of their ticket has been approved by all approvers", # loc - Content => 'Subject: Ticket Rejected: {$Ticket->Subject} + Content => 'Subject: Ticket Approved: {$Ticket->Subject} Greetings, @@ -373,6 +388,9 @@ Your ticket has been rejected by { eval { $Approval->OwnerObj->Name } }. { ScripCondition => 'On Correspond', ScripAction => 'Open Tickets', Template => 'Blank' }, + { ScripCondition => 'On Owner Change', + ScripAction => 'Notify Owner', + Template => 'Transaction' }, { ScripCondition => 'On Create', ScripAction => 'AutoReply To Requestors', Template => 'AutoReply' }, @@ -551,7 +569,7 @@ while (my $link = $links->Next) { require RT::Action::Notify; bless($self, 'RT::Action::Notify'); $self->{Argument} = 'Requestor'; $self->Prepare; -return $passed; +return 0; # ignore $passed; # ------------------------------------------------------------------- # ], CustomCommitCode => '"never needed"', diff --git a/rt/etc/schema.Informix b/rt/etc/schema.Informix new file mode 100644 index 000000000..6a4e5334e --- /dev/null +++ b/rt/etc/schema.Informix @@ -0,0 +1,364 @@ +-- This schema was adopted from the oracle schema by +-- Andre Koppel. +-- Version 0.2 Date 2003.10.21 +-- The work is still in progress + +CREATE TABLE Attachments ( + id SERIAL, + TransactionId INTEGER NOT NULL, + Parent INTEGER DEFAULT 0 NOT NULL, + MessageId VARCHAR(160), + Subject VARCHAR(255), + Filename VARCHAR(255), + ContentType VARCHAR(80), + ContentEncoding VARCHAR(80), + Content BYTE, + Headers BYTE, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); +CREATE INDEX Attachments1 ON Attachments (Parent); +CREATE INDEX Attachments2 ON Attachments (TransactionId); +CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId); + + +CREATE TABLE Queues ( + id SERIAL, + Name VARCHAR(200) DEFAULT '' NOT NULL, + Description VARCHAR(255) DEFAULT NULL, + CorrespondAddress VARCHAR(120) DEFAULT NULL, + CommentAddress VARCHAR(120) DEFAULT NULL, + InitialPriority INTEGER DEFAULT 0 NOT NULL, + FinalPriority INTEGER DEFAULT 0 NOT NULL, + DefaultDueIn INTEGER DEFAULT 0 NOT NULL, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + Disabled INTEGER DEFAULT 0 NOT NULL, + PRIMARY KEY (id) +); +CREATE UNIQUE INDEX Queues1 ON Queues (Name); +CREATE INDEX Queues2 ON Queues (Disabled); + + +CREATE TABLE Links ( + id SERIAL, + Base VARCHAR(240) DEFAULT NULL, + Target VARCHAR(240) DEFAULT NULL, + Type VARCHAR(20) DEFAULT '' NOT NULL, + LocalTarget INTEGER DEFAULT 0 NOT NULL, + LocalBase INTEGER DEFAULT 0 NOT NULL, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); +-- 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); + + +CREATE TABLE Principals ( + id SERIAL, + PrincipalType VARCHAR(16) DEFAULT '' NOT NULL, + ObjectId INTEGER DEFAULT 0, + Disabled INTEGER DEFAULT 0 NOT NULL, + PRIMARY KEY (id) +); +CREATE INDEX Principals2 ON Principals (ObjectId); + + +CREATE TABLE Groups ( + id SERIAL, + Name VARCHAR(200) DEFAULT NULL, + Description VARCHAR(255) DEFAULT NULL, + Domain VARCHAR(64) DEFAULT '', + Type VARCHAR(64) DEFAULT '', + Instance INTEGER DEFAULT 0 NOT NULL, +-- Instance VARCHAR(64) DEFAULT '' NOT NULL, + PRIMARY KEY (id) +); +CREATE INDEX Groups1 ON Groups (Domain, Instance, Type, id); +CREATE INDEX Groups2 ON Groups (Type, Instance, Domain); + + +CREATE TABLE ScripConditions ( + id SERIAL, + Name VARCHAR(200), + Description VARCHAR(255), + ExecModule VARCHAR(60), + Argument VARCHAR(255), + ApplicableTransTypes VARCHAR(60), + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + + +CREATE TABLE Transactions ( + id SERIAL, + ObjectType VARCHAR(255), + ObjectId INTEGER DEFAULT 0 NOT NULL, + TimeTaken INTEGER DEFAULT 0 NOT NULL, + Type VARCHAR(20), + Field VARCHAR(40), + OldValue VARCHAR(255), + NewValue VARCHAR(255), + ReferenceType VARCHAR(255), + OldReference INTEGER DEFAULT 0, + NewReference INTEGER DEFAULT 0, + Data VARCHAR(255), + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); +CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId); + + +CREATE TABLE Scrips ( + id SERIAL, + Description VARCHAR(255) DEFAULT '', + ScripCondition INTEGER DEFAULT 0 NOT NULL, + ScripAction INTEGER DEFAULT 0 NOT NULL, + ConditionRules BYTE, + ActionRules BYTE, + CustomIsApplicableCode BYTE, + CustomPrepareCode BYTE, + CustomCommitCode BYTE, + Stage VARCHAR(32), + Queue INTEGER DEFAULT 0 NOT NULL, + Template INTEGER DEFAULT 0 NOT NULL, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + + +CREATE TABLE ACL ( + id SERIAL, + PrincipalType VARCHAR(25) NOT NULL, + PrincipalId INTEGER NOT NULL, + RightName VARCHAR(25) NOT NULL, + ObjectType VARCHAR(25) NOT NULL, + ObjectId INTEGER DEFAULT 0 NOT NULL, + DelegatedBy INTEGER DEFAULT 0 NOT NULL, + DelegatedFrom INTEGER DEFAULT 0 NOT NULL, + PRIMARY KEY (id) +); +CREATE INDEX ACL1 ON ACL(RightName, ObjectType, ObjectId, PrincipalType, PrincipalId); + + +CREATE TABLE GroupMembers ( + id SERIAL, + GroupId INTEGER DEFAULT 0 NOT NULL, + MemberId INTEGER DEFAULT 0 NOT NULL, + PRIMARY KEY (id) +); +CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers (GroupId, MemberId); + + +CREATE TABLE CachedGroupMembers ( + id SERIAL, + GroupId INTEGER DEFAULT 0, + MemberId INTEGER DEFAULT 0, + Via INTEGER DEFAULT 0, + ImmediateParentId INTEGER DEFAULT 0, + Disabled INTEGER DEFAULT 0 NOT NULL, + PRIMARY KEY (id) +); +CREATE INDEX DisGrouMem ON CachedGroupMembers (GroupId, MemberId, Disabled); +CREATE INDEX GrouMem ON CachedGroupMembers (GroupId, MemberId); + + +CREATE TABLE Users ( + id SERIAL, + Name VARCHAR(200) NOT NULL, + Password VARCHAR(40), + Comments BYTE, + Signature BYTE, + EmailAddress VARCHAR(120), + FreeFormContactInfo BYTE, + Organization VARCHAR(200), + RealName VARCHAR(120), + NickName VARCHAR(16), + Lang VARCHAR(16), + EmailEncoding VARCHAR(16), + WebEncoding VARCHAR(16), + ExternalContactInfoId VARCHAR(100), + ContactInfoSystem VARCHAR(30), + ExternalAuthId VARCHAR(100), + AuthSystem VARCHAR(30), + Gecos VARCHAR(16), + HomePhone VARCHAR(30), + WorkPhone VARCHAR(30), + MobilePhone VARCHAR(30), + PagerPhone VARCHAR(30), + Address1 VARCHAR(200), + Address2 VARCHAR(200), + City VARCHAR(100), + State VARCHAR(100), + Zip VARCHAR(16), + Country VARCHAR(50), + Timezone VARCHAR(50), + PGPKey BYTE, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); +-- CREATE UNIQUE INDEX Users1 ON Users (Name); +CREATE INDEX Users2 ON Users (Name); +CREATE INDEX Users3 ON Users (id, EmailAddress); +CREATE INDEX Users4 ON Users (EmailAddress); + + +CREATE TABLE Tickets ( + id SERIAL, + EffectiveId INTEGER DEFAULT 0 NOT NULL, + Queue INTEGER DEFAULT 0 NOT NULL, + Type VARCHAR(16), + IssueStatement INTEGER DEFAULT 0 NOT NULL, + Resolution INTEGER DEFAULT 0 NOT NULL, + Owner INTEGER DEFAULT 0 NOT NULL, + Subject VARCHAR(200) DEFAULT '[no subject]', + InitialPriority INTEGER DEFAULT 0 NOT NULL, + FinalPriority INTEGER DEFAULT 0 NOT NULL, + Priority INTEGER DEFAULT 0 NOT NULL, + TimeEstimated INTEGER DEFAULT 0 NOT NULL, + TimeWorked INTEGER DEFAULT 0 NOT NULL, + Status VARCHAR(10), + TimeLeft INTEGER DEFAULT 0 NOT NULL, + Told DATETIME YEAR TO SECOND, + Starts DATETIME YEAR TO SECOND, + Started DATETIME YEAR TO SECOND, + Due DATETIME YEAR TO SECOND, + Resolved DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + Disabled INTEGER DEFAULT 0 NOT NULL, + PRIMARY KEY (id) +); +CREATE INDEX Tickets1 ON Tickets (Queue, Status); +CREATE INDEX Tickets2 ON Tickets (Owner); +CREATE INDEX Tickets3 ON Tickets (EffectiveId); +CREATE INDEX Tickets4 ON Tickets (id, Status); +CREATE INDEX Tickets5 ON Tickets (id, EffectiveId); +CREATE INDEX Tickets6 ON Tickets (EffectiveId, Type); + + +CREATE TABLE ScripActions ( + id SERIAL, + Name VARCHAR(200), + Description VARCHAR(255), + ExecModule VARCHAR(60), + Argument VARCHAR(255), + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + + +CREATE TABLE Templates ( + id SERIAL, + Queue INTEGER DEFAULT 0 NOT NULL, + Name VARCHAR(200) NOT NULL, + Description VARCHAR(255), + Type VARCHAR(16), + Language VARCHAR(16), + TranslationOf INTEGER DEFAULT 0 NOT NULL, + Content BYTE, + LastUpdated DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + + +CREATE TABLE TicketCustomFieldValues ( + id SERIAL, + Ticket INTEGER NOT NULL, + CustomField INTEGER NOT NULL, + Content VARCHAR(255), + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + +CREATE INDEX TicketCustomFieldValues1 ON TicketCustomFieldValues (CustomField,Ticket,Content); +CREATE INDEX TicketCustomFieldValues2 ON TicketCustomFieldValues (CustomField,Ticket); + +CREATE TABLE CustomFields ( + id SERIAL, + Name VARCHAR(200), + Type VARCHAR(200), + MaxValues INTEGER DEFAULT 0 NOT NULL, + Pattern VARCHAR(255), + LookupType VARCHAR(255), + Description VARCHAR(255), + SortOrder INTEGER DEFAULT 0 NOT NULL, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + Disabled SMALLINT DEFAULT 0 NOT NULL, + PRIMARY KEY (id) +); + + +CREATE TABLE CustomFieldValues ( + id SERIAL, + CustomField INTEGER NOT NULL, + Name VARCHAR(200), + Description VARCHAR(255), + SortOrder INTEGER DEFAULT 0 NOT NULL, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + +CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField); + +CREATE TABLE Attributes ( + id SERIAL, + Name VARCHAR(255) DEFAULT '' NOT NULL, + Description VARCHAR(255) DEFAULT NULL, + Content BYTE, + ContentType VARCHAR(16), + ObjectType VARCHAR(25) NOT NULL, + ObjectId INTEGER DEFAULT 0 NOT NULL, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); + + +CREATE TABLE sessions ( + id VARCHAR(32) NOT NULL, + a_session BYTE, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + diff --git a/rt/etc/schema.Oracle b/rt/etc/schema.Oracle deleted file mode 100644 index 0c14cb39d..000000000 --- a/rt/etc/schema.Oracle +++ /dev/null @@ -1,287 +0,0 @@ -CREATE SEQUENCE KEYWORDSELECTS_seq; -CREATE TABLE KeywordSelects ( - id NUMBER(11, 0) PRIMARY KEY, - Name VARCHAR2(255), - Keyword NUMBER(11, 0), - Single NUMBER(11, 0), - Depth NUMBER(11, 0) DEFAULT 0, - ObjectType VARCHAR2(32) NOT NULL, - ObjectField VARCHAR2(32), - ObjectValue VARCHAR2(255), - Disabled NUMBER(11, 0) DEFAULT 0 -); - -CREATE INDEX KeywordSelects1 ON KeywordSelects (Keyword); -CREATE INDEX KeywordSelects2 ON - KeywordSelects(ObjectType, ObjectField, ObjectValue); - - -CREATE SEQUENCE ATTACHMENTS_seq; -CREATE TABLE Attachments ( - id NUMBER(11,0) PRIMARY KEY, - TransactionId NUMBER(11,0) NOT NULL, - Parent NUMBER(11,0), - MessageId VARCHAR2(160), - Subject VARCHAR2(255), - Filename VARCHAR2(255), - ContentType VARCHAR2(80), - ContentEncoding VARCHAR2(80), - Content CLOB, - Headers CLOB, - Creator NUMBER(11,0), - Created DATE, - Disabled NUMBER(11,0) DEFAULT 0 -); - -CREATE SEQUENCE QUEUES_seq; -CREATE TABLE Queues ( - id NUMBER(11, 0) PRIMARY KEY, - Name VARCHAR2(40) NOT NULL UNIQUE, - Description VARCHAR2(120), - CorrespondAddress VARCHAR2(40), - CommentAddress VARCHAR2(40), - InitialPriority NUMBER(11, 0), - FinalPriority NUMBER(11, 0), - DefaultDueIn NUMBER(11, 0), - Creator NUMBER(11, 0), - Created DATE, - LastUpdatedBy NUMBER(11, 0), - LastUpdated DATE, - Disabled NUMBER(11,0) DEFAULT 0 -); - -CREATE SEQUENCE LINKS_seq; -CREATE TABLE Links ( - id NUMBER(11,0) PRIMARY KEY, - Base VARCHAR2(255), - Target VARCHAR2(255), - Type VARCHAR2(20) NOT NULL, - LocalTarget NUMBER(11,0), - LocalBase NUMBER(11,0), - LastUpdatedBy NUMBER(11,0), - LastUpdated DATE, - Creator NUMBER(11,0), - Created DATE -); - -CREATE UNIQUE INDEX Links1 ON Links (Base, Target, Type); - - - -CREATE SEQUENCE GROUPS_seq; -CREATE TABLE Groups ( - id NUMBER(11,0) PRIMARY KEY, - Name VARCHAR2(16) UNIQUE, - Description VARCHAR(64), - Pseudo NUMBER(11,0) DEFAULT 0 -); - -CREATE SEQUENCE WATCHERS_seq; -CREATE TABLE Watchers ( - id NUMBER(11,0) PRIMARY KEY, - Type VARCHAR2(16), - Scope VARCHAR2(16), - Value NUMBER(11,0), - Email VARCHAR2(255), - Quiet NUMBER(11,0), - Owner NUMBER(11,0), - Creator NUMBER(11,0), - Created DATE, - LastUpdatedBy NUMBER(11,0), - LastUpdated DATE -); - - - -CREATE SEQUENCE SCRIPCONDITIONS_seq; -CREATE TABLE ScripConditions ( - id NUMBER(11, 0) PRIMARY KEY, - Name VARCHAR2(255), - Description VARCHAR2(255), - ExecModule VARCHAR2(60), - Argument VARCHAR2(255), - ApplicableTransTypes VARCHAR2(60), - Creator NUMBER(11, 0), - Created DATE, - LastUpdatedBy NUMBER(11, 0), - LastUpdated DATE -); - - -CREATE SEQUENCE TRANSACTIONS_seq; -CREATE TABLE Transactions ( - id NUMBER(11,0) PRIMARY KEY, - EffectiveTicket NUMBER(11,0), - Ticket NUMBER(11,0), - TimeTaken NUMBER(11,0), - Type VARCHAR2(20), - Field VARCHAR2(40), - OldValue VARCHAR2(255), - NewValue VARCHAR2(255), - Data VARCHAR2(100), - Creator NUMBER(11,0), - Created DATE, - Disabled NUMBER(11,0) DEFAULT 0 -); - -CREATE SEQUENCE SCRIPS_seq; -CREATE TABLE Scrips ( - id NUMBER(11,0) PRIMARY KEY, - ScripCondition NUMBER(11,0), - ScripAction NUMBER(11,0), - Stage VARCHAR2(32), - Queue NUMBER(11,0), - Template NUMBER(11,0), - Creator NUMBER(11,0), - Created DATE, - LastUpdatedBy NUMBER(11,0), - LastUpdated DATE -); - - - - -CREATE SEQUENCE ACL_seq; -CREATE TABLE ACL ( - id NUMBER(11,0) PRIMARY KEY, - PrincipalId NUMBER(11,0), - PrincipalType VARCHAR2(25), - RightName VARCHAR2(25), - RightScope VARCHAR2(25), - RightAppliesTo NUMBER(11,0) -); - -CREATE SEQUENCE GROUPMEMBERS_seq; -CREATE TABLE GroupMembers ( - id NUMBER(11,0) PRIMARY KEY, - GroupId NUMBER(11,0), - UserId NUMBER(11,0) -); - -CREATE UNIQUE INDEX GroupMembers1 ON GroupMembers (GroupId, UserId); - - -CREATE SEQUENCE OBJECTKEYWORDS_seq; -CREATE TABLE ObjectKeywords ( - id NUMBER(11,0) PRIMARY KEY, - Keyword NUMBER(11,0) NOT NULL, - KeywordSelect NUMBER(11,0) NOT NULL, - ObjectType VARCHAR2(32) NOT NULL, - ObjectId NUMBER(11,0) NOT NULL -); - -CREATE UNIQUE INDEX ObjectKeywords1 ON ObjectKeywords - (ObjectId, ObjectType, KeywordSelect, Keyword); -CREATE INDEX ObjectKeywords3 ON ObjectKeywords (Keyword); - -CREATE SEQUENCE KEYWORDS_seq; -CREATE TABLE Keywords ( - id NUMBER(11, 0) PRIMARY KEY, - Name VARCHAR2(255) NOT NULL, - Description VARCHAR2(255), - Parent NUMBER(11, 0), - Disabled NUMBER(11, 0) DEFAULT 0 -); - -CREATE UNIQUE INDEX Keywords1 ON Keywords (Name, Parent); -CREATE INDEX Keywords3 ON Keywords (Parent); - -CREATE SEQUENCE USERS_seq; -CREATE TABLE Users ( - id NUMBER(11,0) PRIMARY KEY, - Name VARCHAR2(120) NOT NULL UNIQUE, - Password VARCHAR2(40), - Comments CLOB, - Signature CLOB, - EmailAddress VARCHAR2(120), - FreeFormContactInfo CLOB, - Organization VARCHAR2(200), - Privileged NUMBER(11,0), - RealName VARCHAR2(120), - NickName VARCHAR2(16), - Lang VARCHAR2(16), - EmailEncoding VARCHAR2(16), - WebEncoding VARCHAR2(16), - ExternalContactInfoId VARCHAR2(100), - ContactInfoSystem VARCHAR2(30), - ExternalAuthId VARCHAR2(100), - AuthSystem VARCHAR2(30), - Gecos VARCHAR2(16), - HomePhone VARCHAR2(30), - WorkPhone VARCHAR2(30), - MobilePhone VARCHAR2(30), - PagerPhone VARCHAR2(30), - Address1 VARCHAR2(200), - Address2 VARCHAR2(200), - City VARCHAR2(100), - State VARCHAR2(100), - Zip VARCHAR2(16), - Country VARCHAR2(50), - Creator NUMBER(11,0), - Created DATE, - LastUpdatedBy NUMBER(11,0), - LastUpdated DATE, - Disabled NUMBER(11,0) DEFAULT 0 -); - - - - -CREATE SEQUENCE TICKETS_seq; -CREATE TABLE Tickets ( - id NUMBER(11, 0) PRIMARY KEY, - EffectiveId NUMBER(11, 0), - Queue NUMBER(11,0), - Type VARCHAR2(16), - IssueStatement NUMBER(11,0), - Resolution NUMBER(11,0), - Owner NUMBER(11,0), - Subject VARCHAR2(200) DEFAULT '', - InitialPriority NUMBER(11,0) DEFAULT 0, - FinalPriority NUMBER(11,0) DEFAULT 0, - Priority NUMBER(11,0) DEFAULT 0, - Status VARCHAR2(10), - TimeWorked NUMBER(11,0) DEFAULT 0, - TimeLeft NUMBER(11,0) DEFAULT 0, - Told DATE, - Starts DATE, - Started DATE, - Due DATE, - Resolved DATE, - LastUpdatedBy NUMBER(11,0), - LastUpdated DATE, - Creator NUMBER(11,0), - Created DATE, - Disabled NUMBER(11,0) DEFAULT 0 -); - -CREATE SEQUENCE SCRIPACTIONS_seq; -CREATE TABLE ScripActions ( - id NUMBER(11,0) PRIMARY KEY, - Name VARCHAR2(255), - Description VARCHAR2(255), - ExecModule VARCHAR2(60), - Argument VARCHAR2(255), - Creator NUMBER(11,0), - Created DATE, - LastUpdatedBy NUMBER(11,0), - LastUpdated DATE -); - - -CREATE SEQUENCE TEMPLATES_seq; -CREATE TABLE Templates ( - id NUMBER(11,0) PRIMARY KEY, - Queue NUMBER(11,0) DEFAULT 0 NOT NULL, - Name VARCHAR2(40) NOT NULL UNIQUE, - Description VARCHAR2(120), - Type VARCHAR2(16), - Language VARCHAR2(16), - TranslationOf NUMBER(11,0), - Content CLOB, - LastUpdated DATE, - LastUpdatedBy NUMBER(11,0), - Creator NUMBER(11,0), - Created DATE -); - diff --git a/rt/etc/schema.Pg b/rt/etc/schema.Pg index ba0d6fc6c..2d45a946a 100755 --- a/rt/etc/schema.Pg +++ b/rt/etc/schema.Pg @@ -3,9 +3,6 @@ -- ------------------------------------------------------------------ -BEGIN; - - -- @@ -60,7 +57,7 @@ CREATE TABLE Queues ( Created TIMESTAMP NULL , LastUpdatedBy integer NOT NULL DEFAULT 0 , LastUpdated TIMESTAMP NULL , - Disabled int2 NOT NULL DEFAULT 0 , + Disabled integer NOT NULL DEFAULT 0 , PRIMARY KEY (id) ); @@ -93,6 +90,7 @@ CREATE TABLE Links ( ); CREATE UNIQUE INDEX Links1 ON Links (Base, Target, Type) ; +CREATE INDEX Links4 ON Links(Type,LocalBase); -- }}} @@ -110,7 +108,7 @@ CREATE TABLE Principals ( id INTEGER DEFAULT nextval('principals_id_seq') not null, PrincipalType VARCHAR(16) not null, ObjectId integer, - Disabled int2 NOT NULL DEFAULT 0 , + Disabled integer NOT NULL DEFAULT 0 , PRIMARY KEY (id) ); @@ -136,7 +134,7 @@ CREATE TABLE Groups ( Description varchar(255) NULL , Domain varchar(64), Type varchar(64), - Instance varchar(64), + Instance integer, PRIMARY KEY (id) ); @@ -185,22 +183,24 @@ CREATE SEQUENCE transactions_id_seq; CREATE TABLE Transactions ( id INTEGER DEFAULT nextval('transactions_id_seq'), - EffectiveTicket integer NOT NULL DEFAULT 0 , - Ticket integer NOT NULL DEFAULT 0 , + ObjectType varchar(255) NOT NULL , + ObjectId integer NOT NULL DEFAULT 0 , TimeTaken integer NOT NULL DEFAULT 0 , Type varchar(20) NULL , Field varchar(40) NULL , OldValue varchar(255) NULL , NewValue varchar(255) NULL , - Data varchar(100) NULL , + ReferenceType varchar(255) NULL, + OldReference integer NULL , + NewReference integer NULL , + Data varchar(255) NULL , Creator integer NOT NULL DEFAULT 0 , Created TIMESTAMP NULL , PRIMARY KEY (id) ); -CREATE INDEX Transactions1 ON Transactions (Ticket); -CREATE INDEX Transactions2 ON Transactions (EffectiveTicket); +CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId); -- }}} @@ -301,7 +301,7 @@ CREATE TABLE CachedGroupMembers ( MemberId int, Via int, ImmediateParentId int, - Disabled int2 NOT NULL DEFAULT 0 , + Disabled integer NOT NULL DEFAULT 0 , PRIMARY KEY (id) ); @@ -408,7 +408,7 @@ CREATE TABLE Tickets ( LastUpdated TIMESTAMP NULL , Creator integer NOT NULL DEFAULT 0 , Created TIMESTAMP NULL , - Disabled int2 NOT NULL DEFAULT 0 , + Disabled integer NOT NULL DEFAULT 0 , PRIMARY KEY (id) ); @@ -476,7 +476,7 @@ CREATE TABLE Templates ( -- }}} --- {{{ TicketCustomFieldValues +-- {{{ ObjectCustomFieldValues @@ -484,22 +484,32 @@ CREATE TABLE Templates ( -- Sequences for table TICKETCUSTOMFIELDVALUES -- -CREATE SEQUENCE ticketcustomfieldvalues_id_s; +CREATE SEQUENCE objectcustomfieldvalues_id_s; -CREATE TABLE TicketCustomFieldValues ( - id INTEGER DEFAULT nextval('ticketcustomfieldvalues_id_s'), - Ticket int NOT NULL , +CREATE TABLE ObjectCustomFieldValues ( + id INTEGER DEFAULT nextval('objectcustomfieldvalues_id_s'), CustomField int NOT NULL , + ObjectType varchar(255) NULL , + ObjectId int NOT NULL , + SortOrder integer NOT NULL DEFAULT 0 , + Content varchar(255) NULL , + LargeContent text NULL, + ContentType varchar(80) NULL, + ContentEncoding varchar(80) NULL , Creator integer NOT NULL DEFAULT 0 , Created TIMESTAMP NULL , LastUpdatedBy integer NOT NULL DEFAULT 0 , LastUpdated TIMESTAMP NULL , + Disabled integer NOT NULL DEFAULT 0 , PRIMARY KEY (id) ); +CREATE INDEX ObjectCustomFieldValues1 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId,Content); +CREATE INDEX ObjectCustomFieldValues2 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId); + -- }}} -- {{{ CustomFields @@ -516,7 +526,10 @@ CREATE TABLE CustomFields ( id INTEGER DEFAULT nextval('customfields_id_seq'), Name varchar(200) NULL , Type varchar(200) NULL , - Queue integer NOT NULL DEFAULT 0 , + MaxValues integer NOT NULL DEFAULT 0 , + Repeated integer NOT NULL DEFAULT 0 , + Pattern varchar(255) NULL , + LookupType varchar(255) NOT NULL , Description varchar(255) NULL , SortOrder integer NOT NULL DEFAULT 0 , @@ -524,7 +537,27 @@ CREATE TABLE CustomFields ( Created TIMESTAMP NULL , LastUpdatedBy integer NOT NULL DEFAULT 0 , LastUpdated TIMESTAMP NULL , - Disabled int2 NOT NULL DEFAULT 0 , + Disabled integer NOT NULL DEFAULT 0 , + PRIMARY KEY (id) + +); + +-- }}} + +-- {{{ ObjectCustomFields + +CREATE SEQUENCE objectcustomfields_id_s; + +CREATE TABLE ObjectCustomFields ( + id INTEGER DEFAULT nextval('objectcustomfields_id_s'), + CustomField integer NOT NULL, + ObjectId integer NOT NULL, + SortOrder integer NOT NULL DEFAULT 0 , + + Creator integer NOT NULL DEFAULT 0 , + Created TIMESTAMP NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated TIMESTAMP NULL , PRIMARY KEY (id) ); @@ -556,6 +589,34 @@ CREATE TABLE CustomFieldValues ( ); +CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField); + +-- }}} + + +-- {{{ Attributes + +CREATE SEQUENCE attributes_id_seq; + +CREATE TABLE Attributes ( + id INTEGER DEFAULT nextval('attributes_id_seq'), + Name varchar(255) NOT NULL , + Description varchar(255) NULL , + Content text, + ContentType varchar(16), + ObjectType varchar(64), + ObjectId integer, + Creator integer NOT NULL DEFAULT 0 , + Created TIMESTAMP NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated TIMESTAMP NULL , + PRIMARY KEY (id) + +); + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); + -- }}} -- {{{ Sessions @@ -573,6 +634,3 @@ CREATE TABLE sessions ( -- }}} - - -COMMIT; diff --git a/rt/etc/schema.SQLite b/rt/etc/schema.SQLite index f24bdbdc1..8791bb47e 100644 --- a/rt/etc/schema.SQLite +++ b/rt/etc/schema.SQLite @@ -58,6 +58,7 @@ CREATE TABLE Links ( ) ; CREATE UNIQUE INDEX Links1 ON Links (Base, Target, Type) ; +CREATE INDEX Links4 ON Links(Type,LocalBase); --- }}} @@ -81,7 +82,7 @@ CREATE TABLE Groups ( Description varchar(255) NULL , Domain varchar(64), Type varchar(64), - Instance varchar(64) + Instance integer ) ; @@ -111,21 +112,23 @@ CREATE TABLE ScripConditions ( --- {{{ Transactions CREATE TABLE Transactions ( id INTEGER PRIMARY KEY , - EffectiveTicket integer NULL , - Ticket integer NULL , + ObjectType varchar(255) NULL , + ObjectId integer NULL , TimeTaken integer NULL , Type varchar(20) NULL , Field varchar(40) NULL , OldValue varchar(255) NULL , NewValue varchar(255) NULL , - Data varchar(100) NULL , + ReferenceType varchar(255) NULL , + OldReference integer NULL , + NewReference integer NULL , + Data varchar(255) NULL , Creator integer NULL , Created DATETIME NULL ) ; -CREATE INDEX Transactions1 ON Transactions (Ticket); -CREATE INDEX Transactions2 ON Transactions (EffectiveTicket); +CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId); --- }}} @@ -328,57 +331,112 @@ CREATE TABLE Templates ( --- }}} ---- {{{ TicketCustomFieldValues -CREATE TABLE TicketCustomFieldValues ( - id INTEGER PRIMARY KEY , - Ticket int NOT NULL , + +# {{{ ObjectCustomFieldValues + +CREATE TABLE ObjectCustomFieldValues ( + id INTEGER NOT NULL , CustomField int NOT NULL , + ObjectType varchar(255) NOT NULL, # Final target of the Object + ObjectId int NOT NULL , # New -- Replaces Ticket + SortOrder integer NOT NULL DEFAULT 0 , + Content varchar(255) NULL , + LargeContent LONGTEXT NULL, # New -- to hold 255+ strings + ContentType varchar(80) NULL, # New -- only text/* gets searched + ContentEncoding varchar(80) NULL , # New -- for binary Content - Creator integer NULL , + Creator integer NOT NULL DEFAULT 0 , Created DATETIME NULL , - LastUpdatedBy integer NULL , - LastUpdated DATETIME NULL - + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + Disabled int2 NOT NULL DEFAULT 0 , + PRIMARY KEY (id) ) ; ---- }}} +CREATE INDEX ObjectCustomFieldValues1 ON ObjectCustomFieldValues (Content); +CREATE INDEX ObjectCustomFieldValues2 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId); + +# }}} ---- {{{ CustomFields +# {{{ CustomFields CREATE TABLE CustomFields ( - id INTEGER PRIMARY KEY , + id INTEGER NOT NULL , Name varchar(200) NULL , - Type varchar(200) NULL , - Queue int NULL , + Type varchar(200) NULL , # Changed -- 'Single' and 'Multiple' is moved out + MaxValues integer, # New -- was 'Single'(1) and 'Multiple'(0) + Pattern varchar(255) NULL , # New -- Must validate against this + Repeated int2 NOT NULL DEFAULT 0 , # New -- repeated table entry Description varchar(255) NULL , - SortOrder integer NULL , + SortOrder integer NOT NULL DEFAULT 0 , + LookupType varchar(255) NOT NULL, - Creator integer NULL , + Creator integer NOT NULL DEFAULT 0 , Created DATETIME NULL , - LastUpdatedBy integer NULL , - LastUpdated DATETIME NULL , - Disabled int2 NOT NULL DEFAULT 0 - + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + Disabled int2 NOT NULL DEFAULT 0 , + PRIMARY KEY (id) ) ; ---- }}} +# }}} + +# {{{ ObjectCustomFields + +CREATE TABLE ObjectCustomFields ( + id INTEGER NOT NULL , + CustomField int NOT NULL , + ObjectId integer NOT NULL, + SortOrder integer NOT NULL DEFAULT 0 , ---- {{{ CustomFieldValues + Creator integer NOT NULL DEFAULT 0 , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +# }}} + +# {{{ CustomFieldValues CREATE TABLE CustomFieldValues ( - id INTEGER PRIMARY KEY , + id INTEGER NOT NULL , CustomField int NOT NULL , Name varchar(200) NULL , Description varchar(255) NULL , - SortOrder integer NULL , + SortOrder integer NOT NULL DEFAULT 0 , + Creator integer NOT NULL DEFAULT 0 , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField); + +# }}} + +--- {{{ Attributes +CREATE TABLE Attributes ( + id INTEGER PRIMARY KEY , + Name varchar(255) NOT NULL , + Description varchar(255) NULL , + Content LONGTEXT NULL , + ContentType varchar(16), + ObjectType varchar(25) NOT NULL , + ObjectId INTEGER default 0, Creator integer NULL , Created DATETIME NULL , LastUpdatedBy integer NULL , - LastUpdated DATETIME NULL - + LastUpdated DATETIME NULL + ) ; +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); --- }}} + diff --git a/rt/etc/schema.Sybase b/rt/etc/schema.Sybase new file mode 100644 index 000000000..67a411d13 --- /dev/null +++ b/rt/etc/schema.Sybase @@ -0,0 +1,444 @@ +# {{{ Attachments + +CREATE TABLE rt3.Attachments ( + id numeric(38,0) identity, + TransactionId integer NOT NULL , + Parent integer NOT NULL , + MessageId varchar(160) NULL , + Subject varchar(255) NULL , + Filename varchar(255) NULL , + ContentType varchar(80) NULL , + ContentEncoding varchar(80) NULL , + Content TEXT NULL , + Headers TEXT NULL , + Creator integer NOT NULL , + Created DATETIME NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX Attachments1 ON Attachments (Parent) ; +CREATE INDEX Attachments2 ON Attachments (TransactionId) ; +CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId) ; +# }}} + +# {{{ Queues +CREATE TABLE rt3.Queues ( + id numeric(38,0) identity, + Name varchar(200) NOT NULL , + Description varchar(255) NULL , + CorrespondAddress varchar(120) NULL , + CommentAddress varchar(120) NULL , + InitialPriority integer NOT NULL , + FinalPriority integer NOT NULL , + DefaultDueIn integer NOT NULL , + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + Disabled numeric(1) NOT NULL , + PRIMARY KEY (id) +) ; +CREATE UNIQUE INDEX Queues1 ON Queues (Name) ; +CREATE INDEX Queues2 ON Queues (Disabled) ; + +# }}} + +# {{{ Links + +CREATE TABLE rt3.Links ( + id numeric(38,0) identity, + Base varchar(240) NULL , + Target varchar(240) NULL , + Type varchar(20) NOT NULL , + LocalTarget integer NOT NULL , + LocalBase integer NOT NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + Creator integer NOT NULL , + Created DATETIME NULL , + PRIMARY KEY (id) +) ; + +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); + +# }}} + +# {{{ Principals + +CREATE TABLE rt3.Principals ( + id numeric(38,0) identity, + PrincipalType VARCHAR(16) not null, + ObjectId integer, Disabled numeric(1) NOT NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX Principals2 ON Principals (ObjectId); + +# }}} + +# {{{ Groups + +CREATE TABLE rt3.Groups ( + id numeric(38,0) identity, + Name varchar(200) NULL , + Description varchar(255) NULL , + Domain varchar(64), + Type varchar(64), + Instance integer, + PRIMARY KEY (id) +) ; + +CREATE INDEX Groups1 ON Groups (Domain,Instance,Type,id); +CREATE INDEX Groups2 On Groups (Type, Instance, Domain); + +# }}} + +# {{{ ScripConditions + +CREATE TABLE rt3.ScripConditions ( + id numeric(38,0) identity, + Name varchar(200) NULL , + Description varchar(255) NULL , + ExecModule varchar(60) NULL , + Argument varchar(255) NULL , + ApplicableTransTypes varchar(60) NULL , + + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +# }}} + +# {{{ Transactions +CREATE TABLE rt3.Transactions ( + id numeric(38,0) identity, + EffectiveTicket integer NOT NULL , + Ticket integer NOT NULL , + TimeTaken integer NOT NULL , + Type varchar(20) NULL , + Field varchar(40) NULL , + OldValue varchar(255) NULL , + NewValue varchar(255) NULL , + Data varchar(255) NULL , + + Creator integer NOT NULL , + Created DATETIME NULL , + PRIMARY KEY (id) +) ; +CREATE INDEX Transactions1 ON Transactions (Ticket); +CREATE INDEX Transactions2 ON Transactions (EffectiveTicket); + +# }}} + +# {{{ Scrips + +CREATE TABLE rt3.Scrips ( + id numeric(38,0) identity, + Description varchar(255), + ScripCondition integer NOT NULL , + ScripAction integer NOT NULL , + ConditionRules text NULL , + ActionRules text NULL , + CustomIsApplicableCode text NULL , + CustomPrepareCode text NULL , + CustomCommitCode text NULL , + Stage varchar(32) NULL , + Queue integer NOT NULL , + Template integer NOT NULL , + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +# }}} + +# {{{ ACL +CREATE TABLE rt3.ACL ( + id numeric(38,0) identity, + PrincipalType varchar(25) NOT NULL, #"User" "Group", "Owner", "Cc" "AdminCc", "Requestor", "Requestor" + + PrincipalId integer NOT NULL , #Foreign key to principals + RightName varchar(25) NOT NULL , + ObjectType varchar(25) NOT NULL , + ObjectId integer NOT NULL , + DelegatedBy integer NOT NULL , #foreign key to principals with a userid + DelegatedFrom integer NOT NULL , #foreign key to ACL + PRIMARY KEY (id) +) ; + +CREATE INDEX ACL1 on ACL(RightName, ObjectType, ObjectId,PrincipalType,PrincipalId); + +# }}} + +# {{{ GroupMembers + +CREATE TABLE rt3.GroupMembers ( + id numeric(38,0) identity, + GroupId integer NOT NULL , + MemberId integer NOT NULL , #Foreign key to Principals + PRIMARY KEY (id) +) ; +CREATE UNIQUE INDEX GroupMembers1 on GroupMembers (GroupId, MemberId); + + +# }}} + +# {{{ GroupMembersCache + +CREATE TABLE rt3.CachedGroupMembers ( + id numeric(38,0) identity, + GroupId int, # foreign key to Principals + MemberId int, # foreign key to Principals + Via int, #foreign key to CachedGroupMembers. (may point to $self->id) + ImmediateParentId int, #foreign key to prinicpals. + # this points to the group that the member is + # a member of, for ease of deletes. + Disabled numeric(1) NOT NULL , # if this cached group member is a member of this group by way of a disabled + # group or this group is disabled, this will be set to 1 + # this allows us to not find members of disabled subgroups when listing off + # group members recursively. + # Also, this allows us to have the ACL system elide members of disabled groups + PRIMARY KEY (id) +) ; + +CREATE INDEX DisGrouMem on CachedGroupMembers (GroupId,MemberId,Disabled); +CREATE INDEX GrouMem on CachedGroupMembers (GroupId,MemberId); + +# }}} + +# {{{ Users + +CREATE TABLE rt3.Users ( + id numeric(38,0) identity, + Name varchar(200) NOT NULL , + Password varchar(40) NULL , + Comments text NULL , + Signature text NULL , + EmailAddress varchar(120) NULL , + FreeformContactInfo text NULL , + Organization varchar(200) NULL , + RealName varchar(120) NULL , + NickName varchar(16) NULL , + Lang varchar(16) NULL , + EmailEncoding varchar(16) NULL , + WebEncoding varchar(16) NULL , + ExternalContactInfoId varchar(100) NULL , + ContactInfoSystem varchar(30) NULL , + ExternalAuthId varchar(100) NULL , + AuthSystem varchar(30) NULL , + Gecos varchar(16) NULL , + HomePhone varchar(30) NULL , + WorkPhone varchar(30) NULL , + MobilePhone varchar(30) NULL , + PagerPhone varchar(30) NULL , + Address1 varchar(200) NULL , + Address2 varchar(200) NULL , + City varchar(100) NULL , + State varchar(100) NULL , + Zip varchar(16) NULL , + Country varchar(50) NULL , + Timezone varchar(50) NULL , + PGPKey text NULL, + + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + + +CREATE UNIQUE INDEX Users1 ON Users (Name) ; +CREATE INDEX Users2 ON Users (Name); +CREATE INDEX Users3 ON Users (id, EmailAddress); +CREATE INDEX Users4 ON Users (EmailAddress); + + +# }}} + +# {{{ Tickets + +CREATE TABLE rt3.Tickets ( + id numeric(38,0) identity, + EffectiveId integer NOT NULL , + Queue integer NOT NULL , + Type varchar(16) NULL , + IssueStatement integer NOT NULL , + Resolution integer NOT NULL , + Owner integer NOT NULL , + Subject varchar(200) NULL, + InitialPriority integer NOT NULL , + FinalPriority integer NOT NULL , + Priority integer NOT NULL , + TimeEstimated integer NOT NULL , + TimeWorked integer NOT NULL , + Status varchar(10) NULL , + TimeLeft integer NOT NULL , + Told DATETIME NULL , + Starts DATETIME NULL , + Started DATETIME NULL , + Due DATETIME NULL , + Resolved DATETIME NULL , + + + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + Creator integer NOT NULL , + Created DATETIME NULL , + Disabled numeric(1) NOT NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX Tickets1 ON Tickets (Queue, Status) ; +CREATE INDEX Tickets2 ON Tickets (Owner) ; +CREATE INDEX Tickets3 ON Tickets (EffectiveId) ; +CREATE INDEX Tickets4 ON Tickets (id, Status) ; +CREATE INDEX Tickets5 ON Tickets (id, EffectiveId) ; +CREATE INDEX Tickets6 ON Tickets (EffectiveId, Type) ; + +# }}} + +# {{{ ScripActions + +CREATE TABLE rt3.ScripActions ( + id numeric(38,0) identity, + Name varchar(200) NULL , + Description varchar(255) NULL , + ExecModule varchar(60) NULL , + Argument varchar(255) NULL , + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +# }}} + +# {{{ Templates + +CREATE TABLE rt3.Templates ( + id numeric(38,0) identity, + Queue integer NOT NULL , + Name varchar(200) NOT NULL , + Description varchar(255) NULL , + Type varchar(16) NULL , + Language varchar(16) NULL , + TranslationOf integer NOT NULL , + Content text NULL , + LastUpdated DATETIME NULL , + LastUpdatedBy integer NOT NULL , + Creator integer NOT NULL , + Created DATETIME NULL , + PRIMARY KEY (id) +) ; + +# }}} + +# {{{ TicketCustomFieldValues + +CREATE TABLE rt3.TicketCustomFieldValues ( + id numeric(38,0) identity, + Ticket int NOT NULL , + CustomField int NOT NULL , + Content varchar(255) NULL , + + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX TicketCustomFieldValues1 ON TicketCustomFieldValues (CustomField,Ticket,Content); +CREATE INDEX TicketCustomFieldValues2 ON TicketCustomFieldValues (CustomField,Ticket); + +# }}} + +# {{{ CustomFields + +CREATE TABLE rt3.CustomFields ( + id numeric(38,0) identity, + Name varchar(200) NULL , + Type varchar(200) NULL , + Queue integer NOT NULL , + Description varchar(255) NULL , + SortOrder integer NOT NULL , + + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + Disabled numeric(1) NOT NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX CustomFields1 on CustomFields (Disabled, Queue); + + +# }}} + +# {{{ CustomFieldValues + +CREATE TABLE rt3.CustomFieldValues ( + id numeric(38,0) identity, + CustomField int NOT NULL , + Name varchar(200) NULL , + Description varchar(255) NULL , + SortOrder integer NOT NULL , + + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField); + +# }}} + + +# {{{ Attributes + +CREATE TABLE rt3.Attributes ( + id numeric(38,0) identity, + Name varchar(255) NULL , + Description varchar(255) NULL , + Content text, + ContentType varchar(16), + ObjectType varchar(64), + ObjectId integer, # foreign key to anything + Creator integer NOT NULL , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) ; + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); + +# }}} + +# {{{ Sessions + +# sessions is used by Apache::Session to keep sessions in the database. +# We should have a reaper script somewhere. + +CREATE TABLE rt3.sessions ( + id char(32) NOT NULL, + a_session TEXT, + LastUpdated DATETIME, + PRIMARY KEY (id) +); + +# }}} diff --git a/rt/etc/schema.mysql b/rt/etc/schema.mysql index 46f8ec562..60f1abae2 100755 --- a/rt/etc/schema.mysql +++ b/rt/etc/schema.mysql @@ -16,7 +16,6 @@ CREATE TABLE Attachments ( PRIMARY KEY (id) ) TYPE=InnoDB; -CREATE INDEX Attachments1 ON Attachments (Parent) ; CREATE INDEX Attachments2 ON Attachments (TransactionId) ; CREATE INDEX Attachments3 ON Attachments (Parent, TransactionId) ; # }}} @@ -62,6 +61,7 @@ CREATE TABLE Links ( 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); # }}} @@ -87,12 +87,12 @@ CREATE TABLE Groups ( Description varchar(255) NULL , Domain varchar(64), Type varchar(64), - Instance varchar(64), + Instance integer, PRIMARY KEY (id) ) TYPE=InnoDB; CREATE INDEX Groups1 ON Groups (Domain,Instance,Type,id); -CREATE INDEX Groups2 On Groups (Type, Instance, Domain); +CREATE INDEX Groups2 On Groups (Type, Instance); # }}} @@ -118,21 +118,23 @@ CREATE TABLE ScripConditions ( # {{{ Transactions CREATE TABLE Transactions ( id INTEGER NOT NULL AUTO_INCREMENT, - EffectiveTicket integer NOT NULL DEFAULT 0 , - Ticket integer NOT NULL DEFAULT 0 , + ObjectType varchar(64) NOT NULL, + ObjectId integer NOT NULL DEFAULT 0 , TimeTaken integer NOT NULL DEFAULT 0 , Type varchar(20) NULL , Field varchar(40) NULL , OldValue varchar(255) NULL , NewValue varchar(255) NULL , - Data varchar(100) NULL , + ReferenceType varchar(255) NULL, + OldReference integer NULL , + NewReference integer NULL , + Data varchar(255) NULL , Creator integer NOT NULL DEFAULT 0 , Created DATETIME NULL , PRIMARY KEY (id) ) TYPE=InnoDB; -CREATE INDEX Transactions1 ON Transactions (Ticket); -CREATE INDEX Transactions2 ON Transactions (EffectiveTicket); +CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId); # }}} @@ -210,7 +212,6 @@ create table CachedGroupMembers ( ) TYPE=InnoDB; CREATE INDEX DisGrouMem on CachedGroupMembers (GroupId,MemberId,Disabled); -CREATE INDEX GrouMem on CachedGroupMembers (GroupId,MemberId); # }}} @@ -257,8 +258,6 @@ CREATE TABLE Users ( CREATE UNIQUE INDEX Users1 ON Users (Name) ; -CREATE INDEX Users2 ON Users (Name); -CREATE INDEX Users3 ON Users (id, EmailAddress); CREATE INDEX Users4 ON Users (EmailAddress); @@ -299,9 +298,6 @@ CREATE TABLE Tickets ( CREATE INDEX Tickets1 ON Tickets (Queue, Status) ; CREATE INDEX Tickets2 ON Tickets (Owner) ; -CREATE INDEX Tickets3 ON Tickets (EffectiveId) ; -CREATE INDEX Tickets4 ON Tickets (id, Status) ; -CREATE INDEX Tickets5 ON Tickets (id, EffectiveId) ; CREATE INDEX Tickets6 ON Tickets (EffectiveId, Type) ; # }}} @@ -343,21 +339,31 @@ CREATE TABLE Templates ( # }}} -# {{{ TicketCustomFieldValues +# {{{ ObjectCustomFieldValues -CREATE TABLE TicketCustomFieldValues ( +CREATE TABLE ObjectCustomFieldValues ( id INTEGER NOT NULL AUTO_INCREMENT, - Ticket int NOT NULL , CustomField int NOT NULL , + ObjectType varchar(255) NOT NULL, # Final target of the Object + ObjectId int NOT NULL , # New -- Replaces Ticket + SortOrder integer NOT NULL DEFAULT 0 , # New -- ordering for multiple values + Content varchar(255) NULL , + LargeContent LONGTEXT NULL, # New -- to hold 255+ strings + ContentType varchar(80) NULL, # New -- only text/* gets searched + ContentEncoding varchar(80) NULL , # New -- for binary Content Creator integer NOT NULL DEFAULT 0 , Created DATETIME NULL , LastUpdatedBy integer NOT NULL DEFAULT 0 , LastUpdated DATETIME NULL , + Disabled int2 NOT NULL DEFAULT 0 , # New -- whether the value was current PRIMARY KEY (id) ) TYPE=InnoDB; +CREATE INDEX ObjectCustomFieldValues1 ON ObjectCustomFieldValues (Content); +CREATE INDEX ObjectCustomFieldValues2 ON ObjectCustomFieldValues (CustomField,ObjectType,ObjectId); + # }}} # {{{ CustomFields @@ -365,10 +371,13 @@ CREATE TABLE TicketCustomFieldValues ( CREATE TABLE CustomFields ( id INTEGER NOT NULL AUTO_INCREMENT, Name varchar(200) NULL , - Type varchar(200) NULL , - Queue integer NOT NULL DEFAULT 0 , + Type varchar(200) NULL , # Changed -- 'Single' and 'Multiple' is moved out + MaxValues integer, # New -- was 'Single'(1) and 'Multiple'(0) + Pattern varchar(255) NULL , # New -- Must validate against this + Repeated int2 NOT NULL DEFAULT 0 , # New -- repeated table entry Description varchar(255) NULL , SortOrder integer NOT NULL DEFAULT 0 , + LookupType varchar(255) NOT NULL, Creator integer NOT NULL DEFAULT 0 , Created DATETIME NULL , @@ -378,8 +387,22 @@ CREATE TABLE CustomFields ( PRIMARY KEY (id) ) TYPE=InnoDB; -CREATE INDEX CustomFields1 on CustomFields (Disabled, Queue); +# }}} + +# {{{ ObjectCustomFields +CREATE TABLE ObjectCustomFields ( + id INTEGER NOT NULL AUTO_INCREMENT, + CustomField int NOT NULL , + ObjectId integer NOT NULL, + SortOrder integer NOT NULL DEFAULT 0 , + + Creator integer NOT NULL DEFAULT 0 , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) TYPE=InnoDB; # }}} @@ -399,6 +422,31 @@ CREATE TABLE CustomFieldValues ( PRIMARY KEY (id) ) TYPE=InnoDB; +CREATE INDEX CustomFieldValues1 ON CustomFieldValues (CustomField); + +# }}} + + +# {{{ Attributes + +CREATE TABLE Attributes ( + id INTEGER NOT NULL AUTO_INCREMENT, + Name varchar(255) NULL , + Description varchar(255) NULL , + Content text, + ContentType varchar(16), + ObjectType varchar(64), + ObjectId integer, # foreign key to anything + Creator integer NOT NULL DEFAULT 0 , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) TYPE=InnoDB; + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); + # }}} # {{{ Sessions diff --git a/rt/etc/upgrade/2.1.71 b/rt/etc/upgrade/2.1.71 deleted file mode 100644 index cb89a3ac3..000000000 --- a/rt/etc/upgrade/2.1.71 +++ /dev/null @@ -1,211 +0,0 @@ -@Queues = ( { - Name => '___Approvals', - Description => 'A system-internal queue for the approvals system', - Disabled => 2, - } -); - - - - - -# {{{ Templates -@Templates = ( - { - Queue => '___Approvals', - Name => "New Pending Approval", # loc - Description => "Notify Owners and AdminCcs of new items pending their approval", # loc - Content => 'Subject: New Pending Approval: {$Ticket->Subject} - -Greetings, - -There is a new item pending your approval: "{$Ticket->Subject()}", -a summary of which appears below. - -Please visit {$RT::WebURL}Approvals/Display.html?id={$Ticket->id} -to approve or reject this ticket, or {$RT::WebURL}Approvals/ to -batch-process all your pending approvals. - -------------------------------------------------------------------------- -{$Transaction->Content()} -' - }, -); - -# }}} - -1; - -@ScripActions = ( - { Name => 'Open Tickets', - Description => 'Open tickets on correspondence', - ExecModule => 'AutoOpen' }, - -); - - @Scrips = ( - { ScripCondition => 'On Correspond', - ScripAction => 'Open Tickets', - Template => 'Blank', - Queue => '0' - }, - { ScripCondition => 'On Create', - ScripAction => 'AutoReply To Requestors', - Template => 'AutoReply' }, - { ScripCondition => 'On Create', - ScripAction => 'Notify AdminCcs', - Template => 'Transaction' }, - { ScripCondition => 'On Correspond', - ScripAction => 'Notify AdminCcs', - Template => 'Admin Correspondence' }, - { ScripCondition => 'On Correspond', - ScripAction => 'Notify Requestors And Ccs', - Template => 'Correspondence' }, - { ScripCondition => 'On Correspond', - ScripAction => 'Notify Other Recipients', - Template => 'Correspondence' }, - { ScripCondition => 'On Comment', - ScripAction => 'Notify AdminCcs As Comment', - Template => 'Admin Comment' }, - { ScripCondition => 'On Comment', - ScripAction => 'Notify Other Recipients As Comment', - Template => 'Correspondence' }, - { ScripCondition => 'On Resolve', - ScripAction => 'Notify Requestors', - Template => 'Resolved' }, - - - { - Description => "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval", # loc - Queue => '___Approvals', - ScripCondition => 'On Create', - ScripAction => 'Notify AdminCcs', - Template => 'New Pending Approval' - }, - { - Description => "If an approval is rejected, reject the original and delete pending approvals", # loc - Queue => '___Approvals', - ScripCondition => 'On Status Change', - ScripAction => 'User Defined', - CustomCommitCode => q[ -# ------------------------------------------------------------------- # -return(1) unless ( lc($self->TransactionObj->NewValue) eq "rejected" or - lc($self->TransactionObj->NewValue) eq "deleted" ); - -my $links = $self->TicketObj->DependedOnBy; -foreach my $link (@{ $links->ItemsArrayRef }) { - my $obj = $link->BaseObj; - if ($obj->QueueObj->IsActiveStatus($obj->Status)) { - if ($obj->Type eq 'ticket') { - $obj->Correspond( - Content => $self->loc("Your request was rejected."), - ); - $obj->SetStatus( - Status => 'rejected', - Force => 1, - ); - } - else { - $obj->SetStatus( - Status => 'deleted', - Force => 1, - ); - } - } -} - -$links = $self->TicketObj->DependsOn; -foreach my $link (@{ $links->ItemsArrayRef }) { - my $obj = $link->TargetObj; - if ($obj->QueueObj->IsActiveStatus($obj->Status)) { - $obj->SetStatus( - Status => 'deleted', - Force => 1, - ); - } -} - -return 1; -# ------------------------------------------------------------------- # - ], - CustomPrepareCode => '1', - Template => 'Admin Comment', - }, - { - Description => "When a ticket has been approved by any approver, add correspondence to the original ticket", # loc - Queue => '___Approvals', - ScripCondition => 'On Resolve', - ScripAction => 'User Defined', - CustomPrepareCode => 'return(1);', - CustomCommitCode => q[ -# ------------------------------------------------------------------- # -return(1) unless ($self->TicketObj->Type eq 'approval'); - -foreach my $obj ($self->TicketObj->AllDependedOnBy( Type => 'ticket' )) { - $obj->Correspond( - Content => $self->loc( "Your request has been approved by [_1]. Other approvals may still be pending.", # loc - $self->TransactionObj->CreatorObj->Name, - ) . "\n" . $self->loc( "Approver's notes: [_1]", # loc - $self->TicketObj->Transactions->Last->Content, - ), - _reopen => 0, - ); -} - -return 1; -# ------------------------------------------------------------------- # - ], - Template => 'Admin Comment' - }, - { - Description => "When a ticket has been approved by all approvers, add correspondence to the original ticket", # loc - Queue => '___Approvals', - ScripCondition => 'On Resolve', - ScripAction => 'User Defined', - CustomPrepareCode => 'return(1);', - CustomCommitCode => q[ -# ------------------------------------------------------------------- # -# Find all the tickets that depend on this (that this is approving) - -my $Ticket = $self->TicketObj; -my @TOP = $Ticket->AllDependedOnBy( Type => 'ticket' ); -my $links = $Ticket->DependedOnBy; - -while (my $link = $links->Next) { - my $obj = $link->BaseObj; - next if ($obj->HasUnresolvedDependencies( Type => 'approval' )); - - if ($obj->Type eq 'ticket') { - $obj->Correspond( - Content => $self->loc("Your request has been approved."), - _reopen => 0, - ); - } - elsif ($obj->Type eq 'code') { - my $code = $obj->Transactions->First->Content; - my $rv; - - foreach my $TOP (@TOP) { - local $@; - $rv++ if eval $code; - $RT::Logger->error("Cannot eval code: $@") if $@; - } - - if ($rv or !@TOP) { - $obj->SetStatus( Status => 'resolved', Force => 1,); - } - else { - $obj->SetStatus( Status => 'rejected', Force => 1,); - } - } -} - -return 1; -# ------------------------------------------------------------------- # - ], - Template => 'Admin Comment', - }, -); - -# }}} - diff --git a/rt/etc/upgrade/3.1.0/acl.Informix b/rt/etc/upgrade/3.1.0/acl.Informix new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/acl.Informix @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.1.0/acl.Oracle b/rt/etc/upgrade/3.1.0/acl.Oracle new file mode 100755 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/acl.Oracle @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.1.0/acl.Pg b/rt/etc/upgrade/3.1.0/acl.Pg new file mode 100755 index 000000000..809e99ab3 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/acl.Pg @@ -0,0 +1,19 @@ +sub acl { + my $dbh = shift; + + my @acls; + + my @tables = qw ( + attributes_id_seq + attributes + ); + + foreach my $table (@tables) { + push @acls, + "GRANT SELECT, INSERT, UPDATE, DELETE ON $table to " + . $RT::DatabaseUser . ";"; + + } + return (@acls); +} +1; diff --git a/rt/etc/upgrade/3.1.0/acl.SQLite b/rt/etc/upgrade/3.1.0/acl.SQLite new file mode 100755 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/acl.SQLite @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.1.0/acl.mysql b/rt/etc/upgrade/3.1.0/acl.mysql new file mode 100755 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/acl.mysql @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.1.0/content b/rt/etc/upgrade/3.1.0/content new file mode 100644 index 000000000..3117dafc5 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/content @@ -0,0 +1,2 @@ +# nothing to do +1; diff --git a/rt/etc/upgrade/3.1.0/schema.Informix b/rt/etc/upgrade/3.1.0/schema.Informix new file mode 100644 index 000000000..722eb70b3 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/schema.Informix @@ -0,0 +1,17 @@ +CREATE TABLE Attributes ( + id SERIAL, + Name VARCHAR(255) DEFAULT '' NOT NULL, + Description VARCHAR(255) DEFAULT NULL, + Content BYTE, + ContentType VARCHAR(16), + ObjectType VARCHAR(25) NOT NULL, + ObjectId INTEGER DEFAULT 0 NOT NULL, + Creator INTEGER DEFAULT 0 NOT NULL, + Created DATETIME YEAR TO SECOND, + LastUpdatedBy INTEGER DEFAULT 0 NOT NULL, + LastUpdated DATETIME YEAR TO SECOND, + PRIMARY KEY (id) +); + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); diff --git a/rt/etc/upgrade/3.1.0/schema.Oracle b/rt/etc/upgrade/3.1.0/schema.Oracle new file mode 100644 index 000000000..a8aae18b5 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/schema.Oracle @@ -0,0 +1,17 @@ +CREATE SEQUENCE ATTRIBUTES_seq; +CREATE TABLE Attributes ( + id NUMBER(11,0) PRIMARY KEY, + Name VARCHAR2(255) NOT NULL, + Description VARCHAR2(255), + Content CLOB, + ContentType VARCHAR(16), + ObjectType VARCHAR2(25) NOT NULL, + ObjectId NUMBER(11,0) DEFAULT 0 NOT NULL, + Creator NUMBER(11,0) DEFAULT 0 NOT NULL, + Created DATE, + LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL, + LastUpdated DATE +); + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); diff --git a/rt/etc/upgrade/3.1.0/schema.Pg b/rt/etc/upgrade/3.1.0/schema.Pg new file mode 100755 index 000000000..94c3fe70d --- /dev/null +++ b/rt/etc/upgrade/3.1.0/schema.Pg @@ -0,0 +1,25 @@ +-- {{{ Attributes + +CREATE SEQUENCE attributes_id_seq; + +CREATE TABLE Attributes ( + id INTEGER DEFAULT nextval('attributes_id_seq'), + Name varchar(255) NOT NULL , + Description varchar(255) NULL , + Content text, + ContentType varchar(16), + ObjectType varchar(64), + ObjectId integer, + Creator integer NOT NULL DEFAULT 0 , + Created TIMESTAMP NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated TIMESTAMP NULL , + PRIMARY KEY (id) + +); + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); + +-- }}} + diff --git a/rt/etc/upgrade/3.1.0/schema.SQLite b/rt/etc/upgrade/3.1.0/schema.SQLite new file mode 100644 index 000000000..1dd466fa7 --- /dev/null +++ b/rt/etc/upgrade/3.1.0/schema.SQLite @@ -0,0 +1,21 @@ +--- {{{ Attributes +CREATE TABLE Attributes ( + id INTEGER PRIMARY KEY , + Name varchar(255) NOT NULL , + Description varchar(255) NULL , + Content LONGTEXT NULL , + ContentType varchar(16), + ObjectType varchar(25) NOT NULL , + ObjectId INTEGER default 0, + Creator integer NULL , + Created DATETIME NULL , + LastUpdatedBy integer NULL , + LastUpdated DATETIME NULL + +) ; + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); + +--- }}} + diff --git a/rt/etc/upgrade/3.1.0/schema.mysql b/rt/etc/upgrade/3.1.0/schema.mysql new file mode 100755 index 000000000..c4a345d3e --- /dev/null +++ b/rt/etc/upgrade/3.1.0/schema.mysql @@ -0,0 +1,21 @@ +# {{{ Attributes + +CREATE TABLE Attributes ( + id INTEGER NOT NULL AUTO_INCREMENT, + Name varchar(255) NULL , + Description varchar(255) NULL , + Content text, + ContentType varchar(16), + ObjectType varchar(64), + ObjectId integer, # foreign key to anything + Creator integer NOT NULL DEFAULT 0 , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) TYPE=InnoDB; + +CREATE INDEX Attributes1 on Attributes(Name); +CREATE INDEX Attributes2 on Attributes(ObjectType, ObjectId); + +# }}} diff --git a/rt/etc/upgrade/3.1.15/content b/rt/etc/upgrade/3.1.15/content new file mode 100644 index 000000000..d23125a0b --- /dev/null +++ b/rt/etc/upgrade/3.1.15/content @@ -0,0 +1,7 @@ +@Scrips = ( + { ScripCondition => 'On Owner Change', + ScripAction => 'Notify Owner', + Template => 'Transaction' }, +); + +1; diff --git a/rt/etc/upgrade/3.1.17/content b/rt/etc/upgrade/3.1.17/content new file mode 100644 index 000000000..1d648d82f --- /dev/null +++ b/rt/etc/upgrade/3.1.17/content @@ -0,0 +1,22 @@ +@ScripActions = ( + { Name => 'Notify Ccs as Comment', # loc + Description => 'Sends mail to the Ccs as a comment', # loc + ExecModule => 'NotifyAsComment', + Argument => 'Cc' }, + { Name => 'Notify Ccs', # loc + Description => 'Sends mail to the Ccs', # loc + ExecModule => 'Notify', + Argument => 'Cc' }, +); + + +@ScripConditions = ( + { + Name => 'On Priority Change', # loc + Description => 'Whenever a ticket\'s priority changes', # loc + ApplicableTransTypes => 'Set', + ExecModule => 'PriorityChange', + }, +); + +1; diff --git a/rt/etc/upgrade/3.3.0/acl.Informix b/rt/etc/upgrade/3.3.0/acl.Informix new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.0/acl.Informix @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.3.0/acl.Oracle b/rt/etc/upgrade/3.3.0/acl.Oracle new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.0/acl.Oracle @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.3.0/acl.Pg b/rt/etc/upgrade/3.3.0/acl.Pg new file mode 100644 index 000000000..2069a198e --- /dev/null +++ b/rt/etc/upgrade/3.3.0/acl.Pg @@ -0,0 +1,20 @@ +sub acl { + my $dbh = shift; + + my @acls; + + my @tables = qw ( + objectcustomfieldvalues + objectcustomfields_id_s + objectcustomfields + ); + + foreach my $table (@tables) { + push @acls, + "GRANT SELECT, INSERT, UPDATE, DELETE ON $table to " + . $RT::DatabaseUser . ";"; + + } + return (@acls); +} +1; diff --git a/rt/etc/upgrade/3.3.0/acl.SQLite b/rt/etc/upgrade/3.3.0/acl.SQLite new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.0/acl.SQLite @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.3.0/acl.mysql b/rt/etc/upgrade/3.3.0/acl.mysql new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.0/acl.mysql @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/lib/t/regression/00placeholder b/rt/etc/upgrade/3.3.0/content index 0afc6045c..0afc6045c 100644 --- a/rt/lib/t/regression/00placeholder +++ b/rt/etc/upgrade/3.3.0/content diff --git a/rt/etc/upgrade/3.3.0/schema.Oracle b/rt/etc/upgrade/3.3.0/schema.Oracle new file mode 100644 index 000000000..f81feeb79 --- /dev/null +++ b/rt/etc/upgrade/3.3.0/schema.Oracle @@ -0,0 +1,65 @@ +alter Table Transactions ADD ObjectType VARCHAR2(64); +UPDATE Transactions set ObjectType = 'RT::Ticket'; +ALTER TABLE Transactions modify ObjectType NOT NULL; +ALTER TABLE Transactions drop column EffectiveTicket; +ALTER TABLE Transactions ADD ReferenceType VARCHAR2(255) NULL; +ALTER TABLE Transactions ADD OldReference NUMBER(11,0) NULL; +ALTER TABLE Transactions ADD NewReference NUMBER(11,0) NULL; +DROP INDEX transactions1; +ALTER TABLE Transactions rename column Ticket to ObjectId; +CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId); + +ALTER TABLE TicketCustomFieldValues rename to ObjectCustomFieldValues; +ALTER TABLE ObjectCustomFieldValues rename column Ticket to ObjectId; +ALTER TABLE ObjectCustomFieldValues ADD ObjectType VARCHAR2(255); +UPDATE ObjectCustomFieldValues set ObjectType = 'RT::Ticket'; +ALTER TABLE ObjectCustomFieldValues MODIFY ObjectType NOT NULL; +ALTER TABLE ObjectCustomFieldValues ADD Disabled NUMBER(11,0); +ALTER TABLE ObjectCustomFieldValues MODIFY Disabled default 0; +UPDATE ObjectCustomFieldValues SET Disabled = 0; +ALTER TABLE ObjectCustomFieldValues MODIFY Disabled NOT NULL; +ALTER TABLE ObjectCustomFieldValues ADD LargeContent CLOB NULL; +ALTER TABLE ObjectCustomFieldValues ADD ContentType VARCHAR2(80) NULL; +ALTER TABLE ObjectCustomFieldValues ADD ContentEncoding VARCHAR2(80) NULL; +ALTER TABLE ObjectCustomFieldValues ADD SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL; + + + +CREATE INDEX ObjectCustomFieldValues1 on ObjectCustomFieldValues (CustomField,ObjectType,ObjectId,Content); +CREATE INDEX ObjectCustomFieldValues2 on ObjectCustomFieldValues (CustomField,ObjectType,ObjectId); + + + +CREATE SEQUENCE OBJECTCUSTOMFIELDS_seq; +CREATE TABLE ObjectCustomFields ( + id NUMBER(11,0) + CONSTRAINT ObjectCustomFields_Key PRIMARY KEY, + CustomField NUMBER(11,0) NOT NULL, + ObjectId NUMBER(11,0) NOT NULL, + SortOrder NUMBER(11,0) DEFAULT 0 NOT NULL, + Creator NUMBER(11,0) DEFAULT 0 NOT NULL, + Created DATE, + LastUpdatedBy NUMBER(11,0) DEFAULT 0 NOT NULL, + LastUpdated DATE +); + + +INSERT into ObjectCustomFields (id, CustomField, ObjectId, SortOrder, Creator, LastUpdatedBy) SELECT objectcustomfields_seq.nextval, id, Queue, SortOrder, Creator, LastUpdatedBy from CustomFields; + +ALTER TABLE CustomFields ADD LookupType VARCHAR2(255); +ALTER TABLE CustomFields ADD Repeated NUMBER(11,0); +ALTER TABLE CustomFields ADD Pattern VARCHAR2(255) NULL; +ALTER TABLE CustomFields ADD MaxValues NUMBER(11,0); + +UPDATE CustomFields SET MaxValues = 0 WHERE Type LIKE '%Multiple'; +UPDATE CustomFields SET MaxValues = 1 WHERE Type LIKE '%Single'; +UPDATE CustomFields SET Type = 'Select' WHERE Type LIKE 'Select%'; +UPDATE CustomFields SET Type = 'Freeform' WHERE Type LIKE 'Freeform%'; +UPDATE CustomFields Set LookupType = 'RT::Queue-RT::Ticket'; +ALTER TABLE CustomFields MODIFY LookupType NOT NULL; +UPDATE CustomFields Set Repeated = 0; +ALTER TABLE CustomFields MODIFY Repeated DEFAULT 0; +ALTER TABLE CustomFields MODIFY Repeated NOT NULL; +ALTER TABLE CustomFields drop column Queue; + + diff --git a/rt/etc/upgrade/3.3.0/schema.Pg b/rt/etc/upgrade/3.3.0/schema.Pg new file mode 100644 index 000000000..427eae798 --- /dev/null +++ b/rt/etc/upgrade/3.3.0/schema.Pg @@ -0,0 +1,74 @@ +alter Table Transactions ADD Column ObjectType varchar(64); +update Transactions set ObjectType = 'RT::Ticket'; +ALTER TABLE Transactions ALTER COLUMN ObjectType SET NOT NULL; +alter table Transactions drop column EffectiveTicket; +alter table Transactions add column ReferenceType varchar(255) NULL; +alter table Transactions add column OldReference integer NULL; +alter table Transactions add column NewReference integer NULL; +drop index transactions1; +alter table Transactions rename column Ticket to ObjectId; + + +CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId); + +alter table TicketCustomFieldValues rename to ObjectCustomFieldValues; + +alter table ObjectCustomFieldValues rename column Ticket to ObjectId; + +alter table objectcustomfieldvalues add column ObjectType varchar(255); + +update objectcustomfieldvalues set ObjectType = 'RT::Ticket'; + +ALTER TABLE objectcustomfieldvalues ALTER COLUMN ObjectType SET NOT NULL; + +alter table objectcustomfieldvalues add column Current int; + +alter table objectcustomfieldvalues alter column Current SET default 1; + +UPDATE objectcustomfieldvalues SET Current = 1; + +alter table objectcustomfieldvalues add column LargeContent TEXT NULL; + +alter table objectcustomfieldvalues add column ContentType varchar(80) NULL; + +alter table objectcustomfieldvalues add column ContentEncoding varchar(80) NULL; + +create index ObjectCustomFieldValues1 on objectcustomfieldvalues (CustomField,ObjectType,ObjectId,Content); + +create index ObjectCustomFieldValues2 on objectcustomfieldvalues (CustomField,ObjectType,ObjectId); + + +CREATE SEQUENCE objectcustomfields_id_s; + +CREATE TABLE ObjectCustomFields ( + id INTEGER DEFAULT nextval('objectcustomfields_id_s'), + CustomField integer NOT NULL, + ObjectId integer NOT NULL, + SortOrder integer NOT NULL DEFAULT 0 , + + Creator integer NOT NULL DEFAULT 0 , + Created TIMESTAMP NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated TIMESTAMP NULL , + PRIMARY KEY (id) + +); + + +INSERT into ObjectCustomFields (CustomField, ObjectId, SortOrder, Creator, LastUpdatedBy) SELECT id, Queue, SortOrder, Creator, LastUpdatedBy from CustomFields; + +alter table CustomFields add column LookupType varchar(255); +alter table CustomFields add column Repeated int2; +alter table CustomFields add column Pattern varchar(255) NULL; +alter table CustomFields add column MaxValues integer; + +UPDATE CustomFields SET MaxValues = 0 WHERE Type LIKE '%Multiple'; +UPDATE CustomFields SET MaxValues = 1 WHERE Type LIKE '%Single'; +UPDATE CustomFields SET Type = 'Select' WHERE Type LIKE 'Select%'; +UPDATE CustomFields SET Type = 'Freeform' WHERE Type LIKE 'Freeform%'; +UPDATE CustomFields Set LookupType = 'RT::Queue-RT::Ticket'; +ALTER TABLE CustomFields ALTER COLUMN LookupType SET NOT NULL; +UPDATE CustomFields Set Repeated = 0; +ALTER TABLE CustomFields ALTER COLUMN Repeated SET DEFAULT 0; +ALTER TABLE CustomFields ALTER COLUMN Repeated SET NOT NULL; +alter table CustomFields drop column Queue; diff --git a/rt/etc/upgrade/3.3.0/schema.mysql b/rt/etc/upgrade/3.3.0/schema.mysql new file mode 100644 index 000000000..0e33a2819 --- /dev/null +++ b/rt/etc/upgrade/3.3.0/schema.mysql @@ -0,0 +1,65 @@ +alter Table Transactions ADD Column (ObjectType varchar(64) not null); +update Transactions set ObjectType = 'RT::Ticket'; +alter table Transactions drop column EffectiveTicket; +alter table Transactions add column ReferenceType varchar(255) NULL; +alter table Transactions add column OldReference integer NULL; +alter table Transactions add column NewReference integer NULL; +alter table Transactions drop index transactions1; +alter table Transactions change Ticket ObjectId integer NOT NULL DEFAULT 0 ; + +CREATE INDEX Transactions1 ON Transactions (ObjectType, ObjectId); + +alter table TicketCustomFieldValues rename ObjectCustomFieldValues; + +alter table ObjectCustomFieldValues change Ticket ObjectId integer NOT NULL DEFAULT 0 ; + +alter table ObjectCustomFieldValues add column ObjectType varchar(255) not null; + +update ObjectCustomFieldValues set ObjectType = 'RT::Ticket'; + +alter table ObjectCustomFieldValues add column Current bool default 1; + +alter table ObjectCustomFieldValues add column LargeContent LONGTEXT NULL; + +alter table ObjectCustomFieldValues add column ContentType varchar(80) NULL; + +alter table ObjectCustomFieldValues add column ContentEncoding varchar(80) NULL; + +# These could fail if there's no such index and there's no "drop index if exists" syntax +#alter table ObjectCustomFieldValues drop index ticketcustomfieldvalues1; +#alter table ObjectCustomFieldValues drop index ticketcustomfieldvalues2; + +alter table ObjectCustomFieldValues add index ObjectCustomFieldValues1 (Content); + +alter table ObjectCustomFieldValues add index ObjectCustomFieldValues2 (CustomField,ObjectType,ObjectId); + + +CREATE TABLE ObjectCustomFields ( + id INTEGER NOT NULL AUTO_INCREMENT, + CustomField int NOT NULL , + ObjectId integer NOT NULL, + SortOrder integer NOT NULL DEFAULT 0 , + + Creator integer NOT NULL DEFAULT 0 , + Created DATETIME NULL , + LastUpdatedBy integer NOT NULL DEFAULT 0 , + LastUpdated DATETIME NULL , + PRIMARY KEY (id) +) TYPE=InnoDB; + + +INSERT into ObjectCustomFields (id, CustomField, ObjectId, SortOrder, Creator, LastUpdatedBy) SELECT null, id, Queue, SortOrder, Creator, LastUpdatedBy from CustomFields; + +alter table CustomFields add column LookupType varchar(255) NOT NULL; +alter table CustomFields add column Repeated int2 NOT NULL DEFAULT 0 ; +alter table CustomFields add column Pattern varchar(255) NULL; +alter table CustomFields add column MaxValues integer; +# See above +# alter table CustomFields drop index CustomFields1; + +UPDATE CustomFields SET MaxValues = 0 WHERE Type LIKE '%Multiple'; +UPDATE CustomFields SET MaxValues = 1 WHERE Type LIKE '%Single'; +UPDATE CustomFields SET Type = 'Select' WHERE Type LIKE 'Select%'; +UPDATE CustomFields SET Type = 'Freeform' WHERE Type LIKE 'Freeform%'; +UPDATE CustomFields Set LookupType = 'RT::Queue-RT::Ticket'; +alter table CustomFields drop column Queue; diff --git a/rt/etc/upgrade/3.3.11/acl.Oracle b/rt/etc/upgrade/3.3.11/acl.Oracle new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.11/acl.Oracle @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.3.11/acl.Pg b/rt/etc/upgrade/3.3.11/acl.Pg new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.11/acl.Pg @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.3.11/acl.SQLite b/rt/etc/upgrade/3.3.11/acl.SQLite new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.11/acl.SQLite @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.3.11/acl.mysql b/rt/etc/upgrade/3.3.11/acl.mysql new file mode 100644 index 000000000..73c16ae03 --- /dev/null +++ b/rt/etc/upgrade/3.3.11/acl.mysql @@ -0,0 +1,4 @@ +sub acl { + return (); +} +1; diff --git a/rt/etc/upgrade/3.3.11/content b/rt/etc/upgrade/3.3.11/content new file mode 100644 index 000000000..0afc6045c --- /dev/null +++ b/rt/etc/upgrade/3.3.11/content @@ -0,0 +1 @@ +1; diff --git a/rt/etc/upgrade/3.3.11/schema.Oracle b/rt/etc/upgrade/3.3.11/schema.Oracle new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/rt/etc/upgrade/3.3.11/schema.Oracle diff --git a/rt/etc/upgrade/3.3.11/schema.Pg b/rt/etc/upgrade/3.3.11/schema.Pg new file mode 100644 index 000000000..6ab5d6581 --- /dev/null +++ b/rt/etc/upgrade/3.3.11/schema.Pg @@ -0,0 +1,11 @@ +ALTER TABLE ObjectCustomFieldValues ADD COLUMN SortOrder INTEGER; +UPDATE ObjectCustomFieldValues SET SortOrder = 0; +ALTER TABLE ObjectCustomFieldValues ALTER COLUMN SortOrder SET DEFAULT 0; +ALTER TABLE ObjectCustomFieldValues ALTER COLUMN SortOrder SET NOT NULL; +ALTER TABLE ObjectCustomFieldValues ADD COLUMN Disabled INTEGER; +UPDATE ObjectCustomFieldValues SET Disabled = 1 WHERE Current = 0; +UPDATE ObjectCustomFieldValues SET Disabled = 0 WHERE Current != 0; +ALTER TABLE ObjectCustomFieldValues ALTER COLUMN Disabled SET DEFAULT 0; +ALTER TABLE ObjectCustomFieldValues ALTER COLUMN Disabled SET NOT NULL; + +ALTER TABLE ObjectCustomFieldValues DROP COLUMN Current; diff --git a/rt/etc/upgrade/3.3.11/schema.SQLite b/rt/etc/upgrade/3.3.11/schema.SQLite new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/rt/etc/upgrade/3.3.11/schema.SQLite diff --git a/rt/etc/upgrade/3.3.11/schema.mysql b/rt/etc/upgrade/3.3.11/schema.mysql new file mode 100644 index 000000000..cc35d40f2 --- /dev/null +++ b/rt/etc/upgrade/3.3.11/schema.mysql @@ -0,0 +1,5 @@ +ALTER TABLE ObjectCustomFieldValues ADD COLUMN SortOrder INTEGER NOT NULL DEFAULT 0; +ALTER TABLE ObjectCustomFieldValues ADD COLUMN Disabled int2 NOT NULL DEFAULT 0; + +UPDATE ObjectCustomFieldValues SET Disabled = 1 WHERE Current = 0; +ALTER TABLE ObjectCustomFieldValues DROP COLUMN Current; diff --git a/rt/html/Admin/CustomFields/GroupRights.html b/rt/html/Admin/CustomFields/GroupRights.html new file mode 100644 index 000000000..380fee479 --- /dev/null +++ b/rt/html/Admin/CustomFields/GroupRights.html @@ -0,0 +1,170 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/CustomFieldTabs, + id => $id, + current_tab => "Admin/CustomFields/GroupRights.html?id=".$id, + Title => $title +&> +<& /Elements/ListActions, actions => \@results &> + + <FORM METHOD=POST ACTION="GroupRights.html"> + <INPUT TYPE=HIDDEN NAME=id VALUE="<% $CustomFieldObj->id %>"> + + +<h1><&|/l&>System groups</&></h1> +<TABLE> +% $Groups = RT::Groups->new($session{'CurrentUser'}); +% $Groups->LimitToSystemInternalGroups(); +% while (my $Group = $Groups->Next()) { + <TR ALIGN=RIGHT> + <TD VALIGN=TOP> + <% loc($Group->Type) %> + </TD> + <TD> + <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, + Object => $CustomFieldObj &> + </TD> + </TR> +% } +</TABLE> +<h1><&|/l&>User defined groups</&></h1> +<TABLE> +% $Groups = RT::Groups->new($session{'CurrentUser'}); +% $Groups->LimitToUserDefinedGroups(); +% while (my $Group = $Groups->Next()) { + <TR ALIGN=RIGHT> + <TD VALIGN=TOP> + <% $Group->Name %> + </TD> + <TD> + <& /Admin/Elements/SelectRights, PrincipalId => $Group->PrincipalId, + Object => $CustomFieldObj &> + </TD> + </TR> +% } +</TABLE> + + <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + + </FORM> + +<%INIT> + + + + + + +if (!defined $id) { + $m->comp("/Elements/Error", Why => loc("No CustomField defined")); +} + +my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); +$CustomFieldObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load CustomField [_1]",$id)); + +my $Groups; + + my ( $ACL, @results ); + + foreach my $arg (keys %ARGS) { + if ($arg =~ /GrantRight-(\d+)-(.*?)-(\d+)$/) { + my $principal_id = $1; + my $object_type = $2; + my $object_id = $3; + my $rights = $ARGS{$arg}; + + my $principal = RT::Principal->new($session{'CurrentUser'}); + $principal->Load($principal_id); + my $obj; + + if ($object_type eq 'RT::CustomField') { + $obj = RT::CustomField->new($session{'CurrentUser'}); + $obj->Load($object_id); + } else { + push (@results, loc("System Error"). + loc("Rights could not be granted for [_1]", $object_type)); + next; + } + + my @rights = ref($ARGS{$arg}) eq 'ARRAY' ? @{$ARGS{$arg}} : ($ARGS{$arg}); + foreach my $right (@rights) { + next unless ($right); + my ($val, $msg) = $principal->GrantRight(Object => $obj, Right => $right); + push (@results, $msg); + } + } + elsif ($arg =~ /RevokeRight-(\d+)-(.*?)-(\d+)-(.*?)$/) { + my $principal_id = $1; + my $object_type = $2; + my $object_id = $3; + my $right = $4; + + my $principal = RT::Principal->new($session{'CurrentUser'}); + $principal->Load($principal_id); + next unless ($right); + my $obj; + + if ($object_type eq 'RT::CustomField') { + $obj = RT::CustomField->new($session{'CurrentUser'}); + $obj->Load($object_id); + } else { + push (@results, loc("System Error"). + loc("Rights could not be revoked for [_1]", $object_type)); + next; + } + my ($val, $msg) = $principal->RevokeRight(Object => $obj, Right => $right); + push (@results, $msg); + } +} + +my $title = loc('Modify group rights for custom field [_1]', $CustomFieldObj->Name); + +</%INIT> + +<%ARGS> +$id => undef +</%ARGS> diff --git a/rt/html/Admin/CustomFields/Modify.html b/rt/html/Admin/CustomFields/Modify.html new file mode 100644 index 000000000..4c3c92114 --- /dev/null +++ b/rt/html/Admin/CustomFields/Modify.html @@ -0,0 +1,212 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/CustomFieldTabs, + id => $CustomFieldObj->Id , + current_tab => $current_tab, + Title => $title &> +<& /Elements/ListActions, actions => \@results &> + + +<FORM METHOD="POST" ACTION="Modify.html" NAME="ModifyCustomField"> +<INPUT TYPE=HIDDEN NAME="id" VALUE="<%$id %>"> +<table> +<tr> +<td class="label"><&|/l&>Name</&></td> +<td><input name="Name" VALUE="<%$CustomFieldObj->Name%>" SIZE=20></td></tr> +<tr> +<td class="label"><&|/l&>Description</&></td> +<td><input name="Description" VALUE="<%$CustomFieldObj->Description%>" SIZE=80></td> +</tr> + +<tr> +<td class="label"><&|/l&>Type</&></td> +<td><& /Admin/Elements/SelectCustomFieldType, + Name => "TypeComposite", + Default => $CustomFieldObj->TypeComposite, &> +</td> +</tr> +<tr> +<td class="label"><&|/l&>Applies to</&></td> +<td><& /Admin/Elements/SelectCustomFieldLookupType, + Name => "LookupType", + Default => $CustomFieldObj->LookupType, &> +</td> +</tr> +<tr> +<td class="label"> </td> +<td> +<INPUT TYPE=HIDDEN NAME="SetEnabled" VALUE="1"> +<INPUT TYPE=CHECKBOX NAME="Enabled" VALUE="1" <%$EnabledChecked%>> <&|/l&>Enabled (Unchecking this box disables this custom field)</&> +</td> +</tr> +</table> +<BR> +% if ($CustomFieldObj->Id && $CustomFieldObj->Type =~ /^Select/i) { +<H2><&|/l&>Values</&></H2> +<div> +<& /Admin/Elements/EditCustomFieldValues, CustomField => $CustomFieldObj &> +<& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &> +</div> +% } +<&/Elements/Submit&> +</FORM> + + + +<%INIT> + + + +my $CustomFieldObj = RT::CustomField->new( $session{'CurrentUser'} ); +my ( $title, @results, $EnabledChecked, $Disabled); +$EnabledChecked = "CHECKED"; + +if ( !$id ) { + $title = loc("Create a CustomField"); + $id = 'new'; +} +else { + + if ( $id eq 'new' ) { + my ( $val, $msg ) = $CustomFieldObj->Create(Name => $Name, + TypeComposite => $TypeComposite, + LookupType => $LookupType, + Description => $Description,); + $m->comp("/Elements/Error", Why => loc( "Could not create CustomField", $msg ) ) unless ($val); + push @results, $msg; + $title = loc( 'Created CustomField [_1]', $CustomFieldObj->Name() ); + } + else { + $CustomFieldObj->Load($id) || $m->comp("/Elements/Error", Why => loc('No CustomField') ); + $title = loc( 'Editing CustomField [_1]', $CustomFieldObj->Name() ); + + my @attribs = qw( Name TypeComposite LookupType Description); + my @aresults = UpdateRecordObject( AttributesRef => \@attribs, + Object => $CustomFieldObj, + ARGSRef => \%ARGS ); + + push @results, @aresults; + + #we're asking about enabled on the web page but really care about disabled. + if ($Enabled == 1) { + $Disabled = 0; + } + else { + $Disabled = 1; + } + if ( ($SetEnabled) and ( $Disabled != $CustomFieldObj->Disabled) ) { + my ($code, $msg) = $CustomFieldObj->SetDisabled($Disabled); + push @results, loc('Enabled status: [_1]', loc_fuzzy($msg)); + } + + if ($CustomFieldObj->Disabled()) { + $EnabledChecked =""; + } + } + + $id = $CustomFieldObj->id; +} + + + + +my $paramtag = "CustomField-".$CustomFieldObj->Id."-Value-"; +# Delete any fields that want to be deleted +foreach my $key (keys %ARGS) { + + next unless ($key =~ /^Delete-$paramtag(\d+)$/); + my ($val, $msg) = $CustomFieldObj->DeleteValue($1); + push (@results, $msg); + + +} +# Update any existing values +my $values = $CustomFieldObj->ValuesObj; +while (my $value = $values->Next) { + foreach my $attr qw(Name Description SortOrder) { + my $param = $paramtag.$value->Id."-".$attr; + + if ( $ARGS{$param} && ($value->$attr() ne $ARGS{$param})) { + my $mutator = "Set$attr"; + my ($id, $msg) = $value->$mutator($ARGS{$param}); + push (@results, $msg); + } + } + + +} + + + +# Add any new values +if ($ARGS{$paramtag."new-Name"}) { + my ($id, $msg) = $CustomFieldObj->AddValue ( Name => $ARGS{$paramtag."new-Name"}, + Description => $ARGS{$paramtag."new-Description"}, + SortOrder => $ARGS{$paramtag."new-SortOrder"}); + push (@results, $msg); +} + +my $current_tab; +if ($ARGS{'Create'}){ + $current_tab = "Admin/CustomFields/Modify.html?Create=1"; +} else { + $current_tab = "Admin/CustomFields/Modify.html?id=".$id; + } + + +</%INIT> +<%ARGS> +$id => undef +$TypeComposite => undef +$LookupType => undef +$MaxValues => undef +$SortOrder => undef +$Description => undef +$Name => undef +$SetEnabled => undef +$Enabled => undef +</%ARGS> diff --git a/rt/html/Admin/CustomFields/Objects.html b/rt/html/Admin/CustomFields/Objects.html new file mode 100644 index 000000000..8f9e3657b --- /dev/null +++ b/rt/html/Admin/CustomFields/Objects.html @@ -0,0 +1,145 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/CustomFieldTabs, + id => $id, + current_tab => "Admin/CustomFields/Objects.html?id=".$id, + Title => $title + &> + +<& /Elements/ListActions, actions => \@results &> + +<FORM ACTION="Objects.html" METHOD=POST> +<INPUT TYPE=HIDDEN NAME="id" VALUE="<% $id %>"> +<INPUT TYPE=HIDDEN NAME="UpdateObjs" VALUE="1"> + +<h2><&|/l&>Selected objects</&></h2> +<& /Admin/Elements/PickObjects, Objects => \@AssignedObjs, id => $id, Checked => 1 &> +<h2><&|/l&>Unselected objects</&></h2> +<& /Admin/Elements/PickObjects, Objects => \@UnassignedObjs, id => $id &> + +<& /Elements/Submit, CheckAll => 1, ClearAll => 1 &> +</FORM> + +<%INIT> +my $CF = RT::CustomField->new($session{'CurrentUser'}); +$CF->Load($id) or Abort(loc("Could not load CustomField [_1]"), $id); +my $LookupType = $CF->LookupType; +$LookupType =~ /^(.*?)-/ || + Abort(loc("Object of type [_1] cannot take custom fields", $LookupType)); + +my $Class = $1; +my $CollectionClass; +if (UNIVERSAL::can($Class.'Collection', 'new') ) { +$CollectionClass = $Class.'Collection'; + +} elsif (UNIVERSAL::can($Class.'es', 'new') ) { + $CollectionClass = $Class.'es'; + +} elsif (UNIVERSAL::can($Class.'s', 'new') ) { + $CollectionClass = $Class.'s'; + +} else { + Abort(loc("Can't find a collection class for '[_1]'", $Class)); +} + + +my $title = loc('Modify associated objects for [_1]', $CF->Name); + +my $Objects = $CollectionClass->new($session{'CurrentUser'}); +my (@results); +my (@AssignedObjs, @UnassignedObjs); + +$Objects->UnLimit; +$Objects->OrderBy( FIELD => 'Name' ); + + +my $ObjectCFs; +$ObjectCFs = RT::ObjectCustomFields->new($session{'CurrentUser'}); +$ObjectCFs->UnLimit; +$ObjectCFs->LimitToCustomField($id); + +my %seen; +while (my $OCF = $ObjectCFs->Next) { + $seen{$OCF->ObjectId}++; +} + +while (my $obj = $Objects->Next) { + my $obj_id = $obj->Id; + + if ($UpdateObjs) { + # Go through and delete all the custom field relationships that this object + # no longer has + my $key = "Object-$obj_id-CF-$id"; + if ($ARGS{$key}) { + if (!$seen{$obj_id}) { + my ($val, $msg) = $CF->AddToObject($obj); + push (@results, $msg); + push @UnassignedObjs, $obj if !$val; + } + } + else { + push @UnassignedObjs, $obj; + if ($seen{$obj_id}) { + my ($val, $msg) = $CF->RemoveFromObject($obj); + push (@results, $msg); + pop @UnassignedObjs if !$val; + } + } + } + elsif (!$seen{$obj_id}) { + push @UnassignedObjs, $obj; + } + next if @UnassignedObjs and $UnassignedObjs[-1] == $obj; + push @AssignedObjs, $obj; +} + +</%INIT> +<%ARGS> +$id => undef +$FindDisabledObjects => 0 +$UpdateObjs => 0 +</%ARGS> diff --git a/rt/html/Admin/CustomFields/UserRights.html b/rt/html/Admin/CustomFields/UserRights.html new file mode 100644 index 000000000..e2df3a058 --- /dev/null +++ b/rt/html/Admin/CustomFields/UserRights.html @@ -0,0 +1,168 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/CustomFieldTabs, id => $id, +current_tab => "Admin/CustomFields/UserRights.html?id=".$id, +Title => $title, &> +<& /Elements/ListActions, actions => \@results &> + + <FORM METHOD=POST ACTION="UserRights.html"> + <INPUT TYPE=HIDDEN NAME=id VALUE="<% $CustomFieldObj->id %>"> + + +<TABLE> + +% while (my $Member = $Users->Next()) { +% my $UserObj = $Member->MemberObj->Object(); +% my $group = RT::Group->new($session{'CurrentUser'}); +% $group->LoadACLEquivalenceGroup($Member->MemberObj); + <TR ALIGN=RIGHT> + <TD VALIGN=TOP> + <% $UserObj->Name %> + </TD> + <TD> + <& /Admin/Elements/SelectRights, PrincipalId=> $group->PrincipalId, + Object => $CustomFieldObj &> + </TD> + </TR> +% } + </TABLE> + + <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + + </FORM> + +<%INIT> + + #Update the acls. + my @results; +foreach my $arg (keys %ARGS) { + if ($arg =~ /GrantRight-(\d+)-(.*?)-(\d+)$/) { + my $principal_id = $1; + my $object_type = $2; + my $object_id = $3; + my $rights = $ARGS{$arg}; + + my $principal = RT::Principal->new($session{'CurrentUser'}); + $principal->Load($principal_id); + my $obj; + + if ($object_type eq 'RT::CustomField') { + $obj = RT::CustomField->new($session{'CurrentUser'}); + $obj->Load($object_id); + + } else { + push (@results, loc("System Error"). + loc("Rights could not be granted for [_1]", +$object_type)); + next; + } + + my @rights = ref($ARGS{$arg}) eq 'ARRAY' ? @{$ARGS{$arg}} : +($ARGS{$arg}); + foreach my $right (@rights) { + next unless ($right); + my ($val, $msg) = $principal->GrantRight(Object => $obj, Right +=> $right); + push (@results, $msg); + } + } + elsif ($arg =~ /RevokeRight-(\d+)-(.*?)-(\d+)-(.*?)$/) { + my $principal_id = $1; + my $object_type = $2; + my $object_id = $3; + my $right = $4; + + my $principal = RT::Principal->new($session{'CurrentUser'}); + $principal->Load($principal_id); + next unless ($right); + my $obj; + + if ($object_type eq 'RT::CustomField') { + $obj = RT::CustomField->new($session{'CurrentUser'}); + $obj->Load($object_id); + } else { + push (@results, loc("System Error"). + loc("Rights could not be revoked for [_1]", +$object_type)); + next; + } + my ($val, $msg) = $principal->RevokeRight(Object => $obj, Right => +$right); + push (@results, $msg); + } +} + + +# {{{ Deal with setting up the display of current rights. + + + +if (!defined $id) { + $m->comp("/Elements/Error", Why => loc("No Class defined")); +} + +my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); +$CustomFieldObj->Load($id) || $m->comp("/Elements/Error", Why => loc("Couldn't load Class [_1]",$id)); + +# Find out which users we want to display ACL selects for +my $Privileged = RT::Group->new($session{'CurrentUser'}); +$Privileged->LoadSystemInternalGroup('Privileged'); +my $Users = $Privileged->MembersObj(); + + +my $title = loc('Modify user rights for custom field [_1]', $CustomFieldObj->Name); + +# }}} + +</%INIT> + +<%ARGS> +$id => undef +$UserString => undef +$UserOp => undef +$UserField => undef +</%ARGS> diff --git a/rt/html/Admin/CustomFields/index.html b/rt/html/Admin/CustomFields/index.html new file mode 100644 index 000000000..9854fb0ec --- /dev/null +++ b/rt/html/Admin/CustomFields/index.html @@ -0,0 +1,76 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => loc('Select a Custom Field') &> +<& /Admin/Elements/CustomFieldTabs, + current_tab => 'Admin/CustomFields/', + Title => loc('Select a Custom Field') &> + +% my $prev_lookup = ''; +% while (my $CustomFieldObj = $CustomFields->Next) { +% $CustomFieldObj->CurrentUserHasRight('AdminCustomField') or next; +% my $lookup = $CustomFieldObj->FriendlyLookupType; +% if ($lookup ne $prev_lookup) { +% if ($prev_lookup) { +</UL> +% } +<H2><% loc("Custom Fields for [_1]", $lookup) %></H2> +<UL> +% $prev_lookup = $lookup; +% } +% +<LI> +<A HREF="Modify.html?id=<%$CustomFieldObj->id()%>"><%$CustomFieldObj->Name%>: <%$CustomFieldObj->Description%></a> +</LI> +% } +% if ($prev_lookup) { +</UL> +% } + +<%INIT> +my $CustomFields = RT::CustomFields->new($session{'CurrentUser'}); +$CustomFields->UnLimit(); +$CustomFields->OrderByCols( { FIELD => 'LookupType' }, { FIELD => 'Name' } ); +</%INIT> diff --git a/rt/html/Admin/Elements/AddCustomFieldValue b/rt/html/Admin/Elements/AddCustomFieldValue index 8850734f2..3e3f414b3 100644 --- a/rt/html/Admin/Elements/AddCustomFieldValue +++ b/rt/html/Admin/Elements/AddCustomFieldValue @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,26 +20,42 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <b><&|/l&>Add Value</&></b></b></b></b> <TABLE BORDER="0"> <TR><TD><small> <&|/l&>Sort</&>:<br> -<input name="CustomField-<% $CustomField->Id %>-AddValue-SortOrder" size="5"> +<input size=3 name="CustomField-<%$CustomField->Id%>-Value-new-SortOrder" > </TD> <TD><small> <&|/l&>Name</&>:<br> -<input size=20 name="CustomField-<% $CustomField->Id %>-AddValue-Name"> +<input type="text" size=30 name="CustomField-<%$CustomField->Id%>-Value-new-Name" > </TD> <TD><small> <&|/l&>Description</&>:<br> -<input size="60" name="CustomField-<% $CustomField->Id %>-AddValue-Description"> +<input type="text" size=50 name="CustomField-<%$CustomField->Id%>-Value-new-Description"> </TD></TR> </TABLE> diff --git a/rt/html/Admin/Elements/CreateUserCalled b/rt/html/Admin/Elements/CreateUserCalled index 8ceccca73..0dc6ac792 100644 --- a/rt/html/Admin/Elements/CreateUserCalled +++ b/rt/html/Admin/Elements/CreateUserCalled @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <FORM METHOD=get ACTION="<% $RT::WebPath %>/Admin/Users/Create.html"> <&|/l&>New user called</&> <INPUT NAME="Name" size=10><input type=submit value="<&|/l&>Create</&>"> </form> diff --git a/rt/html/Admin/Elements/CustomFieldTabs b/rt/html/Admin/Elements/CustomFieldTabs new file mode 100644 index 000000000..d7acf33cc --- /dev/null +++ b/rt/html/Admin/Elements/CustomFieldTabs @@ -0,0 +1,116 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Tabs, + current_tab => 'Admin/CustomFields/', + subtabs => $tabs, + current_subtab => $current_tab, + Title => $Title &> +<%INIT> +my $tabs; + +if ($id) { + my $cf = RT::CustomField->new( $session{'CurrentUser'} ); + $cf->Load($id); + $tabs = { + this => { + title => $cf->Name, + path => "Admin/CustomFields/Modify.html?id=" . $id, + current_subtab => $current_tab, + + subtabs => { + + C => { title => loc('Basics'), + path => "Admin/CustomFields/Modify.html?id=" . $id, + }, + F => { title => loc('Group Rights'), + path => "Admin/CustomFields/GroupRights.html?id=" + . $id, }, + G => { + title => loc('User Rights'), + path => "Admin/CustomFields/UserRights.html?id=" . $id, + }, + + } } + + }; + + + if ($cf->LookupType =~ /^RT::Queue/io) { + $tabs->{'this'}->{subtabs}->{D} = { + title => loc('Applies to'), + path => "Admin/CustomFields/Objects.html?id=" . $id, + }; + } +} + +if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminCustomField')) { + $tabs->{"A"} = { title => loc('Select custom field'), + path => "Admin/CustomFields/", + }; + $tabs->{"B"} = { title => loc('New custom field'), + path => "Admin/CustomFields/Modify.html?Create=1", + separator => 1, + }; +} + + # Now let callbacks add their extra tabs + $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); + +foreach my $tab (sort keys %{$tabs->{'this'}->{'subtabs'}}) { + if ($tabs->{'this'}->{'subtabs'}->{$tab}->{'path'} eq $current_tab) { + $tabs->{'this'}->{'subtabs'}->{$tab}->{'subtabs'} = $subtabs; + $tabs->{'this'}->{'subtabs'}->{$tab}->{'current_subtab'} = $current_subtab; + } +} +if( $id ) { $current_tab = "Admin/CustomFields/Modify.html?id=" . $id } +</%INIT> +<%ARGS> +$Title => undef +$id => undef +$current_tab => undef +$subtabs => undef +$current_subtab => undef +</%ARGS> diff --git a/rt/html/Admin/Elements/EditCustomField b/rt/html/Admin/Elements/EditCustomField index a09600ba7..d8c5b29b2 100644 --- a/rt/html/Admin/Elements/EditCustomField +++ b/rt/html/Admin/Elements/EditCustomField @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,17 +20,33 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@results &> -<FORM METHOD=GET ACTION="CustomField.html"> +<FORM METHOD=POST ACTION="CustomField.html"> <INPUT TYPE=HIDDEN NAME="CustomField" VALUE="<%$id %>"> <INPUT TYPE=HIDDEN name="Queue" value="<%$Queue%>"> @@ -59,7 +81,7 @@ <& /Admin/Elements/AddCustomFieldValue, CustomField => $CustomFieldObj &> </font> % } -<&/Elements/Submit&> +<&/Elements/Submit, Label => loc('Create') &> </FORM> @@ -81,18 +103,26 @@ if (! $CustomField ) { Type => $Type, Description => $Description, ); - Abort(loc("Could not create CustomField", $msg)) unless ($val); - push @results, $msg; - $CustomFieldObj->SetSortOrder($CustomFieldObj->id); - $title = loc('Created CustomField [_1]', $CustomFieldObj->Name()); + + # if there is an error, then abort. But since at this point there's + # stuff already printed, clear it out. + # (This only works in conjunction with temporarily turning autoflush + # off in the files that use this component.) + unless ($val) { + $m->clear_buffer; + Abort(loc("Could not create CustomField: [_1]", $msg)); + } + push @results, $msg; + $CustomFieldObj->SetSortOrder($CustomFieldObj->id); + $title = loc('Created CustomField [_1]', $CustomFieldObj->Name()); } else { - $CustomFieldObj->Load($CustomField) || Abort(loc('No CustomField')); + $CustomFieldObj->Load($CustomField) || Abort(loc('No CustomField')); $title = loc('Editing CustomField [_1]', $CustomFieldObj->Name()); my @aresults = ProcessCustomFieldUpdates ( CustomFieldObj => $CustomFieldObj, ARGSRef => \%ARGS ); - push @results, @aresults; + push @results, @aresults; } diff --git a/rt/html/Admin/Elements/EditCustomFieldValues b/rt/html/Admin/Elements/EditCustomFieldValues index 64564adfb..9cc3858b9 100644 --- a/rt/html/Admin/Elements/EditCustomFieldValues +++ b/rt/html/Admin/Elements/EditCustomFieldValues @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,28 +20,64 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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. %# %# -%# END LICENSE BLOCK -<i><&|/l&>(Check box to delete)</&></i> -<ul> -% while (my $v = $values->Next) { -<li> -<font size=-1 color="#336699"><%$v->SortOrder%>:</font> -<input type="checkbox" name="CustomField-<%$CustomField->Id%>-DeleteValue" value="<%$v->id%>"> -<%$v->Name%> -% if ($v->Description) { -<i>(<%$v->Description%>)</i> +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% if (!$values->Count) { +<p><em><&|/l&>(no values)</&></em></p> +% return; % } -</li> +<i><&|/l&>(Check box to delete)</&></i> +<table> +<tr> +<td> </td> +<td><&|/l&>Sort</&></td> +<td><&|/l&>Name</&></td> +<td><&|/l&>Description</&></td> +</tr> +% while (my $value = $values->Next) { +<tr> +<td> +<input type="checkbox" name="Delete-CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>"> +</td> +<td> +<input size=3 name="CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>-SortOrder" value="<%$value->SortOrder%>"> +</td> +<td> +<input type="text" size=30 name="CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>-Name" value="<%$value->Name%>"> +</td> +<td> +<font size="-1"> +<input type="text" size=50 name="CustomField-<%$CustomField->Id%>-Value-<%$value->Id%>-Description" value="<%$value->Description%>"> +</font> +</td> +</tr> % } -</ul> +</table> <%init> -my $values = $CustomField->Values(); + +my $values = $CustomField->ValuesObj(); + </%init> <%args> $CustomField => undef diff --git a/rt/html/Admin/Elements/EditCustomFields b/rt/html/Admin/Elements/EditCustomFields index a86b051d0..1cd3df568 100644 --- a/rt/html/Admin/Elements/EditCustomFields +++ b/rt/html/Admin/Elements/EditCustomFields @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,102 +20,86 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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. %# %# -%# END LICENSE BLOCK -<& /Elements/ListActions, actions => \@actions &> - -<TABLE> -<TR> -<TD VALIGN=TOP> -<%$caption%>:<BR> -</TD></TR></TABLE> -% if ($CustomFields->Count == 0 ) { -<P><i><&|/l&>(No custom fields)</&></i></P> -% } else { -<TABLE> - -<TR> -<TD ROWSPAN="<% $CustomFields->Count %>"> -<UL> -% while (my $CustomFieldObj = $CustomFields->Next) { -<LI><A HREF="CustomField.html?Queue=<%$id%>&CustomField=<%$CustomFieldObj->id()%>"><b><%$CustomFieldObj->Name%></b></a> (<% $CustomFieldObj->FriendlyType %>)<br> -<%$CustomFieldObj->Description%> -</LI> -% } -</UL> -</TD> - -% my $count; -% while (my $CustomFieldObj = $CustomFields->Next) { -% # show 'move up' unless it's the first item -% if ($count++) { -<TR><TD> -<a href="CustomFields.html?id=<%$id%>&CustomField=<%$CustomFieldObj->id%>&Move=-1"><&|/l&>Move up</&></a> -% } else { -<TD ALIGN=RIGHT> -% } - -% # show 'move down' unless it's the last item -% if (!$CustomFields->IsLast) { -% $m->print(' | ') if $count > 1; -<a href="CustomFields.html?id=<%$id%>&CustomField=<%$CustomFieldObj->id%>&Move=1"><&|/l&>Move down</&></a> -% } -</TD></TR> +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/ListActions, actions => \@results &> + +<FORM ACTION="<%$RT::WebPath%><% $m->request_comp->path |n %>" METHOD="POST" NAME="EditCustomFields"> +<INPUT TYPE=HIDDEN NAME="id" VALUE="<% $Object->Id %>"/> +<INPUT TYPE=HIDDEN NAME="ObjectType" VALUE="<% $ObjectType %>"/> +<INPUT TYPE=HIDDEN NAME="SubType" VALUE="<% $SubType %>"/> +<INPUT TYPE=HIDDEN NAME="UpdateCFs" VALUE="1"/> + +% if ($Object->Id) { +<h2><&|/l&>Global Custom Fields</&></h2> +<& PickCustomFields, CustomFields => \@GlobalCFs, ReadOnly => 1, id => $id, SubType => $SubType &> % } +<h2><&|/l&>Selected Custom Fields</&></h2> +<& PickCustomFields, CustomFields => [$ObjectCFs->CustomFields], id => $id, Checked => 1, SubType => $SubType &> +<h2><&|/l&>Unselected Custom Fields</&></h2> +<& PickCustomFields, CustomFields => \@UnassignedCFs, id => $id, SubType => $SubType &> -</TD> -</TR> -</TABLE> -% } -<FORM METHOD=GET ACTION="CustomFields.html"> -% if ($id) { -<INPUT TYPE="Hidden" NAME="id" VALUE="<%$id%>"> -% } -<input type="checkbox" name="FindDisabledCustomFields"> <&|/l&>Include disabled custom fields in listing.</&> -<input type=submit value="<&|/l&>Go!</&>"> +<& /Elements/Submit, CheckAll => 1, ClearAll => 1 &> </FORM> <%INIT> my $CustomFields = RT::CustomFields->new($session{'CurrentUser'}); -my $QueueObj = RT::Queue->new($session{'CurrentUser'}); -my $caption; +my @results; +my (@GlobalCFs, @UnassignedCFs); -if ($id) { - $QueueObj->Load($id); +my $id = $Object->Id; +if ($id and !$Object->CurrentUserHasRight('AssignCustomFields')) { + $m->out('<P><i>', loc('(No custom fields)'), '</i></P>'); + return; } -if ($QueueObj->id) { - $CustomFields->LimitToQueue($id); -} -else { - $CustomFields->LimitToGlobal(); -} - -if ($FindDisabledCustomFields) { - $caption = loc("All Custom Fields"); - $CustomFields->{'find_disabled_rows'} = 1; -} else { - $caption = loc("Enabled Custom Fields"); -} +my $lookup = $ObjectType; +$lookup .= "-$SubType" if $SubType; + +$CustomFields->LimitToLookupType($lookup); +$CustomFields->OrderBy( FIELD => 'Name' ); + + +my ($GlobalCFs, $ObjectCFs); +$ObjectCFs = RT::ObjectCustomFields->new($session{'CurrentUser'}); +$ObjectCFs->UnLimit; +$ObjectCFs->LimitToObjectId($id); +$ObjectCFs->LimitToLookupType($lookup); # {{{ deal with moving sortorder of custom fields if ($CustomField and $Move) { - my $SourceObj = RT::CustomField->new($session{'CurrentUser'}); - $SourceObj->Load($CustomField) || Abort(loc('No CustomField')); + my $SourceObj = RT::ObjectCustomField->new($session{'CurrentUser'}); + $SourceObj->LoadByCols( ObjectId => $id, CustomField => $CustomField ); my $TargetObj; my $target_order = $SourceObj->SortOrder + $Move; - while (my $CustomFieldObj = $CustomFields->Next) { - my $this_order = $CustomFieldObj->SortOrder; + while (my $ObjectCF = $ObjectCFs->Next) { + my $this_order = $ObjectCF->SortOrder; # if we have an exact match, finish the loop now - ($TargetObj = $CustomFieldObj, last) if $this_order == $target_order; + ($TargetObj = $ObjectCF, last) if $this_order == $target_order; # otherwise, we need to apropos toward the general direction # ... first, check the sign is correct @@ -123,7 +113,7 @@ if ($CustomField and $Move) { next if $orig_delta < $this_delta; } - $TargetObj = $CustomFieldObj; + $TargetObj = $ObjectCF; } if ($TargetObj) { @@ -132,83 +122,68 @@ if ($CustomField and $Move) { $TargetObj->SetSortOrder($s); $SourceObj->SetSortOrder($t); # because order changed, we must redo search for subsequent uses - $CustomFields->RedoSearch; } - $CustomFields->GotoFirstItem; + $ObjectCFs->GotoFirstItem; } # }}} -# {{{ now process the 'copy queue' action -my @actions; -if ($Source and $Source ne $id) { - my $SourceQueue = RT::Queue->new($session{'CurrentUser'}); - $SourceQueue->Load($Source) || Abort(loc("Couldn't load queue")); - my $SourceCustomFields = RT::CustomFields->new($session{'CurrentUser'}); - $SourceCustomFields->LimitToQueue($SourceQueue->id); - - # delete old fields - foreach my $CustomFieldObj ( @{$CustomFields->ItemsArrayRef} ) { - $CustomFieldObj->Delete; - } +if ($id) { + $GlobalCFs = RT::ObjectCustomFields->new($session{'CurrentUser'}); + $GlobalCFs->LimitToObjectId(0); + $GlobalCFs->LimitToLookupType($lookup); +} - # add new fields - while (my $SourceCustomFieldObj = $SourceCustomFields->Next) { - my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); - my ($val, $msg) = $CustomFieldObj->Create( - id => $SourceCustomFieldObj->id, - Queue => $id, - Name => $SourceCustomFieldObj->Name, - Type => $SourceCustomFieldObj->Type, - Description => $SourceCustomFieldObj->Description, - ); - Abort(loc("Could not create CustomField") . ": $msg") unless ($val); - push @actions, $msg; - - $CustomFieldObj->SetSortOrder($SourceCustomFieldObj->SortOrder); - - # add new values - my $values = $SourceCustomFieldObj->Values(); - while (my $v = $values->Next) { - my ( $addval, $addmsg ) = $CustomFieldObj->AddValue( - Name => $v->Name, - Description => $v->Description, - SortOrder => $v->SortOrder - ); - } - } +while (my $cf = $CustomFields->Next) { + my $cf_id = $cf->Id; - # because content changed, we must redo search for subsequent uses - $CustomFields->RedoSearch; - $CustomFields->GotoFirstItem; -} -# }}} + if ($GlobalCFs and $GlobalCFs->HasEntryForCustomField($cf_id)) { + push @GlobalCFs, $cf; + next; + } -# {{{ deal with deleting existing custom fields -foreach my $key (keys %ARGS) { - # {{{ if we're trying to delete the custom field - if ($key =~ /^DeleteCustomField-(\d+)/) { - my $id = $1; - my $CustomFieldObj = RT::CustomField->new($session{'CurrentUser'}); - $CustomFieldObj->Load($id); - my ($retval, $msg) = $CustomFieldObj->Delete; - if ($retval) { - push @actions, loc("Custom field deleted"); + if ($UpdateCFs) { + # Go through and delete all the custom field relationships that this object + # no longer has + my $key = "Object-$id-CF-$cf_id"; + if ($ARGS{$key}) { + if (!$ObjectCFs->HasEntryForCustomField($cf_id)) { + my ($val, $msg) = $cf->AddToObject($Object); + push (@results, $msg); + push @UnassignedCFs, $cf if !$val; + } + } + else { + push @UnassignedCFs, $cf; + if ($ObjectCFs->HasEntryForCustomField($cf_id)) { + my ($val, $msg) = $cf->RemoveFromObject($Object); + push (@results, $msg); + pop @UnassignedCFs if !$val; + } + } } - else { - push @actions, $msg; + elsif (!$ObjectCFs->HasEntryForCustomField($cf_id)) { + push @UnassignedCFs, $cf; } - } - # }}} + else { + } } -# }}} + +# redo search... +$ObjectCFs = RT::ObjectCustomFields->new($session{'CurrentUser'}); +$ObjectCFs->UnLimit; +$ObjectCFs->LimitToObjectId($id); +$ObjectCFs->LimitToLookupType($lookup); </%INIT> <%ARGS> -$id => 0 $title => undef $Move => undef $Source => undef $CustomField => undef $FindDisabledCustomFields => undef +$UpdateCFs => 0 +$Object +$ObjectType +$SubType => '' </%ARGS> diff --git a/rt/html/Admin/Elements/EditQueueWatchers b/rt/html/Admin/Elements/EditQueueWatchers index db39bfb67..c93bf81f5 100644 --- a/rt/html/Admin/Elements/EditQueueWatchers +++ b/rt/html/Admin/Elements/EditQueueWatchers @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} %if ($Members->Count == 0 ) { <ul> <li><i><&|/l&>none</&></i> @@ -29,8 +51,7 @@ <ul> % while (my $watcher=$Members->Next) { <li> -<INPUT TYPE=CHECKBOX - NAME="Queue-<%$QueueObj->Id%>-DelWatcher-Type-<%$Watchers->Type%>-Principal-<%$watcher->MemberId%>" +<INPUT TYPE=CHECKBOX NAME="Queue-<%$QueueObj->Id%>-DeleteWatcher-Type-<%$Watchers->Type%>-Principal-<%$watcher->MemberId%>" value="1" UNCHECKED> % if ($watcher->MemberObj->IsUser) { <a href="<%$RT::WebPath%>/Admin/Users/Modify.html?id=<%$watcher->MemberObj->ObjectId%>"> diff --git a/rt/html/Admin/Elements/EditScrip b/rt/html/Admin/Elements/EditScrip index 5393ebfde..907ae9a92 100644 --- a/rt/html/Admin/Elements/EditScrip +++ b/rt/html/Admin/Elements/EditScrip @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,19 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@actions &> <FORM METHOD=POST ACTION="Scrip.html"> <input type="hidden" name="id" value="<%$id%>"> <input type="hidden" name="Queue" value="<%$Queue%>"> +<& /Elements/TitleBoxStart, title => loc('Scrip Fields') &> <TABLE> <TR> <TD ALIGN=RIGHT> @@ -45,46 +68,69 @@ </TR> <TR> <TD ALIGN=RIGHT> -<&|/l&>Custom condition</&>: +<&|/l&>Action</&>: </TD> <TD> -<TEXTAREA COLS=80 ROWS=5 NAME="Scrip-<%$id%>-CustomIsApplicableCode"><%$scrip->CustomIsApplicableCode%></TEXTAREA> +<& /Admin/Elements/SelectScripAction, Name => "Scrip-$id-ScripAction", Default => $scrip->ActionObj->Id &> </TD> </TR> <TR> <TD ALIGN=RIGHT> -<&|/l&>Action</&>: +<&|/l&>Template</&>: </TD> <TD> -<& /Admin/Elements/SelectScripAction, Name => "Scrip-$id-ScripAction", Default => $scrip->ActionObj->Id &> +<& /Admin/Elements/SelectTemplate, Name => "Scrip-$id-Template", Default => $scrip->TemplateObj->Id, Queue => $Queue &> </TD> </TR> <TR> <TD ALIGN=RIGHT> -<&|/l&>Custom action preparation code</&>: +<&|/l&>Stage</&>: </TD> <TD> -<TEXTAREA COLS=80 ROWS=5 NAME="Scrip-<%$id%>-CustomPrepareCode"><%$scrip->CustomPrepareCode%></TEXTAREA> +<& /Admin/Elements/SelectStage, Name => "Scrip-$id-Stage", Default => $scrip->Stage &> </TD> </TR> +</table> +<& /Elements/TitleBoxEnd &> +<& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + +<br> +<& /Elements/TitleBoxStart, title => loc('User Defined conditions and actions') &> +<table> <TR> -<TD ALIGN=RIGHT> -<&|/l&>Custom action cleanup code</&>: +<TD colspan=2> +<i><&|/l&>(Use these fields when you choose 'User Defined' for a condition or action)</&></i> +</TD> +</TR> +<TR> +<TD class=labeltop> +<&|/l&>Custom condition</&>: </TD> <TD> -<TEXTAREA COLS=80 ROWS=5 NAME="Scrip-<%$id%>-CustomCommitCode"><%$scrip->CustomCommitCode%></TEXTAREA> +<TEXTAREA COLS=80 ROWS=5 NAME="Scrip-<%$id%>-CustomIsApplicableCode"><%$scrip->CustomIsApplicableCode%></TEXTAREA> </TD> </TR> <TR> -<TD ALIGN=RIGHT> -<&|/l&>Template</&>: +<TD class=labeltop> +<&|/l&>Custom action preparation code</&>: </TD> <TD> -<& /Admin/Elements/SelectTemplate, Name => "Scrip-$id-Template", Default => $scrip->TemplateObj->Id, Queue => $Queue &> +<TEXTAREA COLS=80 ROWS=5 NAME="Scrip-<%$id%>-CustomPrepareCode"><%$scrip->CustomPrepareCode%></TEXTAREA> </TD> </TR> +<TR> +<TD class=labeltop> +<&|/l&>Custom action cleanup code</&>: +</TD> +<TD> +<TEXTAREA COLS=80 ROWS=5 NAME="Scrip-<%$id%>-CustomCommitCode"><%$scrip->CustomCommitCode%></TEXTAREA> +</TD> +</TR> +</table> +<& /Elements/TitleBoxEnd &> + +<& /Elements/Submit, Label => loc('Create'), Reset => 1 &> -<& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> </FORM> <%init> my (@actions); @@ -106,6 +152,7 @@ if ( $id eq 'new' ) { ); if ( defined $retval ) { push @actions, $msg; + $id = $scrip->id; } else { Abort( $msg); @@ -123,6 +170,7 @@ elsif ($id) { ScripAction ScripCondition Template + Stage Description CustomPrepareCode CustomCommitCode diff --git a/rt/html/Admin/Elements/EditScrips b/rt/html/Admin/Elements/EditScrips index 24515d8c1..9526118b5 100644 --- a/rt/html/Admin/Elements/EditScrips +++ b/rt/html/Admin/Elements/EditScrips @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,19 +20,35 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@actions &> <form action="Scrips.html" method="post"> <input type="hidden" name="id" value="<%$id%>"> -<P><&|/l&>Current Scrips</&>:</P> +<h2><&|/l&>Current Scrips</&></h2> % if ($Scrips->Count == 0 ) { <P><i><&|/l&>(No scrips)</&></i></P> % } else { @@ -36,7 +58,7 @@ % while (my $scrip = $Scrips->Next ) { <TR> <TD> -<input type="checkbox" name="DeleteScrip-<%$scrip->Id%>"> +<input type="checkbox" name="DeleteScrip-<%$scrip->Id%>" value="1"> </TD> <TD> <a href="Scrip.html?id=<%$scrip->Id%>&Queue=<%$id%>"><% $scrip->Description || "<i>(".loc('no value').")</i>" |n %></a><br> @@ -48,7 +70,9 @@ </TABLE> % } -<& /Elements/Submit &> +<& /Elements/Submit, + Caption => loc("Delete selected scrips"), + Label => loc("Delete") &> </form> <%init> my (@actions); diff --git a/rt/html/Admin/Elements/EditTemplates b/rt/html/Admin/Elements/EditTemplates index 12677ca78..207ffd001 100644 --- a/rt/html/Admin/Elements/EditTemplates +++ b/rt/html/Admin/Elements/EditTemplates @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/ListActions, actions => \@actions &> <FORM METHOD=GET ACTION="Templates.html"> @@ -41,7 +63,7 @@ % while (my $TemplateObj = $Templates->Next) { <TR> <TD> -<input type="checkbox" name="DeleteTemplate-<%$TemplateObj->Id%>"> +<input type="checkbox" name="DeleteTemplate-<%$TemplateObj->Id%>" value="1"> </TD> <TD> <A HREF="Template.html?Queue=<%$id%>&Template=<%$TemplateObj->id()%>"> @@ -54,7 +76,7 @@ </TABLE> % } -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Delete Template') &> </FORM> <%INIT> diff --git a/rt/html/Admin/Elements/EditUserComments b/rt/html/Admin/Elements/EditUserComments index f791876be..fb96dc09a 100644 --- a/rt/html/Admin/Elements/EditUserComments +++ b/rt/html/Admin/Elements/EditUserComments @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => "Comments about $name" &> <&|/l&>These comments aren't generally visible to the user</&>:<br> <input type="hidden" name="id" value="<%$id%>"> diff --git a/rt/html/Admin/Elements/GlobalCustomFieldTabs b/rt/html/Admin/Elements/GlobalCustomFieldTabs new file mode 100755 index 000000000..8d4eaca23 --- /dev/null +++ b/rt/html/Admin/Elements/GlobalCustomFieldTabs @@ -0,0 +1,93 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/SystemTabs, subtabs => $tabs, + current_tab => 'Admin/Global/CustomFields/index.html', + current_subtab => $current_tab, + Title => $Title &> +<%INIT> + + + my $tabs = { + + A => { title => loc('Users'), + text => loc('Modify scrips which apply to all queues'), + path => 'Admin/Global/CustomFields/Users.html', + }, + B => { title => loc('Groups'), + text => loc('Edit system templates'), + path => 'Admin/Global/CustomFields/Groups.html', + }, + + F => { title => loc('Tickets'), + text => loc('Modify global custom fields'), + path => 'Admin/Global/CustomFields/Queue-Tickets.html', + }, + + G => { title => loc('Ticket Transactions'), + text => loc('Modify global group rights'), + path => 'Admin/Global/CustomFields/Queue-Transactions.html', + }, + +}; + # Now let callbacks add their extra tabs + $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); + + foreach my $tab (sort keys %{$tabs}) { + if ($tabs->{$tab}->{'path'} eq $current_tab) { + $tabs->{$tab}->{"subtabs"} = $subtabs; + $tabs->{$tab}->{"current_subtab"} = $current_subtab; + } + } +</%INIT> + + +<%ARGS> +$id => undef +$current_tab => undef +$subtabs => undef +$current_subtab => undef +$Title => undef +</%ARGS> diff --git a/rt/html/Admin/Elements/GroupTabs b/rt/html/Admin/Elements/GroupTabs index 87377820c..60edda40e 100644 --- a/rt/html/Admin/Elements/GroupTabs +++ b/rt/html/Admin/Elements/GroupTabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Tabs, subtabs => $tabs, current_tab => 'Admin/Groups/', @@ -45,6 +67,8 @@ $tabs->{"this"} = { class => "currentnav", path => "Admin/Groups/GroupRights.html?id=" . $GroupObj->id, }, G => { title => loc('User Rights'), path => "Admin/Groups/UserRights.html?id=" . $GroupObj->id, }, + H => { title => loc('History'), + path => "Admin/Groups/History.html?id=" . $GroupObj->id }, } } } @@ -52,7 +76,7 @@ $tabs->{"A"} = { title => loc('Select group'), path => "Admin/Groups/", }; $tabs->{"B"} = { title => loc('New group'), path => "Admin/Groups/Modify.html?Create=1", - separator => 1, }; + separator => 1, }; # Now let callbacks add their extra tabs $m->comp( '/Elements/Callback', tabs => $tabs, %ARGS ); diff --git a/rt/html/Admin/Elements/Header b/rt/html/Admin/Elements/Header index 92a7c54ca..b80908094 100644 --- a/rt/html/Admin/Elements/Header +++ b/rt/html/Admin/Elements/Header @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<& /Elements/Header, Title => $Title &> +%# END BPS TAGGED BLOCK }}} +<& /Elements/Header, %ARGS &> <%ARGS> $Title => undef diff --git a/rt/html/Admin/Elements/ListGlobalCustomFields b/rt/html/Admin/Elements/ListGlobalCustomFields index 032f680ee..3df9d6292 100644 --- a/rt/html/Admin/Elements/ListGlobalCustomFields +++ b/rt/html/Admin/Elements/ListGlobalCustomFields @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} % my $count = 0; % while (my $CustomFieldObj = $CustomFields->Next) { % $count++; diff --git a/rt/html/Admin/Elements/ListGlobalScrips b/rt/html/Admin/Elements/ListGlobalScrips index 8dba3b6c4..2e3791257 100644 --- a/rt/html/Admin/Elements/ListGlobalScrips +++ b/rt/html/Admin/Elements/ListGlobalScrips @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,23 +20,55 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK -% my $count = 0; +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} + +% if ($Scrips->Count == 0) { + +<P><i><&|/l&>(No scrips)</&></i></P> + +% } else { + +<UL> + % while (my $scrip = $Scrips->Next ) { -% $count++; -<font size="-1"><&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name) &>[_1] [_2] with template [_3]</&></font> -<BR> -% } -% if (!$count) { -<font size="-1"><&|/l&>(No scrips)</&></font> +<LI> +<a href="<%$RT::WebPath%>/Admin/Global/Scrip.html?id=<%$scrip->Id%>&Queue=<%0%>"> +% if ($scrip->Description) { +<% $scrip->Description %> +% } else { +<i>(<&|/l, $scrip->Id&>Scrip #[_1]</&>)</i> +% } +</a><br> +<small><&|/l, loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name) &>[_1] [_2] with template [_3]</&></small> +</LI> % } +</UL> + +% } + <%init> my $Scrips = new RT::Scrips ($session{'CurrentUser'}); $Scrips->LimitToGlobal(); diff --git a/rt/html/Admin/Elements/ModifyQueue b/rt/html/Admin/Elements/ModifyQueue deleted file mode 100644 index e5761df35..000000000 --- a/rt/html/Admin/Elements/ModifyQueue +++ /dev/null @@ -1,78 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Elements/TitleBoxStart, title => loc('Editing Configuration for queue [_1]', $QueueObj->Id) &> - -<FORM ACTION="<%$RT::WebPath%>/Admin/Queues/Modify.html" METHOD=POST> -<INPUT TYPE=HIDDEN NAME=id VALUE="<%$QueueObj->Id%>"> -<TABLE> -<TR><TD ALIGN=RIGHT> -<&|/l&>Queue Name</&>: -</TD> -<TD><INPUT name="Name" value="<%$QueueObj->Name%>"></TD> -</TR><TR> -<TD ALIGN=RIGHT> -<&|/l&>Description</&>:</TD><TD COLSPAN=3><INPUT name="Description" value="<%$QueueObj->Description%>" size=60></TD></TR> -<TR> -<TD ALIGN=RIGHT> -<&|/l&>Correspondence Address</&>: -</TD><TD> -<INPUT name="CorrespondAddress" value="<%$QueueObj->CorrespondAddress%>"> -</TD> -<TD ALIGN=RIGHT> - -<&|/l&>Comment Address</&>: </TD><TD> -<INPUT NAME="CommentAddress" value="<%$QueueObj->CommentAddress%>"> -</TD> -</TR><TR> - -<TD ALIGN=RIGHT> -<&|/l&>Priority starts at</&>: -</TD><TD><INPUT NAME="InitialPriority" value="<%$QueueObj->InitialPriority %>"> -</TD> -<TD ALIGN=RIGHT> -<&|/l&>Over time, priority moves toward</&>: -</TD><TD><INPUT NAME="FinalPriority" value="<%$QueueObj->FinalPriority %>"> -</TD> -</TR> -<TR> -<TD ALIGN=RIGHT> -<&|/l&>Requests should be due in</&>: -</TD><TD> -<INPUT NAME="DefaultDueIn" VALUE="<%$QueueObj->DefaultDueIn%>"> <&|/l&>days</&>. -</TD> -</TR> -</TABLE> -<& /Elements/Submit &> -</form> -<& /Elements/TitleBoxEnd &> - -<%INIT> - -</%INIT> - -<%ARGS> - - -$QueueObj => undef -</%ARGS> diff --git a/rt/html/Admin/Elements/ModifyTemplate b/rt/html/Admin/Elements/ModifyTemplate index 5f75bac5f..6749f3e65 100644 --- a/rt/html/Admin/Elements/ModifyTemplate +++ b/rt/html/Admin/Elements/ModifyTemplate @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <TABLE> <TR> <TD ALIGN=RIGHT> diff --git a/rt/html/Admin/Elements/ModifyUser b/rt/html/Admin/Elements/ModifyUser deleted file mode 100644 index 876e8a71b..000000000 --- a/rt/html/Admin/Elements/ModifyUser +++ /dev/null @@ -1,99 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Elements/TitleBoxStart, title => loc('Editing Configuration for user [_1]', $UserObj->Name) &> - -<FORM ACTION="<%$RT::WebPath%>/Admin/Users/Modify.html" METHOD=POST> -<INPUT TYPE=HIDDEN NAME=id VALUE="<%$UserObj->Id%>"> - -<&|/l&>Name</&>: <input name="Name" value="<%$UserObj->Name%>"> -<BR> -<&|/l&>New Password</&>: <input type=password name="Pass1"><BR> -<&|/l&>Retype Password</&>: <input type=password name="Pass2"><BR> - -<&|/l&>Comments</&>: <TEXTAREA name="Comments" COLS=80 ROWS=5 WRAP=VIRTUAL> -<%$UserObj->Comments%></TEXTAREA> - -<BR> -<&|/l&>Signature</&>: <TEXTAREA COLS=80 ROWS=5 name="Signature" WRAP=HARD> -<%$UserObj->Signature%></TEXTAREA> -<BR> -<&|/l&>EmailAddress</&>: <input name="EmailAddress" value="<%$UserObj->EmailAddress%>"> -<BR> -<&|/l&>FreeformContactInfo</&>: <input name="FreeformContactInfo" value="<%$UserObj->FreeformContactInfo%>"> -<BR> -<&|/l&>Organization</&>: <input name="Organization" value="<%$UserObj->Organization%>"> -<BR> -<&|/l&>RealName</&>: <input name="RealName" value="<%$UserObj->RealName%>"> -<BR> -<&|/l&>NickName</&>: <input name="NickName" value="<%$UserObj->NickName%>"> -<BR> -<&|/l&>Lang</&>: <input name="Lang" value="<%$UserObj->Lang%>"> -<BR> -<&|/l&>EmailEncoding</&>: <input name="EmailEncoding" value="<%$UserObj->EmailEncoding%>"> -<BR> -<&|/l&>WebEncoding</&>: <input name="WebEncoding" value="<%$UserObj->WebEncoding%>"> -<BR> -<&|/l&>ExternalContactInfoId</&>: <input name="ExternalContactInfoId" value="<%$UserObj->ExternalContactInfoId%>"> -<BR> -<&|/l&>ContactInfoSystem</&>: <input name="ContactInfoSystem" value="<%$UserObj->ContactInfoSystem%>"> -<BR> -<&|/l&>UnixUsername</&>: <input name="Gecos" value="<%$UserObj->Gecos%>"> -<BR> -<&|/l&>ExternalAuthId</&>: <input name="ExternalAuthId" value="<%$UserObj->ExternalAuthId%>"> -<BR> -<&|/l&>AuthSystem</&>: <input name="AuthSystem" value="<%$UserObj->AuthSystem%>"> -<BR> -<&|/l&>HomePhone</&>: <input name="HomePhone" value="<%$UserObj->HomePhone%>"> -<BR> -<&|/l&>WorkPhone</&>: <input name="WorkPhone" value="<%$UserObj->WorkPhone%>"> -<BR> -<&|/l&>MobilePhone</&>: <input name="MobilePhone" value="<%$UserObj->MobilePhone%>"> -<BR> -<&|/l&>PagerPhone</&>: <input name="PagerPhone" value="<%$UserObj->PagerPhone%>"> -<BR> -<&|/l&>Address1</&>: <input name="Address1" value="<%$UserObj->Address1%>"> -<BR> -<&|/l&>Address2</&>: <input name="Address2" value="<%$UserObj->Address2%>"> -<BR> -<&|/l&>City</&>: <input name="City" value="<%$UserObj->City%>"> -<BR> -<&|/l&>State</&>: <input name="State" value="<%$UserObj->State%>"> -<BR> -<&|/l&>Zip</&>: <input name="Zip" value="<%$UserObj->Zip%>"> -<BR> -<&|/l&>Country</&>: <input name="Country" value="<%$UserObj->Country%>"> -<BR> -<& /Elements/Submit &> -</form> -<& /Elements/TitleBoxEnd &> - -<%INIT> - -</%INIT> - -<%ARGS> - - -$UserObj => undef -</%ARGS> diff --git a/rt/html/Admin/Elements/ObjectCustomFields b/rt/html/Admin/Elements/ObjectCustomFields new file mode 100644 index 000000000..a87e1579d --- /dev/null +++ b/rt/html/Admin/Elements/ObjectCustomFields @@ -0,0 +1,109 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& $ObjectTabs, +$id ? ( + id => $Object->id, + current_tab => "Admin/$Types/CustomFields.html?$sub_type_url&id=".$id, + current_subtab => "Admin/$Types/CustomFields.html?$sub_type_url&id=".$id, + "${Type}Obj" => $Object, +) : ( + current_tab => "Admin/Global/CustomFields/${QualifiedType}s.html", +), + Title => $title + &> + +<& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object &> +<%INIT> +# XXX TODO: Validate here? +#$ObjectType =~ /^RT::(Queue|User|Group)$/ +# or Abort(loc("Object of type [_1] cannot take custom fields", $ObjectType)); + + + +my $Type = $1; +my $Types = $Type.'s'; +my $ObjectTabs; +my $Object = $ObjectType->new($session{'CurrentUser'}); + + +my $QualifiedType; +my $FriendlySubTypes; +if ($SubType =~/^RT::(.*)$/) { + $FriendlySubTypes = RT::CustomField->new($session{'CurrentUser'})->FriendlyLookupType($Object->CustomFieldLookupType); + $QualifiedType = "$Type-$1"; +} else { + $QualifiedType = $Type; +} + +if ($id) { + $Object->Load($id) || Abort(loc("Couldn't load object [_1]", $id)); + $ObjectTabs = "/Admin/Elements/${Type}Tabs"; +} else { + $ObjectTabs = "/Admin/Elements/GlobalCustomFieldTabs"; + +} + +my $title; +if ($id) { +$title = loc('Edit Custom Fields for [_1]', $Object->Name); +} +elsif ($SubType) { + + $title= loc("Modify Custom Fields which apply to [_1] for all [_2]", loc(lc($FriendlySubTypes)), loc(lc($Types))); +} else { + $title =loc("Modify Custom Fields which apply to all [_1]", loc(lc($Types))); + +} +my $sub_type_url; +$sub_type_url = "SubType=$SubType" if $SubType; + +</%INIT> +<%ARGS> +$id => undef +$ObjectType +$SubType => undef +</%ARGS> diff --git a/rt/html/Admin/Elements/PickCustomFields b/rt/html/Admin/Elements/PickCustomFields new file mode 100644 index 000000000..c2a30f9a3 --- /dev/null +++ b/rt/html/Admin/Elements/PickCustomFields @@ -0,0 +1,96 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% if (@CustomFields == 0) { +<p><i><&|/l&>(None)</&></i></p> +% } else { +<TABLE cellspacing=0 cellpadding=2> +% my $count; +% foreach my $CustomFieldObj (@CustomFields) { +<TR> +% if (!$ReadOnly) { + <TD valign="TOP"> +<input type="checkbox" name="Object-<%$id%>-CF-<%$CustomFieldObj->Id%>" value="1" <% $Checked ? 'CHECKED' : '' %> +> + </TD> +% } + <TD valign="TOP"> + <A HREF="<%$RT::WebPath%>/Admin/CustomFields/Modify.html?id=<%$CustomFieldObj->id()%>"> +% if ($CustomFieldObj->Name) { +<b><%$CustomFieldObj->Name%></b> +% } else { +<i>(<&|/l&>no name</&>)</i> +% } +</a><br> + <%$CustomFieldObj->Description%> + </TD> + <TD valign="TOP"> + <i><% $CustomFieldObj->FriendlyTypeComposite %></i> + </TD> +% # show 'move up' unless it's the first item +% if ($count++ and $Checked) { + <TD valign="TOP"> + [<a href="<%$RT::WebPath%><% $m->request_comp->path |n %>?id=<%$id%>&SubType=<%$SubType%>&CustomField=<%$CustomFieldObj->id%>&Move=-1"><&|/l&>Move up</&></a>] +% } else { + <TD valign="TOP" ALIGN=RIGHT> +% } + +% # show 'move down' unless it's the last item +% if ($count != @CustomFields and $Checked) { +% $m->print(' | ') if $count > 1; + [<a href="<%$RT::WebPath%><% $m->request_comp->path |n %>?id=<%$id%>&SubType=<%$SubType%>&CustomField=<%$CustomFieldObj->id%>&Move=1"><&|/l&>Move down</&></a>] +% } + </TD> +</TR> +% } +</TABLE> +% } +<%ARGS> +@CustomFields +$id +$ReadOnly => 0 +$Checked => 0 +$SubType +</%ARGS> diff --git a/rt/html/Admin/Elements/PickObjects b/rt/html/Admin/Elements/PickObjects new file mode 100644 index 000000000..b07a88240 --- /dev/null +++ b/rt/html/Admin/Elements/PickObjects @@ -0,0 +1,80 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% if (@Objects == 0) { +<P><i><&|/l&>(None)</&></i></P> +% } else { +<TABLE cellspacing=0 cellpadding=2> +% my $count; +% foreach my $Object (@Objects) { +<TR> +% if (!$ReadOnly) { + <TD valign="TOP"> +<input type="checkbox" name="Object-<%$Object->id%>-CF-<%$id%>" value="1" <% $Checked ? 'CHECKED' : ''%> +> + </TD> +% } + <TD valign="TOP"> +% if ($Object->Name) { + <b><%$Object->Name%></b><br> +% } else { + <i>(<%loc("no name")%>)</i><br> +% } + <%$Object->can('Description') && $Object->Description%> + </TD> +%# <TD valign="TOP"> +%# <i><% $CustomFieldObj->FriendlyTypeComposite %></i> +%# </TD> + </TD> +</TR> +% } +</TABLE> +% } +<%ARGS> +@Objects +$id +$ReadOnly => 0 +$Checked => 0 +</%ARGS> diff --git a/rt/html/Admin/Elements/QueueRightsForUser b/rt/html/Admin/Elements/QueueRightsForUser index 05bb51196..01f294a59 100644 --- a/rt/html/Admin/Elements/QueueRightsForUser +++ b/rt/html/Admin/Elements/QueueRightsForUser @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,17 +20,33 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <UL> %while(my $ACE = $ACL->Next) { -<LI><checkbox name="delete_ace_<%$ACE->id%>"> <% loc($ACE->RightName) %> (<%$ACE->UserObj->RealName%>) +<LI><checkbox name="delete_ace_<%$ACE->id%>" value="1"> <% loc($ACE->RightName) %> (<%$ACE->UserObj->RealName%>) %} </UL> diff --git a/rt/html/Admin/Elements/QueueTabs b/rt/html/Admin/Elements/QueueTabs index 3b4805afc..93522d0a2 100644 --- a/rt/html/Admin/Elements/QueueTabs +++ b/rt/html/Admin/Elements/QueueTabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Tabs, subtabs => $tabs, current_tab => 'Admin/Queues/', @@ -49,8 +71,12 @@ if ($id) { path => "Admin/Queues/Templates.html?id=".$id, }, - G => { title => loc('Custom Fields'), - path => 'Admin/Queues/CustomFields.html?id='.$id, + G1 => { title => loc('Ticket Custom Fields'), + path => 'Admin/Queues/CustomFields.html?SubType=RT::Ticket&id='.$id, + }, + + G2 => { title => loc('Transaction Custom Fields'), + path => 'Admin/Queues/CustomFields.html?SubType=RT::Ticket-RT::Transaction&id='.$id, }, H => { title => loc('Group Rights'), @@ -68,8 +94,7 @@ if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminQue }; $tabs->{"B"} = { title => loc('New queue'), path => "Admin/Queues/Modify.html?Create=1", - separator => 1, - }; + separator => 1, }; } # Now let callbacks add their extra tabs diff --git a/rt/html/Admin/Elements/SelectCustomFieldLookupType b/rt/html/Admin/Elements/SelectCustomFieldLookupType new file mode 100644 index 000000000..ec9f740b9 --- /dev/null +++ b/rt/html/Admin/Elements/SelectCustomFieldLookupType @@ -0,0 +1,58 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<SELECT NAME ="<%$Name%>"> +%for my $option ($cf->LookupTypes) { +<OPTION VALUE="<%$option%>" <%$option eq $Default && "SELECTED"%>><% $cf->FriendlyLookupType($option) %></OPTION> +%} +</SELECT> +<%INIT> +my $cf = RT::CustomField->new($session{'CurrentUser'}); + +</%INIT> +<%ARGS> +$Default=>undef +$Name => 'LookupType' +</%ARGS> diff --git a/rt/html/Admin/Elements/SelectCustomFieldType b/rt/html/Admin/Elements/SelectCustomFieldType index b5f4c079a..3f25b8e71 100644 --- a/rt/html/Admin/Elements/SelectCustomFieldType +++ b/rt/html/Admin/Elements/SelectCustomFieldType @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,16 +20,32 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> -%for my $option ($cf->Types) { -<OPTION VALUE="<%$option%>" <%$option eq $Default && "SELECTED"%>><% $cf->FriendlyType($option) %></OPTION> +%for my $option ($cf->TypeComposites) { +<OPTION VALUE="<%$option%>" <%$option eq $Default && "SELECTED"%>><% $cf->FriendlyTypeComposite($option) %></OPTION> %} </SELECT> <%INIT> @@ -32,5 +54,5 @@ my $cf = RT::CustomField->new($session{'CurrentUser'}); </%INIT> <%ARGS> $Default=>undef -$Name => 'Type' +$Name => 'TypeComposite' </%ARGS> diff --git a/rt/html/Admin/Elements/SelectGroups b/rt/html/Admin/Elements/SelectGroups index 5df49ad04..92bd47587 100644 --- a/rt/html/Admin/Elements/SelectGroups +++ b/rt/html/Admin/Elements/SelectGroups @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT MULTIPLE NAME="<%$Name%>" SIZE=10> %while (my $group = $groups->Next) { <OPTION VALUE="<%$group->id%>"><%$group->Name%> @@ -29,9 +51,10 @@ <%INIT> my $groups = new RT::Groups($session{'CurrentUser'}); -$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'System'); +$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain); </%INIT> <%ARGS> $Name => 'groups' +$Domain => 'UserDefined'; </%ARGS> diff --git a/rt/html/Admin/Elements/SelectModifyGroup b/rt/html/Admin/Elements/SelectModifyGroup index 47978d3bf..272e1f0c7 100644 --- a/rt/html/Admin/Elements/SelectModifyGroup +++ b/rt/html/Admin/Elements/SelectModifyGroup @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} %while ( $Group = $Groups->Next) { <A HREF="Modify.html?id=<%$Group->id%>"><%$Group->id%>: <%$Group->Name%></a><BR> %} diff --git a/rt/html/Admin/Elements/SelectModifyQueue b/rt/html/Admin/Elements/SelectModifyQueue index c5152ac95..3a30d09c8 100644 --- a/rt/html/Admin/Elements/SelectModifyQueue +++ b/rt/html/Admin/Elements/SelectModifyQueue @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} %while ( $queue = $queues->Next) { <A HREF="Modify.html?id=<%$queue->id%>"><%$queue->id%>: <%$queue->Name%></a><BR> %} diff --git a/rt/html/Admin/Elements/SelectModifyUser b/rt/html/Admin/Elements/SelectModifyUser index 9e7789b4c..fc6c01205 100644 --- a/rt/html/Admin/Elements/SelectModifyUser +++ b/rt/html/Admin/Elements/SelectModifyUser @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} %while ( $user = $users->Next) { <A HREF="Modify.html?id=<%$user->id%>"><%$user->id%>: <%$user->Name%></a><BR> %} diff --git a/rt/html/Admin/Elements/SelectNewGroupMembers b/rt/html/Admin/Elements/SelectNewGroupMembers index e5c28e909..95056aec9 100644 --- a/rt/html/Admin/Elements/SelectNewGroupMembers +++ b/rt/html/Admin/Elements/SelectNewGroupMembers @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} % if ($Show ne 'Groups') { <b><&|/l&>Users</&></b> <SELECT MULTIPLE NAME="<%$Name%>Users" SIZE=10> @@ -42,8 +64,18 @@ <%INIT> my $users = new RT::Users($session{'CurrentUser'}); -$users->Limit(FIELD => 'id', VALUE => $RT::SystemUser->id, OPERATOR => '!=' ); -$users->Limit(FIELD => 'id', VALUE => $RT::Nobody->id, OPERATOR => '!=' ); +$users->Limit( + FIELD => 'id', + VALUE => $RT::SystemUser->id, + OPERATOR => '!=', + ENTRYAGGREGATOR => 'AND' +); +$users->Limit( + FIELD => 'id', + VALUE => $RT::Nobody->id, + OPERATOR => '!=', + ENTRYAGGREGATOR => 'AND' +); $users->LimitToPrivileged(); my $groups = new RT::Groups($session{'CurrentUser'}); diff --git a/rt/html/Admin/Elements/SelectRights b/rt/html/Admin/Elements/SelectRights index 37a06dc4d..3e61d5071 100644 --- a/rt/html/Admin/Elements/SelectRights +++ b/rt/html/Admin/Elements/SelectRights @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,33 +20,52 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <INPUT TYPE=HIDDEN NAME="CheckACL" VALUE="<%$ACLDesc%>"> <TABLE BORDER=0> <TR> -<TD valign=top width="180"> +<TD valign=top width="180" align="left"> +% my %current_rights; <h3><&|/l&>Current rights</&></h3> -% if ($ACLObj->Count() > 0) { -<i>(<&|/l&>Check box to revoke right</&>)</i> <BR> -% } else { +% if ($ACLObj->Count() == 0) { <i><&|/l&>No rights granted.</&></i> <BR> -% } +% } else { +<i>(<&|/l&>Check box to revoke right</&>)</i> <BR> % while (my $right = $ACLObj->Next()) { % if ($right->RightName) { +% $current_rights{$right->RightName} = 1; <input type=checkbox value="<%$right->Id%>" name="RevokeRight-<%$ACLDesc%>-<%$right->RightName%>"> <% loc($right->RightName) %><br> % } % } +% } </TD> <TD valign=top> <h3><&|/l&>New rights</&></h3> <SELECT SIZE=5 MULTIPLE NAME="GrantRight-<%$ACLDesc%>"> % foreach $right (sort keys %Rights) { +% next if $current_rights{$right}; <OPTION VALUE="<%$right%>" ><% loc($right) %></OPTION> % } @@ -71,13 +96,14 @@ $ACLObj->LimitToObject( $Object); $ACLObj->LimitToPrincipal( Id => $PrincipalId); + $ACLObj->OrderBy(FIELD=>'RightName'); if (ref($Object) && UNIVERSAL::can($Object, 'AvailableRights')) { %Rights = %{$Object->AvailableRights}; } else { - %Rights = { loc('System Error') => loc("No rights found")}; + %Rights = ( loc('System Error') => loc("No rights found") ); } $ACLDesc = "$PrincipalId-".ref($Object)."-".$Object->Id; diff --git a/rt/html/Admin/Elements/SelectScrip b/rt/html/Admin/Elements/SelectScrip index 18e4098a0..a9e979699 100644 --- a/rt/html/Admin/Elements/SelectScrip +++ b/rt/html/Admin/Elements/SelectScrip @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME=<%$Name%>> <OPTION VALUE="" <% $Default eq undef && 'SELECTED' %> diff --git a/rt/html/Admin/Elements/SelectScripAction b/rt/html/Admin/Elements/SelectScripAction index 0d7f8ccfa..8d88d6458 100644 --- a/rt/html/Admin/Elements/SelectScripAction +++ b/rt/html/Admin/Elements/SelectScripAction @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,20 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME=<%$Name%>> <OPTION VALUE="" -<% $Default eq undef && 'SELECTED' %> +<% ! defined $Default && 'SELECTED' %> >-</OPTION> %while (my $ScripAction = $ScripActions->Next) { <OPTION VALUE=<%$ScripAction->Id%> -<% $ScripAction->Id == $Default && 'SELECTED' %> +<% defined $Default && $ScripAction->Id == $Default && 'SELECTED' %> ><% loc($ScripAction->Name) %> </OPTION> %} diff --git a/rt/html/Admin/Elements/SelectScripCondition b/rt/html/Admin/Elements/SelectScripCondition index aeb366a44..faa99fda6 100644 --- a/rt/html/Admin/Elements/SelectScripCondition +++ b/rt/html/Admin/Elements/SelectScripCondition @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,20 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME=<%$Name%>> <OPTION VALUE="" -<% $Default eq undef && 'SELECTED' %> +<% ! defined $Default && 'SELECTED' %> >-</OPTION> %while (my $ScripCondition = $ScripConditions->Next) { <OPTION VALUE=<%$ScripCondition->Id%> -<% $ScripCondition->Id == $Default && 'SELECTED' %> +<% defined $Default && $ScripCondition->Id == $Default && 'SELECTED' %> ><% loc($ScripCondition->Name) %> </OPTION> %} diff --git a/rt/html/Admin/Elements/SelectSingleOrMultiple b/rt/html/Admin/Elements/SelectSingleOrMultiple index 98e9ee78c..571695091 100644 --- a/rt/html/Admin/Elements/SelectSingleOrMultiple +++ b/rt/html/Admin/Elements/SelectSingleOrMultiple @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <select name="<%$Name%>"> <option value="1" <%$SingleDefault%>><&|/l&>Single</&></option> <option value="0" <%$MultipleDefault%>><&|/l&>Multiple</&></option> diff --git a/rt/html/Admin/Elements/SelectStage b/rt/html/Admin/Elements/SelectStage new file mode 100644 index 000000000..0fbf5c609 --- /dev/null +++ b/rt/html/Admin/Elements/SelectStage @@ -0,0 +1,64 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<SELECT NAME=<%$Name%>> +% foreach my $stage (@stages) { +<OPTION VALUE=<%$stage%> +<% ($stage eq $Default) && 'SELECTED' %> +><% loc($stage) %> +</OPTION> +% } +<%INIT> +if ($Default eq '') { + $Default = 'TransactionCreate'; +} +my @stages = 'TransactionCreate'; +push @stages, 'TransactionBatch' if $RT::UseTransactionBatch; +push @stages, 'Disabled'; +</%INIT> +<%ARGS> +$Default => 'TransactionCreate' +$Name => 'Stage' +</%ARGS> diff --git a/rt/html/Admin/Elements/SelectTemplate b/rt/html/Admin/Elements/SelectTemplate index 70ff4d1cc..7d83b6768 100644 --- a/rt/html/Admin/Elements/SelectTemplate +++ b/rt/html/Admin/Elements/SelectTemplate @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME=<%$Name%>> <OPTION VALUE="" <% $Default eq 'none' && 'SELECTED' %> diff --git a/rt/html/Admin/Elements/SelectUsers b/rt/html/Admin/Elements/SelectUsers index d4c8a85ad..a88aa8ff7 100644 --- a/rt/html/Admin/Elements/SelectUsers +++ b/rt/html/Admin/Elements/SelectUsers @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT MULTIPLE NAME="<%$Name%>" SIZE=10> %while (my $user = $users->Next) { <OPTION VALUE="<%$user->id%>"><%$user->Name%> diff --git a/rt/html/Admin/Elements/SystemTabs b/rt/html/Admin/Elements/SystemTabs index f38febdd7..646f552f5 100644 --- a/rt/html/Admin/Elements/SystemTabs +++ b/rt/html/Admin/Elements/SystemTabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Tabs, subtabs => $tabs, current_tab => 'Admin/Global/', current_subtab => $current_tab, @@ -37,7 +59,7 @@ }, F => { title => loc('Custom Fields'), - path => 'Admin/Global/CustomFields.html', + path => 'Admin/Global/CustomFields/index.html', }, G => { title => loc('Group Rights'), diff --git a/rt/html/Admin/Elements/Tabs b/rt/html/Admin/Elements/Tabs index 8fa2708fb..f90a629a2 100644 --- a/rt/html/Admin/Elements/Tabs +++ b/rt/html/Admin/Elements/Tabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/Tabs, tabs => $tabs, current_toptab => 'Admin/', @@ -37,9 +59,15 @@ C => { title => loc('Queues'), path => 'Admin/Queues/', }, - D => { 'title' => loc('Global'), + D => { 'title' => loc('Custom Fields'), + path => 'Admin/CustomFields/', + }, + E => { 'title' => loc('Global'), path => 'Admin/Global/', }, + F => { 'title' => loc('Tools'), + path => 'Admin/Tools/', + }, }; # Now let callbacks add their extra tabs diff --git a/rt/html/Admin/Elements/ToolTabs b/rt/html/Admin/Elements/ToolTabs new file mode 100755 index 000000000..773b81099 --- /dev/null +++ b/rt/html/Admin/Elements/ToolTabs @@ -0,0 +1,78 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Tabs, subtabs => $tabs, + current_tab => 'Admin/Tools/', + current_subtab => $current_tab, + Title => $Title &> + +<%INIT> + my $tabs = { + + A => { title => loc('System Configuration'), + path => 'Admin/Tools/Configuration.html', + } + +}; + + # Now let callbacks add their extra tabs + $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); + + foreach my $tab (sort keys %{$tabs}) { + if ($tabs->{$tab}->{'path'} eq $current_tab) { + $tabs->{$tab}->{"subtabs"} = $subtabs; + $tabs->{$tab}->{"current_subtab"} = $current_subtab; + } + } +</%INIT> + + +<%ARGS> +$id => undef +$current_tab => undef +$subtabs => undef +$current_subtab => undef +$Title => undef +</%ARGS> diff --git a/rt/html/Admin/Elements/UserTabs b/rt/html/Admin/Elements/UserTabs index 764fdfcb5..0ffd29b0f 100644 --- a/rt/html/Admin/Elements/UserTabs +++ b/rt/html/Admin/Elements/UserTabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,34 +20,55 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Tabs, subtabs => $tabs, current_tab => 'Admin/Users/', - current_subtab => $current_subtab, + current_subtab => $current_tab, Title => $Title &> <%INIT> my $tabs; -my $subtabs; if ($id) { $tabs->{'this'} = { title => eval { $UserObj->Name }, - path => "Admin/Users/Modify.html?id=".$id, + path => "Admin/Users/Modify.html?id=".$id, subtabs => { - Queues => { title => loc('Basics'), - path => "Admin/Users/Modify.html?id=".$id + Basics => { title => loc('Basics'), + path => "Admin/Users/Modify.html?id=".$id + }, + Memberships => { title => loc('Memberships'), + path => "Admin/Users/Memberships.html?id=".$id + }, + History => { title => loc('History'), + path => "Admin/Users/History.html?id=".$id }, # Scrips => { title => loc('Rights'), # path => "Admin/Users/Rights.html?id=".$id # } - } + } } } if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminUsers')) { @@ -50,25 +77,32 @@ if ($session{'CurrentUser'}->HasRight( Object => $RT::System, Right => 'AdminUse }; $tabs->{"B"} = { title => loc('New user'), path => "Admin/Users/Modify.html?Create=1", - separator => 1, - }; + separator => 1, + }; } # Now let callbacks add their extra tabs $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); -foreach my $tab ( sort keys %{$tabs} ) { - if ( $tabs->{$tab}->{'path'} eq $current_subtab ) { - $tabs->{$tab}->{"current_subtab"} = $current_subtab; +#foreach my $tab ( sort keys %{$tabs} ) { +# if ( $tabs->{$tab}->{'path'} eq $current_subtab ) { +# $tabs->{$tab}->{"current_subtab"} = $current_subtab; +# } +#} +foreach my $tab ( sort keys %{$tabs->{'this'}->{'subtabs'}} ) { + if ( $tabs->{'this'}->{'subtabs'}->{$tab}->{'path'} eq $current_tab ) { + $tabs->{'this'}->{'subtabs'}->{$tab}->{"subtabs"} = $subtabs; + $tabs->{'this'}->{'subtabs'}->{$tab}->{"current_subtab"} = $current_subtab; } -} +} +$tabs->{'this'}->{"current_subtab"} = $current_tab; +$current_tab = "Admin/Users/Modify.html?id=".$id if $id; </%INIT> - - <%ARGS> $UserObj => undef $id => undef $current_tab => undef +$subtabs => undef $current_subtab => undef $Title => undef </%ARGS> diff --git a/rt/html/Admin/Global/CustomField.html b/rt/html/Admin/Global/CustomField.html deleted file mode 100644 index 0974af538..000000000 --- a/rt/html/Admin/Global/CustomField.html +++ /dev/null @@ -1,61 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Admin/Elements/Header, Title => $title &> -<& /Admin/Elements/SystemTabs, - current_tab => 'Admin/Global/CustomFields.html', - current_subtab => $current_subtab, - subtabs => $subtabs, - Title => $title &> - -<& /Admin/Elements/EditCustomField, title => $title, %ARGS &> - -<%INIT> -my ($title, $current_subtab); - -my $subtabs = { - A => { title => loc('Select custom field'), - path => "Admin/Global/CustomFields.html" - }, - B => { title => loc('New custom field'), - path => "Admin/Global/CustomField.html?create=1&Queue=0", - separator => 1, - } - }; -if ( $ARGS{'create'} ) { - $current_subtab = "Admin/Global/CustomField.html?create=1&Queue=0"; - $title = loc('Create a CustomField which applies to all queues'); -} -else { - $current_subtab = - "Admin/Global/CustomField.html?CustomField=" . $CustomField . "&Queue=0"; - $title = loc('Modify a CustomField which applies to all queues'); - $subtabs->{"C"} = { - title => loc( 'Custom Field #[_1]', $CustomField ), - path => "Admin/Global/CustomField.html?CustomField=" . $CustomField . "&Queue=0" - }; -} -</%INIT> -<%ARGS> -$CustomField => undef -</%ARGS> diff --git a/rt/html/Admin/Global/CustomFields.html b/rt/html/Admin/Global/CustomFields.html deleted file mode 100644 index f6bbddfed..000000000 --- a/rt/html/Admin/Global/CustomFields.html +++ /dev/null @@ -1,47 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Admin/Elements/Header, Title => $title &> -<& /Admin/Elements/SystemTabs, - current_tab => 'Admin/Global/CustomFields.html', - current_subtab => 'Admin/Global/CustomFields.html', - subtabs => $subtabs, - Title => $title &> - -<& /Admin/Elements/EditCustomFields, title => $title, %ARGS &> - -<%INIT> -my $subtabs = { - A => { title => loc('Select custom field'), - path => "Admin/Global/CustomFields.html" - }, - B => { title => loc('New custom field'), - path => "Admin/Global/CustomField.html?create=1&Queue=0", - separator => 1, - } - }; -my $title = loc("Modify Custom Fields which apply to all queues"); -</%INIT> -<%ARGS> -$id => undef -</%ARGS> diff --git a/rt/html/Admin/Global/CustomFields/Groups.html b/rt/html/Admin/Global/CustomFields/Groups.html new file mode 100644 index 000000000..bffde016f --- /dev/null +++ b/rt/html/Admin/Global/CustomFields/Groups.html @@ -0,0 +1,11 @@ +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/GlobalCustomFieldTabs, + current_tab => "Admin/Global/CustomFields/Groups.html", + current_subtab => "Admin/Global/CustomFields/Groups.html", + Title => $title + &> + <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Group', Object=> $object &> +<%INIT> + my $title = loc( 'Edit Custom Fields for all groups'); + my $object = RT::Group->new($session{'CurrentUser'}); +</%INIT> diff --git a/rt/html/Admin/Global/CustomFields/Queue-Tickets.html b/rt/html/Admin/Global/CustomFields/Queue-Tickets.html new file mode 100755 index 000000000..396559a17 --- /dev/null +++ b/rt/html/Admin/Global/CustomFields/Queue-Tickets.html @@ -0,0 +1,11 @@ +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/GlobalCustomFieldTabs, + current_tab => "Admin/Global/CustomFields/Queue-Tickets.html", + current_subtab => "Admin/Global/CustomFields/Queue-Tickets.html", + Title => $title + &> + <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object, SubType => 'RT::Ticket' &> +<%INIT> + my $title = loc( 'Edit Custom Fields for tickets in all queues'); + my $object = RT::Queue->new($session{'CurrentUser'}); +</%INIT> diff --git a/rt/html/Admin/Global/CustomFields/Queue-Transactions.html b/rt/html/Admin/Global/CustomFields/Queue-Transactions.html new file mode 100755 index 000000000..63b4cfe6b --- /dev/null +++ b/rt/html/Admin/Global/CustomFields/Queue-Transactions.html @@ -0,0 +1,11 @@ +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/GlobalCustomFieldTabs, + current_tab => "Admin/Global/CustomFields/Queue-Transactions.html", + current_subtab => "Admin/Global/CustomFields/Queue-Transactions.html", + Title => $title + &> + <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::Queue', Object=> $object, SubType => 'RT::Ticket-RT::Transaction' &> +<%INIT> + my $title = loc( 'Edit Custom Fields for tickets in all queues'); + my $object = RT::Queue->new($session{'CurrentUser'}); +</%INIT> diff --git a/rt/html/Admin/Global/CustomFields/Users.html b/rt/html/Admin/Global/CustomFields/Users.html new file mode 100644 index 000000000..6b79743d2 --- /dev/null +++ b/rt/html/Admin/Global/CustomFields/Users.html @@ -0,0 +1,11 @@ +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/GlobalCustomFieldTabs, + current_tab => "Admin/Global/CustomFields/Users.html", + current_subtab => "Admin/Global/CustomFields/Users.html", + Title => $title + &> + <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, ObjectType => 'RT::User', Object=> $object &> +<%INIT> + my $title = loc( 'Edit Custom Fields for all users'); + my $object = RT::User->new($session{'CurrentUser'}); +</%INIT> diff --git a/rt/html/Admin/Global/CustomFields/index.html b/rt/html/Admin/Global/CustomFields/index.html new file mode 100644 index 000000000..9cdcfd549 --- /dev/null +++ b/rt/html/Admin/Global/CustomFields/index.html @@ -0,0 +1,91 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/Callback, tabs => $tabs, %ARGS &> +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/GlobalCustomFieldTabs, Title => $title &> + +<ul> +% foreach my $key (sort keys %$tabs) { +<li><font size="+2"><a href="<% $tabs->{$key}{path} %>"><% $tabs->{$key}{title} %></a></font><br> +<% $tabs->{$key}{text} %> +</li> +% } +</ul> + +<%INIT> +my $title = loc("Global custom field configuration"); + +my $tabs = { + + A => { + title => loc('Users'), + text => loc('Select custom fields for all users'), + path => 'Users.html', + }, + B => { + title => loc('Groups'), + text => loc('Select custom fields for all user groups'), + path => 'Groups.html', + }, + + F => { + title => loc('Tickets'), + text => loc('Select custom fields for tickets in all queues'), + path => 'Queue-Tickets.html', + }, + + G => { + title => loc('Ticket Transactions'), + text => + loc('Select custom fields for transactions on tickets in all queues'), + path => 'Queue-Transactions.html', + }, + +}; + + +$m->comp('/Elements/Callback', tabs => $tabs); +</%INIT> diff --git a/rt/html/Admin/Global/GroupRights.html b/rt/html/Admin/Global/GroupRights.html index 150e83f43..8d71432e0 100644 --- a/rt/html/Admin/Global/GroupRights.html +++ b/rt/html/Admin/Global/GroupRights.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify global group rights') &> <& /Admin/Elements/SystemTabs, current_tab => 'Admin/Global/GroupRights.html', @@ -81,7 +103,7 @@ </TABLE> <& /Elements/TitleBoxEnd &> - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &> </FORM> diff --git a/rt/html/Admin/Global/Scrip.html b/rt/html/Admin/Global/Scrip.html index 8b9cf6db6..4e0c1f466 100644 --- a/rt/html/Admin/Global/Scrip.html +++ b/rt/html/Admin/Global/Scrip.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/SystemTabs, current_tab => 'Admin/Global/Scrips.html', diff --git a/rt/html/Admin/Global/Scrips.html b/rt/html/Admin/Global/Scrips.html index 763198015..dcfa6ff07 100644 --- a/rt/html/Admin/Global/Scrips.html +++ b/rt/html/Admin/Global/Scrips.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/SystemTabs, current_tab => 'Admin/Global/Scrips.html', diff --git a/rt/html/Admin/Global/Template.html b/rt/html/Admin/Global/Template.html index 71f77e9dd..17da59b9e 100644 --- a/rt/html/Admin/Global/Template.html +++ b/rt/html/Admin/Global/Template.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("Modify template [_1]", $TemplateObj->id) &> <& /Admin/Elements/SystemTabs, current_tab => 'Admin/Global/Templates.html', @@ -42,7 +64,7 @@ <& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name, Description => $TemplateObj->Description, Content => $TemplateObj->Content &> -<& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> +<& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &> </FORM> diff --git a/rt/html/Admin/Global/Templates.html b/rt/html/Admin/Global/Templates.html index 77aab0730..387326cd1 100644 --- a/rt/html/Admin/Global/Templates.html +++ b/rt/html/Admin/Global/Templates.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<& /Admin/Elements/Header, Title => $title &> +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title, FeedURI => 'templates' &> <& /Admin/Elements/SystemTabs, current_tab => 'Admin/Global/Templates.html', current_subtab => 'Admin/Global/Templates.html', diff --git a/rt/html/Admin/Global/UserRights.html b/rt/html/Admin/Global/UserRights.html index aee82d1f4..14a4de368 100644 --- a/rt/html/Admin/Global/UserRights.html +++ b/rt/html/Admin/Global/UserRights.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify global user rights') &> <& /Admin/Elements/SystemTabs, current_tab => 'Admin/Global/UserRights.html', @@ -50,7 +72,7 @@ </TABLE> <& /Elements/TitleBoxEnd &> - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + <& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &> </FORM> diff --git a/rt/html/Admin/Global/index.html b/rt/html/Admin/Global/index.html index 1749f4ffb..af7a9ddd9 100644 --- a/rt/html/Admin/Global/index.html +++ b/rt/html/Admin/Global/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Callback, tabs => $tabs, %ARGS &> <& /Admin/Elements/Header, Title => loc('Admin/Global configuration') &> <& /Admin/Elements/SystemTabs, @@ -47,8 +69,8 @@ }, F => { title => loc('Custom Fields'), - text => loc('Modify Custom Fields which apply to all queues'), - path => 'CustomFields.html', + text => loc('Modify global custom fields'), + path => 'CustomFields/index.html', }, G => { title => loc('Group Rights'), diff --git a/rt/html/Admin/Groups/CustomFields.html b/rt/html/Admin/Groups/CustomFields.html new file mode 100644 index 000000000..c2336b042 --- /dev/null +++ b/rt/html/Admin/Groups/CustomFields.html @@ -0,0 +1,46 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/ObjectCustomFields, %ARGS, ObjectType => 'RT::Group' &> diff --git a/rt/html/Admin/Groups/GroupRights.html b/rt/html/Admin/Groups/GroupRights.html index 6220259d3..d95bdae07 100644 --- a/rt/html/Admin/Groups/GroupRights.html +++ b/rt/html/Admin/Groups/GroupRights.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify group rights for group [_1]', $GroupObj->Name) &> <& /Admin/Elements/GroupTabs, GroupObj => $GroupObj, @@ -69,7 +91,7 @@ </TABLE> <& /Elements/TitleBoxEnd &> - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &> </FORM> diff --git a/rt/html/Admin/Groups/History.html b/rt/html/Admin/Groups/History.html new file mode 100644 index 000000000..40dab46e9 --- /dev/null +++ b/rt/html/Admin/Groups/History.html @@ -0,0 +1,66 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/GroupTabs, + id => $id, + GroupObj => $GroupObj, + current_subtab => $current_tab, + Title => $title &> + +<& /Ticket/Elements/ShowHistory, + Ticket => $GroupObj, + ShowHeaderModes => 0, +&> + +<%INIT> +my $current_tab = 'Admin/Groups/History.html?id='.$id; +my $GroupObj = new RT::Group($session{'CurrentUser'}); +$GroupObj->Load($id) || Abort("Couldn't load group '$id'"); +my $title = loc("History of the group [_1]", $GroupObj->Name); +</%INIT> +<%ARGS> +$id => undef +</%ARGS> diff --git a/rt/html/Admin/Groups/Members.html b/rt/html/Admin/Groups/Members.html index 6e669666f..fd25b2d7f 100644 --- a/rt/html/Admin/Groups/Members.html +++ b/rt/html/Admin/Groups/Members.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => "RT/Admin/Edit the group ". $Group->Name &> <& /Admin/Elements/GroupTabs, GroupObj => $Group, current_tab => 'Admin/Groups/Members.html?id='.$id, @@ -56,7 +78,7 @@ % $UserMembers->LimitToUsers(); <UL> % while (my $member = $UserMembers->Next()) { -<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>"> +<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>" value="1"> <%$member->MemberObj->Object->Name%> (<%$member->MemberObj->Object->RealName%>) % } </ul> @@ -65,7 +87,7 @@ % my $GroupMembers = $Group->MembersObj; % $GroupMembers->LimitToGroups(); % while (my $member = $GroupMembers->Next()) { -<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>"> +<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>" value="1"> <%$member->MemberObj->Object->Name%> % } % } @@ -77,7 +99,7 @@ </TR> </TABLE> <& /Elements/TitleBoxEnd &> -<& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> +<& /Elements/Submit, Label => loc('Modify Members'), Reset => 1 &> </form> diff --git a/rt/html/Admin/Groups/Modify.html b/rt/html/Admin/Groups/Modify.html index c5e91588e..94c0203b1 100644 --- a/rt/html/Admin/Groups/Modify.html +++ b/rt/html/Admin/Groups/Modify.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/GroupTabs, @@ -31,7 +53,7 @@ -<FORM ACTION="<%$RT::WebPath%>/Admin/Groups/Modify.html" METHOD=POST> +<FORM ACTION="<%$RT::WebPath%>/Admin/Groups/Modify.html" METHOD=POST ENCTYPE="multipart/form-data"> %unless ($Group->Id) { <INPUT TYPE=HIDDEN NAME=id VALUE="new"> @@ -43,16 +65,27 @@ <&|/l&>Name</&>: </TD> <TD><INPUT name="Name" value="<%$Group->Name%>"></TD> -</TR><TR> +</TR> +<TR> <TD ALIGN=RIGHT> <&|/l&>Description</&>:</TD><TD COLSPAN=3><INPUT name="Description" value="<%$Group->Description%>" size=60></TD> -</TR><TR> +</TR> +% my $CFs = $Group->CustomFields; +% while (my $CF = $CFs->Next) { +<TR VALIGN="TOP"><TD ALIGN="RIGHT"> +<% $CF->Name %>: +</TD><TD> +<& /Elements/EditCustomField, CustomField => $CF, Object => $Group &> +</TD></TR> +% } +<TR> <TD COLSPAN=2> <INPUT TYPE=HIDDEN NAME="SetEnabled" VALUE="1"> <INPUT TYPE=CHECKBOX NAME="Enabled" VALUE="1" <%$EnabledChecked%>> <&|/l&>Enabled (Unchecking this box disables this group)</&><BR> </TR> +<& /Elements/Callback, GroupObj => $Group, results => \@results, %ARGS &> </TABLE> -<& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> +<& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &> </form> <%INIT> @@ -102,6 +135,7 @@ if ($id) { Object => $Group, ARGSRef => \%ARGS ); push (@results,@fieldresults); + push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $Group ); } #we're asking about enabled on the web page but really care about disabled. diff --git a/rt/html/Admin/Groups/UserRights.html b/rt/html/Admin/Groups/UserRights.html index 0a87ef860..5237b1578 100644 --- a/rt/html/Admin/Groups/UserRights.html +++ b/rt/html/Admin/Groups/UserRights.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify user rights for group [_1]', $GroupObj->Name) &> <& /Admin/Elements/GroupTabs, GroupObj => $GroupObj, @@ -51,7 +73,7 @@ </TABLE> <& /Elements/TitleBoxEnd &> - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + <& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &> </FORM> diff --git a/rt/html/Admin/Groups/index.html b/rt/html/Admin/Groups/index.html index 57c86c90e..073440696 100644 --- a/rt/html/Admin/Groups/index.html +++ b/rt/html/Admin/Groups/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,30 +20,88 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/GroupTabs, current_tab => 'Admin/Groups/', current_subtab => 'Admin/Groups/', Title => $title &> - - -<UL> +<%$caption%>:<BR> <UL> +%if ($Groups->Count == 0) { +<LI> <i><&|/l&>No groups matching search criteria found.</&></i> +% } +%my @ids; %while ( my $Group = $Groups->Next) { +% push @ids, $Group->Id; <LI><A HREF="Modify.html?id=<%$Group->id%>"><%$Group->Name || loc('(empty)')%></a><BR> %} </UL> +%if (my $ids = join(',', @ids)) { +<em>(<a href="<%$RT::WebPath%>/Download/Tabular/Group/<% $ids %>/Groups.tsv"><&|/l&>Download as a tab-delimited file</&></a>)</em><br> +%} +<br><br> +<FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Groups/index.html"> +<input type="checkbox" name="FindDisabledGroups" value="1"> <&|/l&>Include disabled groups in listing.</&> +<BR> +<div align=right><input type=submit value="<&|/l&>Go!</&>"></div> +</FORM> +<br><br> +<FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Groups/index.html"> +<&|/l&>Find groups whose</&> <& /Elements/SelectGroups &><BR> +<div align=right><input type=submit value="<&|/l&>Go!</&>"></div> +</FORM> <%INIT> my $Groups = RT::Groups->new($session{'CurrentUser'}); $Groups->LimitToUserDefinedGroups(); my $title = loc('Select a group'); +my $caption; +if (length $GroupString) { + $caption = loc("Groups matching search criteria"); + if ($GroupField =~ /^CustomField-(\d+)/) { + $Groups->LimitCustomField( + CUSTOMFIELD => $1, + OPERATOR => $GroupOp, + VALUE => $GroupString, + ); + } + else { + $Groups->Limit( + FIELD => $GroupField, + OPERATOR => $GroupOp, + VALUE => $GroupString, + ); + } +} +else { + $caption = loc("User-defined groups"); +} </%INIT> <%ARGS> +$GroupString => undef +$GroupOp => '=' +$GroupField => 'Name' +$FindDisabledGroups => 0 </%ARGS> diff --git a/rt/html/Admin/Queues/CustomField.html b/rt/html/Admin/Queues/CustomField.html index 2515c3e94..5beba58c8 100644 --- a/rt/html/Admin/Queues/CustomField.html +++ b/rt/html/Admin/Queues/CustomField.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/QueueTabs, id => $QueueObj->Id, QueueObj => $QueueObj, @@ -29,7 +51,7 @@ subtabs => $subtabs, Title => $title &> -<& /Admin/Elements/EditCustomField, title => $title, %ARGS &> +<& /Admin/Elements/EditCustomField, title => $title, %ARGS &> <%INIT> my $QueueObj = new RT::Queue($session{'CurrentUser'}); @@ -56,5 +78,8 @@ my $subtabs = { </%INIT> <%ARGS> $CustomField => undef -$Queue => undef +$Queue => 0 </%ARGS> +<%ATTR> +AutoFlush => 0 +</%ATTR> diff --git a/rt/html/Admin/Queues/CustomFields.html b/rt/html/Admin/Queues/CustomFields.html index 78c6c2790..4d7e08875 100644 --- a/rt/html/Admin/Queues/CustomFields.html +++ b/rt/html/Admin/Queues/CustomFields.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,35 +20,51 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> -<& /Admin/Elements/QueueTabs, id => $Queue->id, - current_tab => 'Admin/Queues/CustomFields.html?id='.$id, - QueueObj => $Queue, - subtabs => $subtabs, +<& /Admin/Elements/QueueTabs, + id => $Object->id, + current_tab => "Admin/Queues/CustomFields.html?SubType=$SubType&id=$id", + current_subtab => "Admin/Queues/CustomFields.html?SubType=$SubType&id=$id", + QueueObj => $Object, Title => $title &> -<& /Admin/Elements/EditCustomFields, title => $title, %ARGS &> + <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::Queue' &> <%INIT> -my $Queue = new RT::Queue($session{'CurrentUser'}); -$Queue->Load($id); -my $CustomFields = RT::CustomFields->new($RT::SystemUser); -$CustomFields->LimitToQueue($Queue->Id); -my $subtabs = { - A => { title => loc('New custom field'), - path => "Admin/Queues/CustomField.html?create=1&Queue=".$id, - } - }; +my $Object = RT::Queue->new( $session{'CurrentUser'} ); + +$Object->Load($id) || Abort( loc( "Couldn't load object [_1]", $id ) ); +my $FriendlySubTypes = + RT::CustomField->new( $session{'CurrentUser'} ) + ->FriendlyLookupType( $Object->CustomFieldLookupType ); + +my $title = loc( 'Edit Custom Fields for [_1]', $Object->Name ); -my $title= loc('Edit Custom Fields for [_1]', $Queue->Name); </%INIT> <%ARGS> $id => undef +$SubType => 'RT::Queue-RT::Ticket' </%ARGS> diff --git a/rt/html/Admin/Queues/GroupRights.html b/rt/html/Admin/Queues/GroupRights.html index a1ac709e1..c5a12bfa3 100644 --- a/rt/html/Admin/Queues/GroupRights.html +++ b/rt/html/Admin/Queues/GroupRights.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify group rights for queue [_1]', $QueueObj->Name) &> <& /Admin/Elements/QueueTabs, id => $id, QueueObj => $QueueObj, @@ -82,7 +104,7 @@ % } </TABLE> - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + <& /Elements/Submit, Label => loc('Modify Group Rights'), Reset => 1 &> </FORM> diff --git a/rt/html/Admin/Queues/Modify.html b/rt/html/Admin/Queues/Modify.html index 46608eba6..5517a80c0 100644 --- a/rt/html/Admin/Queues/Modify.html +++ b/rt/html/Admin/Queues/Modify.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,18 +20,34 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK -<& /Admin/Elements/Header, Title => loc('Admin/Queue/Basics') &> +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/QueueTabs, id => $QueueObj->id, QueueObj => $QueueObj, current_tab => $current_tab, - Title => loc('Admin/Queue/Basics') &> + Title => $title &> <& /Elements/ListActions, actions => \@results &> @@ -47,16 +69,16 @@ <&|/l&>Description</&>:</TD><TD COLSPAN=3><INPUT name="Description" value="<% ($Create) ? "" : $QueueObj->Description %>" size=60></TD></TR> <TR> <TD ALIGN=RIGHT> -<&|/l&>Correspondence Address</&>: +<&|/l&>Reply Address</&>: </TD><TD> <INPUT name="CorrespondAddress" value="<% ($Create) ? "" : $QueueObj->CorrespondAddress %>"> -<BR><font size="-1"><i><&|/l , $RT::CorrespondAddress&>(If left blank, will default to [_1]</&></i></font> +<BR><font size="-1"><i><&|/l , $RT::CorrespondAddress&>(If left blank, will default to [_1])</&></i></font> </TD> <TD ALIGN=RIGHT> <&|/l&>Comment Address</&>: </TD><TD> <INPUT NAME="CommentAddress" value="<% ($Create) ? "" : $QueueObj->CommentAddress %>"> -<BR><font size="-1"><i><&|/l , $RT::CommentAddress&>(If left blank, will default to [_1]</&></i></font> +<BR><font size="-1"><i><&|/l , $RT::CommentAddress&>(If left blank, will default to [_1])</&></i></font> </TD> </TR><TR> @@ -86,7 +108,7 @@ </TR> </TABLE> -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Save Changes') &> </form> @@ -137,12 +159,18 @@ my @attribs= qw(Description CorrespondAddress CommentAddress Name } if ( ($SetEnabled) and ( $Disabled != $QueueObj->Disabled) ) { my ($code, $msg) = $QueueObj->SetDisabled($Disabled); - push @results, loc('Enabled status [_1]', loc_fuzzy($msg)); + push @results, loc('Enabled status: [_1]', loc_fuzzy($msg)); } if ($QueueObj->Disabled()) { $EnabledChecked =""; } + + my @linkresults; + $m->comp('/Elements/Callback', results => \@linkresults, + RecordObj => $QueueObj, ARGSRef => \%ARGS, + _CallbackName => 'ProcessLinks'); + push @results, @linkresults; } </%INIT> diff --git a/rt/html/Admin/Queues/People.html b/rt/html/Admin/Queues/People.html index e0a7345c0..e29b9d34f 100644 --- a/rt/html/Admin/Queues/People.html +++ b/rt/html/Admin/Queues/People.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Modify people related to queue [_1]', $QueueObj->Name) &> <& /Admin/Elements/QueueTabs, id => $id, QueueObj => $QueueObj, @@ -57,7 +79,7 @@ <& /Elements/SelectUsers &> <input type=submit name="OnlySearchForPeople" value="<&|/l&>Go!</&>"> <BR> -<&|/l&>Find group whose</&><BR> +<&|/l&>Find groups whose</&><BR> <& /Elements/SelectGroups &> <input type=submit name="OnlySearchForGroup" value="<&|/l&>Go!</&>"> @@ -125,7 +147,7 @@ $QueueObj->Load($id) || Abort(loc("Couldn't load queue", $id)); foreach my $key (keys %ARGS) { my $id = $QueueObj->Id; - if (($key =~ /^Queue-$id-DelWatcher-Type-(.*?)-Principal-(\d*)$/)) {; + if (($key =~ /^Queue-$id-DeleteWatcher-Type-(.*?)-Principal-(\d*)$/)) {; my ($code, $msg) = $QueueObj->DeleteWatcher(Type => $1, PrincipalId => $2); push @results, $msg; diff --git a/rt/html/Admin/Queues/Scrip.html b/rt/html/Admin/Queues/Scrip.html index edbfcd66b..1223fbfed 100644 --- a/rt/html/Admin/Queues/Scrip.html +++ b/rt/html/Admin/Queues/Scrip.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/QueueTabs, id => $QueueObj->Id, QueueObj => $QueueObj, @@ -51,7 +73,7 @@ unless($QueueObj->id) { if ($id) { $current_subtab = "Admin/Queues/Scrip.html?id=".$id."&Queue=".$QueueObj->id; $title = loc("Modify a scrip for queue [_1]", $QueueObj->Name); - $subtabs->{"C"} = { title => loc("Scrip #[_1]",$QueueObj->id), + $subtabs->{"C"} = { title => loc("Scrip #[_1]",$id), path => "Admin/Queues/Scrip.html?id=$id&Queue=".$QueueObj->id }; } else { $current_subtab = "Admin/Queues/Scrip.html?create=1&Queue=".$QueueObj->id; diff --git a/rt/html/Admin/Queues/Scrips.html b/rt/html/Admin/Queues/Scrips.html index 60b28314f..e7092fb22 100644 --- a/rt/html/Admin/Queues/Scrips.html +++ b/rt/html/Admin/Queues/Scrips.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/QueueTabs, id => $QueueObj->id, QueueObj => $QueueObj, diff --git a/rt/html/Admin/Queues/Template.html b/rt/html/Admin/Queues/Template.html index 994de6108..c60a90900 100644 --- a/rt/html/Admin/Queues/Template.html +++ b/rt/html/Admin/Queues/Template.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,16 +20,32 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/QueueTabs, id => $Queue, - QueueObj => $TemplateObj->QueueObj, + QueueObj => $QueueObj, current_tab => 'Admin/Queues/Templates.html?id='.$Queue, current_subtab => $current_subtab, subtabs => $subtabs, @@ -41,7 +63,7 @@ <INPUT TYPE=HIDDEN name="Queue" value="<%$Queue%>"> <& /Admin/Elements/ModifyTemplate, Name => $TemplateObj->Name, Description => $TemplateObj->Description, Content => $TemplateObj->Content &> -<& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> +<& /Elements/Submit, Label => loc('Create'), Reset => 1 &> </FORM> @@ -62,7 +84,7 @@ my $subtabs = { if ($Create) { $title = loc("Create a template"); - $current_subtab = "Admin/Queues/Template.html?create=1&Queue=".$Queue; + $current_subtab = "Admin/Queues/Template.html?Create=1&Queue=".$Queue; } else { @@ -78,8 +100,10 @@ else { } +my $QueueObj; if ($TemplateObj->Id()) { $Queue = $TemplateObj->Queue; + $QueueObj = $TemplateObj->QueueObj; my @attribs = qw( Description Content Queue Name); my @aresults = UpdateRecordObject( AttributesRef => \@attribs, @@ -90,6 +114,9 @@ if ($TemplateObj->Id()) { path => "Admin/Queues/Template.html?Queue=$Queue&Template=".$TemplateObj->Id(), }; push @results, @aresults; +} else { + $QueueObj = RT::Queue->new($session{'CurrentUser'}); + $QueueObj->Load($Queue); } </%INIT> diff --git a/rt/html/Admin/Queues/Templates.html b/rt/html/Admin/Queues/Templates.html index 98bdf24c0..888fdbc8a 100644 --- a/rt/html/Admin/Queues/Templates.html +++ b/rt/html/Admin/Queues/Templates.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/QueueTabs, id => $QueueObj->id, current_tab => 'Admin/Queues/Templates.html?id='.$id, diff --git a/rt/html/Admin/Queues/UserRights.html b/rt/html/Admin/Queues/UserRights.html index aeb55c70b..399992ae2 100644 --- a/rt/html/Admin/Queues/UserRights.html +++ b/rt/html/Admin/Queues/UserRights.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Modify user rights for queue [_1]', $QueueObj->Name) &> <& /Admin/Elements/QueueTabs, id => $id, QueueObj => $QueueObj, @@ -50,7 +72,7 @@ % } </TABLE> - <& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> + <& /Elements/Submit, Label => loc('Modify User Rights'), Reset => 1 &> </FORM> diff --git a/rt/html/Admin/Queues/index.html b/rt/html/Admin/Queues/index.html index f733c25d8..28adf531c 100644 --- a/rt/html/Admin/Queues/index.html +++ b/rt/html/Admin/Queues/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc("Admin queues") &> <& /Admin/Elements/QueueTabs, current_tab => 'Admin/Queues/', current_subtab => 'Admin/Queues/', @@ -28,18 +50,19 @@ -<%$caption%>:<BR> +<h1><%$caption%></h1> +<p><&|/l&>Select a queue</&>:</p> <UL> %if ($queues->Count == 0) { -<LI> <i><&|/l&>No queues matching search criteria found.</&></i> +<li><i><&|/l&>No queues matching search criteria found.</&></i></li> % } %while ( $queue = $queues->Next) { -<LI><A HREF="Modify.html?id=<%$queue->id%>"><%$queue->Name%></a></LI> +<li><A HREF="Modify.html?id=<%$queue->id%>"><%$queue->Name%></a></li> %} </UL> <BR> -<FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Queues/"> -<input type="checkbox" name="FindDisabledQueues"> <&|/l&>Include disabled queues in listing.</&> +<FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Queues/index.html"> +<input type="checkbox" name="FindDisabledQueues" value="1"> <&|/l&>Include disabled queues in listing.</&> <div align=right><input type=submit value="<&|/l&>Go!</&>"></div> </FORM> diff --git a/rt/html/Admin/Tools/Configuration.html b/rt/html/Admin/Tools/Configuration.html new file mode 100644 index 000000000..bc5ca69a1 --- /dev/null +++ b/rt/html/Admin/Tools/Configuration.html @@ -0,0 +1,98 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%init> +require Module::Versions::Report; +my $title = loc('System Configuration'); +unless ($session{'CurrentUser'}->HasRight( Object=> $RT::System, Right => 'SuperUser')) { + Abort(loc('This feature is only available to system administrators')); +} + + +</%init> +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/ToolTabs, + current_tab => 'Admin/Tools/Configuration.html', + current_subtab => 'Admin/Tools/Configuration.html', + Title => $title &> + + + + +<h2><&|/l&>Loaded perl modules</&></h2> +<pre> +% my $report = Module::Versions::Report::report(); +% my @report = grep { /v\d/ } split("\n",$report); +<%join('<br>', @report)|n%> + + +</pre> + +<h2><&|/l&>RT Variables</&></h2> +<table> +%{ +%no strict qw/refs/; + +%foreach my $key (sort keys %{*RT::}) { +% next unless (${'RT::'.$key} ); +% next if (ref ${'RT::'.$key} ); +<tr><td>RT::<%$key%></td> +<td> +% if ($key =~ /Password(?!Length)/i) { +<i>Password not printed</i> +% } else { +<%${'RT::'.$key} %> +% } +</td> +</tr> +% } +%} +</table> + +<h2><&|/l&>Perl configuration</&></h2> +% require Config; +<pre> +<%Config::myconfig()%> +</pre> diff --git a/rt/html/Admin/Tools/index.html b/rt/html/Admin/Tools/index.html new file mode 100644 index 000000000..49cfac3ee --- /dev/null +++ b/rt/html/Admin/Tools/index.html @@ -0,0 +1,53 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%init> +my $title = loc('System Tools'); +</%init> +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/ToolTabs, + current_tab => 'Admin/Tools/index.html', + current_subtab => 'Admin/Tools/Configuration.html', + Title => $title &> diff --git a/rt/html/Admin/Users/CustomFields.html b/rt/html/Admin/Users/CustomFields.html new file mode 100644 index 000000000..5662c6c16 --- /dev/null +++ b/rt/html/Admin/Users/CustomFields.html @@ -0,0 +1,69 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/UserTabs, + id => $Object->id, + current_tab => "Admin/Users/CustomFields.html?$id=".$id, + current_subtab => "Admin/Users/CustomFields.html?id=".$id, + UserObj => $Object, + Title => $title + &> + + <& /Admin/Elements/EditCustomFields, %ARGS, title => $title, Object => $Object, ObjectType => 'RT::User' &> +<%INIT> +my $Object = RT::User->new( $session{'CurrentUser'} ); + +$Object->Load($id) || Abort( loc( "Couldn't load object [_1]", $id ) ); +my $FriendlySubTypes = + RT::CustomField->new( $session{'CurrentUser'} ) + ->FriendlyLookupType( $Object->CustomFieldLookupType ); + +my $title = loc( 'Edit Custom Fields for [_1]', $Object->Name ); + +</%INIT> +<%ARGS> +$id => undef +</%ARGS> diff --git a/rt/html/Admin/Users/History.html b/rt/html/Admin/Users/History.html new file mode 100644 index 000000000..024a90b00 --- /dev/null +++ b/rt/html/Admin/Users/History.html @@ -0,0 +1,66 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/UserTabs, + id => $id, + UserObj => $UserObj, + current_tab => $current_tab, + Title => $title &> + +<& /Ticket/Elements/ShowHistory, + Ticket => $UserObj, + ShowHeaderModes => 0, +&> + +<%INIT> +my $current_tab = 'Admin/Users/History.html?id='.$id; +my $UserObj = new RT::User($session{'CurrentUser'}); +$UserObj->Load($id) || Abort("Couldn't load user '$id'"); +my $title = loc("History of the user [_1]", $UserObj->Name); +</%INIT> +<%ARGS> +$id => undef +</%ARGS> diff --git a/rt/html/Admin/Users/Memberships.html b/rt/html/Admin/Users/Memberships.html new file mode 100644 index 000000000..3e632393f --- /dev/null +++ b/rt/html/Admin/Users/Memberships.html @@ -0,0 +1,65 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Admin/Elements/Header, Title => $title &> +<& /Admin/Elements/UserTabs, + id => $id, + UserObj => $UserObj, + current_tab => $current_tab, + Title => $title &> + +<h2><&|/l&>Groups</&></h2> + +<& /Elements/ShowMemberships, UserObj => $UserObj &> + +<%INIT> +my $UserObj = RT::User->new($session{'CurrentUser'}); +$UserObj->Load($id) || Abort("Couldn't load user '$id'"); +my $title = loc("Memberships of the user [_1]", $UserObj->Name); +my $current_tab = 'Admin/Users/Memberships.html?id='.$id; +</%INIT> +<%ARGS> +$id => undef +</%ARGS> diff --git a/rt/html/Admin/Users/Modify.html b/rt/html/Admin/Users/Modify.html index 370c2e82d..8a24f9c4a 100644 --- a/rt/html/Admin/Users/Modify.html +++ b/rt/html/Admin/Users/Modify.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,23 +20,39 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => $title &> <& /Admin/Elements/UserTabs, id => $id, UserObj => $UserObj, - current_subtab => $current_tab, + current_tab => $current_tab, Title => $title &> <& /Elements/ListActions, actions => \@results &> -<FORM ACTION="<%$RT::WebPath%>/Admin/Users/Modify.html" METHOD=POST> +<FORM ACTION="<%$RT::WebPath%>/Admin/Users/Modify.html" METHOD=POST ENCTYPE="multipart/form-data"> %if ($Create) { <INPUT TYPE=HIDDEN NAME=id VALUE="new"> % } else { @@ -39,7 +61,7 @@ <TABLE WIDTH=100% BORDER=0> <TR> -<TD VALIGN=TOP ROWSPAN=2> +<TD VALIGN=TOP class="boxcontainer"> <& /Elements/TitleBoxStart, title => loc('Identity') &> <TABLE> @@ -69,6 +91,11 @@ <input name="Gecos" value="<%$UserObj->Gecos%>"> </TD></TR> <TR><TD ALIGN="RIGHT"> +<&|/l&>Language</&>: +</TD><TD> +<& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &> +</TD></TR> +<TR><TD ALIGN="RIGHT"> <&|/l&>Extra info</&>: </TD><TD> <textarea name="FreeformContactInfo" cols=20 rows=5><%$UserObj->FreeformContactInfo%></TEXTAREA> @@ -106,10 +133,8 @@ % } <& /Elements/TitleBoxEnd &> </TD> -</TR> -<TR> -<TD VALIGN=TOP> +<TD VALIGN=TOP class="boxcontainer"> <& /Elements/TitleBoxStart, title => loc('Location') &> <TABLE> <TR><TD ALIGN="RIGHT"> @@ -179,17 +204,30 @@ <TR> </TR> </TABLE> +<BR> +<& /Elements/TitleBoxStart, title => loc('Custom Fields') &> +<TABLE> +% my $CFs = $UserObj->CustomFields; +% while (my $CF = $CFs->Next) { +<TR VALIGN="TOP"><TD ALIGN="RIGHT"> +<% $CF->Name %>: +</TD><TD> +<& /Elements/EditCustomField, %ARGS, Object => $UserObj, CustomField => $CF &> +</TD></TR> +% } +<TR> +</TR> +</TABLE> +<& /Elements/TitleBoxEnd &> <TR> <TD colspan="2"> <& /Elements/TitleBoxStart, title => loc('Comments about this user') &> -<TEXTAREA name="Comments" COLS=80 ROWS=5 WRAP=VIRTUAL><%$UserObj->Comments%> -</TEXTAREA> +<TEXTAREA class="comments" name="Comments" COLS=80 ROWS=5 WRAP=VIRTUAL><%$UserObj->Comments%></TEXTAREA> <& /Elements/TitleBoxEnd &> %if ($UserObj->Privileged) { <BR> <& /Elements/TitleBoxStart, title => loc('Signature') &> -<TEXTAREA COLS=80 ROWS=5 name="Signature" WRAP=HARD> -<%$UserObj->Signature%></TEXTAREA> +<TEXTAREA class="signature" COLS=80 ROWS=5 name="Signature" WRAP=HARD><%$UserObj->Signature%></TEXTAREA> <& /Elements/TitleBoxEnd &> % } @@ -197,7 +235,7 @@ </TR> </TABLE> -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Save Changes') &> </form> <%INIT> @@ -216,83 +254,114 @@ else { $current_tab = 'Admin/Users/Modify.html?id='.$id; if ($id eq 'new') { - ($val, $msg) = $UserObj->Create( Name => $Name, - EmailAddress => $ARGS{'EmailAddress'} - ); + ( $val, $msg ) = $UserObj->Create( + Name => $Name, + EmailAddress => $ARGS{'EmailAddress'}, + Name => $ARGS{'Name'}, + Comments => $ARGS{'Comments'}, + Signature => $ARGS{'Signature'}, + EmailAddress => $ARGS{'EmailAddress'}, + FreeformContactInfo => $ARGS{'FreeformContactInfo'}, + Organization => $ARGS{'Organization'}, + RealName => $ARGS{'RealName'}, + NickName => $ARGS{'NickName'}, + Lang => $ARGS{'Lang'}, + EmailEncoding => $ARGS{'EmailEncoding'}, + WebEncoding => $ARGS{'WebEncoding'}, + ExternalContactInfoId => $ARGS{'ExternalContactInfoId'}, + ContactInfoSystem => $ARGS{'ContactInfoSystem'}, + Gecos => $ARGS{'Gecos'}, + ExternalAuthId => $ARGS{'ExternalAuthId'}, + AuthSystem => $ARGS{'AuthSystem'}, + HomePhone => $ARGS{'HomePhone'}, + WorkPhone => $ARGS{'WorkPhone'}, + MobilePhone => $ARGS{'MobilePhone'}, + PagerPhone => $ARGS{'PagerPhone'}, + Address1 => $ARGS{'Address1'}, + Address2 => $ARGS{'Address2'}, + City => $ARGS{'City'}, + State => $ARGS{'State'}, + Zip => $ARGS{'Zip'}, + Country => $ARGS{'Country'}, + Privileged => $ARGS{'Privileged'}, + Disabled => ($ARGS{'Enabled'} ? 0 : 1) + ); + if ($val) { push @results, $msg; } else { push @results, loc('User could not be created: [_1]', $msg); - } - - } - else { + } + } else { $UserObj->Load($id) || $UserObj->Load($Name) || Abort("Couldn't load user '$Name'"); $val = $UserObj->Id(); } if ($val) { $title = loc("Modify the user [_1]", $UserObj->Name); - } + } # If the create failed else { $title = loc("Create a new user"); $Create = 1; - } - - - + } } # If we have a user to modify, lets try. -if ($UserObj->Id) { - +if ($UserObj->Id && $id ne 'new') { + my @fields = qw(Name Comments Signature EmailAddress FreeformContactInfo Organization RealName NickName Lang EmailEncoding WebEncoding ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1 - Address2 City State Zip Country + Address2 City State Zip Country ); - + my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields, Object => $UserObj, ARGSRef => \%ARGS ); push (@results,@fieldresults); + push @results, ProcessObjectCustomFieldUpdates( ARGSRef => \%ARGS, Object => $UserObj ); -# {{{ Deal with special fields: Privileged, Enabled and Password -if ( ($SetPrivileged) and ( $Privileged != $UserObj->Privileged) ) { -my ($code, $msg) = $UserObj->SetPrivileged($Privileged); - push @results, loc('Privileged status: [_1]', loc_fuzzy($msg)); -} + # {{{ Deal with special fields: Privileged, Enabled + if ( $SetPrivileged and $Privileged != $UserObj->Privileged ) { + my ($code, $msg) = $UserObj->SetPrivileged($Privileged); + push @results, loc('Privileged status: [_1]', loc_fuzzy($msg)); + } -#we're asking about enabled on the web page but really care about disabled. -if ($Enabled == 1) { - $Disabled = 0; -} -else { - $Disabled = 1; -} -if ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) { - my ($code, $msg) = $UserObj->SetDisabled($Disabled); - push @results, loc('Enabled status [_1]', loc_fuzzy($msg)); -} + #we're asking about enabled on the web page but really care about disabled. + $Disabled = $Enabled ? 0 : 1; + + if ( ($SetEnabled) and ( $Disabled != $UserObj->Disabled) ) { + my ($code, $msg) = $UserObj->SetDisabled($Disabled); + push @results, loc('Enabled status [_1]', loc_fuzzy($msg)); + } -#TODO: make this report errors properly -if ((defined $Pass1) and ($Pass1 ne '') and ($Pass1 eq $Pass2) and (!$UserObj->IsPassword($Pass1))) { - my ($code, $msg); - ($code, $msg) = $UserObj->SetPassword($Pass1); - push @results, loc('Password: [_1]', loc_fuzzy($msg)); -} elsif ( $Pass1 && ($Pass1 ne $Pass2)) { - push @results, loc("Passwords do not match."); + # }}} } -# }}} +if ( $UserObj->Id ) { + my $password_not_set; + # Deal with Password field + if ( !$Pass1 and !$Pass2 ) { + $password_not_set = 1; + } elsif ( $Pass1 ne $Pass2 ) { + $password_not_set = 1; + push @results, loc("Passwords do not match."); + } elsif ( $Pass1 eq $Pass2 and !$UserObj->IsPassword($Pass1) ) { + my ($code, $msg) = $UserObj->SetPassword($Pass1); + push @results, loc_fuzzy($msg); + $password_not_set = 1 unless $code; + } + if ($id eq 'new' and $password_not_set) { + push @results, loc("A password was not set, so user won't be able to login."); + } } @@ -306,6 +375,11 @@ if ($UserObj->Privileged()) { } # }}} + +# set the id, so the the menu will have the right info, this needs to +# be done here to avoid creating and then modifying a user +$id = $UserObj->Id; + </%INIT> diff --git a/rt/html/Admin/Users/Prefs.html b/rt/html/Admin/Users/Prefs.html deleted file mode 100644 index 0bba9fadd..000000000 --- a/rt/html/Admin/Users/Prefs.html +++ /dev/null @@ -1,122 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Elements/Header, Title => loc("User view") &> - -<& /Elements/ViewUser, User=>$u &> - -<h2 class="title"><%loc("User view")%></h2> - -%if ($session{CurrentUser} && ($session{CurrentUser}->Id == $id)) { - <& /Elements/TitleBoxStart, title => loc('Signature') &> -<form method=post> -<input type="hidden" name="id" value=<%$id%>> -<TEXTAREA COLS=72 ROWS=4 WRAP=HARD NAME="Signature"><% $u->Signature %></TEXTAREA><br><br> -<input type="submit" value="<&|/l&>Update signature</&>"> -</form> - <& /Elements/TitleBoxEnd &> - <form method=post> - <&|/l&>Open tickets (from listing) in another window</&>: <input type="checkbox" name="NewWindowOption" <%exists $session{NewWindowOption} && "CHECKED"%>><br> - <&|/l&>Open tickets (from listing) in a new window</&>: <input type="checkbox" name="AlwaysNewWindowOption" <%exists $session{AlwaysNewWindowOption} && "CHECKED"%>><br> - <input type="submit" name="NewWindowSetting" value="<&|/l&>New window setting</&>"> - </form> -%} - - <& /Elements/TitleBoxStart, title => loc('Email') &> -<form method=post> -<input type="hidden" name="id" value="<%$id%>"> -<input name="Email" value="<% $u->EmailAddress %>"><input type="submit" value="<&|/l&>Update email</&>"> -</form> - <& /Elements/TitleBoxEnd &> - <& /Elements/TitleBoxStart, title => loc('Real Name') &> -<form method=post> -<input type="hidden" name="id" value="<%$id%>"> -<input name="RealName" value="<% $u->RealName %>"><input type="submit" value="<&|/l&>Update name</&>"> -</form> - <& /Elements/TitleBoxEnd &> - - <& /Elements/TitleBoxStart, title => loc('User ID') &> -<form method=post> -<input type="hidden" name="id" value="<%$id%>"> -<input name="Name" value="<% $u->Name %>"><input type="submit" value="<&|/l&>Update ID</&>"> -</form> - <& /Elements/TitleBoxEnd &> - -%# TODO: alternative email addresses + merging users - -<%ARGS> -$id => $session{CurrentUser} ? $session{CurrentUser}->Id : 0 -$Signature => undef -$Email => undef -$RealName => undef -$Name => undef -</%ARGS> - -<%INIT> -require RT::User; -my $u=RT::User->new($session{CurrentUser}); -$u->Load($id) || die loc("Couldn't load that user ([_1])", $id); -if ($Signature) { -my ($val, $msg)=$u->SetSignature($Signature); -$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg); -} - -if ($Email) { -my ($val, $msg)=$u->SetEmailAddress($Email); -$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg); -} - -if ($RealName) { -my ($val, $msg)=$u->SetRealName($RealName); -$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg); -} - -if ($Name) { -my ($val, $msg)=$u->SetName($Name); -$RT::Logger->log(level=>($val ? 'info' : 'error'), message=>$msg); -} - -if ($ARGS{NewWindowSetting}) { -if ($ARGS{NewWindowOption}) { -$session{NewWindowOption}=1; -} else { -delete $session{NewWindowOption}; -} -if ($ARGS{AlwaysNewWindowOption}) { -$session{NewWindowOption}=1; -$session{AlwaysNewWindowOption}=1; -} else { -delete $session{AlwaysNewWindowOption}; -} -} - -</%INIT> - - - - - - - - - diff --git a/rt/html/Admin/Users/index.html b/rt/html/Admin/Users/index.html index a95d4117d..1bbe867f7 100644 --- a/rt/html/Admin/Users/index.html +++ b/rt/html/Admin/Users/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,36 +20,55 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('Select a user') &> <& /Admin/Elements/UserTabs, current_tab => 'Admin/Users/', current_subtab => 'Admin/Users/', Title => loc('Select a user') &> - - - -<%$caption%>:<BR> -<UL> +<h1><%$caption%></h1> +<p><&|/l&>Select a user</&>:</p> +<ul> %if ($users->Count == 0) { -<LI> <i><&|/l&>No users matching search criteria found.</&></i> +<li><i><&|/l&>No users matching search criteria found.</&></i></li> % } +%my @ids; %while ( $user = $users->Next) { +% push @ids, $user->Id; <LI><A HREF="Modify.html?id=<%$user->id%>"><%$user->Name || loc('(no name listed)')%></a></LI> %} - </UL> +%if (my $ids = join(',', @ids)) { +<em>(<a href="<%$RT::WebPath%>/Download/Tabular/User/<% $ids %>/Users.tsv"><&|/l&>Download as a tab-delimited file</&></a>)</em><br> +%} + <br><br> -<FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Users/"> +<FORM METHOD=POST ACTION="<% $RT::WebPath %>/Admin/Users/index.html"> <&|/l&>Find people whose</&> <& /Elements/SelectUsers &><BR> -<input type="checkbox" name="FindDisabledUsers"> <&|/l&>Include disabled users in search.</&> +<input type="checkbox" name="FindDisabledUsers" value="1"> <&|/l&>Include disabled users in search.</&> <BR> <div align=right><input type=submit value="<&|/l&>Go!</&>"></div> </FORM> @@ -56,19 +81,26 @@ if ($FindDisabledUsers) { $users->{'find_disabled_rows'} = 1; } -unless (defined $UserString) { - $users->LimitToPrivileged(); - $caption = loc("Privileged users"); -} -else { +if (length $UserString) { $caption = loc("Users matching search criteria"); - - if ($UserString) { - $users->Limit( FIELD => $UserField, - OPERATOR => $UserOp, - VALUE => $UserString); - + if ($UserField =~ /^CustomField-(\d+)/) { + $users->LimitCustomField( + CUSTOMFIELD => $1, + OPERATOR => $UserOp, + VALUE => $UserString, + ); + } + else { + $users->Limit( + FIELD => $UserField, + OPERATOR => $UserOp, + VALUE => $UserString, + ); + } } +else { + $caption = loc("Privileged users"); + $users->LimitToPrivileged; } </%INIT> <%ARGS> diff --git a/rt/html/Admin/autohandler b/rt/html/Admin/autohandler new file mode 100644 index 000000000..def61010a --- /dev/null +++ b/rt/html/Admin/autohandler @@ -0,0 +1,51 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%init> +$m->call_next(%ARGS) if $session{'CurrentUser'}->UserObj->HasRight( + Right => 'ShowConfigTab', + Object => $RT::System, +); +</%init>
\ No newline at end of file diff --git a/rt/html/Admin/index.html b/rt/html/Admin/index.html index 522ade876..01ba24d2d 100644 --- a/rt/html/Admin/index.html +++ b/rt/html/Admin/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,27 +20,80 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.), %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Admin/Elements/Header, Title => loc('RT Administration') &> <& /Admin/Elements/Tabs, Title => loc('RT Administration') &> <ul> -<li><font size="+2"><a href="Users/"><&|/l&>Users</&></a></font><br> -<&|/l&>Manage users and passwords</&> -</li> -<li><font size="+2"><a href="Groups/"><&|/l&>Groups</&></a></font><br> -<&|/l&>Manage groups and group membership</&> -</li> -<li><font size="+2"><a href="Queues/"><&|/l&>Queues</&></a></font><br> -<&|/l&>Manage queues and queue-specific properties</&> -</li> -<li><font size="+2"><a href="Global/"><&|/l&>Global</&></a></font><br> -<&|/l&>Manage properties and configuration which apply to all queues</&> +% foreach my $key (sort keys %$tabs) { +<li><font size="+2"><a href="<%$RT::WebPath%>/<%$tabs->{$key}->{'path'}|n %>"><%$tabs->{$key} ->{'title'}%></a></font><br> +<%$tabs->{$key}->{description}%> </li> +%} </ul> +<%init> + + + +my $tabs = { + A => { + title => loc('Users'), + path => 'Admin/Users/index.html', + description => loc('Manage users and passwords'), + }, + B => { + title => loc('Groups'), + path => 'Admin/Groups/index.html', + description => loc('Manage groups and group membership'), + }, + C => { + title => loc('Queues'), + path => 'Admin/Queues/index.html', + description => loc('Manage queues and queue-specific properties'), + }, + D => { + 'title' => loc('Custom Fields'), + description => loc('Manage custom fields and custom field values'), + path => 'Admin/CustomFields/index.html', + }, + E => { + 'title' => loc('Global'), + path => 'Admin/Global/index.html', + description => + loc('Manage properties and configuration which apply to all queues'), + }, + F => { + 'title' => loc('Tools'), + path => 'Admin/Tools/index.html', + description => loc('Use other RT administrative tools') + }, +}; + + $m->comp('/Elements/Callback', tabs => $tabs, %ARGS); + + + + +</%init> diff --git a/rt/html/Approvals/Display.html b/rt/html/Approvals/Display.html index 921c1e38f..d9d6df582 100644 --- a/rt/html/Approvals/Display.html +++ b/rt/html/Approvals/Display.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,19 +20,35 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& Elements/Tabs, current_tab => "Approvals/Display.html", Title => $title &> -<form method=post action="<%$RT::WebPath%>/Approvals/"> +<form method=post action="<%$RT::WebPath%>/Approvals/index.html"> <& /Elements/TitleBoxStart, title => $title &> <& /Ticket/Elements/ShowHistory , Ticket => $Ticket, Collapsed => 0, ShowTitle => 0, ShowHeaders => 0, ShowDisplayModes => 0, ShowTitleBarCommands => 0 &> diff --git a/rt/html/Approvals/Elements/Approve b/rt/html/Approvals/Elements/Approve index 6a7cfa37f..bf786fb03 100644 --- a/rt/html/Approvals/Elements/Approve +++ b/rt/html/Approvals/Elements/Approve @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <tr bgcolor="#b9b9ff"> <td colspan=2><font size="3"> <a href="<%$RT::WebPath%>/Approvals/Display.html?id=<%$ticket->Id%>"><% loc("#[_1]: [_2]", $ticket->Id, $ticket->Subject) %></a> (<%loc($ticket->Status)%>)</font></td> diff --git a/rt/html/Approvals/Elements/PendingMyApproval b/rt/html/Approvals/Elements/PendingMyApproval index b5cf00788..f13ddf0f3 100644 --- a/rt/html/Approvals/Elements/PendingMyApproval +++ b/rt/html/Approvals/Elements/PendingMyApproval @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <table width="100%"> % my ($i, $class); % my %done; diff --git a/rt/html/Approvals/Elements/ShowDependency b/rt/html/Approvals/Elements/ShowDependency index 417cad142..e8d0b00d5 100644 --- a/rt/html/Approvals/Elements/ShowDependency +++ b/rt/html/Approvals/Elements/ShowDependency @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} % my $approving = $Ticket->DependedOnBy(); % if ($approving->Count) { <h3><&|/l&>Tickets which depend on this approval:</&></h3> diff --git a/rt/html/Approvals/Elements/Tabs b/rt/html/Approvals/Elements/Tabs index 648ff7573..03bdc262e 100644 --- a/rt/html/Approvals/Elements/Tabs +++ b/rt/html/Approvals/Elements/Tabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Tabs, tabs => $tabs, current_toptab => 'Approvals/', diff --git a/rt/html/Approvals/index.html b/rt/html/Approvals/index.html index b4156f344..88c277c1e 100644 --- a/rt/html/Approvals/index.html +++ b/rt/html/Approvals/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,20 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("My approvals") &> <& /Approvals/Elements/Tabs, Title => loc("My approvals") &> <& /Elements/ListActions, actions => \@actions &> <form method="post"> <& Elements/PendingMyApproval, %ARGS &> -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Show Approvals') &> </form> <%init> diff --git a/rt/html/Download/CustomFieldValue/dhandler b/rt/html/Download/CustomFieldValue/dhandler new file mode 100644 index 000000000..521968024 --- /dev/null +++ b/rt/html/Download/CustomFieldValue/dhandler @@ -0,0 +1,75 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%perl> +my $id; +my $arg = $m->dhandler_arg; # get rest of path +if ($arg =~ /^(\d+)\//) { + $id = $1; +} +else { + Abort("Corrupted customfieldvalue URL."); +} +my $OCFV = RT::ObjectCustomFieldValue->new($session{'CurrentUser'}); +$OCFV->Load($id) || Abort("OCFV '$id' could not be loaded"); + +unless ($OCFV->id) { + Abort("Bad OCFV id. Couldn't find OCFV '$id'\n"); +} + +my $content_type = $OCFV->ContentType || 'text/plain'; + +unless ($RT::TrustHTMLAttachments) { + $content_type = 'text/plain' if ($content_type =~ /^text\/html/i); +} + +$r->content_type( $content_type ); +$m->clear_buffer(); +$m->out($OCFV->LargeContent); +$m->abort; +</%perl> +<%attr> +AutoFlush => 0 +</%attr> diff --git a/rt/html/Download/Tabular/dhandler b/rt/html/Download/Tabular/dhandler new file mode 100644 index 000000000..3965a990e --- /dev/null +++ b/rt/html/Download/Tabular/dhandler @@ -0,0 +1,74 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%perl> +my ($class, $filename, @ids); +my $arg = $m->dhandler_arg; # get rest of path +if ($arg =~ /^(\w+)\/([,\d]+)(?:\/([^\/]+))?/) { + $class = "RT::$1"; + $filename = $3 || "$1s.tsv"; + @ids = sort split(/,+/, $2); +} +else { + Abort("Corrupted tabular URL."); +} + +my @cols = $class->BasicColumns or return; + +#$r->content_type( 'application/octet-stream' ); +$r->content_type( 'text/plain' ); +$r->headers_out->{'Content-Disposition'} = "attachment; filename=$filename"; +$m->clear_buffer(); +$m->out(join("\t", "Id", map $_->[1], @cols), "\n"); +foreach my $id (@ids) { + my $obj = $class->new; + $obj->Load($id) or next; + $m->out(join("\t", map $obj->$_, "Id", map $_->[0], @cols), "\n"); +} +$m->abort; +</%perl> +<%attr> +AutoFlush => 0 +</%attr> diff --git a/rt/html/Elements/BevelBoxRaisedEnd b/rt/html/Elements/BevelBoxRaisedEnd index ebf45df0f..e1d1edb7c 100644 --- a/rt/html/Elements/BevelBoxRaisedEnd +++ b/rt/html/Elements/BevelBoxRaisedEnd @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} </TD> </TR> </table> diff --git a/rt/html/Elements/BevelBoxRaisedStart b/rt/html/Elements/BevelBoxRaisedStart index c4e6c55bc..6c5a6137e 100644 --- a/rt/html/Elements/BevelBoxRaisedStart +++ b/rt/html/Elements/BevelBoxRaisedStart @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <table cellspacing=0 cellpadding=0 width=100% height=100%> <TR> <TD width=100% height=100%> diff --git a/rt/html/Elements/Callback b/rt/html/Elements/Callback index 93ac4c01b..937e923a1 100644 --- a/rt/html/Elements/Callback +++ b/rt/html/Elements/Callback @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,50 +20,69 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <%once> -my (%cache, $check); +my %cache; </%once> <%init> -# checks for inode change time for each callback directory -my $new_check = join( - $;, map { $_->[1] => (stat("$_->[1]/Callbacks"))[10] } $m->interp->resolver->comp_root_array -) or return; - $Page = $m->callers(1)->path unless ($Page); -my $callbacks; -if ($new_check eq $check) { - $callbacks = $cache{$Page,$_CallbackName}; -} -else { - $check = $new_check; -} +my $CacheKey = "Callback--$Page--$_CallbackName"; +my $callbacks = $cache{$CacheKey} || $m->notes($CacheKey); if (!$callbacks) { - my $path = "/Callbacks/*$Page/$_CallbackName"; - $callbacks = [ $m->interp->resolver->glob_path($path) ]; - @$callbacks = grep !/^\.|~$/, @$callbacks; #skip backup files - - #skip files without a package - my $invalid_base = "/Callbacks/$Page/$_CallbackName"; - @$callbacks = grep !/^$invalid_base$/, @$callbacks; - - + my $path = "/Callbacks/*$Page/$_CallbackName"; - $cache{$Page,$_CallbackName} = $callbacks; + # Due to API changes after Mason 1.28, we have to check for which + # version we're running when getting the component roots + my @roots = map { $_->[1] } + $HTML::Mason::VERSION <= 1.28 + ? $m->interp->resolver->comp_root_array + : $m->interp->comp_root_array; + + my %seen; + + for my $root (@roots) { + push @$callbacks, + # Skip backup files, files without a leading package name, + # and files we've already seen + grep { !/^\.|~$/ + and $_ ne "/Callbacks/$Page/$_CallbackName" + and not $seen{$_}++ } + $m->interp->resolver->glob_path($path, $root); + } + + $m->notes($CacheKey => $callbacks); + $cache{$Page,$_CallbackName} = $callbacks if !$RT::DevelMode; } -foreach my $comp (@$callbacks) { - $m->comp($comp, %ARGS) if $m->comp_exists($comp); +my @rv; +foreach my $comp (sort @$callbacks) { + push @rv, $m->comp($comp, %ARGS); } -return(1); +return @rv; </%init> <%args> $_CallbackName => 'Default' diff --git a/rt/html/Elements/Checkbox b/rt/html/Elements/Checkbox index ae3d765c2..f2256fb78 100644 --- a/rt/html/Elements/Checkbox +++ b/rt/html/Elements/Checkbox @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<INPUT TYPE="Checkbox" NAME ="<%$Name%>" <%$IsChecked%>> +%# END BPS TAGGED BLOCK }}} +<INPUT TYPE="Checkbox" NAME="<%$Name%>" value="1" <%$IsChecked%>> <%ARGS> $Name => undef diff --git a/rt/html/Elements/CollectionAsTable/Header b/rt/html/Elements/CollectionAsTable/Header new file mode 100644 index 000000000..9ed4be8ec --- /dev/null +++ b/rt/html/Elements/CollectionAsTable/Header @@ -0,0 +1,123 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%ARGS> +@Format => undef +$FormatString => undef +$AllowSorting => undef +$Order=>undef +$BaseURL => undef +$Query => undef +$Rows => undef +$Page => undef +$maxitems => undef +</%ARGS> +<TR class="collection-as-table"> +<%perl> + +my %generic_query_args = ( Query => $Query, Rows => $Rows, Page => $Page, Format => $FormatString ); + +my $item = 0; +foreach my $col (@Format) { + $item++; + if ( $col->{title} eq 'NEWLINE' ) { + while ( $item < $maxitems ) { + $m->out(qq{<th class="collection-as-table"> </th>\n}); + $item++; + } + + $item = 0; + $m->out(qq{</TR>\n<TR class="collection-as-table">}); + } + else { + $m->out('<TH class="collection-as-table">'); + my $title = $col->{title}; + $title =~ s/^__(.*)__$/$1/o; + $title = ( + $m->comp( + '/Elements/RT__Ticket/ColumnMap', + Name => $title, + Attr => 'title' + ) + || $title + ); + if ( + $AllowSorting + && $col->{'attribute'} + && $m->comp( + '/Elements/RT__Ticket/ColumnMap', + Name => $col->{'attribute'}, + Attr => 'attribute' + ) + ) + { + + $m->out( + '<a href="' . $BaseURL + . $m->comp( + '/Elements/QueryString', + %generic_query_args, + OrderBy => ( + $m->comp( + '/Elements/RT__Ticket/ColumnMap', + Name => $col->{'attribute'}, + Attr => 'attribute' + ) + || $col->{'attribute'} + ), + Order => ( $ARGS{'Order'} eq 'ASC' ? 'DESC' : 'ASC' ) + ) + . '">' + . loc($title) . '</a>' + ); + } + else { + $m->out( loc($title) ); + } + $m->out('</TH>'); + } +} +</%perl> +</TR> diff --git a/rt/html/Elements/CollectionAsTable/ParseFormat b/rt/html/Elements/CollectionAsTable/ParseFormat new file mode 100644 index 000000000..57434efe2 --- /dev/null +++ b/rt/html/Elements/CollectionAsTable/ParseFormat @@ -0,0 +1,102 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%ARGS> +$Format +</%ARGS> + +<%init> +use Regexp::Common; +my @Columns; + +while ($Format =~ /($RE{delimited}{-delim=>qq{\'"}}|[{}\w.]+)/go) { + my $col = $1; + + if ($col =~ /^$RE{quoted}$/o) { + substr($col,0,1) = ""; + substr($col,-1,1) = ""; + } + + my $colref; + + if ( $col =~ s!/STYLE:([^/]+)!!io ) { + $colref->{'style'} = $1; + } + if ( $col =~ s!/CLASS:([^/]+)!!io ) { + $colref->{'class'} = $1; + } + if ( $col =~ s!/TITLE:([^/]+)!!io ) { + $colref->{'title'} = $1; + } + if ( $col =~ s!/ALIGN:([^\/]+)!!io ) { + $colref->{'align'} = $1; + } + if ( $col =~ /__(.*?)__/gio ) { + my @subcols; + while ( $col =~ s/^(.*?)__(.*?)__//o ) { + push ( @subcols, $1 ) if ($1); + push ( @subcols, "__$2__" ); + $colref->{'attribute'} = $2; + } + push ( @subcols, $col ); + @{ $colref->{'output'} } = @subcols; + } + else { + @{ $colref->{'output'} } = ( "__" . $col . "__" ); + $colref->{'attribute'} = $col; + } + + if ( !$colref->{'title'} && grep { /^__(.*?)__$/io } + @{ $colref->{'output'} } ) + { + $colref->{'title'} = $1; + $colref->{'attribute'} = $1; + } + + + push @Columns, $colref; +} + return(@Columns); +</%init> diff --git a/rt/html/Elements/CollectionAsTable/Row b/rt/html/Elements/CollectionAsTable/Row new file mode 100644 index 000000000..3316bc027 --- /dev/null +++ b/rt/html/Elements/CollectionAsTable/Row @@ -0,0 +1,111 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%ARGS> +$i => undef +@Format => undef +$record => undef +$maxitems => undef +$Depth => undef +$Warning => undef +</%ARGS> + +<%PERL> +$m->out('<TR class="' . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) . '" >' ); +my $item; +foreach my $column (@Format) { + if ( $column->{title} eq 'NEWLINE' ) { + while ( $item < $maxitems ) { + $m->out(qq{<td class="collection-as-table"> </td>\n}); + $item++; + } + $item = 0; + $m->out('</TR>'); + $m->out('<TR class="' + . ( $Warning ? 'warnline' : $i % 2 ? 'oddline' : 'evenline' ) + . '" >' ); + next; + } + $item++; + $m->out('<td class="collection-as-table" '); + $m->out( 'align="' . $column->{align} . '"' ) if ( $column->{align} ); + $m->out('>'); + foreach my $subcol ( @{ $column->{output} } ) { + if ( $subcol =~ /^__(.*?)__$/o ) { + my $col = $1; + my $value = $m->comp( + '/Elements/RT__Ticket/ColumnMap', + Name => $col, + Attr => 'value' + ); + my @out; + + if ( $value && ref($value) ) { + + # All HTML snippets are returned by the callback function + # as scalar references. Data fetched from the objects are + # plain scalars, and needs to be escaped properly. + @out = + map { + ref($_) ? $$_ : $m->interp->apply_escapes( $_ => 'h' ) + } &{$value}( $record, $i ) + ; + } + else { + + # Simple value; just escape it. + @out = $m->interp->apply_escapes( $value => 'h' ); + } + s/\n/<br>/gs for @out; + $m->out( @out ); + } + else { + $m->out($subcol); + } + } + $m->out('</td>'); +} +$m->out('</TR>'); +</%PERL> diff --git a/rt/html/Elements/CreateTicket b/rt/html/Elements/CreateTicket index 7e1025d0a..bd60bbddf 100644 --- a/rt/html/Elements/CreateTicket +++ b/rt/html/Elements/CreateTicket @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<FORM ACTION="<% $RT::WebPath%>/Ticket/Create.html"> +%# END BPS TAGGED BLOCK }}} +<FORM ACTION="<% $RT::WebPath %>/Ticket/Create.html" NAME="CreateTicketInQueue"> <&|/l, $m->scomp('/Elements/SelectNewTicketQueue')&><input type="submit" value="New ticket in"> [_1]</&> </FORM> diff --git a/rt/html/Elements/EditCustomField b/rt/html/Elements/EditCustomField new file mode 100644 index 000000000..d2398c9da --- /dev/null +++ b/rt/html/Elements/EditCustomField @@ -0,0 +1,89 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%INIT> +my $Values; +if ($Object) { + $Values = $Object->CustomFieldValues($CustomField->id); + $Values->Columns( qw( id CustomField ObjectType ObjectId Disabled Content ContentType ContentEncoding ) ); + $NamePrefix ||= join('-', 'Object', ref($Object), $Object->Id, 'CustomField', ''); +} +my $Type = $CustomField->Type; + +return unless ($Type); # if we can't see the type, all hell will break loose. + +my $MaxValues = $CustomField->MaxValues; +if ($MaxValues == 1 and $Object and $Values) { + # what exactly is this doing? Without the "unless" it breaks RTFM + # transaction extraction into articles. + $Default = ($Values->First ? $Values->First->Content : '') unless $Default; + $Values->GotoFirstItem; +} +# The "Magic" hidden input causes RT to know that we were trying to edit the field, even if +# we don't see a value later, since browsers aren't compelled to submit empty form fields +$m->out("\n".'<input type="hidden" name="'.$NamePrefix.$CustomField->Id.'-Values-Magic" value="1">'."\n"); + +return $m->comp( + "EditCustomField$Type", + %ARGS, + Rows => $Rows, + Cols => $Cols, + Default => $Default, + Object => $Object, + Values => $Values, + MaxValues => $MaxValues, + Multiple => ($MaxValues != 1), + NamePrefix => $NamePrefix, + CustomField => $CustomField, +); +</%INIT> +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Rows => 5 +$Cols => 15 +$Default => undef +</%ARGS> diff --git a/rt/html/Elements/EditCustomFieldBinary b/rt/html/Elements/EditCustomFieldBinary new file mode 100644 index 000000000..002825660 --- /dev/null +++ b/rt/html/Elements/EditCustomFieldBinary @@ -0,0 +1,60 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% while ($Values and my $value = $Values->Next ) { +%# XXX - let user download the file(s) here? +<input type="checkbox" name="<%$NamePrefix%><%$CustomField->Id%>-DeleteValueIds" value="<% $value->Id %>"><a href="<%$RT::WebPath%>/Download/CustomFieldValue/<% $value->Id %>/<% $value->Content %>"><% $value->Content %></a><br> +% } +% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { +<input type="file" name="<%$NamePrefix%><%$CustomField->Id%>-Upload"> +% } +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Default => undef +$Values => undef +$MaxValues => undef +</%ARGS> diff --git a/rt/html/Elements/EditCustomFieldFreeform b/rt/html/Elements/EditCustomFieldFreeform new file mode 100644 index 000000000..c097ee0a9 --- /dev/null +++ b/rt/html/Elements/EditCustomFieldFreeform @@ -0,0 +1,68 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% if ($Multiple) { +<textarea cols=<%$Cols%> rows=<%$Rows%> name="<%$NamePrefix%><%$CustomField->Id%>-Values"><%$Default%></textarea> +% } else { +<input name="<%$NamePrefix%><%$CustomField->Id%>-Value" size="<%$Cols%>" value="<%$Default ? $Default : ''%>"> +% } +<%INIT> +if ($Multiple and $Values) { + $Default = ''; + while (my $value = $Values->Next ) { + $Default .= $value->Content."\n"; + } +} +</%INIT> +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Default => undef +$Values => undef +$Multiple => undef +$Cols +$Rows +</%ARGS> diff --git a/rt/html/Elements/EditCustomFieldImage b/rt/html/Elements/EditCustomFieldImage new file mode 100644 index 000000000..b378ceae6 --- /dev/null +++ b/rt/html/Elements/EditCustomFieldImage @@ -0,0 +1,60 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% while ($Values and my $value = $Values->Next ) { +<input type="checkbox" name="<%$NamePrefix%><%$CustomField->Id%>-DeleteValueIds" value="<% $value->Id %>"><& ShowCustomFieldImage, Object => $value &> +<br> +% } +% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { +<input type="file" name="<%$NamePrefix%><%$CustomField->Id%>-Upload"> +% } +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Default => undef +$Values => undef +$MaxValues => undef +</%ARGS> diff --git a/rt/html/Elements/EditCustomFieldSelect b/rt/html/Elements/EditCustomFieldSelect new file mode 100644 index 000000000..db33a6839 --- /dev/null +++ b/rt/html/Elements/EditCustomFieldSelect @@ -0,0 +1,71 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} + <select name="<%$NamePrefix%><%$CustomField->Id%>-Values" + size="<%$Rows%>" + <% $Multiple && 'MULTIPLE' %>> +% my $selected; +% my $CFVs = $CustomField->Values; +% while ($CFVs and my $value = $CFVs->Next ) { + <option value="<%$value->Name%>" +% if ($Values) { + <% $Values->HasEntry($value->Name) && ($selected = 1) && 'SELECTED' %> +% } elsif ($Default) { + <% ($Default eq $value->Name) && ($selected = 1) && 'SELECTED' %> +% } + ><% $value->Name%></option> +% } + <option value="" <% !$selected && 'SELECTED' %>><&|/l&>(no value)</&></option> + </select> +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Default => undef +$Values => undef +$Multiple => 0 +$Cols +$Rows +</%ARGS> diff --git a/rt/html/Elements/EditCustomFieldText b/rt/html/Elements/EditCustomFieldText new file mode 100644 index 000000000..1aac3283b --- /dev/null +++ b/rt/html/Elements/EditCustomFieldText @@ -0,0 +1,65 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% while ($Values and my $value = $Values->Next ) { +<textarea cols=<%$Cols%> rows=<%$Rows%> name="<%$NamePrefix%><%$CustomField->Id%>-Values"><% $value->Content %></textarea><br> +% } +% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { +<textarea cols=<%$Cols%> rows=<%$Rows%> name="<%$NamePrefix%><%$CustomField->Id%>-Values"><% $Default %></textarea> +% } +<%INIT> +# XXX - MultiValue textarea is for now outlawed. +$MaxValues = 1; +</%INIT> +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Default => undef +$Values => undef +$MaxValues => undef +$Cols +$Rows +</%ARGS> diff --git a/rt/html/Elements/EditCustomFieldWikitext b/rt/html/Elements/EditCustomFieldWikitext new file mode 100644 index 000000000..1aac3283b --- /dev/null +++ b/rt/html/Elements/EditCustomFieldWikitext @@ -0,0 +1,65 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% while ($Values and my $value = $Values->Next ) { +<textarea cols=<%$Cols%> rows=<%$Rows%> name="<%$NamePrefix%><%$CustomField->Id%>-Values"><% $value->Content %></textarea><br> +% } +% if (!$MaxValues or !$Values or $Values->Count < $MaxValues) { +<textarea cols=<%$Cols%> rows=<%$Rows%> name="<%$NamePrefix%><%$CustomField->Id%>-Values"><% $Default %></textarea> +% } +<%INIT> +# XXX - MultiValue textarea is for now outlawed. +$MaxValues = 1; +</%INIT> +<%ARGS> +$Object => undef +$CustomField => undef +$NamePrefix => undef +$Default => undef +$Values => undef +$MaxValues => undef +$Cols +$Rows +</%ARGS> diff --git a/rt/html/Elements/EditLinks b/rt/html/Elements/EditLinks new file mode 100755 index 000000000..68c08dd16 --- /dev/null +++ b/rt/html/Elements/EditLinks @@ -0,0 +1,174 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<TABLE width=100%> + <TR> + <TD VALIGN=TOP WIDTH=50%> + <h3><&|/l&>Current Links</&></h3> + +<table> + <tr> + <td></td> + <td><i><&|/l&>(Check box to delete)</&></i></td> + </tr> + <tr> + <td class="labeltop"><&|/l&>Depends on</&>:</td> + <td class="value"> +% while (my $link = $Object->DependsOn->Next) { + <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1"> + <& ShowLink, URI => $link->TargetURI &><br> +% } + </td> + </tr> + <tr> + <td class="labeltop"><&|/l&>Depended on by</&>:</td> + <td class="value"> +% while (my $link = $Object->DependedOnBy->Next) { +% my $member = $link->BaseObj; + <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1"> + <& ShowLink, URI => $link->BaseURI &><br> +% } + </td> + </tr> + <tr> + <td class="labeltop"><&|/l&>Parents</&>:</td> + <td class="value"> +% while (my $link = $Object->MemberOf->Next) { + <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1"> + <& ShowLink, URI => $link->TargetURI &><br> +% } + </td> + </tr> + <tr> + <td class="labeltop"><&|/l&>Children</&>:</td> + <td class="value"> +% while (my $link = $Object->Members->Next) { + <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1"> + <& ShowLink, URI => $link->BaseURI &><br> +% } + </td> + </tr> + <tr> + <td class="labeltop"><&|/l&>Refers to</&>:</td> + <td class="value"> +% while (my $link = $Object->RefersTo->Next) { + <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>" value="1"> + <& ShowLink, URI => $link->TargetURI &><br> +%} + </td> + </tr> + <tr> + <td class="labeltop"><&|/l&>Referred to by</&>:</td> + <td class="value"> +% while (my $link = $Object->ReferredToBy->Next) { + <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-" value="1"> + <& ShowLink, URI => $link->BaseURI &><br> +% } + </td> + </tr> +</table> + +</TD> +<TD VALIGN=TOP> +<h3><&|/l&>New Links</&></h3> +% if (ref($Object) eq 'RT::Ticket') { +<i><&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.</&> +<& /Elements/Callback, _CallbackName => 'ExtraLinkInstructions' &> +</i><br> +% } elsif (ref($Object) eq 'RT::Queue') { +<i><&|/l&>Enter queues or URIs to link queues to. Separate multiple entries with spaces.</&> +</i><br> +% } else { +<i><&|/l&>Enter objects or URIs to link objects to. Separate multiple entries with spaces.</&></i><br> +% } +<TABLE> +% if ($Merge) { + <TR> + <TD class="label"><&|/l&>Merge into</&>:</TD> + <TD class="entry"><input name="<%$id%>-MergeInto"> <i><&|/l&>(only one ticket)</&></i></TD> + </TR> +% } + <TR> + <TD class="label"><&|/l&>Depends on</&>:</TD> + <TD class="entry"><input name="<%$id%>-DependsOn"></TD> + </TR> + <TR> + <TD class="label"><&|/l&>Depended on by</&>:</TD> + <TD class="entry"><input name="DependsOn-<%$id%>"></TD> + </TR> + <TR> + <TD class="label"><&|/l&>Parents</&>:</TD> + <TD class="entry"><input name="<%$id%>-MemberOf"></TD> + </TR> + <TR> + <TD class="label"><&|/l&>Children</&>:</TD> + <TD class="entry"> <input name="MemberOf-<%$id%>"></TD> + </TR> + <TR> + <TD class="label"><&|/l&>Refers to</&>:</TD> + <TD class="entry"><input name="<%$id%>-RefersTo"></TD> + </TR> + <TR> + <TD class="label"><&|/l&>Referred to by</&>:</TD> + <TD class="entry"> <input name="RefersTo-<%$id%>"></TD> + </TR> +</TABLE> +</TD> +</TR> +</TABLE> + +<%INIT> +my $id; +if ($Object && $Object->Id) { + $id = $Object->Id; +} else { + $id = 'new'; +} +</%INIT> + +<%ARGS> +$Object => undef +$Merge => 0 +</%ARGS> diff --git a/rt/html/Elements/Error b/rt/html/Elements/Error index dc44f125e..bc5a1880a 100644 --- a/rt/html/Elements/Error +++ b/rt/html/Elements/Error @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Callback, %ARGS, error => $error &> <& /Elements/Header, Code => $Code, Why => $Why &> <& /Elements/Tabs &> @@ -31,9 +53,11 @@ <%$Details%> </font> <& /Elements/TitleBoxEnd &> -</body> -</HTML> +<%cleanup> +$m->comp('/Elements/Footer'); +$m->abort(); +</%cleanup> <%args> $Code => undef diff --git a/rt/html/Elements/Footer b/rt/html/Elements/Footer index 5c833f886..78a116f38 100644 --- a/rt/html/Elements/Footer +++ b/rt/html/Elements/Footer @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} % if ($Menu) { </td> </tr> @@ -28,13 +50,15 @@ <td> % } <& /Elements/Callback, %ARGS &> +<!-- <div class="bpscredits"> -»|« <&|/l, $RT::VERSION &>RT [_1] from <a href="http://bestpractical.com">Best Practical Solutions, LLC</a>.</&> -</div> -% if ($Debug) { -<HR> -<b><&|/l&>Time to display</&>: <%Time::HiRes::tv_interval( $m->{'rt_base_time'} )%></b> +<&|/l, '»|«', $RT::VERSION, '2005', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>', &>[_1] RT [_2] Copyright 1996-[_3] [_4].</&><br> +% if (!$Menu) { +<&|/l&>Distributed under version 2 <a href="http://www.gnu.org/copyleft/gpl.html"> of the GNU GPL.</a></&><br> +<&|/l, '<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>' &>To inquire about support, training, custom development or licensing, please contact [_1].</&><br> % } +</div> +--> % if ($Debug >= 2 ) { % require Data::Dumper; % my $d = Data::Dumper->new([\%ARGS], [qw(%ARGS)]); @@ -42,6 +66,7 @@ <%$d->Dump() %> </pre> % } +<div class="page-stats"><&|/l&>Time to display</&>: <%Time::HiRes::tv_interval( $m->{'rt_base_time'} )%></div> % if ($Menu) { </TD> </TR> diff --git a/rt/html/Elements/FreesideInvoiceSearch b/rt/html/Elements/FreesideInvoiceSearch new file mode 100644 index 000000000..3842b2ff9 --- /dev/null +++ b/rt/html/Elements/FreesideInvoiceSearch @@ -0,0 +1,20 @@ +% if ( $FS::CurrentUser::CurrentUser->access_right('View invoices') ) { + + <form action="<% $RT::URI::freeside::URL %>/search/cust_bill.html" STYLE="margin:0"> + <SCRIPT TYPE="text/javascript"> + function clearhint_search_invoice (what) { + if ( what.value == '(inv #)' ) + what.value = ''; + } + </SCRIPT> + <input name="invnum" accesskey="0" VALUE="(inv #)" SIZE="4" onFocus="clearhint_search_invoice(this);" onClick="clearhint_search_invoice(this);" STYLE="text-align:right; margin-bottom:1px; font-family: Arial, Verdana, Helvetica, sans-serif;"> + +% if ( $FS::CurrentUser::CurrentUser->access_right('List invoices') ) { + <A HREF="<% $RT::URI::freeside::URL %>search/report_cust_bill.html" STYLE="color: #ffffff; font-size: 70%; font-weight:normal">Advanced</A> +% } + <BR> + + <input type="submit" value="<&|/l&>Search invoices</&>" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:70%"> + </form> + +% } diff --git a/rt/html/Elements/FreesideNewCust b/rt/html/Elements/FreesideNewCust new file mode 100644 index 000000000..c752437da --- /dev/null +++ b/rt/html/Elements/FreesideNewCust @@ -0,0 +1,3 @@ +<form action="<% $RT::URI::freeside::URL %>/edit/cust_main.cgi" STYLE="margin:0"> +<INPUT TYPE="submit" VALUE="<&|/l&>New customer</&>" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;"> +</FORM> diff --git a/rt/html/Elements/FreesideSearch b/rt/html/Elements/FreesideSearch new file mode 100644 index 000000000..99b8da072 --- /dev/null +++ b/rt/html/Elements/FreesideSearch @@ -0,0 +1,11 @@ +<form action="<% $RT::URI::freeside::URL %>/search/cust_main.cgi" STYLE="margin:0"> + <SCRIPT TYPE="text/javascript"> + function clearhint_search_cust (what) { + if ( what.value == '(cust #, name, company or phone)' ) + what.value = ''; + } + </SCRIPT> +<input name="search_cust" accesskey="0" VALUE="(cust #, name, company or phone)" SIZE="28" onFocus="clearhint_search_cust(this);" onClick="clearhint_search_cust(this);" STYLE="text-align:right; font-family: Arial, Verdana, Helvetica, sans-serif;"><BR> +<A HREF="<% $RT::URI::freeside::URL %>/search/cust_main.html" STYLE="color: #000000; font-size: 70%; font-weight:normal">Advanced</A> +<input type="submit" value="<&|/l&>Search customers</&>" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:70%"> +</form> diff --git a/rt/html/Elements/FreesideSvcSearch b/rt/html/Elements/FreesideSvcSearch new file mode 100644 index 000000000..e9ad56426 --- /dev/null +++ b/rt/html/Elements/FreesideSvcSearch @@ -0,0 +1,11 @@ +<form action="<% $RT::URI::freeside::URL %>/search/svc_Smart.html" STYLE="margin:0"> + <SCRIPT TYPE="text/javascript"> + function clearhint_search_svc (what) { + if ( what.value == '(user, user@domain or domain)' ) + what.value = ''; + } + </SCRIPT> +<input name="search_svc" accesskey="0" VALUE="(user, user@domain or domain)" SIZE="26" onFocus="clearhint_search_svc(this);" onClick="clearhint_search_svc(this);" STYLE="text-align:right; font-family: Arial, Verdana, Helvetica, sans-serif;"><BR> + <A HREF="<% $RT::URI::freeside::URL %>search/svc_Smarter.html" STYLE="color: #000000; font-size: 70%; font-weight:normal">Advanced</A> +<input type="submit" value="<&|/l&>Search services</&>" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:70%"> +</form> diff --git a/rt/html/Elements/GotoTicket b/rt/html/Elements/GotoTicket index bb0c04dd1..869d57ef1 100644 --- a/rt/html/Elements/GotoTicket +++ b/rt/html/Elements/GotoTicket @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,11 +20,27 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <FORM ACTION="<%$RT::WebPath%>/Ticket/Display.html"><input type=submit value="<&|/l&>Goto ticket</&>"> <input size=5 name=id accesskey="0"></FORM> diff --git a/rt/html/Elements/Header b/rt/html/Elements/Header index 0fd91a2e2..c1bc92afd 100644 --- a/rt/html/Elements/Header +++ b/rt/html/Elements/Header @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%#<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <TITLE><%$Title%></TITLE> @@ -31,8 +53,21 @@ <link rel="shortcut icon" href="<%$RT::WebImagesURL%>/favicon.png" type="image/png"> <link rel="stylesheet" href="<%$RT::WebPath%>/NoAuth/webrt.css" type="text/css"> +<script> +function hideshow(num) { + idstring = "element-" + num; + chunk = document.getElementById(idstring); + if ( chunk.style.display == "none") { + chunk.style.display = chunk.style.tag; + } else { + chunk.style.tag = chunk.style.display; + chunk.style.display = "none"; + } +} +</script> +<& /Elements/Callback, _CallbackName => 'Head', %ARGS &> </HEAD> -<BODY BGCOLOR="<%$BgColor%>" +<BODY BACKGROUND="<% $RT::URI::freeside::URL %>/images/background-cheat.png" STYLE="margin-top:0; margin-bottom:0; margin-left:0; margin-right:0" % if ($Focus) { ONLOAD=" var tmp = (document.getElementsByName('<% $Focus %>')); @@ -40,38 +75,64 @@ ONLOAD=" " % } > -<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF"> +<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF" STYLE="padding-left:0; padding-right:4"> <tr> - <td colspan=2><a href="http://bestpractical.com"><img src="<%$RT::WebImagesURL%>/bplogo.gif" alt="" width="230" height="50"></a></td> - <td> </td> - <td> </td> - <td width="50%" align="right"> + <td colspan=2 rowspan=2><img border=0 alt="freeside" src="<%$RT::WebImagesURL%>/small-logo.png" width="92" height="62"></td> + <td align="left" rowspan=2><font size=6><% &RT::URI::freeside::FreesideGetConfig('company_name') || 'ExampleCo' %></font></td> + <td align="right" valign="top"> % if ($session{'CurrentUser'} && $session{'CurrentUser'}->Id && $LoggedIn) { <SPAN STYLE="display: none"><A HREF="#skipnav"><&|/l&>Skip Menu</&></A> |</SPAN> +<&|/l, "<b>".$session{'CurrentUser'}->Name."</b>" &>Logged in as [_1]</&> +<BR> +%if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf', Object => $RT::System )) { <A HREF="<%$RT::WebPath%><% $Prefs %>" ><&|/l&>Preferences</&></A> +% } <& /Elements/Callback, %ARGS &> % unless ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth) { -| <A HREF="<%$RT::WebPath%>/NoAuth/Logout.html<%$URL && "?URL=".$URL%>"><&|/l&>Logout</&></a> +| <A HREF="<%$RT::WebPath%>/NoAuth/Logout.html<%$URL ? "?URL=".$URL : ''%>"><&|/l&>Logout</&></a> % } -<BR> -<&|/l, "<b>".$session{'CurrentUser'}->Name."</b>" &>Logged in as [_1]</&> % } else { <&|/l&>Not logged in.</&> % } -</font> </td> + + </tr> + <tr> + + <td align=right valign=bottom> + <table> + <tr> + <td align=right> + <FONT SIZE="-3"> + <A HREF="http://www.sisd.com/freeside">Freeside</A> v<% &RT::URI::freeside::FreesideVersion() %><BR> + <A HREF="../docs/">Documentation</A><BR> + </FONT> + </td> + <td bgcolor=#000000></td> + <td align=left> + <FONT SIZE="-3"> + <A HREF="http://www.bestpractical.com/rt">RT</A> v<% $RT::VERSION %><BR> + <A HREF="http://wiki.bestpractical.com/">Documentation</A><BR> + </FONT> + </td> + + </tr> + </table> + </td> + </tr> </table> <%INIT> -$r->header_out('Pragma' => 'no-cache'); -$r->header_out('Cache-control' => 'no-cache'); +$r->headers_out->{'Pragma'} = 'no-cache'; +$r->headers_out->{'Cache-control'} = 'no-cache'; +require RT::URI::freeside; </%INIT> <%ARGS> $Prefs => '/User/Prefs.html' $Focus => 'focus' -$Title => undef +$Title => 'RT' $Code => undef $Refresh => 0 $Why => undef diff --git a/rt/html/Elements/ListActions b/rt/html/Elements/ListActions index ffa09e283..8433d17e0 100644 --- a/rt/html/Elements/ListActions +++ b/rt/html/Elements/ListActions @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} % if ($actions[0] ) { <& /Elements/TitleBoxStart, title => loc('Results') &> <UL> diff --git a/rt/html/Elements/Login b/rt/html/Elements/Login index 42c49c4af..1d4bfd5ec 100644 --- a/rt/html/Elements/Login +++ b/rt/html/Elements/Login @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <%INIT> if ($m->request_comp->path =~ '^/REST/\d+\.\d+/') { $r->content_type("text/plain"); @@ -45,7 +67,7 @@ if ($m->request_comp->path =~ '^/REST/\d+\.\d+/') { contentbg=>"#cccccc" &> % unless ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth) { -<FORM METHOD=POST ACTION="<% (UNIVERSAL::can($r, 'uri') && ($r->uri) =~ m!.*/(.*)!) %>" > +<FORM id="login" name="login" METHOD=POST ACTION="<% (UNIVERSAL::can($r, 'uri') && ($r->uri) =~ m!.*/(.*)!) %>" > <TABLE BORDER=0 WIDTH=100%> <TR ALIGN=RIGHT> <TD ALIGN=RIGHT><&|/l&>Username</&>:</TD><TD ALIGN=LEFT><input name=user value="<%$user%>"></TD></TR> @@ -91,8 +113,7 @@ href="/NoAuth/Reminder.html">send you a reminder</a>. <BR> <BR> <HR> -<&|/l, '2003'&>RT is © Copyright 1996-[_1] Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href="http://www.gnu.org/copyleft/gpl.html">Version 2 of the GNU General Public License.</a></&> - +<& /Elements/Footer, Menu => 0 &> <%ARGS> $user => "" $pass => undef diff --git a/rt/html/Elements/Menu b/rt/html/Elements/Menu index 963be13bf..398e3ab07 100644 --- a/rt/html/Elements/Menu +++ b/rt/html/Elements/Menu @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} %# font size depends on level % if ($level ge 3) { % $size = $basesize-(6); @@ -47,16 +69,17 @@ % } % my $style=""; % if ($sep) { -% $style="border-top: solid #999 1px; padding-top: .1em; margin-top: .5em;"; +% $style="minor"; % } elsif ($level == 0 ) { -% $style="border-bottom: solid white 1px; padding-top: .25em; padding-bottom: .5em;" ; +% $style="major"; % } % if ($toptabs->{$tab}->{'separator'}) { % $sep=1; % } else { % $sep=0; % } -<li style="<%$style%>"><A HREF="<%$RT::WebPath%>/<%$toptabs->{$tab}->{'path'}|n%>" style="font-size: <%$size%>;" class="<%$class%>" +% my $url = $toptabs->{$tab}->{'path'} =~ /^https?:/i ? $toptabs->{$tab}->{'path'} : $RT::WebPath . "/" . $toptabs->{$tab}->{'path'}; +<li class="<%$class%>-<%$level%>-<%$style%>"><A HREF="<% $url %>" class="<%$class%>-<%$level%>" <%($class eq 'currenttopnav') ? "name='focus'" : ""|n %> <% !$level && "accesskey='".$accesskey++."'" |n%>><% $toptabs->{$tab}->{'title'}%></A> %# Second-level items @@ -75,6 +98,7 @@ <%INIT> my ($tab, $subtab, $class, $size, $padding); my $basesize=16; + </%INIT> <%ARGS> diff --git a/rt/html/Elements/MessageBox b/rt/html/Elements/MessageBox index 64fdf38b7..dd48bec9a 100644 --- a/rt/html/Elements/MessageBox +++ b/rt/html/Elements/MessageBox @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<TEXTAREA COLS=<%$Width%> ROWS=15 WRAP=HARD NAME="<%$Name%>"><& /Elements/Callback, %ARGS &><% $Default %><%$message%><%$signature%></TEXTAREA> +%# END BPS TAGGED BLOCK }}} +<textarea class="messagebox" COLS=<%$Width%> ROWS=<%$Height%> WRAP=<%$Wrap%> NAME="<%$Name%>"><& /Elements/Callback, %ARGS &><% $Default %><%$message%><%$IncludeSignature ? $signature : ''%></textarea> <%INIT> my ($message); @@ -33,7 +55,7 @@ if ($QuoteTransaction) { } my $signature = ''; -if ($session{'CurrentUser'}->UserObj->Signature) { +if ($IncludeSignature && $session{'CurrentUser'}->UserObj->Signature) { $signature = "-- \n".$session{'CurrentUser'}->UserObj->Signature; } @@ -42,6 +64,9 @@ if ($session{'CurrentUser'}->UserObj->Signature) { $QuoteTransaction => undef $Name => 'Content' $Default => '' -$Width => 72 +$Width => $RT::MessageBoxWidth || 72 +$Height => $RT::MessageBoxHeight || 15 +$Wrap => $RT::MessageBoxWrap || 'HARD' +$IncludeSignature => 1 </%ARGS> diff --git a/rt/html/Elements/MyRequests b/rt/html/Elements/MyRequests index 05ae62445..172b4a4fa 100644 --- a/rt/html/Elements/MyRequests +++ b/rt/html/Elements/MyRequests @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,65 +20,51 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK -<& /Elements/TitleBoxStart, title => loc("[_1] highest priority tickets I requested...", $rows), bodyclass=> '' &> -<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH=100%> -<TR> -<TH align=right><&|/l&>#</&></TH> -<TH align=left><&|/l&>Subject</&></TH> -<TH align=left><&|/l&>Queue</&></TH> -<TH align=left><&|/l&>Status</&></TH> -<TH align=left><&|/l&>Owner</&></TH> -</TR> -% my $i; -% while (my $Ticket = $MyTickets->Next) { -% $i++; -<TR class="<% $i%2 ? 'oddline' : 'evenline'%>" > -<TD ALIGN=RIGHT> -<%$Ticket->Id%> -</TD> -<TD> -<A HREF="<% $RT::WebPath %>/Ticket/Display.html?id=<%$Ticket->Id%>"> -<%$Ticket->Subject || loc('(no subject)')%> -</A> -</TD> -<TD> -<%$Ticket->QueueObj->Name%> -</TD> -<TD> -% if ($Ticket->HasUnresolvedDependencies ) { -% if ($Ticket->HasUnresolvedDependencies( Type => 'approval' )) { -<em><&|/l&>(pending approval)</&></em> -% } else { -<em><&|/l&>(pending other tickets)</&></em> -% } -% } else { -<%loc($Ticket->Status)%> -% } -</TD> -<TD> -<%$Ticket->OwnerObj->Name%> -</TD> -</TR> -% } -</TABLE> -<& /Elements/TitleBoxEnd &> +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<&|/Elements/TitleBox, + title => loc("[_1] newest unowned tickets", $rows), + title_href => "Search/Results.html".$QueryString &> +<& /Elements/TicketList, + Format => "'<a href=\"$RT::WebPath/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"$RT::WebPath/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', QueueName, ExtendedStatus, CreatedRelative, '<A HREF=\"$RT::WebPath/Ticket/Display.html?Action=Take&id=__id__\">".loc('Take')."</a>/TITLE: ' ", + Query => $Query, + OrderBy => 'Created', + Order => 'DESC', + ShowNavigation => 0, + Rows => $rows + + &> +</&> +<%init> +my $rows = $RT::MyRequestsLength; +my $Query = "Owner = 'Nobody' AND ( Status = 'new' OR Status = 'open')"; -<%INIT> -my $rows = 10; -my $MyTickets; -$MyTickets = new RT::Tickets ($session{'CurrentUser'}); -$MyTickets->LimitWatcher(TYPE => 'Requestor', VALUE => $session{'CurrentUser'}->EmailAddress); -$MyTickets->LimitStatus(VALUE => "open"); -$MyTickets->LimitStatus(VALUE => "new"); -$MyTickets->RowsPerPage($rows); -$MyTickets->OrderBy(FIELD => 'Priority', ORDER => 'DESC'); +my $QueryString = ""; +$QueryString = '?' . $m->comp('/Elements/QueryString', + Query => $Query, + Order => 'DESC', + OrderBy => 'Priority') if ($Query); -</%INIT> +</%init> diff --git a/rt/html/Elements/MyTickets b/rt/html/Elements/MyTickets index 6e2ddc6c3..cf5225abc 100644 --- a/rt/html/Elements/MyTickets +++ b/rt/html/Elements/MyTickets @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,68 +20,52 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK -<& /Elements/TitleBoxStart, title => loc("[_1] highest priority tickets I own...", $rows), bodyclass=> '' &> -<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH=100%> -<TR> -<TH ALIGN=RIGHT><&|/l&>#</&></TH> -<TH ALIGN=LEFT><&|/l&>Subject</&></TH> -<TH ALIGN=LEFT><&|/l&>Queue</&></TH> -<TH ALIGN=LEFT><&|/l&>Status</&></TH> -<TH ALIGN=LEFT> </TH> -</TR> - <TR> -% my $i; -% while (my $Ticket = $MyTickets->Next) { -% next if $Ticket->HasUnresolvedDependencies( Type => 'approval' ); -% last if $i++ >= $rows; -<TR class="<% $i%2 ? 'oddline' : 'evenline'%>" > -<TD ALIGN=RIGHT> -<%$Ticket->Id%> -</TD> -<TD> -<A HREF="<% $RT::WebPath %>/Ticket/Display.html?id=<%$Ticket->Id%>"> -<%$Ticket->Subject || loc('(no subject)')%> -</A> -</TD> -<TD> -<%$Ticket->QueueObj->Name%> -</TD> -<TD> -% if ($Ticket->HasUnresolvedDependencies ) { -% if ($Ticket->HasUnresolvedDependencies( Type => 'approval' ) or -% $Ticket->HasUnresolvedDependencies( Type => 'code' )) { -<em><&|/l&>(pending approval)</&></em> -% } else { -<em><&|/l&>(pending other tickets)</&></em> -% } -% } else { -<%loc($Ticket->Status)%> -% } -</TD> -<TD ALIGN=RIGHT> -[<A HREF="<% $RT::WebPath %>/Ticket/Update.html?id=<%$Ticket->Id%>"><&|/l&>Update</&></A>] -</TD> -</TR> -% } -</TABLE> -<& /Elements/TitleBoxEnd &> +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<&|/Elements/TitleBox, + title => loc('[_1] highest priority tickets I own', $rows), + title_href => "Search/Results.html".$QueryString &> +<& /Elements/TicketList, + Format => "'<a href=\"$RT::WebPath/Ticket/Display.html?id=__id__\">__id__</a>/TITLE:#', '<a href=\"$RT::WebPath/Ticket/Display.html?id=__id__\">__Subject__</a>/TITLE:Subject', Priority, QueueName, ExtendedStatus", + + Query => $Query, + OrderBy => 'Priority', + Order => 'DESC', + Rows => $rows, + ShowNavigation => 0 + &> +</&> +<%init> +my $rows = $RT::MyTicketsLength; + +my $Query = " Owner = '".$session{'CurrentUser'}->Id."' AND ( Status = 'new' OR Status = 'open')"; +my $QueryString = ""; +$QueryString = '?' . $m->comp('/Elements/QueryString', + Query => $Query, + Order => 'DESC', + OrderBy => 'Priority') if ($Query); -<%INIT> -my $rows = 10; -my $MyTickets; -$MyTickets = new RT::Tickets ($session{'CurrentUser'}); -$MyTickets->LimitOwner(VALUE => $session{'CurrentUser'}->Id); -$MyTickets->LimitStatus(VALUE => "open"); -$MyTickets->LimitStatus(VALUE => "new"); -$MyTickets->RowsPerPage($rows); -$MyTickets->OrderBy(FIELD => 'Priority', ORDER => 'DESC'); +</%init> -</%INIT> diff --git a/rt/html/Elements/PageLayout b/rt/html/Elements/PageLayout index 685317581..f13ee0dda 100644 --- a/rt/html/Elements/PageLayout +++ b/rt/html/Elements/PageLayout @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,39 +20,66 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK -<table class="darkblue" border=0 cellspacing=0 cellpadding=0 width="100%"> - <th class="titlebox" align="left"><span class="rtname"><%$AppName%></span> - </th> +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<table class="black" border=0 cellspacing=0 cellpadding=0 width="100%"> +<tr> + <TD colspan=5 WIDTH="100%" STYLE="padding:0"><IMG BORDER=0 ALT="" SRC="<% $RT::URI::freeside::URL %>/images/black-gradient.png" HEIGHT="13" WIDTH="100%"></TD> +</tr> +<tr> +%# <th class="black" align="left" width=15%><span class="rtname"><%$AppName%></span> +%# </th> <span class="topactions"> -% foreach my $action (sort keys %{$topactions}) { - <td class="darkblueright"> +% my $notfirst = 0; foreach my $action (sort keys %{$topactions}) { + <td class="blackright" ALIGN="right" VALIGN="center"> <%$topactions->{"$action"}->{'html'} |n %> </td> % } </span> +</tr> </table> <table border=0 cellspacing=0 cellpadding=0 width="100%" height="100%"> +<TR> + <TD BGCOLOR="#000000" STYLE="padding:0" WIDTH="154"></TD> + <TD STYLE="padding:0" WIDTH="13"><IMG BORDER=0 ALT="" SRC="<% $RT::URI::freeside::URL %>/images/black-gray-corner.png"></TD> + <TD STYLE="padding:0"><IMG BORDER=0 ALT="" SRC="<% $RT::URI::freeside::URL %>/images/black-gray-top.png" HEIGHT="13" WIDTH="100%"></TD> +</TR> %# Vertical menu <TR height="100%"> -<TD valign="top" width="140" class="blue"> +<TD valign="top" width="140" class="black"> <& /Elements/Menu, toptabs => $toptabs, current_toptab => $current_toptab &> </TD> +<TD STYLE="padding:0" HEIGHT="100%" WIDTH=13 VALIGN="top"><IMG WIDTH="13" HEIGHT="100%" BORDER=0 ALT="" SRC="<% $RT::URI::freeside::URL %>/images/black-gray-side.png"></TD> <td valign="top"> <table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0"> <tr> - <td class="blue" valign="top"> + <td class="<% $actions ? 'darkmediumgray' : 'bggray' %>" valign="top"> <span class="title"><%$title%></span> </td> </tr> <tr> -<td class="blueright" valign="top"> +<td class="<% $actions ? 'darkmediumgrayright' : 'bggrayright' %>" valign="top"> <span class="nav"> % if ($actions) { % my @actions; @@ -54,10 +87,11 @@ % if ($actions->{"$action"}->{'html'}) { % push @actions, $actions->{"$action"}->{'html'}; % } else { -% push @actions, "<A class='nav' HREF=\"".$RT::WebPath."/".$actions->{$action}->{'path'}."\">".$actions->{$action}->{'title'}."</A>"; +% push @actions, qq|<a class="nav" href="|.$RT::WebPath."/".$actions->{$action}->{'path'}.qq|">|.$actions->{$action}->{'title'}."</a>"; % } % } -<% join(" | ", @actions) | n %> +%#<% join(" | ", @actions) | n %> +<% '['. join("] [", @actions). '] ' | n %> % if ($subactions) { % my @actions; % foreach my $action (sort keys %{$subactions}) { @@ -71,11 +105,12 @@ </tr> <TR valign="top"> <TD valign="top" width="100%" height="100%" class="mainbody" > - +<& /Elements/Callback, _CallbackName => 'BeforeBody', %ARGS &> +%$m->flush_buffer(); # we've got the page laid out, let's flush the buffer; <%INIT> foreach my $tab (sort keys %{$toptabs}) { - if ($toptabs->{$tab}->{'path'} eq $current_toptab) { + if ($current_toptab && $toptabs->{$tab}->{'path'} eq $current_toptab) { $toptabs->{$tab}->{"subtabs"} = $tabs; $toptabs->{$tab}->{"current_subtab"} = $current_tab; } @@ -95,5 +130,5 @@ $tabs => undef $actions => undef $subactions => undef $title => $m->callers(-1)->path -$AppName => undef +$AppName => '' </%ARGS> diff --git a/rt/html/Elements/QueryString b/rt/html/Elements/QueryString new file mode 100644 index 000000000..7d41f15e0 --- /dev/null +++ b/rt/html/Elements/QueryString @@ -0,0 +1,52 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%init> +my @params; +while ( (my $key, my $value) = each %ARGS ){ + push @params, $key."=".$m->interp->apply_escapes($value,'u'); +} +return(join('&',@params)); +</%init> diff --git a/rt/html/Elements/QuickCreate b/rt/html/Elements/QuickCreate new file mode 100644 index 000000000..0d2489c61 --- /dev/null +++ b/rt/html/Elements/QuickCreate @@ -0,0 +1,70 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/TitleBoxStart, title => loc('Quick ticket creation') &> +<form method="post" action="<%$RT::WebPath%>/index.html"> +<input type="hidden" name="QuickCreate" value="1"> +<table> +<tr> +<td> +<font size="-2"><&|/l&>Subject</&>:<br><input size="15" name="Subject"></font> +</td> +<td> +<font size="-2"><&|/l&>Queue</&>:<br><& /Elements/SelectQueue, Name => 'Queue', ShowNullOption => 0 &></font> +</td> +<td> +<font size="-2"><&|/l&>Owner</&>:<br> +<select type="select" name="Owner"> +<option value="<%$session{'CurrentUser'}->id%>" SELECTED><%$session{'CurrentUser'}->Name %></option> +<option value="<%$RT::Nobody->id%>"><%loc('Nobody')%></option> +</select> +</font> +</td> +</tr> +%#<tr><td colspan="3"><font size="-2"><textarea cols="50" rows="3"></textarea></font></td></tr> +</table> +<div align="right"><input type="submit" value="<%loc('Create')%>"></div> +</form> +<& /Elements/TitleBoxEnd &> diff --git a/rt/html/Elements/Quicksearch b/rt/html/Elements/Quicksearch index b1a67ab29..d54f72e88 100644 --- a/rt/html/Elements/Quicksearch +++ b/rt/html/Elements/Quicksearch @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,41 +20,62 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/TitleBoxStart, title => loc("Quick search"), bodyclass => "" &> <TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH=100%> <tr> - <th align=left><&|/l&>Queue</&></th> - <th align=right><font size=-1><&|/l&>New</&></font></th> - <th align=right><font size=-1><&|/l&>Open</&></font></th> + <th class="collection-as-table" align=left><&|/l&>Queue</&></th> + <th class="collection-as-table" align=right><&|/l&>New</&></th> + <th class="collection-as-table" align=right><&|/l&>Open</&></th> </tr> <%PERL> my $i; while (my $queue = $Queues->Next) { - $Tickets->ClearRestrictions; - $Tickets->LimitStatus(VALUE => "open"); - $Tickets->LimitQueue(VALUE => $queue->Name, OPERATOR => '='); - my $open = $Tickets->Count(); + 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')"; + + $Tickets->FromSQL($open_q); + my $open = $Tickets->Count(); - $Tickets->ClearRestrictions; - $Tickets->LimitStatus(VALUE => "new"); - $Tickets->LimitQueue(VALUE => $queue->Name, OPERATOR => '='); - my $new = $Tickets->Count(); + $Tickets->FromSQL($new_q); + my $new = $Tickets->Count(); + $i++; </%PERL> -% $i++; <TR class="<% $i%2 ? 'oddline' : 'evenline'%>" > -<td><A HREF="<% $RT::WebPath%>/Search/Listing.html?ValueOfStatus=open&ValueOfStatus=new&StatusOp=%3D&QueueOp=%3D&ValueOfQueue=<%$queue->Id%>&RowsPerPage=50&NewSearch=1" TITLE="<% $queue->Description %>"><%$queue->Name%></a></TD> -<td align="right"><A HREF="<% $RT::WebPath%>/Search/Listing.html?ValueOfStatus=new&StatusOp=%3D&QueueOp=%3D&ValueOfQueue=<%$queue->Id%>&RowsPerPage=50&NewSearch=1"><%$new%></a></TD> -<td align="right"><A HREF="<% $RT::WebPath%>/Search/Listing.html?ValueOfStatus=open&StatusOp=%3D&QueueOp=%3D&ValueOfQueue=<%$queue->Id%>&RowsPerPage=50&NewSearch=1"><%$open%></a></TD> +<td><A HREF="<% $RT::WebPath%>/Search/Results.html?Query=<%$all_q |nu%>&Rows=50" TITLE="<% $queue->Description %>"><%$queue->Name%></a></TD> +<td align="right"><A HREF="<% $RT::WebPath%>/Search/Results.html?Query=<%$new_q |nu%>&Rows=50"><%$new%></a></TD> +<td align="right"><A HREF="<% $RT::WebPath%>/Search/Results.html?Query=<%$open_q |nu%>&Rows=50"><%$open%></a></TD> </TR> % } </TABLE> diff --git a/rt/html/Elements/RT__Ticket/ColumnMap b/rt/html/Elements/RT__Ticket/ColumnMap new file mode 100644 index 000000000..dade91494 --- /dev/null +++ b/rt/html/Elements/RT__Ticket/ColumnMap @@ -0,0 +1,300 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%ARGS> +$Name => undef +$Attr => undef +</%ARGS> + + +<%ONCE> +our ( $COLUMN_MAP ); + +sub ColumnMap { + my $name = shift; + my $attr = shift; + + # First deal with the simple things from the map + if ( $COLUMN_MAP->{$name} ) { + return ( $COLUMN_MAP->{$name}->{$attr} ); + } + + # now, let's deal with harder things, like Custom Fields + + elsif ( $name =~ /^(?:CF|CustomField)\.\{(.+)\}$/ ) { + my $field = $1; + + if ( $attr eq 'attribute' ) { + return (undef); + } + elsif ( $attr eq 'title' ) { + return ( $field ); + } + elsif ( $attr eq 'value' ) { + # Display custom field contents, separated by newlines. + # For Image custom fields we also show a thumbnail here. + return sub { + my $values = $_[0]->CustomFieldValues($field); + return map { + ( + ($_->CustomFieldObj->Type eq 'Image') + ? \($m->scomp( '/Elements/ShowCustomFieldImage', Object => $_ )) + : $_->Content + ), + \'<br>', + } @{ $values->ItemsArrayRef } + }; + } + } +} + +sub LinkCallback { + my $method = shift; + + my $mode = $RT::Ticket::LINKTYPEMAP{$method}{Mode}; + my $type = $RT::Ticket::LINKTYPEMAP{$method}{Type}; + my $mode_uri = $mode.'URI'; + my $local_type = 'Local'.$mode; + + return sub { + map { + \'<A HREF="', + $_->$mode_uri->Resolver->HREF, + \'">', + ( $_->$mode_uri->IsLocal ? $_->$local_type : $_->$mode ), + \'</A><BR>', + } @{ $_[0]->Links($mode,$type)->ItemsArrayRef } + } +} + +$COLUMN_MAP = { + QueueName => { + attribute => 'Queue', + title => 'Queue', + value => sub { return $_[0]->QueueObj->Name } + }, + OwnerName => { + title => 'Owner', + attribute => 'Owner', + value => sub { return $_[0]->OwnerObj->Name } + }, + id => { + attribute => 'id', + align => 'right', + value => sub { return $_[0]->id } + }, + Status => { + attribute => 'Status', + value => sub { return loc($_[0]->Status) } + }, + Subject => { + attribute => 'Subject', + value => sub { return $_[0]->Subject || "(" . loc('No subject') . ")" } + }, + ExtendedStatus => { + title => 'Status', + attribute => 'Status', + value => sub { + my $Ticket = shift; + + if ( $Ticket->HasUnresolvedDependencies ) { + if ( $Ticket->HasUnresolvedDependencies( Type => 'approval' ) + or $Ticket->HasUnresolvedDependencies( Type => 'code' ) ) + { + return \'<em>', loc('(pending approval)'), \'</em>'; + } + else { + return \'<em>', loc('(pending other Collection)'), \'</em>'; + } + } + else { + return loc( $Ticket->Status ); + } + + } + }, + Priority => { + attribute => 'Priority', + value => sub { return $_[0]->Priority } + }, + InitialPriority => { + attribute => 'InitialPriority', + name => 'Initial Priority', + value => sub { return $_[0]->InitialPriority } + }, + FinalPriority => { + attribute => 'FinalPriority', + name => 'Final Priority', + value => sub { return $_[0]->FinalPriority } + }, + EffectiveId => { + attribute => 'EffectiveId', + value => sub { return $_[0]->EffectiveId } + }, + Type => { + attribute => 'Type', + value => sub { return $_[0]->Type } + }, + TimeWorked => { + attribute => 'TimeWorked', + title => 'Time Worked', + value => sub { return $_[0]->TimeWorked } + }, + TimeLeft => { + attribute => 'TimeLeft', + title => 'Time Left', + value => sub { return $_[0]->TimeLeft } + }, + TimeEstimated => { + attribute => 'TimeEstimated', + title => 'Time Estimated', + value => sub { return $_[0]->TimeEstimated } + }, + Requestors => { + value => sub { return $_[0]->Requestors->MemberEmailAddressesAsString } + }, + Cc => { + value => sub { return $_[0]->Cc->MemberEmailAddressesAsString } + }, + AdminCc => { + value => sub { return $_[0]->AdminCc->MemberEmailAddressesAsString } + }, + StartsRelative => { + title => 'Starts', + attribute => 'Starts', + value => sub { return $_[0]->StartsObj->AgeAsString } + }, + StartedRelative => { + title => 'Started', + attribute => 'Started', + value => sub { return $_[0]->StartedObj->AgeAsString } + }, + CreatedRelative => { + title => 'Created', + attribute => 'Created', + value => sub { return $_[0]->CreatedObj->AgeAsString } + }, + LastUpdatedRelative => { + title => 'Last Updated', + attribute => 'LastUpdated', + value => sub { return $_[0]->LastUpdatedObj->AgeAsString } + }, + ToldRelative => { + title => 'Told', + attribute => 'Told', + value => sub { return $_[0]->ToldObj->AgeAsString } + }, + DueRelative => { + title => 'Due', + attribute => 'Due', + value => sub { + my $date = $_[0]->DueObj; + if ($date && $date->Unix > 0 && $date->Unix < time()) { + return (\'<span class="overdue">' , $date->AgeAsString , \'</span>'); + } else { + return $date->AgeAsString; + } + } + }, + ResolvedRelative => { + title => 'Resolved', + attribute => 'Resolved', + value => sub { return $_[0]->ResolvedObj->AgeAsString } + }, + Starts => { + attribute => 'Starts', + value => sub { return $_[0]->StartsObj->AsString } + }, + Started => { + attribute => 'Started', + value => sub { return $_[0]->StartedObj->AsString } + }, + Created => { + attribute => 'Created', + value => sub { return $_[0]->CreatedObj->AsString } + }, + CreatedBy => { + attribute => 'CreatedBy', + title => 'Created By', + value => sub { return $_[0]->CreatorObj->Name } + }, + LastUpdated => { + attribute => 'LastUpdated', + title => 'Last Updated', + value => sub { return $_[0]->LastUpdatedObj->AsString } + }, + LastUpdatedBy => { + attribute => 'LastUpdatedBy', + title => 'Last Updated By', + value => sub { return $_[0]->LastUpdatedByObj->Name } + }, + Told => { + attribute => 'Told', + value => sub { return $_[0]->ToldObj->AsString } + }, + Due => { + attribute => 'Due', + value => sub { return $_[0]->DueObj->AsString } + }, + Resolved => { + attribute => 'Resolved', + value => sub { return $_[0]->ResolvedObj->AsString } + }, + + # Everything from LINKTYPEMAP + (map { + $_ => { value => LinkCallback( $_ ) } + } keys %RT::Ticket::LINKTYPEMAP), + + '_CLASS' => { + value => sub { return $_[1] % 2 ? 'oddline' : 'evenline' } + }, + +}; +</%ONCE> +<%init> +$m->comp( '/Elements/Callback', COLUMN_MAP => $COLUMN_MAP, _CallbackName => 'ColumnMap'); +return ColumnMap($Name, $Attr); +</%init> diff --git a/rt/html/Elements/Refresh b/rt/html/Elements/Refresh index 2b5376fee..9f241d279 100644 --- a/rt/html/Elements/Refresh +++ b/rt/html/Elements/Refresh @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME="<%$Name%>"> <OPTION VALUE="-1" %unless ($Default) { @@ -29,7 +51,7 @@ ><&|/l&>Don't refresh this page.</&></OPTION> %foreach my $value (@refreshevery) { <OPTION VALUE="<%$value%>" -% if ($value == $Default) { +% if ( $Default && ($value == $Default)) { SELECTED % } ><&|/l, $value/60 &>Refresh this page every [_1] minutes.</&></OPTION> diff --git a/rt/html/Elements/ScrubHTML b/rt/html/Elements/ScrubHTML new file mode 100644 index 000000000..94a729907 --- /dev/null +++ b/rt/html/Elements/ScrubHTML @@ -0,0 +1,71 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%init> +my $scrubber = HTML::Scrubber->new(); + +$scrubber->default( + 0, + { + '*' => 0, + id => 1, + class => 1, + href => qr{^(?:http:|ftp:|https:|/)}i, + # Match http, ftp and relative urls + face => 1, + size => 1, + target => 1 + } +); + +$scrubber->deny(qw[*]); +$scrubber->allow( + qw[A B U P BR I HR BR SMALL EM FONT SPAN DIV UL OL LI DL DT DD]); +$scrubber->comment(0); +return ( $scrubber->scrub($Content) ); +</%init> +<%args> +$Content => undef +</%args> diff --git a/rt/html/Elements/Section b/rt/html/Elements/Section index 691235846..afbb9cf38 100644 --- a/rt/html/Elements/Section +++ b/rt/html/Elements/Section @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <TABLE WIDTH=100%> <TR> <TD> diff --git a/rt/html/Elements/SelectAttachmentField b/rt/html/Elements/SelectAttachmentField index 47bc53211..ea1528c03 100644 --- a/rt/html/Elements/SelectAttachmentField +++ b/rt/html/Elements/SelectAttachmentField @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,17 +20,34 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME="<%$Name%>"> -<OPTION VALUE="Content"><&|/l&>content</&></OPTION> -<OPTION VALUE="ContentType"><&|/l&>content-type</&></OPTION> -<OPTION VALUE="Filename"><&|/l&>filename</&></OPTION> +<OPTION VALUE="Subject"><&|/l&>Subject</&></OPTION> +<OPTION VALUE="Content"><&|/l&>Content</&></OPTION> +<OPTION VALUE="ContentType"><&|/l&>Content-Type</&></OPTION> +<OPTION VALUE="Filename"><&|/l&>Filename</&></OPTION> </SELECT> <%ARGS> $Name => 'AttachmentField' diff --git a/rt/html/Elements/SelectBoolean b/rt/html/Elements/SelectBoolean index 8cf60dc33..a3f08fdbc 100644 --- a/rt/html/Elements/SelectBoolean +++ b/rt/html/Elements/SelectBoolean @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> <OPTION VALUE="<%$TrueVal%>" <%$TrueDefault%>><%$True%></OPTION> <OPTION VALUE="<%$FalseVal%>" <%$FalseDefault%>><%$False%></OPTION> diff --git a/rt/html/Elements/SelectCustomFieldOperator b/rt/html/Elements/SelectCustomFieldOperator index e886cbe37..8f7ea618b 100644 --- a/rt/html/Elements/SelectCustomFieldOperator +++ b/rt/html/Elements/SelectCustomFieldOperator @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> % while (my $option = shift @Options) { % my $value = shift @Values; diff --git a/rt/html/Elements/SelectCustomFieldValue b/rt/html/Elements/SelectCustomFieldValue index 60f65bcf2..27d6c4995 100644 --- a/rt/html/Elements/SelectCustomFieldValue +++ b/rt/html/Elements/SelectCustomFieldValue @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,19 +20,35 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Callback, %ARGS &> % if ($CustomField->Type =~ /Select/i) { % my $values = $CustomField->Values; <select name="<%$Name%>"> <option value="" SELECTED>-</option> -<option value="null"><&|/l&>(no value)</&></option> +<option value="NULL"><&|/l&>(no value)</&></option> % while (my $value = $values->Next) { <option value="<%$value->Name%>"><%$value->Name%></option> % } diff --git a/rt/html/Elements/SelectDate b/rt/html/Elements/SelectDate index 5f169fc0a..d3815798b 100644 --- a/rt/html/Elements/SelectDate +++ b/rt/html/Elements/SelectDate @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<INPUT NAME="<%$Name%>" VALUE="<%$Default%>" size=16> +%# END BPS TAGGED BLOCK }}} +<INPUT NAME="<%$Name%>" VALUE="<%$Default%>" size=<%$Size%>> <%init> unless ((defined $Default) or @@ -45,4 +67,5 @@ $menu_prefix=>'' $current=>time $Default => undef $Name => undef +$Size => 16 </%args> diff --git a/rt/html/Elements/SelectDateRelation b/rt/html/Elements/SelectDateRelation index ee26efeaa..ccf0c1121 100644 --- a/rt/html/Elements/SelectDateRelation +++ b/rt/html/Elements/SelectDateRelation @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> <OPTION VALUE="<"><%$Before%></OPTION> <OPTION VALUE="="><%$On%></OPTION> diff --git a/rt/html/Elements/SelectDateType b/rt/html/Elements/SelectDateType index afb9a70e9..7b3f0990f 100644 --- a/rt/html/Elements/SelectDateType +++ b/rt/html/Elements/SelectDateType @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME="<%$Name%>"> <OPTION VALUE="Created"><&|/l&>Created</&></OPTION> <OPTION VALUE="Started"><&|/l&>Started</&></OPTION> diff --git a/rt/html/Elements/SelectEqualityOperator b/rt/html/Elements/SelectEqualityOperator index 99c60d554..0f8deea89 100644 --- a/rt/html/Elements/SelectEqualityOperator +++ b/rt/html/Elements/SelectEqualityOperator @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> % while (my $option = shift @Options) { % my $value = shift @Values; @@ -36,5 +58,5 @@ SELECTED $Name => undef @Options => (loc('less than'), loc('equal to'), loc('greater than'), loc('not equal to')) @Values => qw(< = > !=) -$Default => undef +$Default =>'' </%ARGS> diff --git a/rt/html/Elements/SelectGroups b/rt/html/Elements/SelectGroups index 8f33c1eb3..bc37fd69a 100644 --- a/rt/html/Elements/SelectGroups +++ b/rt/html/Elements/SelectGroups @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,16 +20,41 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <select name="GroupField"> -<option value="Name"><&|/l&>Name</&> -<option value="Description"><&|/l&>Description</&> +% foreach my $col (RT::Group->BasicColumns) { +<option value="<% $col->[0] %>"><% loc($col->[1]) %> +% } +% while (my $CF = $CFs->Next) { +<option value="CustomField-<% $CF->Id %>"><&|/l&>CustomField</&>: <% $CF->Name %> +% } </select> <& /Elements/SelectMatch, Name=> 'GroupOp' &> <input size=8 name="GroupString"> +<%INIT> +my $CFs = RT::CustomFields->new($session{'CurrentUser'}); +$CFs->LimitToChildType('RT::Group'); +$CFs->OrderBy( FIELD => 'Name' ); +</%INIT> diff --git a/rt/html/Elements/SelectLang b/rt/html/Elements/SelectLang new file mode 100644 index 000000000..a439ea330 --- /dev/null +++ b/rt/html/Elements/SelectLang @@ -0,0 +1,78 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<SELECT NAME ="<%$Name%>"> +% if ($ShowNullOption) { +<OPTION VALUE="">-</OPTION> +% } +% foreach my $lang (@lang) { +<OPTION VALUE="<%$lang%>" <%($Default && ($lang eq $Default)) && 'SELECTED'%>><% $lang_to_desc{$lang} %> +% if (($Verbose) and (my $description = I18N::LangTags::List::native_name($lang)) ){ +(<%$description%>) +% } +</OPTION> +% } +</SELECT> +<%ARGS> +$ShowNullOption => 1 +$ShowAllQueues => 1 +$Name => undef +$Verbose => undef +$Default => 0 +$Lite => 0 +</%ARGS> + +<%ONCE> +use I18N::LangTags::List; +my (@lang, %lang_to_desc); +foreach my $lang (map { s/:://; s/_/-/g; $_ } grep { /^\w+::$/ } keys %RT::I18N::) { + next if $lang =~ /i-default|en-us/; + my $desc = I18N::LangTags::List::name($lang); + next unless ($desc); + $desc =~ s/(.*) (.*)/$2 ($1)/; + $lang_to_desc{$lang} = $desc; +} +@lang = sort { $lang_to_desc{$a} cmp $lang_to_desc{$b} } keys %lang_to_desc; +</%ONCE> diff --git a/rt/html/Elements/SelectLinkType b/rt/html/Elements/SelectLinkType index 9ebefda14..28cb4419a 100644 --- a/rt/html/Elements/SelectLinkType +++ b/rt/html/Elements/SelectLinkType @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> <OPTION VALUE="MemberOf"><&|/l&>Member of</&></OPTION> <OPTION VALUE="DependsOn"><&|/l&>Depends on</&></OPTION> diff --git a/rt/html/Elements/SelectMatch b/rt/html/Elements/SelectMatch index d58a9633a..60949d979 100644 --- a/rt/html/Elements/SelectMatch +++ b/rt/html/Elements/SelectMatch @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> <OPTION VALUE="LIKE" <%$LikeDefault%>><%$Like%></OPTION> <OPTION VALUE="NOT LIKE" <%$NotLikeDefault%>><%$NotLike%></OPTION> @@ -37,14 +59,19 @@ $False => loc("isn't") $Default => undef </%ARGS> <%INIT> -my ($TrueDefault, $FalseDefault, $LikeDefault, $NotLikeDefault); -if ($Default && $Default !~ /true/i) { + +my $TrueDefault = ''; +my $FalseDefault=''; +my $LikeDefault=''; +my $NotLikeDefault =''; + +if ($Default && $Default =~ /false/i) { $FalseDefault = "SELECTED"; } -elsif ($Default && $Default !~ /false/i) { +elsif ($Default && $Default =~ /true/i) { $TrueDefault = "SELECTED"; } -elsif ($Default && $Default !~ /notlike/i) { +elsif ($Default && $Default =~ /notlike/i) { $NotLikeDefault = "SELECTED"; } else { diff --git a/rt/html/Elements/SelectNewTicketQueue b/rt/html/Elements/SelectNewTicketQueue index a629b7bca..d47b58a83 100644 --- a/rt/html/Elements/SelectNewTicketQueue +++ b/rt/html/Elements/SelectNewTicketQueue @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,17 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <LABEL ACCESSKEY="9"> <SELECT NAME ="<%$Name%>"> % foreach my $queue (@{$session{'create_in_queues'}}) { -<OPTION VALUE="<%$queue->{'id'}%>" <%($Default && ($queue->{'id'} == $Default)) && 'SELECTED'%>><%$queue->{'Name'}%> +<OPTION + VALUE="<%$queue->{'id'}%>" + <%$Default && ($queue->{'id'} == $Default) && 'SELECTED'%>> +<%$queue->{'Name'}%> % if (($Verbose) and ($queue->{'Description'}) ){ (<%$queue->{'Description'}%>) % } @@ -51,6 +76,6 @@ while (my $queue=$q->Next) { <%ARGS> $Name => 'Queue' -$Verbose => undef -$Default => undef +$Verbose => 0 +$Default => 0 </%ARGS> diff --git a/rt/html/Elements/SelectOwner b/rt/html/Elements/SelectOwner index 04b078d20..85843e5f0 100644 --- a/rt/html/Elements/SelectOwner +++ b/rt/html/Elements/SelectOwner @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,46 +20,89 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME="<%$Name%>"> -<OPTION VALUE="">-</OPTION> -<OPTION <% ($RT::Nobody->Id() == $Default) && "SELECTED" %> VALUE="<%$RT::Nobody->Id%>"><%$RT::Nobody->Name%></OPTION> -%while ( my $User = $Users->Next()) { -<OPTION VALUE="<%$User->Id()%>" <% ($User->Id() == $Default) && "SELECTED" %>><%$User->Name()%></OPTION> +%if ($DefaultValue) { +<OPTION <% !$Default ? "SELECTED" : '' %> VALUE=""><%$DefaultLabel%></OPTION> +%} +%foreach my $User ( @users) { +<OPTION <% ($User->Id == $Default) ? "SELECTED" : ''%> +%if ($ValueAttribute eq 'id') { + value="<%$User->id%>" +%} elsif ($ValueAttribute eq 'Name') { + value="<%$User->Name%>" +%} +><%$User->Name()%></OPTION> %} </SELECT> - <%INIT> -my $Users = RT::Users->new($session{CurrentUser}); -my $object; - +my @objects; +my @users; if ($TicketObj) { - $object = $TicketObj; + @objects = ($TicketObj); } elsif ($QueueObj) { - $object = $QueueObj; + @objects = ($QueueObj); +} +elsif ($cfqueues) { + @objects = keys %{$cfqueues}; } -if ($object) { - $Users->WhoHaveRight(Right => 'OwnTicket', - Object => $object, - IncludeSystemRights => 1, - IncludeSuperusers => 1); -} else { - $Users->LimitToPrivileged; +else { + # Let's check rights on an empty queue object. that will do a search for any queue. + my $queue = RT::Queue->new($session{'CurrentUser'}); + push( @objects, $queue ); } + +my %user_uniq_hash; + + +foreach my $object (@objects) { + my $Users = RT::Users->new($session{CurrentUser}); + $Users->WhoHaveRight(Right => 'OwnTicket', Object => $object, IncludeSystemRights => 1, IncludeSuperusers => 0); + while (my $User = $Users->Next()) { + next if ($User->id == $RT::Nobody->id); # skip nobody here, so we can make them first later + $user_uniq_hash{$User->Id()} = $User; + } +} + +@users = sort { uc($a->Name) cmp uc($b->Name) } values %user_uniq_hash; +unshift(@users, $RT::Nobody); + + + </%INIT> <%ARGS> $QueueObj => undef $Name => undef -$Default => undef +$Default => 0 $User => undef $TicketObj => undef +$DefaultValue => 1 +$DefaultLabel => "-" +$ValueAttribute => 'id' +$cfqueues => undef </%ARGS> diff --git a/rt/html/Elements/SelectQueue b/rt/html/Elements/SelectQueue index c45b9b532..56aede89f 100644 --- a/rt/html/Elements/SelectQueue +++ b/rt/html/Elements/SelectQueue @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,32 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} % if ($Lite) { +% my $d = new RT::Queue($session{'CurrentUser'}); +% $d->Load($Default); <INPUT NAME="<%$Name%>" size=25 DEFAULT="<%$d->Name%>"> % } else { <SELECT NAME ="<%$Name%>"> @@ -29,8 +53,8 @@ <OPTION VALUE="">-</OPTION> % } % while (my $queue=$q->Next) { -% if ($ShowAllQueues || $queue->CurrentUserHasRight('CreateTicket')) { -<OPTION VALUE="<%$queue->Id%>" <%($Default && ($queue->Id == $Default)) && 'SELECTED'%>><%$queue->Name%> +% if ($ShowAllQueues || $queue->CurrentUserHasRight($CheckQueueRight)) { +<OPTION VALUE="<%($NamedValues ? $queue->Name : $queue->Id) %>" <%( $queue->Id eq $Default ? 'SELECTED' : '')%>><%$queue->Name%> % if (($Verbose) and ($queue->Description) ){ (<%$queue->Description%>) % } @@ -40,10 +64,12 @@ </SELECT> % } <%ARGS> +$CheckQueueRight => 'CreateTicket' $ShowNullOption => 1 $ShowAllQueues => 1 $Name => undef $Verbose => undef +$NamedValues => 0 $Default => 0 $Lite => 0 </%ARGS> @@ -53,7 +79,4 @@ $Lite => 0 my $q=new RT::Queues($session{'CurrentUser'}); $q->UnLimit; -my $d = new RT::Queue($session{'CurrentUser'}); -$d->Load($Default); - </%INIT> diff --git a/rt/html/Elements/SelectResultsPerPage b/rt/html/Elements/SelectResultsPerPage index 1bde71306..65ed536d6 100644 --- a/rt/html/Elements/SelectResultsPerPage +++ b/rt/html/Elements/SelectResultsPerPage @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} %# TODO: Better default handling <SELECT NAME ="<%$Name%>"> diff --git a/rt/html/Elements/SelectSortOrder b/rt/html/Elements/SelectSortOrder index 0ad999a7a..f6dd70ded 100644 --- a/rt/html/Elements/SelectSortOrder +++ b/rt/html/Elements/SelectSortOrder @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME="<%$Name%>"> %foreach my $order (@orders) { <OPTION VALUE="<%$order%>" <%$order eq $Default && 'SELECTED' %>> diff --git a/rt/html/Elements/SelectStatus b/rt/html/Elements/SelectStatus index 2c1ffad39..fa76a3e5d 100644 --- a/rt/html/Elements/SelectStatus +++ b/rt/html/Elements/SelectStatus @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,17 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> -<OPTION VALUE="">-</OPTION> +%if ($DefaultValue) { +<OPTION <% !$Default && "SELECTED" %> VALUE=""><%$DefaultLabel%></OPTION> +%} %foreach my $status (@status) { -<OPTION VALUE="<%$status%>" <%($Default eq $status) && 'SELECTED'%>><%loc($status)%></OPTION> +%next if ($SkipDeleted && $status eq 'deleted'); +<OPTION <% ($status eq $Default) && "SELECTED" %> VALUE="<%$status%>"><%loc($status)%></OPTION> % } </SELECT> <%ONCE> @@ -33,5 +58,8 @@ my @status = $queue->StatusArray(); </%ONCE> <%ARGS> $Name => undef -$Default => undef +$Default => '' +$SkipDeleted => 0 +$DefaultValue => 1 +$DefaultLabel => "-" </%ARGS> diff --git a/rt/html/Elements/SelectTicketSortBy b/rt/html/Elements/SelectTicketSortBy index 1d0b3942a..3e05dcce9 100644 --- a/rt/html/Elements/SelectTicketSortBy +++ b/rt/html/Elements/SelectTicketSortBy @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME="<%$Name%>"> % foreach my $field (@sortfields) { <OPTION VALUE="<%$field%>" <% $field eq $Default && 'SELECTED'%>><% loc($field) %></OPTION> diff --git a/rt/html/Elements/SelectTicketTypes b/rt/html/Elements/SelectTicketTypes index 80aecac67..a905f6067 100644 --- a/rt/html/Elements/SelectTicketTypes +++ b/rt/html/Elements/SelectTicketTypes @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME="<%$Name%>"> %foreach (@Types) { <OPTION VALUE="<% $_ %>" <% ($_ eq $Default) && "SELECTED" %>><&|/l&><% $_ %></&> diff --git a/rt/html/Elements/SelectUsers b/rt/html/Elements/SelectUsers index 7ed3835b6..dfe816e49 100644 --- a/rt/html/Elements/SelectUsers +++ b/rt/html/Elements/SelectUsers @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,18 +20,41 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <select name="UserField"> -<option value="Name"><&|/l&>User Id</&> -<option value="EmailAddress"><&|/l&>Email</&> -<option value="RealName"><&|/l&>Name</&> -<option value="Organization"><&|/l&>Organization</&> +% foreach my $col (RT::User->BasicColumns) { +<option value="<% $col->[0] %>"><% loc($col->[1]) %> +% } +% while (my $CF = $CFs->Next) { +<option value="CustomField-<% $CF->Id %>"><&|/l&>CustomField</&>: <% $CF->Name %> +% } </select> <& /Elements/SelectMatch, Name=> 'UserOp' &> <input size=8 name="UserString"> +<%INIT> +my $CFs = RT::CustomFields->new($session{'CurrentUser'}); +$CFs->LimitToChildType('RT::User'); +$CFs->OrderBy( FIELD => 'Name' ); +</%INIT> diff --git a/rt/html/Elements/SelectWatcherType b/rt/html/Elements/SelectWatcherType index 26de8f7b9..6ba9c7aa0 100644 --- a/rt/html/Elements/SelectWatcherType +++ b/rt/html/Elements/SelectWatcherType @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,15 +20,33 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <SELECT NAME ="<%$Name%>"> +% if ($AllowNull) { <OPTION VALUE="">-</OPTION> +% } %for my $option (@types) { <OPTION VALUE="<%$option%>" <%$option eq $Default && "SELECTED"%>><%loc($option)%></OPTION> %} @@ -38,6 +62,7 @@ else { } </%INIT> <%ARGS> +$AllowNull => 1 $Default=>undef $Scope => 'ticket' $Name => 'WatcherType' diff --git a/rt/html/Elements/SetupSessionCookie b/rt/html/Elements/SetupSessionCookie index 4d728ce70..bd7861355 100644 --- a/rt/html/Elements/SetupSessionCookie +++ b/rt/html/Elements/SetupSessionCookie @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,26 +20,49 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <%init> +return if $m->is_subrequest; # avoid reentrancy, as suggested by masonbook + my %cookies = CGI::Cookie->fetch(); +my $cookiename = "RT_SID_".$RT::rtname.".".$ENV{'SERVER_PORT'}; my %backends = ( mysql => 'Apache::Session::MySQL', Pg => 'Apache::Session::Postgres', - Oracle => 'Apache::Session::Oracle', +# Oracle => 'Apache::Session::Oracle', ) unless $RT::WebSessionClass; my $session_class = $RT::WebSessionClass || $backends{$RT::DatabaseType} || 'Apache::Session::File'; my $pm = "$session_class.pm"; $pm =~ s|::|/|g; require $pm; + # morning bug avoidance attempt -- pdh 20030815 + unless ($RT::Handle->dbh && $RT::Handle->dbh->ping) { + $RT::Handle->Connect(); + } eval { tie %session, $session_class, - $SessionCookie || ( $cookies{'RT_SID'} ? $cookies{'RT_SID'}->value() : undef ), + $SessionCookie || ( $cookies{$cookiename} ? $cookies{$cookiename}->value() : undef ), $backends{$RT::DatabaseType} ? { Handle => $RT::Handle->dbh, LockHandle => $RT::Handle->dbh, @@ -46,30 +75,38 @@ my $pm = "$session_class.pm"; $pm =~ s|::|/|g; require $pm; # If the session is invalid, create a new session. if ( $@ =~ /Object does not/i ) { - tie %session, $session_class, undef, - $backends{$RT::DatabaseType} ? { + tie %session, $session_class, undef, $backends{$RT::DatabaseType} + ? { Handle => $RT::Handle->dbh, LockHandle => $RT::Handle->dbh, - } : { + } + : { Directory => $RT::MasonSessionDir, LockDirectory => $RT::MasonSessionDir, }; - undef $cookies{'RT_SID'}; + undef $cookies{$cookiename}; } else { - die "RT Couldn't write to session directory '$RT::MasonSessionDir': $@. Check that this dir ectory's permissions are correct."; + die loc("RT couldn't store your session.") . "\n" + . loc( +"This may mean that that the directory '[_1]' isn't writable or a database table is missing or corrupt.", + $RT::MasonSessionDir + ) + . "\n\n" + . $@; } } - if ( !$cookies{'RT_SID'} ) { + if ( !$cookies{$cookiename} ) { my $cookie = new CGI::Cookie( - -name => 'RT_SID', + -name => $cookiename, -value => $session{_session_id}, -path => '/', ); - $r->header_out('Set-Cookie', $cookie->as_string); + $r->headers_out->{'Set-Cookie'} = $cookie->as_string; } + return(); </%init> <%args> diff --git a/rt/html/Elements/ShadedBox b/rt/html/Elements/ShadedBox deleted file mode 100644 index 36b9cae7c..000000000 --- a/rt/html/Elements/ShadedBox +++ /dev/null @@ -1,33 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<table> - <tr> - <td class="label"><%$title |n %>:</td> - <td class="value"><%$content |n %></td> - </tr> -</table> -<%ARGS> -$title => undef -$content => " " -</%ARGS> diff --git a/rt/html/Elements/ShadedInputRow b/rt/html/Elements/ShadedInputRow deleted file mode 100644 index e9fb69e5f..000000000 --- a/rt/html/Elements/ShadedInputRow +++ /dev/null @@ -1,35 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<tr> - <td class="label"><%$title |n %>:</td> - <td class="value"> - <input name=<%$name%> value="<%$content|h%>" SIZE=<%$size%>> - </td> -</tr> -<%ARGS> -$title => undef -$content => " " -$name => undef -$size => undef -</%ARGS> diff --git a/rt/html/Elements/ShadedRow b/rt/html/Elements/ShadedRow deleted file mode 100644 index 8947fcd82..000000000 --- a/rt/html/Elements/ShadedRow +++ /dev/null @@ -1,31 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<tr> - <td class="label"><%$title |n %>:</td> - <td class="value"><%$content |n %></td> -</tr> -<%ARGS> -$title => undef -$content => " " -</%ARGS> diff --git a/rt/html/Elements/ShowCustomFieldBinary b/rt/html/Elements/ShowCustomFieldBinary new file mode 100644 index 000000000..ea9e5ae83 --- /dev/null +++ b/rt/html/Elements/ShowCustomFieldBinary @@ -0,0 +1,49 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<a href="<%$RT::WebPath%>/Download/CustomFieldValue/<% $Object->Id %>/<% $Object->Content %>"><% $Object->Content %></a> +<%ARGS> +$Object => undef +</%ARGS> diff --git a/rt/html/Elements/ShowCustomFieldImage b/rt/html/Elements/ShowCustomFieldImage new file mode 100644 index 000000000..7fa5e46d1 --- /dev/null +++ b/rt/html/Elements/ShowCustomFieldImage @@ -0,0 +1,51 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% my $url = $RT::WebPath . "/Download/CustomFieldValue/".$Object->Id.'/'.$Object->Content; +<a href="<% $url %>"><% $Object->Content %></a> +<img type="<% $Object->ContentType %>" height=64 src="<% $url %>" align="middle"> +<%ARGS> +$Object +</%ARGS> diff --git a/rt/html/Elements/ShowCustomFieldWikitext b/rt/html/Elements/ShowCustomFieldWikitext new file mode 100644 index 000000000..ab7c27b8b --- /dev/null +++ b/rt/html/Elements/ShowCustomFieldWikitext @@ -0,0 +1,55 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% my $content = $Object->LargeContent || $Object->Content; +% $content = $m->comp('/Elements/ScrubHTML', Content => $content); +% my $wiki_content = Text::WikiFormat::format( $content."\n" , {}, { extended => 1, absolute_links => 1 }); +<%$wiki_content|n%> +<%init> +use Text::WikiFormat; +</%init> +<%ARGS> +$Object +</%ARGS> diff --git a/rt/html/Elements/ShowCustomFields b/rt/html/Elements/ShowCustomFields new file mode 100644 index 000000000..7591fa3aa --- /dev/null +++ b/rt/html/Elements/ShowCustomFields @@ -0,0 +1,77 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<table> +% my @entry_fields; +% while (my $CustomField = $CustomFields->Next()) { +% my $Values = $Object->CustomFieldValues($CustomField->Id); + <tr> + <td class="label"><%$CustomField->Name%>:</td> + <td class="value"> +<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> +% } +</ul> + </td> + </tr> +% } +</table> +<%INIT> +my $CustomFields = $Object->CustomFields; +</%INIT> +<%ARGS> +$Object => undef +</%ARGS> diff --git a/rt/html/Elements/ShowLink b/rt/html/Elements/ShowLink new file mode 100644 index 000000000..5929a968e --- /dev/null +++ b/rt/html/Elements/ShowLink @@ -0,0 +1,62 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<A href="<%$URI->Resolver->HREF%>"> +% if ($URI->IsLocal) { +% my $member = $URI->Object; +% if (UNIVERSAL::isa($member, "RT::Ticket")) { +<%$member->Id%>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<% loc($member->Status) %>] +% } elsif ( UNIVERSAL::can($member, 'Name')) { +<%$URI->Resolver->AsString%>: <%$member->Name%> +% } else { +<%$URI->Resolver->AsString%> +% } +% } else { +<%$URI->Resolver->AsString%> +% } +</a> +<%ARGS> +$URI => undef +</%ARGS> diff --git a/rt/html/Ticket/Elements/ShowLinks b/rt/html/Elements/ShowLinks index f88a6008d..c9279a5db 100644..100755 --- a/rt/html/Ticket/Elements/ShowLinks +++ b/rt/html/Elements/ShowLinks @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <table> <tr> <td class="labeltop"><&|/l&>Depends on</&>:</td> diff --git a/rt/html/Elements/ShowMemberships b/rt/html/Elements/ShowMemberships new file mode 100644 index 000000000..3936d5080 --- /dev/null +++ b/rt/html/Elements/ShowMemberships @@ -0,0 +1,86 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<ul> +% while ( my $GroupMember = $GroupMembers->Next ) { +% my $Group = RT::Group->new($session{'CurrentUser'}); +% $Group->Load($GroupMember->GroupId) or next; +% if ($Group->Domain eq 'UserDefined') { +<li><a href="<%$RT::WebPath%>/Admin/Groups/Modify.html?id=<% $Group->Id %>"><% $Group->Name %></a></li> +% } elsif ($Group->Domain eq 'SystemInternal') { +<li><em><% loc($Group->Type) %></em></li> +% } +% } +</ul> +<%INIT> +my $GroupMembers = RT::GroupMembers->new($session{'CurrentUser'}); +$GroupMembers->Limit( FIELD => 'MemberId', VALUE => $UserObj->Id ); +my $alias = $GroupMembers->Join( + TYPE => 'left', + ALIAS1 => 'main', + FIELD1 => 'GroupId', + TABLE2 => 'Groups', + FIELD2 => 'id' +); +$GroupMembers->Limit( + ALIAS => $alias, + FIELD => 'Domain', + OPERATOR => '=', + VALUE => 'SystemInternal', +); +$GroupMembers->Limit( + ALIAS => $alias, + FIELD => 'Domain', + OPERATOR => '=', + VALUE => 'UserDefined', +); +$GroupMembers->OrderByCols( + { ALIAS => $alias, FIELD => 'Domain' }, + { ALIAS => $alias, FIELD => 'Name' }, +); +</%INIT> +<%ARGS> +$UserObj +</%ARGS> diff --git a/rt/html/Elements/SimpleSearch b/rt/html/Elements/SimpleSearch index 69541f801..e9fc5c6ed 100644 --- a/rt/html/Elements/SimpleSearch +++ b/rt/html/Elements/SimpleSearch @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,37 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<form action="<% $RT::WebPath %>/index.html"> -<input size="12" name="q" accesskey="0"> -<input type="submit" value="<&|/l&>Search</&>"> +%# END BPS TAGGED BLOCK }}} +<form action="<% $RT::WebPath %>/index.html" STYLE="margin:0"> +<SCRIPT TYPE="text/javascript"> + function clearhint_search_ticket (what) { + if ( what.value == '(ticket # or subject string)' ) + what.value = ''; + } +</SCRIPT> +<input name="q" accesskey="0" VALUE="(ticket # or subject string)" onFocus="clearhint_search_ticket(this);" onClick="clearhint_search_ticket(this);" STYLE="text-align:right; font-family: Arial, Verdana, Helvetica, sans-serif;"><BR> +<A HREF="<% $RT::WebPath %>/Search/Build.html" STYLE="color: #ffffff; font-size: 70%; font-weight:normal">Advanced</A> +<input type="submit" value="<&|/l&>Search tickets</&>" CLASS="fsblackbutton" onMouseOver="this.className='fsblackbuttonselected'; return true;" onMouseOut="this.className='fsblackbutton'; return true;" STYLE="font-size:70%;padding-left:2px;padding-right:2px"> </form> diff --git a/rt/html/Elements/Submit b/rt/html/Elements/Submit index 2c35ca0f4..9d8dca20f 100644 --- a/rt/html/Elements/Submit +++ b/rt/html/Elements/Submit @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,22 +20,55 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% if ($CheckAll or $ClearAll) { +<script><!-- +function set_checkbox (obj, val) { + var i; + var myfield = obj.form.getElementsByTagName('input'); + for (i = 0; i < myfield.length; i++) { + if (myfield[i].type == 'checkbox') { + myfield[i].checked = val; + } + } +} +--></script> +% } <TABLE WIDTH=100% BGCOLOR="<%$color%>" CELLSPACING=0 BORDER=0 CELLPADDING=0 > <TR> -% if ($Reset) { <TD> -<FONT COLOR=#ffd800 > +% if ($CheckAll) { +<INPUT TYPE=BUTTON VALUE="<%$CheckAllLabel%>" ONCLICK="set_checkbox(this, true)"> +% } +% if ($ClearAll) { +<INPUT TYPE=BUTTON VALUE="<%$ClearAllLabel%>" ONCLICK="set_checkbox(this, false)"> +% } +% if ($Reset) { <INPUT TYPE=RESET VALUE="<%$ResetLabel%>"> -</FONT> -</TD> %} +</TD> <TD> </TD> @@ -52,11 +91,15 @@ NAME="<%$Name%>" </TABLE> <%ARGS> $color => "#336699" -$Caption => undef +$Caption => '' $AlternateCaption => undef $AlternateLabel => undef $Label => loc('Submit') $Name => undef +$CheckAll => undef +$CheckAllLabel => loc('Check All') +$ClearAll => undef +$ClearAllLabel => loc('Clear All') $Reset => undef $ResetLabel => loc('Reset') </%ARGS> diff --git a/rt/html/Elements/Tabs b/rt/html/Elements/Tabs index 4db3849c6..721f920d5 100644 --- a/rt/html/Elements/Tabs +++ b/rt/html/Elements/Tabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/PageLayout, current_toptab => $current_toptab, current_tab => $current_tab, @@ -35,34 +57,60 @@ <%INIT> my $action; my $basetopactions = { - A => { html => $m->scomp('/Elements/CreateTicket') +# A => { html => $m->scomp('/Elements/CreateTicket') +# }, + A => { html => $m->scomp('/Elements/FreesideNewCust') + }, + B => { html => $m->scomp('/Elements/FreesideSearch') + }, + C => { html => $m->scomp('/Elements/FreesideInvoiceSearch') + }, + D => { html => $m->scomp('/Elements/FreesideSvcSearch') }, - B => { html => $m->scomp('/Elements/SimpleSearch') + E => { html => $m->scomp('/Elements/SimpleSearch') } }; -my $basetabs = { A => { title => loc('Homepage'), +my $basetabs = { + ' A'=> { title => 'Billing Main', + path => &RT::URI::freeside::FreesideURL(), + }, + A => { #title => loc('Homepage'), + title => 'Ticketing Main', path => '', }, B => { title => loc('Tickets'), - path => 'Search/Listing.html' + path => 'Search/Build.html' }, - E => { title => loc('Configuration'), - path => 'Admin/' + C => { title => loc('Tools'), + path => 'Tools/Offline.html' }, - K => { title => loc('Preferences'), - path => 'User/Prefs.html' - }, P => { title => loc('Approval'), path => 'Approvals/' }, }; +if ($session{'CurrentUser'}->HasRight( Right => 'ShowConfigTab', + Object => $RT::System )) { + $basetabs->{E} = { title => loc('Configuration'), + path => 'Admin/', + }; +} + +if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf', + Object => $RT::System )) { + $basetabs->{K} = { title => loc('Preferences'), + path => 'User/Prefs.html' + }; +} + if (!defined $toptabs) { $toptabs = $basetabs; } if (!defined $topactions) { $topactions = $basetopactions; } + + require RT::URI::freeside; # Now let callbacks add their extra tabs $m->comp('/Elements/Callback', diff --git a/rt/html/Elements/TicketList b/rt/html/Elements/TicketList new file mode 100644 index 000000000..1a531274f --- /dev/null +++ b/rt/html/Elements/TicketList @@ -0,0 +1,154 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<TABLE BORDER=0 cellspacing=0 cellpadding=1 WIDTH=100%> + +% if ($ShowHeader) { +<& /Elements/CollectionAsTable/Header, + Format => \@Format, + FormatString => $Format, + AllowSorting => $AllowSorting, + Order => $Order, + Query => $Query, + Rows => $Rows, + Page => $Page, + OrderBy => $OrderBy , + BaseURL => $BaseURL, + maxitems => $maxitems &> +% } + +% my $i; +% while (my $record = $Collection->Next) { +% $i++; +% # Every ten rows, flush the buffer and put something on the page. +% $m->flush_buffer() unless ($i % 10); +<& /Elements/CollectionAsTable/Row, Format => \@Format, i => $i, record => $record, maxitems => $maxitems &> +% } + +</TABLE> + +% if ($Rows && $ShowNavigation) { +<hr> +% my $oddRows; +% if (($TotalFound % $Rows) == 0) { +% $oddRows = 0; +% } else { $oddRows = 1; } +<&|/l, $Page, int($TotalFound/$Rows)+$oddRows&>Page [_1] of [_2]</&> + +<%perl> +my $prev = $m->comp( + '/Elements/QueryString', + Query => $Query, + Format => $Format, + Rows => $Rows, + OrderBy => $OrderBy, + Order => $Order, + Page => ( $Page - 1 ) +); +my $next = $m->comp( + '/Elements/QueryString', + Query => $Query, + Format => $Format, + Rows => $Rows, + OrderBy => $OrderBy, + Order => $Order, + Page => ( $Page + 1 ) +); +</%perl> +% if ($Page > 1) { +<A href="<%$BaseURL%><%$prev%>"><&|/l&>Previous Page</&></a> +% } +% if (($Page * $Rows) < $TotalFound) { +<A href="<%$BaseURL%><%$next%>"><&|/l&>Next Page</&></a> +% } +% } +<%INIT> +my $maxitems = 0; + +$Format ||= $RT::DefaultSearchResultFormat; +# Scrub the html of the format string to remove any potential nasties. +$Format = $m->comp('/Elements/ScrubHTML', Content => $Format); + + +unless ($Collection) { + $Collection = RT::Tickets->new($session{'CurrentUser'}); + $Collection->FromSQL($Query); +} + +my (@Format) = $m->comp('/Elements/CollectionAsTable/ParseFormat', Format => $Format); + +# Find the maximum number of items in any row, so we can pad the table. +my $item = 0; +foreach my $col (@Format) { + $item++; + if ( $col->{title} eq 'NEWLINE' ) { + $item = 0; + } + else { + $maxitems = $item if $item > $maxitems; + } +} + + +$Collection->OrderBy(FIELD => $OrderBy, ORDER => $Order); +$Collection->RowsPerPage($Rows) if ($Rows); +$Collection->GotoPage($Page-1); # SB uses page 0 as the first page +my $TotalFound = $Collection->CountAll(); + +</%INIT> +<%ARGS> +$Query => undef +$Rows => 50 +$Page => 1 +$Title => 'Ticket Search' +$Collection => undef +$AllowSorting => undef +$Order => undef +$OrderBy => undef +$BaseURL => undef +$Format => $RT::DefaultSearchResultFormat +$ShowNavigation => 1 +$ShowHeader => 1 +</%ARGS> diff --git a/rt/html/Elements/TitleBox b/rt/html/Elements/TitleBox new file mode 100644 index 000000000..3c638e2d3 --- /dev/null +++ b/rt/html/Elements/TitleBox @@ -0,0 +1,46 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& TitleBoxStart, %ARGS&><%$m->content|n%><& TitleBoxEnd&> diff --git a/rt/html/Elements/TitleBoxEnd b/rt/html/Elements/TitleBoxEnd index 37f374466..d791e3a4f 100644 --- a/rt/html/Elements/TitleBoxEnd +++ b/rt/html/Elements/TitleBoxEnd @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,16 +20,35 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} </TD> </TR> </TABLE> +% #Manually flush the content buffer after each titlebox is displayed +% $m->flush_buffer(); + <%ARGS> $title => undef $content => undef diff --git a/rt/html/Elements/TitleBoxStart b/rt/html/Elements/TitleBoxStart index 02c76a75e..d98fe2744 100644 --- a/rt/html/Elements/TitleBoxStart +++ b/rt/html/Elements/TitleBoxStart @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK -<TABLE CLASS="<%$class|n%>" +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<TABLE CLASS="box <%$class|n%>" BGCOLOR="<%$color%>" CELLSPACING=0 BORDER=0 @@ -32,9 +54,10 @@ <TH <%$color && "style=\"color: $color;\""|n%> <%$class ? "class=\"$class\"" : "class=\"titlebox\""|n%>> + <span class="titleboxclose"> + <a href="#" onClick="hideshow('<%$id%>')">X</A></span> <span class="titleboxtitle"> - <b> - <% $title_href && "<A CLASS=\"$title_class\" HREF=\"$title_href\">"|n%><%$title |n %><% $title_href && "</A>" |n%></b> + <b><% $title_href && "<A $title_class HREF=\"$title_href\">"|n%><%$title |n %><% $title_href && "</A>" |n%></b> </span> </TH> <TH @@ -43,18 +66,23 @@ <span class="titleboxright"><%$titleright ? $titleright : ' ' |n %></span> </TH> </TR> - <tr> - <td bgcolor="<%$contentbg%>" colspan="2" class="<%defined($bodyclass) ? $bodyclass : $class|n%>"> + <tr id="element-<%$id%>"> + <td bgcolor="<%$contentbg%>" colspan="3" class="<%defined($bodyclass) ? $bodyclass : $class|n%>"> <%ARGS> $width => "100%" $class => undef $bodyclass => undef $title_href => undef $title => undef -$title_class => undef +$title_class => '' $titleright_href => undef $titleright => undef -$contentbg => "#dddddd" +$contentbg => "#d4d4d4" $color => "#336699" </%ARGS> +<%init> +my $id = rand(2000); + +$title_class = "CLASS=\"$title_class\"" if $title_class; +</%init> diff --git a/rt/html/Elements/ViewUser b/rt/html/Elements/ViewUser deleted file mode 100644 index 657272496..000000000 --- a/rt/html/Elements/ViewUser +++ /dev/null @@ -1,51 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Elements/TitleBoxStart, - title => "<a class='inverse' href=\"$RT::WebPath/Search/Listing.html?LimitRequestorById=1&IdOfRequestor=".$User->id."\">".loc("Tickets from [_1]", $name)."</a>", - titleright=> "<a class='inverse' href=\"$RT::WebPath/EditUserComments.html?id=".$User->id."\">".loc("Comments about [_1]", $name)."</a>" &> -<TABLE WIDTH="100%"> -<tr> -<td halign=left valign=top> -%while (my $w=$tickets->Next) { -<%$w->Id%>: <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$w->id%>"><%$w->Subject%></a> (<%$w->Status%>)<BR> -%} -</td> -<td align=right valign=top> - <% ($User->Comments || loc("No comment entered about this user")) %> -</tr> -</table> -<& /Elements/TitleBoxEnd &> - -<%ARGS> -$User=>undef -</%ARGS> - -<%INIT> -my $name=$User->RealName || $User->EmailAddress; - -my $tickets = new RT::Tickets($session{'CurrentUser'}); -$tickets->LimitWatcher(TYPE => 'Requestor', VALUE => $User->EmailAddress); - - -</%INIT> diff --git a/rt/html/NoAuth/Logout.html b/rt/html/NoAuth/Logout.html index a4bb99772..b6a238bac 100644 --- a/rt/html/NoAuth/Logout.html +++ b/rt/html/NoAuth/Logout.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <HTML> <HEAD> <TITLE>RT: Logout</TITLE> diff --git a/rt/html/NoAuth/Reminder.html b/rt/html/NoAuth/Reminder.html index 35da66e61..0793f6c96 100644 --- a/rt/html/NoAuth/Reminder.html +++ b/rt/html/NoAuth/Reminder.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, title => loc('Password Reminder') &> <&|/l&>Not yet implemented.</&> diff --git a/rt/html/NoAuth/images/autohandler b/rt/html/NoAuth/images/autohandler new file mode 100644 index 000000000..2e428c157 --- /dev/null +++ b/rt/html/NoAuth/images/autohandler @@ -0,0 +1,24 @@ +<%init> + +# This autohandler will spit out RT's images if the user hasn't +# properly configured their webserver to stop RT from passing +# images through the mason handler. + +my $file = $m->base_comp->source_file; +my $type = "application/octet-stream"; + +if ($file =~ /\.(gif|png|jpe?g)$/i) { + $type = "image/$1"; + $type =~ s/jpg/jpeg/gi; +} + +die unless (-f $file && -r $file); +$r->content_type($type); +open (FILE, "<$file") || die; +{ + local $/ = \16384; + $m->out($_) while (<FILE>); + close(FILE); +} +$m->abort; +</%init> diff --git a/rt/html/NoAuth/images/back_home.gif b/rt/html/NoAuth/images/back_home.gif Binary files differdeleted file mode 100644 index 40b19c153..000000000 --- a/rt/html/NoAuth/images/back_home.gif +++ /dev/null diff --git a/rt/html/NoAuth/images/head_requestracker.gif b/rt/html/NoAuth/images/head_requestracker.gif Binary files differdeleted file mode 100644 index 73315e918..000000000 --- a/rt/html/NoAuth/images/head_requestracker.gif +++ /dev/null diff --git a/rt/html/NoAuth/images/rt.jpg b/rt/html/NoAuth/images/rt.jpg Binary files differdeleted file mode 100644 index a137a932b..000000000 --- a/rt/html/NoAuth/images/rt.jpg +++ /dev/null diff --git a/rt/html/NoAuth/images/small-logo.png b/rt/html/NoAuth/images/small-logo.png Binary files differnew file mode 100644 index 000000000..1e415e6d8 --- /dev/null +++ b/rt/html/NoAuth/images/small-logo.png diff --git a/rt/html/NoAuth/images/spacer.gif b/rt/html/NoAuth/images/spacer.gif Binary files differdeleted file mode 100644 index 5bfd67a2d..000000000 --- a/rt/html/NoAuth/images/spacer.gif +++ /dev/null diff --git a/rt/html/NoAuth/images/squares_blue.gif b/rt/html/NoAuth/images/squares_blue.gif Binary files differdeleted file mode 100644 index a28da5ce1..000000000 --- a/rt/html/NoAuth/images/squares_blue.gif +++ /dev/null diff --git a/rt/html/NoAuth/webrt.css b/rt/html/NoAuth/webrt.css index 62c6d66ba..5c241f93f 100644 --- a/rt/html/NoAuth/webrt.css +++ b/rt/html/NoAuth/webrt.css @@ -1,8 +1,15 @@ -%# BEGIN LICENSE BLOCK +/* +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,56 +21,289 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK -SPAN.nav { font-family: Verdana, Arial, Helvetica, sans-serif; +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +*/ + +/* * { + font-family: Arial, Verdana, Helvetica, sans-serif; + font-size: 1.2em; +} */ + +SPAN.nav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 12px; color: #FFFFFF; text-decoration: none; white-space: nowrap} .nav2 { font-size: 10px; white-space: nowrap} -.nav { font-family: Verdana, Arial, Helvetica, sans-serif; +.nav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 13px; - font-weight: normal; + font-weight: bold; color: #FFFFFF; text-decoration: none; white-space: nowrap} -.currentnav { font-family: Verdana, Arial, Helvetica, sans-serif; +.currentnav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 13px; font-weight: bold; color: #FFFF66; text-decoration: none; white-space: nowrap} -.topnav { font-family: Verdana, Arial, Helvetica, sans-serif; +.topnav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 16px; font-weight: normal; color: #FFFFFF; text-decoration: none; white-space: nowrap} -.currenttopnav { font-family: Verdana, Arial, Helvetica, sans-serif; + +/* +%# .topnav is the original RT class for the sidebar navigation tabs. +%# Font-sizing by level depth was originally hard-coded into Elements/Menu. +%# This modification sets a different class name for each level, allowing +%# style sheet control over the formats. +*/ + +a.topnav-0 { font-family: Verdana, sans-serif; + font-size: 16px; + font-weight: normal; + color: #FFFFFF; + text-decoration: none; + white-space: nowrap} +a.topnav-1 { font-family: Verdana, sans-serif; + font-size: 14px; + font-weight: normal; + color: #FFFFFF; + text-decoration: none; + white-space: nowrap} +a.topnav-2 { font-family: Verdana, sans-serif; + font-size: 12px; + font-weight: normal; + color: #FFFFFF; + text-decoration: none; + white-space: nowrap} +a.topnav-3 { font-family: Verdana, sans-serif; + font-size: 11px; + font-weight: normal; + color: #FFFFFF; + text-decoration: none; + white-space: nowrap} +a.topnav-4 { font-family: Verdana, sans-serif; + font-size: 11px; + font-weight: normal; + color: #FFFFFF; + text-decoration: none; + white-space: nowrap} +a.topnav-5 { font-family: Verdana, sans-serif; + font-size: 11px; + font-weight: normal; + color: #FFFFFF; + text-decoration: none; + white-space: nowrap} +li.topnav-0-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.topnav-1-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.topnav-2-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.topnav-3-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.topnav-4-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.topnav-5-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.topnav-0-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.topnav-1-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.topnav-2-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.topnav-3-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.topnav-4-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.topnav-5-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} + +.currenttopnav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 16px; font-weight: bold; - color: #FFFF66; + color: #ffffff; background-color: #7e0079; + text-decoration: none; + white-space: nowrap} + +/* +%# .currenttopnav is the original RT class for the sidebar navigation tabs. +%# Font-sizing by level depth was originally hard-coded into Elements/Menu. +%# This modification sets a different class name for each level, allowing +%# style sheet control over the formats +*/ + +a.currenttopnav-0 { font-family: Verdana, sans-serif; + font-size: 16px; + font-weight: bold; + color: #ffffff; background-color: #7e0079; + text-decoration: none; + white-space: nowrap} +a.currenttopnav-1 { font-family: Verdana, sans-serif; + font-size: 14px; + font-weight: bold; + color: #ffffff; background-color: #7e0079; + text-decoration: none; + white-space: nowrap} +a.currenttopnav-2 { font-family: Verdana, sans-serif; + font-size: 12px; + font-weight: normal; + color: #ffffff; background-color: #7e0079; + text-decoration: none; + white-space: nowrap} +a.currenttopnav-3 { font-family: Verdana, sans-serif; + font-size: 11px; + font-weight: normal; + color: #ffffff; background-color: #7e0079; + text-decoration: none; + white-space: nowrap} +a.currenttopnav-4 { font-family: Verdana, sans-serif; + font-size: 11px; + font-weight: normal; + color: #ffffff; background-color: #7e0079; text-decoration: none; white-space: nowrap} -.topactions { font-family: Verdana, Arial, Helvetica, sans-serif; +a.currenttopnav-5 { font-family: Verdana, sans-serif; + font-size: 11px; + font-weight: normal; + color: #ffffff; background-color: #7e0079; + text-decoration: none; + white-space: nowrap} +li.currenttopnav-0-minor { + border-top: solid #999999 1px; + padding-top: .1em; + margin-top: .5em; +} +li.currenttopnav-1-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.currenttopnav-2-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.currenttopnav-3-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.currenttopnav-4-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.currenttopnav-5-minor { + border-top: solid #777777 1px; + padding-top: .1em; + margin-top: .5em; +} +li.currenttopnav-0-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.currenttopnav-1-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.currenttopnav-2-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.currenttopnav-3-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.currenttopnav-4-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} +li.currenttopnav-5-major { + border-bottom: solid black 1px; + padding-top: .25em; + padding-bottom: .5em; +} + +.topactions { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 10px; color: #FFFFFF; text-decoration: none; white-space: nowrap} -.subnav { font-family: Verdana, Arial, Helvetica, sans-serif; +.subnav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 11px; font-weight: normal; color: #FFFFFF; text-decoration: none; white-space: nowrap} -.currentsubnav { font-family: Verdana, Arial, Helvetica, sans-serif; +.currentsubnav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 11px; font-weight: bold; color: #FFFF66; @@ -79,52 +319,183 @@ SPAN.nav { font-family: Verdana, Arial, Helvetica, sans-serif; vertical-align: top; text-align: left; } -.blue { background-color: #4682B4; +.blue { + background-color: #4682B4; +/* %# background-color: #eeeeee; */ background-position: left top; vertical-align: top; text-align: left; } +/* %# Actually the "topactions" section */ .blueright { background-color: #4682B4; background-position: left top; vertical-align: top; text-align: right; + padding-right: 1em; } .olddarkblue { background-color: #003399; background-position: left top; vertical-align: top; text-align: left; } -.darkblue { background-color: #000080; +.darkblue { + background-color: #000080; background-position: left top; vertical-align: top; text-align: left; } -.darkblueright { background-color: #000080; +.darkblueright { + background-color: #000080; background-position: left top; vertical-align: top; text-align: right; } +.lightgray { + background-color: #eeeeee; + background-position: left top; + vertical-align: top; + text-align: left; + } +.lightgrayright { + background-color: #eeeeee; + background-position: left top; + vertical-align: top; + text-align: right; + } +.black { + background-color: #000000; + color: #ffffff; + background-position: left top; + vertical-align: top; + text-align: left; + } +.blackright { + background-color: #000000; + color: #ffffff; + background-position: left top; + vertical-align: center; + text-align: right; + font-size:16px; + padding-right:4px + } -td { font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; +input.fsblackbutton { + background-color:#333333; + color: #ffffff; + border:1px solid; + border-top-color:#cccccc; + border-left-color:#cccccc; + border-right-color:#aaaaaa; + border-bottom-color:#aaaaaa; + font-family: Arial, Verdana, Helvetica, sans-serif; + font-weight:bold; + padding-left:12px; + padding-right:12px; + overflow:visible; + filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#ff333333',EndColorStr='#ff666666') +} + +input.fsblackbuttonselected { + background-color:#7e0079; + color: #ffffff; + border:1px solid; + border-top-color:#cccccc; + border-left-color:#cccccc; + border-right-color:#aaaaaa; + border-bottom-color:#aaaaaa; + font-family: Arial, Verdana, Helvetica, sans-serif; + font-weight:bold; + padding-left:12px; + padding-right:12px; + overflow:visible; + filter:progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr='#ff330033',EndColorStr='#ff7e0079') +} + +.mediumgray { + background-color: #cccccc; + background-position: left top; + vertical-align: top; + text-align: left; + } +.mediumgrayright { + background-color: #cccccc; + background-position: left top; + vertical-align: top; + text-align: right; + } +.darkmediumgray { + background-color: #aaaaaa; + background-position: left top; + vertical-align: top; + text-align: left; + } +.darkmediumgrayright { + background-color: #aaaaaa; + background-position: left top; + vertical-align: top; + text-align: right; + } +.bggray { + background-color: #e8e8e8; + background-position: left top; + vertical-align: top; + text-align: left; + } +.bggrayright { + background-color: #e8e8e8; + background-position: left top; + vertical-align: top; + text-align: right; + } +.white { + background-color: #ffffff; + background-position: left top; + vertical-align: top; + text-align: left; + } +.whiteright { + background-color: #ffffff; + background-position: left top; + vertical-align: top; + text-align: right; + } +.overdue { + color: red; +} + +div.messagebody { + padding: 2em; + +} + + +div.downloadattachment { + font-size: 10px; + text-align: right; + +} + + +td { font-family: Arial, Verdana, Helvetica, sans-serif; + font-size: 12px; background-position: left top; } .black { background-color: #000000; background-position: left top; } -span.rtname { font-family: Verdana, Arial, Helvetica, sans-serif; +span.rtname { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 18px; font-weight: normal; color: #ffffff} -span.title { font-family: Verdana, Arial, Helvetica, sans-serif; +span.title { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 20px; font-weight: bold; color: #ffffff} -.header { font-family: Verdana, Arial, Helvetica, sans-serif; +.header { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 12px; font-weight: bold; color: #0066CC} -.subheader { font-family: Verdana, Arial, Helvetica, sans-serif; +.subheader { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 11px; font-weight: bold; color: #0066CC } @@ -135,9 +506,9 @@ span.title { font-family: Verdana, Arial, Helvetica, sans-serif; .labeltop { font-weight: normal; text-align: right; vertical-align: top } -.productnav { font-family: Verdana, Arial, Helvetica, sans-serif; +.productnav { font-family: Arial, Verdana, Helvetica, sans-serif; font-size: 11px; - color: #000000; + color: #FFFFFF; text-align: center; vertical-align: middle; text-decoration: none} @@ -155,10 +526,17 @@ UL.topnav LI :focus { text-decoration: underline; } TD.mainbody { padding-top: 0.5em; - padding-left: 0em; + padding-left: 1em; padding-right: 1em; margin-left: 1em; margin-right: 1em; + background-color: #e8e8e8; +} + +td.boxcontainer + td.boxcontainer { + margin-left: 1em; + padding-left: 1em; + border-collapse: collapse; } th.ticketheader { font-size: 80%; @@ -195,7 +573,7 @@ TD.titlebox { SPAN.message { font-size: 100%; - font-family: Verdana, Arial, Helvetica, sans-serif; + font-family: Arial, Verdana, Helvetica, sans-serif; } @@ -238,7 +616,7 @@ DIV.endmatter { margin-left: -7% } } -A { font-weight: bold; color: #000000; +A { font-weight: bold; color: #000000 } .currenttab { color: #ffffff;} @@ -252,8 +630,9 @@ A:link IMG, A:visited IMG { border-style: none } a:focus {text-decoration: underline } A IMG { color: white } /* The only way to hide the border in NS 4.x */ -a:link { text-decoration: none} -a:visited { text-decoration: none} +/* a:link { text-decoration: none} */ +/* a:visited { text-decoration: none} */ + a:hover { text-decoration: underline} /* a:focus { background-color: #ccccee } */ @@ -266,15 +645,23 @@ SPAN.date { font-size: 0.8em } span.title { font-size: 1.6em; vertical-align: middle; - color: #ffffff;} +/* %# color: #ffffff; */ + color: #000000; + } span.productname { font-size: 2em; color: #0066cc;} -SPAN.titleboxtitle { - font-size: 1.1em; +SPAN.titleboxtitle, SPAN.titleboxclose { + font-size: 80%; color: #ffffff; vertical-align: middle; text-align: left; } +SPAN.titleboxtitle a { + color: #ffffff; +} +SPAN.titleboxtitle a:after { + content: "..."; +} SPAN.titleboxright { font-size: 0.8em; @@ -290,32 +677,21 @@ SPAN.attribution { SPAN.label { font-size: 0.8em; } -BLOCKQUOTE { - font-style: italic; - /* color: #990; */ -} +DIV.page-stats { font-size: 0.8em; + color: #cccccc; + text-align: right; + } -ADDRESS { - text-align: right; - font-weight: bold; - font-style: italic -} -BLOCKQUOTE P { /* Try to avoid space above the attribution */ - margin-bottom: 0; -} -BLOCKQUOTE ADDRESS { - margin: 0; +BLOCKQUOTE { + font-style: italic; } - .emphasized { font-weight: bold } -P.map-also { font-style: italic; margin-left: 15%; text-align: right } - .oddline { background-color : #ccccee; } @@ -331,8 +707,53 @@ ul.topnav { margin-bottom:0; } +.menu-major-separator { + border-bottom: solid white 1px; + padding-top: .25em; + padding-bottom: .5em; +} + +.menu-minor-separator { + border-top: solid #999999 1px; + padding-top: .1em; + margin-top: .5em; +} + +TH.collection-as-table { text-align: center; + font-size: 0.8em; + padding-left: .5em; + padding-right: .5em; + color: #333333; + background-color: #cccccc; + white-space: nowrap; + } + +TD.collection-as-table { text-align: left; + padding-left: .5em; + padding-right: .5em; + } + +textarea.signature { + width: 100%; +} +textarea.comments { + width: 100%; +} + +textarea.messagebox { + width: 100%; +} +/* +%# Provide a callback for adding/modifying the style sheet. +%# http://www.w3.org/TR/REC-CSS1 - section 3.2, says: +%# "latter specified rule wins" +<& /Elements/Callback &> +<%flags> +inherit => undef +</%flags> <%init> $r->content_type('text/css'); -$r->header_out('Expires' ,'+30m'); +#$r->headers_out->{'Expires'} = '+30m'; </%init> +*/ diff --git a/rt/html/REST/1.0/Forms/queue/default b/rt/html/REST/1.0/Forms/queue/default new file mode 100644 index 000000000..c87c33cce --- /dev/null +++ b/rt/html/REST/1.0/Forms/queue/default @@ -0,0 +1,168 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/queue/default +%# +<%ARGS> +$id +$format => 's' +$changes => {} +</%ARGS> +<%perl> +my @comments; +my ($c, $o, $k, $e) = ("", [], {}, 0); +my %data = %$changes; +my $queue = new RT::Queue $session{CurrentUser}; +my @fields = qw(Name Description CorrespondAddress CommentAddress + InitialPriority FinalPriority DefaultDueIn); +my %fields = map { lc $_ => $_ } @fields; + +if ($id ne 'new') { + $queue->Load($id); + if (!$queue->Id) { + return [ "# Queue $id does not exist.", [], {}, 1 ]; + } +} +else { + if (%data == 0) { + return [ + "# Required: Name", + [ "id", @fields ], + { + id => 'queue/new', + Name => '<queue name>', + Description => "", + CommentAddress => "", + CorrespondAddress => "", + InitialPriority => "", + FinalPriority => "", + DefaultDueIn => "", + }, + 0 + ]; + } + else { + my %v; + my %create = %fields; + + foreach my $k (keys %data) { + if (exists $create{lc $k}) { + $v{$create{lc $k}} = delete $data{$k}; + } + } + + if ($v{Name} eq '<queue name>') { + my %o = keys %$changes; + delete @o{"id", @fields}; + return [ + "# Please set the queue name.", + [ "id", @fields, keys %o ], $changes, 1 + ]; + } + + $queue->Create(%v); + unless ($queue->Id) { + return [ "# Could not create queue.", [], {}, 1 ]; + } + + delete $data{id}; + $id = $queue->Id; + push(@comments, "# Queue $id created."); + goto DONE if %data == 0; + } +} + +if (%data == 0) { + my @data; + + push @data, [ id => "queue/".$queue->Id ]; + foreach my $key (@fields) { + push @data, [ $key => $queue->$key ]; + } + + my %k = map {@$_} @data; + $o = [ map {$_->[0]} @data ]; + $k = \%k; +} +else { + my ($get, $set, $key, $val, $n, $s); + + foreach $key (keys %data) { + $val = $data{$key}; + $key = lc $key; + $n = 1; + + if (exists $fields{$key}) { + $key = $fields{$key}; + $set = "Set$key"; + + next if $val eq $queue->$key; + ($n, $s) = $queue->$set($val); + } + elsif ($key ne 'id') { + $n = 0; + $s = "Unknown field."; + } + + SET: + if ($n == 0) { + $e = 1; + push @comments, "# $key: $s"; + unless (@$o) { + my %o = keys %$changes; + delete @o{"id", @fields}; + @$o = ("id", @fields, keys %o); + $k = $changes; + } + } + } + + push(@comments, "# Queue $id updated.") unless $n == 0; +} + +DONE: +$c ||= join("\n", @comments) if @comments; +return [ $c, $o, $k, $e ]; +</%perl> diff --git a/rt/html/REST/1.0/Forms/queue/ns b/rt/html/REST/1.0/Forms/queue/ns new file mode 100644 index 000000000..b0ba0036a --- /dev/null +++ b/rt/html/REST/1.0/Forms/queue/ns @@ -0,0 +1,60 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/queue/ns +%# +<%ARGS> +$id +</%ARGS> +<%perl> +use RT::Queues; + +my $queues = new RT::Queues $session{CurrentUser}; +$queues->Limit(FIELD => 'Name', OPERATOR => '=', VALUE => $id); +if ($queues->Count == 0) { + return (0, "No queue named $id exists."); +} +return $queues->Next->Id; +</%perl> diff --git a/rt/html/REST/1.0/Forms/ticket/attachments b/rt/html/REST/1.0/Forms/ticket/attachments new file mode 100644 index 000000000..ca75ce0d1 --- /dev/null +++ b/rt/html/REST/1.0/Forms/ticket/attachments @@ -0,0 +1,128 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/ticket/attachments +%# +<%ARGS> +$id +$args => undef +</%ARGS> +<%perl> +my @data; +my ($c, $o, $k, $e) = ("", [], {}, ""); +my $ticket = new RT::Ticket $session{CurrentUser}; + +$ticket->Load($id); +unless ($ticket->Id) { + return [ "# Ticket $id does not exist.", [], {}, 1 ]; +} + +my @arglist = split('/', $args); +my ($aid, $content); + +if ($arglist[1] eq 'content') { + $aid = $arglist[0]; + $content = 1; +} else { + $aid = $args; + $content = 0; +} + +if ($aid) { + unless ($aid =~ /^\d+$/) { + return [ "# Invalid attachment id: $aid", [], {}, 1 ]; + } + my $attachment = new RT::Attachment $session{CurrentUser}; + $attachment->Load($aid); + unless ($attachment->Id eq $aid) { + return [ "# Invalid attachment id: $aid", [], {}, 1 ]; + } + if ($content) { + $c = $attachment->OriginalContent; + } else { + my @data; + push @data, [ id => $attachment->Id ]; + push @data, [ Subject => $attachment->Subject ]; + push @data, [ Creator => $attachment->Creator ]; + push @data, [ Created => $attachment->Created ]; + push @data, [ Transaction => $attachment->TransactionId ]; + push @data, [ Parent => $attachment->Parent ]; + push @data, [ MessageId => $attachment->MessageId ]; + push @data, [ Filename => $attachment->Filename ]; + push @data, [ ContentType => $attachment->ContentType ]; + push @data, [ ContentEncoding => $attachment->ContentEncoding ]; + push @data, [ Headers => $attachment->Headers ]; + push @data, [ Content => $attachment->Content ]; + + my %k = map {@$_} @data; + $o = [ map {$_->[0]} @data ]; + $k = \%k; + } + +} +else { + my @attachments; + my $transactions = $ticket->Transactions; + while (my $t = $transactions->Next) { + my $attachments = $t->Attachments; + while (my $a = $attachments->Next) { + my $size = length($a->Content); + if ($size > 1024) { $size = int($size/102.4)/10 . "k" } + else { $size .= "b" } + push @attachments, $a->Id.": ".$a->Filename." (".$a->ContentType . " / ".$size.")"; + } + } + + if (@attachments) { + $o = [ "id", "Attachments" ]; + $k = { + id => "ticket/".$ticket->Id."/attachments", + Attachments => \@attachments + }; + } +} + +return [ $c, $o, $k, $e ]; +</%perl> diff --git a/rt/html/REST/1.0/Forms/ticket/default b/rt/html/REST/1.0/Forms/ticket/default new file mode 100644 index 000000000..78f6c9562 --- /dev/null +++ b/rt/html/REST/1.0/Forms/ticket/default @@ -0,0 +1,298 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/ticket/default +%# +<%ARGS> +$id +$changes => {} +$fields => undef +</%ARGS> +<%perl> +use MIME::Entity; + +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 @people = qw(Requestors Cc AdminCc); +my @create = qw(Queue Requestor Subject Cc AdminCc Owner Status Priority + InitialPriority FinalPriority TimeEstimated TimeWorked + TimeLeft Starts Started Due Resolved); +my @simple = qw(Subject Status Priority Disabled TimeEstimated TimeWorked + TimeLeft InitialPriority FinalPriority); +my %dates = map {lc $_ => $_} @dates; +my %people = map {lc $_ => $_} @people; +my %create = map {lc $_ => $_} @create; +my %simple = map {lc $_ => $_} @simple; + +# Are we dealing with an existing ticket? +if ($id ne 'new') { + $ticket->Load($id); + if (!$ticket->Id) { + return [ "# Ticket $id does not exist.", [], {}, 1 ]; + } + elsif (!$ticket->CurrentUserHasRight('ShowTicket') || + (%data && !$ticket->CurrentUserHasRight('ModifyTicket'))) + { + my $act = %data ? "modify" : "display"; + return [ "# You are not allowed to $act ticket $id.", [], {}, 1 ]; + } +} +else { + if (%data == 0) { + # GET ticket/new: Return a suitable default form. + # We get defaults from queue/1 (XXX: What if it isn't there?). + my $due = new RT::Date $session{CurrentUser}; + my $queue = new RT::Queue $session{CurrentUser}; + my $starts = new RT::Date $session{CurrentUser}; + $queue->Load(1); + $due->SetToNow; + $due->AddDays($queue->DefaultDueIn) if $queue->DefaultDueIn; + $starts->SetToNow; + + return [ + "# Required: Queue, Requestor, Subject", + [ qw(id Queue Requestor Subject Cc AdminCc Owner Status Priority + InitialPriority FinalPriority TimeEstimated Starts Due Text) ], + { + id => "ticket/new", + Queue => $queue->Name, + Requestor => $session{CurrentUser}->Name, + Subject => "", + Cc => [], + AdminCc => [], + Owner => "", + Status => "new", + Priority => $queue->InitialPriority, + InitialPriority => $queue->InitialPriority, + FinalPriority => $queue->FinalPriority, + TimeEstimated => 0, + Starts => $starts->ISO, + Due => $due->ISO, + Text => "", + }, + 0 + ]; + } + else { + # We'll create a new ticket, and fall through to set fields that + # can't be set in the call to Create(). + my (%v, $text); + + foreach my $k (keys %data) { + if (exists $create{lc $k}) { + $v{$create{lc $k}} = delete $data{$k}; + } + elsif (lc $k eq 'text') { + $text = delete $data{$k}; + } + } + + if ($text) { + $v{MIMEObj} = + MIME::Entity->build( + From => $session{CurrentUser}->EmailAddress, + Subject => $v{Subject}, + Data => $text + ); + } + + $ticket->Create(%v); + unless ($ticket->Id) { + return [ "# Could not create ticket.", [], {}, 1 ]; + } + + delete $data{id}; + $id = $ticket->Id; + push(@comments, "# Ticket $id created."); + goto DONE if %data == 0; + } +} + +# Now we know we're dealing with an existing ticket. +if (%data == 0) { + my ($time, $key, $val, @data); + + push @data, [ id => "ticket/".$ticket->Id ]; + push @data, [ Queue => $ticket->QueueObj->Name ] + if (!%$fields || exists $fields->{lc 'Queue'}); + push @data, [ Owner => $ticket->OwnerObj->Name ] + if (!%$fields || exists $fields->{lc 'Owner'}); + push @data, [ Creator => $ticket->CreatorObj->Name ] + if (!%$fields || exists $fields->{lc 'Creator'}); + + foreach (qw(Subject Status Priority InitialPriority FinalPriority)) { + next unless (!%$fields || (exists $fields->{lc $_})); + push @data, [$_ => $ticket->$_ ]; + } + + foreach $key (@people) { + next unless (!%$fields || (exists $fields->{lc $key})); + push @data, [ $key => [ $ticket->$key->MemberEmailAddresses ] ]; + } + + $time = new RT::Date ($session{CurrentUser}); + foreach $key (@dates) { + next unless (!%$fields || (exists $fields->{lc $key})); + $time->Set(Format => 'sql', Value => $ticket->$key); + push @data, [ $key => $time->AsString ]; + } + + $time = new RT::Date ($session{CurrentUser}); + foreach $key (qw(TimeEstimated TimeWorked TimeLeft)) { + next unless (!%$fields || (exists $fields->{lc $key})); + $val = $ticket->$key || 0; + $val = $time->DurationAsString($val*60) if $val; + push @data, [ $key => $val ]; + } + + my %k = map {@$_} @data; + $o = [ map {$_->[0]} @data ]; + $k = \%k; +} +else { + my ($get, $set, $key, $val, $n, $s); + + foreach $key (keys %data) { + $val = $data{$key}; + $key = lc $key; + $n = 1; + + if (ref $val eq 'ARRAY') { + unless ($key =~ /^(?:Requestors|Cc|AdminCc)$/i) { + $n = 0; + $s = "$key may have only one value."; + goto SET; + } + } + + if ($key =~ /^queue$/i) { + next if $val eq $ticket->QueueObj->Name; + ($n, $s) = $ticket->SetQueue($val); + } + elsif ($key =~ /^owner$/i) { + next if $val eq $ticket->OwnerObj->Name; + ($n, $s) = $ticket->SetOwner($val); + } + elsif (exists $simple{$key}) { + $key = $simple{$key}; + $set = "Set$key"; + + next if (($val eq $ticket->$key)|| ($ticket->$key =~ /^\d+$/ && $val == $ticket->$key)); + ($n, $s) = $ticket->$set("$val"); + } + elsif (exists $dates{$key}) { + $key = $dates{$key}; + $set = "Set$key"; + + my $time = new RT::Date $session{CurrentUser}; + $time->Set(Format => 'sql', Value => $ticket->$key); + next if ($val =~ /^not set$/i || $val eq $time->AsString); + ($n, $s) = $ticket->$set($val); + } + elsif (exists $people{$key}) { + $key = $people{$key}; + my ($p, @msgs); + + my %new = map {$_=>1} @{ vsplit($val) }; + my %old = map {$_=>1} $ticket->$key->MemberEmailAddresses; + my $type = $key eq 'Requestors' ? 'Requestor' : $key; + + foreach $p (keys %old) { + unless (exists $new{$p}) { + ($s, $n) = $ticket->DeleteWatcher(Type => $type, + Email => $p); + push @msgs, [ $s, $n ]; + } + } + foreach $p (keys %new) { + # XXX: This is a stupid test. + unless ($p =~ /^[\w.+-]+\@([\w.-]+\.)*\w+.?$/) { + $s = 0; + $n = "$p is not a valid email address."; + push @msgs, [ $s, $n ]; + next; + } + unless ($ticket->IsWatcher(Type => $type, Email => $p)) { + ($s, $n) = $ticket->AddWatcher(Type => $type, + Email => $p); + push @msgs, [ $s, $n ]; + } + } + + $n = 1; + if (@msgs = grep {$_->[0] == 0} @msgs) { + $n = 0; + $s = join "\n", map {"# ".$_->[1]} @msgs; + $s =~ s/^# //; + } + } + elsif ($key ne 'id' && $key ne 'type' && $key ne 'creator') { + $n = 0; + $s = "Unknown field."; + } + + SET: + if ($n == 0) { + $e = 1; + push @comments, "# $key: $s"; + unless (@$o) { + my %o = keys %$changes; + delete $o{id}; + @$o = ("id", keys %o); + $k = $changes; + } + } + } + push(@comments, "# Ticket ".$ticket->id." updated.") unless $n == 0; +} + +DONE: +$c ||= join("\n", @comments) if @comments; +return [$c, $o, $k, $e]; + +</%perl> diff --git a/rt/html/REST/1.0/Forms/ticket/history b/rt/html/REST/1.0/Forms/ticket/history new file mode 100644 index 000000000..4663e97ee --- /dev/null +++ b/rt/html/REST/1.0/Forms/ticket/history @@ -0,0 +1,187 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/ticket/history +%# +<%ARGS> +$id +$args => undef +$format => undef +$fields => undef +</%ARGS> +<%perl> +my $ticket = new RT::Ticket $session{CurrentUser}; +my ($c, $o, $k, $e) = ("", [], {}, ""); + +$ticket->Load($id); +unless ($ticket->Id) { + return [ "# Ticket $id does not exist.", [], {}, 1 ]; +} + +my $trans = $ticket->Transactions(); +my $total = $trans->Count(); + +chomp $args; +my @arglist = split('/', $args); +my ($type, $tid); + +if ($arglist[0] eq 'type') { + $type = $arglist[1]; +} elsif ($arglist[0] eq 'id') { + $tid = $arglist[1]; +} else { + $type = $args; +} + +if ($type) { + # Create, Set, Status, Correspond, Comment, Give, Steal, Take, Told + # CustomField, AddLink, DeleteLink, AddWatcher, DelWatcher + if ($args =~ /^links?$/) { + $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Link'); + } + elsif ($args =~ /^watchers?$/) { + $trans->Limit(FIELD => 'Type', OPERATOR => 'LIKE', VALUE => '%Watcher'); + } + else { + $trans->Limit(FIELD => 'Type', OPERATOR => '=', VALUE => $type); + } +} elsif ($tid) { + $trans->Limit(FIELD => 'Id', OPERATOR => '=', VALUE => $tid); +} + +if ($tid) { + my @data; + my $t = new RT::Transaction $session{CurrentUser}; + $t->Load($tid); + + push @data, [ id => $t->Id ]; + push @data, [ Ticket => $t->Ticket ] + if (!%$fields || exists $fields->{lc 'Ticket'}); + push @data, [ TimeTaken => $t->TimeTaken ] + if (!%$fields || exists $fields->{lc 'TimeTaken'}); + push @data, [ Type => $t->Type ] + if (!%$fields || exists $fields->{lc 'Type'}); + push @data, [ Field => $t->Field ] + if (!%$fields || exists $fields->{lc 'Field'}); + push @data, [ OldValue => $t->OldValue ] + if (!%$fields || exists $fields->{lc 'OldValue'}); + push @data, [ NewValue => $t->NewValue ] + if (!%$fields || exists $fields->{lc 'NewValue'}); + push @data, [ Data => $t->Data ] + if (!%$fields || exists $fields->{lc 'Data'}); + push @data, [ Description => $t->Description ] + if (!%$fields || exists $fields->{lc 'Description'}); + push @data, [ Content => $t->Content ] + if (!%$fields || exists $fields->{lc 'Content'}); + + + if (!%$fields || exists $fields->{lc 'Content'}) { + my $creator = new RT::User $session{CurrentUser}; + $creator->Load($t->Creator); + push @data, [ Creator => $creator->Name ]; + } + push @data, [ Created => $t->Created ] + if (!%$fields || exists $fields->{lc 'Created'}); + + if (!%$fields || exists $fields->{lc 'Attachments'}) { + my $attachlist; + my $attachments = $t->Attachments; + while (my $a = $attachments->Next) { + my $size = length($a->Content); + if ($size > 1024) { $size = int($size/102.4)/10 . "k" } + else { $size .= "b" } + $attachlist .= "\n" . $a->Id.": ".($a->Filename || "untitled")." (".$size.")"; + } + + push @data, [Attachments => $attachlist]; + } + + my %k = map {@$_} @data; + $o = [ map {$_->[0]} @data ]; + $k = \%k; + +} else { + my (@data, $tids); + $format ||= "s"; + $format = "l" if (%$fields); + + while (my $t = $trans->Next) { + my $tid = $t->Id; + + if ($format eq "l") { + $tids .= "," if $tids; + $tids .= $tid; + } else { + push @$o, $tid; + $k->{$tid} = $t->Description; + } + } + + if ($format eq "l") { + my @tid; + push @tid, "ticket/$id/history/id/$tids"; + my $fieldstring; + foreach my $key (keys %$fields) { + $fieldstring .= "," if $fieldstring; + $fieldstring .= $key; + } + my ($content, $forms); + + $m->subexec("$RT::WebPath/REST/1.0/show", + id => \@tid, + format => $format, + fields => $fieldstring); + return [ $c, $o, $k, $e ]; + } +} + +if (!$c) { + my $sub = $trans->Count(); + $c = "# $sub/$total ($args/total)"; +} + +return [ $c, $o, $k, $e ]; + +</%perl> diff --git a/rt/html/REST/1.0/Forms/ticket/links b/rt/html/REST/1.0/Forms/ticket/links new file mode 100644 index 000000000..9f14da4e3 --- /dev/null +++ b/rt/html/REST/1.0/Forms/ticket/links @@ -0,0 +1,170 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/ticket/links +%# +<%ARGS> +$id +$format => 's' +$changes => undef +</%ARGS> +<%perl> +my @data; +my $ticket = new RT::Ticket $session{CurrentUser}; + +$ticket->Load($id); +if (!$ticket->Id) { + return [ "# Ticket $id does not exist.", [], {}, 1 ]; +} + +my ($c, $o, $k, $e) = ("", [], {}, 0); +my @fields = qw(DependsOn DependedOnBy RefersTo ReferredToBy Members MemberOf); +my %fields = map { lc $_ => $_ } @fields; + +my %lfields = ( + Members => { Type => 'MemberOf', Mode => 'Base' }, + ReferredToBy => { Type => 'RefersTo', Mode => 'Base' }, + DependedOnBy => { Type => 'DependsOn', Mode => 'Base' }, + MemberOf => { Type => 'MemberOf', Mode => 'Target' }, + RefersTo => { Type => 'RefersTo', Mode => 'Target' }, + DependsOn => { Type => 'DependsOn', Mode => 'Target' }, +); + +if ($changes) { + my ($get, $set, $key, $val, $n, $s); + my %data = %$changes; + my @comments; + + foreach $key (keys %data) { + $val = $data{$key}; + $key = lc $key; + $n = 1; + + if (exists $fields{$key}) { + $key = $fields{$key}; + + my %old; + my $field = $lfields{$key}->{Mode}; + while (my $link = $ticket->$key->Next) { + $old{$link->$field} = 1; + } + + my %new; + foreach my $nkey (@{vsplit($val)}) { + if ($nkey =~ /^\d+$/) { + my $uri = new RT::URI $session{CurrentUser}; + my $tick = new RT::Ticket $session{CurrentUser}; + $tick->Load($nkey); + if ($tick->Id) { + $nkey = $uri->FromObject($tick); + } + else { + $n = 0; + $s = "Ticket $nkey does not exist."; + goto SET; + } + } + $new{$nkey} = 1; + } + + foreach my $u (keys %old) { + if (exists $new{$u}) { + delete $new{$u}; + } + else { + my $type = $lfields{$key}->{Type}; + my $mode = $lfields{$key}->{Mode}; + ($n, $s) = $ticket->DeleteLink(Type => $type, $mode => $u); + goto SET; + } + } + foreach my $u (keys %new) { + my $type = $lfields{$key}->{Type}; + my $mode = $lfields{$key}->{Mode}; + ($n, $s) = $ticket->AddLink(Type => $type, $mode => $u); + goto SET; + } + } + elsif ($key ne 'id' && $key ne 'type') { + $n = 0; + $s = "Unknown field: $key"; + } + + SET: + if ($n == 0) { + $e = 1; + push @comments, "# $key: $s"; + unless (@$o) { + @$o = ("id", @fields); + %$k = %data; + } + } + } + + push(@comments, "# Links for ticket $id updated.") unless @comments; + $c = join("\n", @comments) if @comments; +} +else { + my @data; + + push @data, [ id => "ticket/".$ticket->Id."/links" ]; + foreach my $key (@fields) { + my @val; + + my $field = $lfields{$key}->{Mode}; + while (my $link = $ticket->$key->Next) { + push @val, $link->$field; + } + push(@val, "") if (@val == 0 && $format eq 'l'); + push @data, [ $key => [ @val ] ] if @val; + } + + my %k = map {@$_} @data; + $o = [ map {$_->[0]} @data ]; + $k = \%k; +} + +return [ $c, $o, $k, $e ]; +</%perl> diff --git a/rt/html/REST/1.0/Forms/user/default b/rt/html/REST/1.0/Forms/user/default new file mode 100644 index 000000000..ad2ebd57a --- /dev/null +++ b/rt/html/REST/1.0/Forms/user/default @@ -0,0 +1,186 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/user/default +%# +<%ARGS> +$id +$format => 's' +$changes => {} +</%ARGS> +<%perl> +my @comments; +my ($c, $o, $k, $e) = ("", [], {}, 0); +my %data = %$changes; +my $user = new RT::User $session{CurrentUser}; +my @fields = qw(RealName NickName Gecos Organization Address1 Address2 City + State Zip Country HomePhone WorkPhone MobilePhone PagerPhone + FreeformContactInfo Comments Signature Lang EmailEncoding + WebEncoding ExternalContactInfoId ContactInfoSystem + ExternalAuthId AuthSystem); +my %fields = map { lc $_ => $_ } @fields; + +if ($id ne 'new') { + $user->Load($id); + if (!$user->Id) { + return [ "# User $id does not exist.", [], {}, 1 ]; + } +} +else { + if (%data == 0) { + return [ + "# Required: Name, EmailAddress", + [ qw(id Name EmailAddress Organization Password Comments) ], + { + id => "user/new", + Name => "", + EmailAddress => "", + Organization => "", + Password => "", + Comments => "" + }, + 0 + ]; + } + else { + my %v; + my %create = %fields; + $create{name} = "Name"; + $create{password} = "Password"; + $create{emailaddress} = "EmailAddress"; + $create{contactinfo} = "FreeformContactInfo"; + # Do any fields need to be excluded here? + + foreach my $k (keys %data) { + if (exists $create{lc $k}) { + $v{$create{lc $k}} = delete $data{$k}; + } + } + + $user->Create(%v); + unless ($user->Id) { + return [ "# Could not create user.", [], {}, 1 ]; + } + + $id = $user->Id; + delete $data{id}; + push(@comments, "# User $id created."); + goto DONE if %data == 0; + } +} + +if (%data == 0) { + my @data; + + push @data, [ id => "user/".$user->Id ]; + push @data, [ Name => $user->Name ]; + push @data, [ Password => '********' ]; + push @data, [ EmailAddress => $user->EmailAddress ]; + + foreach my $key (@fields) { + my $val = $user->$key; + + if ($format eq 'l' || (defined $val && $val ne '')) { + $key = "ContactInfo" if $key eq 'FreeformContactInfo'; + push @data, [ $key => $val ]; + } + } + + my %k = map {@$_} @data; + $o = [ map {$_->[0]} @data ]; + $k = \%k; +} +else { + my ($get, $set, $key, $val, $n, $s); + + foreach $key (keys %data) { + $val = $data{$key}; + $key = lc $key; + $n = 1; + + if ($key eq 'name' || $key eq 'emailaddress' || + $key eq 'contactinfo' || exists $fields{$key}) + { + if (exists $fields{$key}) { + $key = $fields{$key}; + } + else { + $key = "FreeformContactInfo" if $key eq 'contactinfo'; + $key = "EmailAddress" if $key eq 'emailaddress'; + $key = "Name" if $key eq 'name'; + } + $set = "Set$key"; + + next if $val eq $user->$key; + ($n, $s) = $user->$set($val); + } + elsif ($key eq 'password') { + ($n, $s) = $user->SetPassword($val) unless $val =~ /^\**$/; + } + elsif ($key ne 'id') { + $n = 0; + $s = "Unknown field."; + } + + SET: + if ($n == 0) { + $e = 1; + push @comments, "# $key: $s"; + unless (@$o) { + my %o = keys %$changes; + delete @o{"id", @fields}; + @$o = ("id", @fields, keys %o); + $k = $changes; + } + } + } + + push(@comments, "# User $id updated.") unless $n == 0; +} + +DONE: +$c ||= join("\n", @comments) if @comments; +return [ $c, $o, $k, $e ]; +</%perl> diff --git a/rt/html/REST/1.0/Forms/user/ns b/rt/html/REST/1.0/Forms/user/ns new file mode 100644 index 000000000..406156304 --- /dev/null +++ b/rt/html/REST/1.0/Forms/user/ns @@ -0,0 +1,63 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/Forms/user/ns +%# +<%ARGS> +$id +</%ARGS> +<%perl> +use RT::Users; + +my $field = "Name"; +$field = "EmailAddress" if $id =~ /\@/; + +my $users = new RT::Users $session{CurrentUser}; +$users->Limit(FIELD => $field, OPERATOR => '=', VALUE => $id); +if ($users->Count == 0) { + return (0, "No user named $id exists."); +} +return $users->Next->Id; +</%perl> diff --git a/rt/html/REST/1.0/NoAuth/mail-gateway b/rt/html/REST/1.0/NoAuth/mail-gateway index 8db80d5ff..5252c1968 100644 --- a/rt/html/REST/1.0/NoAuth/mail-gateway +++ b/rt/html/REST/1.0/NoAuth/mail-gateway @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,36 +20,58 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%flags> +inherit => undef # inhibit UTF8 conversion done in /autohandler +</%flags> <%ARGS> -$message $queue => 1 $action => "correspond" $ticket => undef </%ARGS> <%init> use RT::Interface::Email; -my ( $status, $error, $Ticket ) = RT::Interface::Email::Gateway( %ARGS); +$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); + } + +$m->abort(); </%init> -<%flags> -inherit => undef # inhibit UTF8 conversion done in /autohandler -</%flags> -% if ($status) { -ok -% if ( $Ticket->Id ) { -Ticket: <% $Ticket->Id %> -Queue: <% $Ticket->QueueObj->Name %> -Owner: <% $Ticket->OwnerObj->Name %> -Status: <% $Ticket->Status %> -Subject: <% $Ticket->Subject %> -Requestor: <% $Ticket->Requestors->MemberEmailAddressesAsString %> -% } -% } else { -not ok - <%$error%> -% } diff --git a/rt/html/REST/1.0/autohandler b/rt/html/REST/1.0/autohandler new file mode 100644 index 000000000..8e3fb164d --- /dev/null +++ b/rt/html/REST/1.0/autohandler @@ -0,0 +1,54 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/autohandler +%# +<%INIT> +use RT::Interface::REST; +$r->content_type('text/plain; charset=utf-8'); +$m->error_format('text'); +$m->call_next(); +$m->abort(); +</%INIT> diff --git a/rt/html/REST/1.0/dhandler b/rt/html/REST/1.0/dhandler new file mode 100644 index 000000000..6cf45b000 --- /dev/null +++ b/rt/html/REST/1.0/dhandler @@ -0,0 +1,309 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/dhandler +%# +<%ARGS> +@id => () +$fields => undef +$format => undef +$content => undef +</%ARGS> +<%INIT> +use RT::Interface::REST; + +my $output = ""; +my $status = "200 Ok"; +my $object = $m->dhandler_arg; + +my $name = qr{[\w.-]+}; +my $list = '(?:(?:\d+-)?\d+,)*(?:\d+-)?\d+'; +my $label = '[a-zA-Z0-9@_.+-]+'; +my $field = '[a-zA-Z][a-zA-Z0-9_-]*'; +my $labels = "(?:$label,)*$label"; + +# We must handle requests such as the following: +# +# 1. http://.../REST/1.0/show (with a list of object specifications). +# 2. http://.../REST/1.0/edit (with a self-contained list of forms). +# 3. http://.../REST/1.0/ticket/show (implicit type specification). +# http://.../REST/1.0/ticket/edit +# 4. http://.../REST/1.0/ticket/nn (all possibly with a single form). +# http://.../REST/1.0/ticket/nn/history +# http://.../REST/1.0/ticket/nn/attachment/1 +# +# Objects are specified by their type, and either a unique numeric ID, +# or a unique name (e.g. ticket/1, queue/foo). Multiple objects of the +# same type may be specified by a comma-separated list of identifiers +# (e.g., user/ams,rai or ticket/1-3,5-7). +# +# Ultimately, we want a list of object specifications to operate upon. +# The URLs in (4) provide enough information to identify an object. We +# will assemble submitted information into that format in other cases. +# +my (@objects, $forms); +my $utype; + +if ($object eq 'show' || # $REST/show + (($utype) = ($object =~ m{^($name)/show$}))) # $REST/ticket/show +{ + # We'll convert type/range specifications ("ticket/1-3,7-9/history") + # into a list of singular object specifications ("ticket/1/history"). + # If the URL specifies a type, we'll accept only that one. + foreach my $id (@id) { + $id =~ s|^(?:$utype/)?|$utype/| if $utype; + if (my ($type, $oids, $extra) = + ($id =~ m#^($name)/($list|$labels)(?:(/.*))?$#o)) + { + foreach my $oid (expand_list($oids)) { + if ($extra =~ m{^(?:/($name)(?:/(.*))?)?$}o) { + my ($attr, $args) = ($1, $2); + # expand transaction and attachment range specifications + # (if applicable) + my $tids; + if ($attr eq 'history' && $args =~ m#id/(\d.*)#o) { + $tids = $1; + } + if ($tids) { + push(@objects, "$type/$oid/$attr/id/$_") for expand_list($tids); + } else { + push(@objects, "$type/$oid$extra"); + } + } + } + } + else { + $status = "400 Bad Request"; + $output = "Invalid object ID specified: '$id'"; + goto OUTPUT; + } + } +} +elsif ($object eq 'edit' || # $REST/edit + (($utype) = ($object =~ m{^($name)/edit$}))) # $REST/ticket/edit +{ + # We'll make sure each of the submitted forms is syntactically valid + # and sufficiently identifies an object to operate upon, then add to + # the object list as above. + my @output; + + $forms = form_parse($content); + foreach my $form (@$forms) { + my ($c, $o, $k, $e) = @$form; + + if ($e) { + push @output, [ "# Syntax error.", $o, $k, $e ]; + } + else { + my ($type, $id); + + # Look for matching types in the ID, form, and URL. + $type = exists $k->{type} ? $k->{type} : $utype; + $type =~ s|^(?:$utype)?|$utype/| if $utype; + $type =~ s|/$||; + + if (exists $k->{id}) { + $id = $k->{id}; + $id =~ s|^(?:$type/)?|$type/| if $type; + + if ($id =~ m#^$name/(?:$label|\d+)(?:/.*)?#o) { + push @objects, $id; + } + else { + push @output, [ "# Invalid object ID: '$id'", $o, $k, $e ]; + } + } + else { + push @output, [ "# No object ID specified.", $o, $k, $e ]; + } + } + } + # If we saw any errors at this stage, we won't process any part of + # the submitted data. + if (@output) { + unshift @output, [ "# Please resubmit with errors corrected." ]; + $status = "409 Syntax Error"; + $output = form_compose(\@output); + goto OUTPUT; + } +} +else { + # We'll assume that this is in the correct format already. Otherwise + # it will be caught by the loop below. + push @objects, $object; + + if ($content) { + $forms = form_parse($content); + + if (@$forms > 1) { + $status = "400 Bad Request"; + $output = "You may submit only one form to this object."; + goto OUTPUT; + } + + my ($c, $o, $k, $e) = @{ $forms->[0] }; + if ($e) { + $status = "409 Syntax Error"; + $output = form_compose([ ["# Syntax error.", $o, $k, $e] ]); + goto OUTPUT; + } + } +} + +# Make sure we have something to do. +unless (@objects) { + $status = "400 Bad Request"; + $output = "No objects specified."; + goto OUTPUT; +} + +# Parse and validate any field specifications. +my (%fields, @fields); +if ($fields) { + unless ($fields =~ /^(?:$field,)*$field$/) { + $status = "400 Bad Request"; + $output = "Invalid field specification: $fields"; + goto OUTPUT; + } + @fields = map lc, split /,/, $fields; + @fields{@fields} = (); + unless (exists $fields{id}) { + unshift @fields, "id"; + $fields{id} = (); + } +} + +my (@comments, @output); + +foreach $object (@objects) { + my ($handler, $type, $id, $attr, $args); + my ($c, $o, $k, $e) = ("", ["id"], {id => $object}, 0); + + my $i = 0; + if ($object =~ m{^($name)/(\d+|$label)(?:/($name)(?:/(.*))?)?$}o || + $object =~ m{^($name)/(new)$}o) + { + ($type, $id, $attr, $args) = ($1, $2, ($3 || 'default'), $4); + $handler = "Forms/$type/$attr"; + + unless ($m->comp_exists($handler)) { + $args = "$attr/$args"; + $handler = "Forms/$type/default"; + + unless ($m->comp_exists($handler)) { + $i = 2; + $c = "# Unknown object type: $type"; + } + } + elsif ($id ne 'new' && $id !~ /^\d+$/) { + my $ns = "Forms/$type/ns"; + + # Can we resolve named objects? + unless ($m->comp_exists($ns)) { + $i = 3; + $c = "# Objects of type $type must be specified by numeric id."; + } + else { + my ($n, $s) = $m->comp("Forms/$type/ns", id => $id); + if ($n <= 0) { $i = 4; $c = "# $s"; } + else { $i = 0; $id = $n; } + } + } + else { + $i = 0; + } + } + else { + $i = 1; + $c = "# Invalid object specification: '$object'"; + } + + if ($i != 0) { + if ($content) { + (undef, $o, $k, $e) = @{ shift @$forms }; + } + push @output, [ $c, $o, $k ]; + next; + } + + unless ($content) { + my $d = $m->comp($handler, id => $id, args => $args, format => $format, fields => \%fields); + my ($c, $o, $k, $e) = @$d; + + if (!$e && @$o && keys %fields) { + my %lk = map { lc $_ => $_ } keys %$k; + @$o = map { $lk{$_} } @fields; + foreach my $key (keys %$k) { + delete $k->{$key} unless exists $fields{lc $key}; + } + } + push(@output, [ $c, $o, $k ]) if ($c || @$o || keys %$k); + } + else { + my ($c, $o, $k, $e) = @{ shift @$forms }; + my $d = $m->comp($handler, id => $id, args => $args, format => $format, + changes => $k); + ($c, $o, $k, $e) = @$d; + + # We won't pass $e through to compose, trusting instead that the + # handler added suitable comments for the user. + if ($e) { + $status = "409 Syntax Error" if @$o; + push @output, [ $c, $o, $k ]; + } + else { + push @comments, $c; + } + } +} + +unshift(@output, [ join "\n", @comments ]) if @comments; +$output = form_compose(\@output); + +OUTPUT: +</%INIT> +RT/<% $RT::VERSION %> <% $status %> + +<% $output |n %> diff --git a/rt/html/REST/1.0/logout b/rt/html/REST/1.0/logout new file mode 100644 index 000000000..470cb0915 --- /dev/null +++ b/rt/html/REST/1.0/logout @@ -0,0 +1,49 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%PERL> +tied(%session)->delete if (defined %session); +</%PERL> +RT/<% $RT::VERSION %> 200 Ok diff --git a/rt/html/REST/1.0/search/dhandler b/rt/html/REST/1.0/search/dhandler new file mode 100644 index 000000000..1915a4644 --- /dev/null +++ b/rt/html/REST/1.0/search/dhandler @@ -0,0 +1,54 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/search/dhandler +%# +<%INIT> +my $status = "500 Server Error"; +my $output = "Unsupported object type."; +</%INIT> +RT/<% $RT::VERSION %> <% $status %> + +<% $output |n %> diff --git a/rt/html/REST/1.0/search/ticket b/rt/html/REST/1.0/search/ticket new file mode 100644 index 000000000..d0ab59e98 --- /dev/null +++ b/rt/html/REST/1.0/search/ticket @@ -0,0 +1,141 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/search/ticket +%# +<%ARGS> +$query +$format => undef +$orderby => undef +$fields => undef +</%ARGS> +<%INIT> +my $output = ""; +my $status = "200 Ok"; +my $tickets = new RT::Tickets $session{CurrentUser}; + +# Parse and validate any field specifications. +my $field = '[a-zA-Z][a-zA-Z0-9_-]*'; +my (%fields, @fields); +if ($fields) { + $format = "l"; + unless ($fields =~ /^(?:$field,)*$field$/) { + $status = "400 Bad Request"; + $output = "Invalid field specification: $fields"; + goto OUTPUT; + } + @fields = map lc, split /,/, $fields; + @fields{@fields} = (); + unless (exists $fields{id}) { + unshift @fields, "id"; + $fields{id} = (); + } +} + +$format ||= "s"; +if ($format !~ /^[isl]$/) { + $status = "400 Bad request"; + $output = "Unknown listing format: $format. (Use i, s, or l.)\n"; + goto OUTPUT; +} + +my ($n, $s); +eval { + ($n, $s) = $tickets->FromSQL($query); +}; +my $sortstring = ""; +if ($orderby) { + $sortstring = 'FIELD => '; + my $order = substr($orderby, 0, 1); + if ($order eq '+' || $order eq '-') { + $sortstring .= 'substr($orderby, 1)'; + if ($order eq '+') { + $sortstring .= ", ORDER => 'ASC'"; + } elsif ($order eq '-') { + $sortstring .= ", ORDER => 'DESC'"; + } + } else { + $sortstring .= '$orderby'; + } + my $foo = 'FIELD => '; + $foo .= '$orderby'; + $tickets->OrderBy(eval $sortstring); +} +if ($@ || $n == 0) { + $s ||= $@; + $status = "400 Bad request"; + $output = "Invalid query: '$s'.\n"; + goto OUTPUT; +} + +$n = 0; +my @output; +while (my $ticket = $tickets->Next) { + $n++; + + if ($format eq "i") { + $output .= "ticket/" . $ticket->Id . "\n"; + } + elsif ($format eq "s") { + $output .= $ticket->Id . ": ". $ticket->Subject . "\n"; + } + else { + my $id = $ticket->Id; + my $d = $m->comp("$RT::WebPath/REST/1.0/Forms/ticket/default", id => $id, format => $format, fields => \%fields); + my ($c, $o, $k, $e) = @$d; + push @output, [ $c, $o, $k ]; + } +} +if ($n == 0 && $format ne "i") { + $output = "No matching results.\n"; +} + +$output = form_compose(\@output) if @output; + +OUTPUT: +$m->out("RT/". $RT::VERSION . " " . $status ."\n\n"); + +$m->out($output ); +</%INIT> diff --git a/rt/html/REST/1.0/ticket/comment b/rt/html/REST/1.0/ticket/comment new file mode 100644 index 000000000..e27bfcc1e --- /dev/null +++ b/rt/html/REST/1.0/ticket/comment @@ -0,0 +1,175 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/ticket/comment +%# +<%ARGS> +$content +</%ARGS> +<%INIT> +use MIME::Entity; +use LWP::MediaTypes; +use RT::Interface::REST; +use File::Temp qw(tempfile); + +my $ticket = new RT::Ticket $session{CurrentUser}; +my $object = $r->path_info; +my $status = "200 Ok"; +my $output; +my $action; + +# http://.../REST/1.0/ticket/comment/1 +my ($c, $o, $k, $e) = @{ form_parse($content)->[0] }; +if ($e || !$o) { + if (!$o) { + $output = "Empty form submitted.\n"; + } + else { + $c = "# Syntax error."; + $output = form_compose([[$c, $o, $k, $e]]); + } + $status = "400 Bad Request"; + goto OUTPUT; +} + +$object =~ s#^/##; +$object ||= $k->{Ticket}; +unless ($object =~ /^\d+/) { + $output = "Invalid ticket id: `$object'.\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} +if ($k->{Ticket} && $object ne $k->{Ticket}) { + $output = "The submitted form and URL specify different tickets.\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} + +($action = $k->{Action}) =~ s/^(.)(.*)$/\U$1\L$2\E/; +unless ($action =~ /^(?:Comment|Correspond)$/) { + $output = "Invalid action: `$action'.\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} + +my $text = $k->{Text}; +my @atts = @{ vsplit($k->{Attachment}) }; + +if (!$k->{Text} && @atts == 0) { + $status = "400 Bad Request"; + $output = "Empty comment with no attachments submitted.\n"; + goto OUTPUT; +} + +my $cgi = $m->cgi_object; +my $ent = MIME::Entity->build(Type => "multipart/mixed"); +$ent->attach(Data => $k->{Text}) if $k->{Text}; + +my $i = 1; +foreach my $att (@atts) { + local $/=undef; + my $file = $att; + $file =~ s#^.*[\\/]##; + + my $fh = $cgi->upload("attachment_$i"); + if ($fh) { + my $buf; + my ($w, $tmp) = tempfile(); + my $info = $cgi->uploadInfo(); + + while (sysread($fh, $buf, 8192)) { + syswrite($w, $buf); + } + + $ent->attach( + Path => $tmp, + Type => $info->{'Content-Type'} || guess_media_type($tmp), + Filename => $file, + Disposition => "attachment" + ); + } + else { + $status = "400 Bad Request"; + $output = "No attachment for $att.\n"; + goto OUTPUT; + } + + $i++; +} + +$ticket->Load($object); +unless ($ticket->Id) { + $output = "Couldn't load ticket id: `$object'.\n"; + $status = "404 Ticket not found"; + goto OUTPUT; +} +unless ($ticket->CurrentUserHasRight('ModifyTicket') || + ($action eq "Comment" && + $ticket->CurrentUserHasRight("CommentOnTicket")) || + ($action eq "Correspond" && + $ticket->CurrentUserHasRight("ReplyToTicket"))) +{ + $output = "You are not allowed to $action on ticket $object.\n"; + $status = "403 Permission denied"; + goto OUTPUT; +} + +my $cc = join ", ", @{ vsplit($k->{Cc}) }; +my $bcc = join ", ", @{ vsplit($k->{Bcc}) }; +my ($n, $s) = $ticket->$action(MIMEObj => $ent, + CcMessageTo => $cc, + BccMessageTo => $bcc, + TimeTaken => $k->{TimeWorked} || 0); +$output = $s; +if ($k->{Status}) { + my ($status_n, $status_s) = $ticket->SetStatus($k->{'Status'} ); + $output .= "\n".$status_s; +} + +OUTPUT: +</%INIT> +RT/<% $RT::VERSION %> <% $status %> + +<% $output |n %> diff --git a/rt/html/REST/1.0/ticket/link b/rt/html/REST/1.0/ticket/link new file mode 100644 index 000000000..6556a5ef7 --- /dev/null +++ b/rt/html/REST/1.0/ticket/link @@ -0,0 +1,118 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/ticket/link +%# +<%ARGS> +$id => undef +$del => 0 +$rel +$to +</%ARGS> +<%INIT> +use RT::Interface::REST; + +my $output; +my $status = "200 Ok"; +my $ticket = new RT::Ticket $session{CurrentUser}; +my $object = $r->path_info; + +my @fields = qw(DependsOn DependedOnBy RefersTo ReferredToBy HasMember MemberOf); +my %fields = map { lc $_ => $_ } @fields; +my %lfields = ( + HasMember => { Type => 'MemberOf', Mode => 'Base' }, + ReferredToBy => { Type => 'RefersTo', Mode => 'Base' }, + DependedOnBy => { Type => 'DependsOn', Mode => 'Base' }, + MemberOf => { Type => 'MemberOf', Mode => 'Target' }, + RefersTo => { Type => 'RefersTo', Mode => 'Target' }, + DependsOn => { Type => 'DependsOn', Mode => 'Target' }, +); + +# http://.../REST/1.0/ticket/link/1 + +$object =~ s#^/##; +if ($id && $object && $id != $object) { + $output = "Different ids in URL (`$object') and submitted form (`$id').\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} +$id ||= $object; +unless ($id =~ /^\d+$/ && $to =~ /^\d+$/) { + my $bad = ($id !~ /^\d+$/) ? $id : $to; + $output = $r->path_info. "\n"; + $output .= "Invalid ticket id: '$bad'.\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} +unless (exists $fields{lc $rel}) { + $output = "Invalid link: '$rel'.\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} +$rel = $fields{lc $rel}; + +$ticket->Load($id); +unless ($ticket->Id) { + $output = "Couldn't load ticket id: '$id'.\n"; + $status = "404 Ticket not found"; + goto OUTPUT; +} + +my $type = $lfields{$rel}->{Type}; +my $mode = $lfields{$rel}->{Mode}; + +my $n = 1; +my $op = $del ? "DeleteLink" : "AddLink"; + +($n, $output) = $ticket->$op(Type => $type, $mode => $to); +if ($n == 0) { + $status = "500 Error"; +} + +OUTPUT: +</%INIT> +RT/<% $RT::VERSION %> <% $status %> + +<% $output |n %> diff --git a/rt/html/REST/1.0/ticket/merge b/rt/html/REST/1.0/ticket/merge new file mode 100644 index 000000000..3db52111b --- /dev/null +++ b/rt/html/REST/1.0/ticket/merge @@ -0,0 +1,100 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# REST/1.0/ticket/merge +%# +<%ARGS> +$id => undef +$into +</%ARGS> +<%INIT> +use RT::Interface::REST; + +my $output; +my $status = "200 Ok"; +my $ticket = new RT::Ticket $session{CurrentUser}; +my $object = $r->path_info; + +# http://.../REST/1.0/ticket/merge/1 + +$object =~ s#^/##; +if ($id && $object && $id != $object) { + $output = "Different ids in URL (`$object') and submitted form (`$id').\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} +$id ||= $object; +unless ($id =~ /^\d+$/ && $into =~ /^\d+$/) { + my $bad = ($id !~ /^\d+$/) ? $id : $into; + $output = $r->path_info. "\n"; + $output .= "Invalid ticket id: `$bad'.\n"; + $status = "400 Bad Request"; + goto OUTPUT; +} + +$ticket->Load($id); +unless ($ticket->Id) { + $output = "Couldn't load ticket id: `$id'.\n"; + $status = "404 Ticket not found"; + goto OUTPUT; +} +unless ($ticket->CurrentUserHasRight('ModifyTicket')) { + $output = "You are not allowed to modify ticket $id.\n"; + $status = "403 Permission denied"; + goto OUTPUT; +} + +my ($n, $s) = $ticket->MergeInto($into); + +if ($n == 0) { + $status = "500 Error"; +} +$output = $s; + +OUTPUT: +</%INIT> +RT/<% $RT::VERSION %> <% $status %> + +<% $output |n %> diff --git a/rt/html/Search/Build.html b/rt/html/Search/Build.html new file mode 100644 index 000000000..cb6462651 --- /dev/null +++ b/rt/html/Search/Build.html @@ -0,0 +1,849 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# +%# Data flow here: +%# The page receives a Query from the previous page, and maybe arguments +%# corresponding to actions. (If it doesn't get a Query argument, it pulls +%# one out of the session hash. Also, it could be getting just a raw query from +%# Build/Edit.html (Advanced).) +%# +%# After doing some stuff with default arguments and saved searches, the ParseQuery +%# function (which is similar to, but not the same as, _parser in RT/Tickets_Overlay_SQL) +%# converts the Query into a RT::Interface::Web::QueryBuilder::Tree. This mason file +%# then adds stuff to or modifies the tree based on the actions that had been requested +%# by clicking buttons. It then calls GetQueryAndOptionList on the tree to generate +%# the SQL query (which is saved as a hidden input) and the option list for the Clauses +%# box in the top right corner. +%# +%# Worthwhile refactoring: the tree manipulation code for the actions could use some cleaning +%# up. The node-adding code is different in the "add" actions from in ParseQuery, which leads +%# to things like ParseQuery correctly not quoting numbers in numerical fields, while the "add" +%# action does quote it (this breaks SQLite). +%# +<& /Elements/Header, Title => $title &> +<& /Ticket/Elements/Tabs, + current_tab => "Search/Build.html".$QueryString, + Title => $title, + Format => $Format, + Query => $Query, + Order => $Order, + OrderBy => $OrderBy, + Rows => $RowsPerPage +&> + +<FORM METHOD="POST" ACTION="Build.html" NAME="BuildQuery"> +<input type=hidden name=SearchId value="<%$SearchId%>"> +<input type=hidden name=Query value="<%$Query%>"> +<input type=hidden name=Format value="<%$Format%>"> +<table width=100% border="0" cellpadding="5"> +<tr valign="top"> +<td class="boxcontainer" rowspan="2" width="65%"> +<& Elements/PickCriteria, query => $Query, cfqueues => $queues &> +<& /Elements/Submit, Caption => loc('Add additional criteria'), Label => loc('Add'), Name => 'AddClause'&> +</td> + +<td> +<& Elements/EditQuery, + %ARGS, + actions => \@actions, + optionlist => $optionlist, + Description => $Description &> +</td> +</tr> + +<tr valign="top"> +<td> +<& Elements/EditSearches, CurrentSearch => $search_hash, Dirty => $dirty, SearchId => $SearchId &> +</td> +</tr> + +<tr> +<td colspan=2 class="boxcontainer"> + +<& Elements/DisplayOptions, %ARGS, Format=> $Format, +AvailableColumns => $AvailableColumns, CurrentFormat => $CurrentFormat, RowsPerPage => $RowsPerPage, OrderBy => $OrderBy, Order => $Order &> +</td> +</tr> +<tr> +<td colspan=2 class="boxcontainer"> +<& /Elements/Submit, Caption => loc("Do the Search"), Label => loc('Search'), Name => 'DoSearch'&> +</td> +</tr> +</table> +</FORM> + +<%INIT> +use RT::Interface::Web::QueryBuilder; +use RT::Interface::Web::QueryBuilder::Tree; + +my $search_hash = {}; +my $search; +my $title = loc("Query Builder"); + +# {{{ Clear out unwanted data +if ( $NewQuery or $ARGS{'Delete'} ) { + + # Wipe all data-carrying variables clear if we want a new + # search, or we're deleting an old one.. + $Query = ''; + $Format = ''; + $Description = ''; + $SearchId = ''; + $Order = ''; + $OrderBy = ''; + $RowsPerPage = ''; + + # ($search hasn't been set yet; no need to clear) + + # ..then wipe the session out.. + undef $session{'CurrentSearchHash'}; + + # ..and the search results. + $session{'tickets'}->CleanSlate() if defined $session{'tickets'}; +} + +# }}} + +# {{{ Attempt to load what we can from the session, set defaults + +# We don't read or write to the session again until the end +$search_hash = $session{'CurrentSearchHash'}; + +# These variables are what define a search_hash; this is also +# where we give sane defaults. +$Query ||= $search_hash->{'Query'}; +$Format ||= $search_hash->{'Format'}; +$Description ||= $search_hash->{'Description'}; +$SearchId ||= $search_hash->{'SearchId'} || 'new'; +$Order ||= $search_hash->{'Order'} || 'ASC'; +$OrderBy ||= $search_hash->{'OrderBy'} || 'id'; +$RowsPerPage = ( $search_hash->{'RowsPerPage'} || 50 ) + unless defined($RowsPerPage); +$search ||= $search_hash->{'Object'}; + +# }}} + +my @actions = (); + +# Clean unwanted junk from the format +$Format = $m->comp( '/Elements/ScrubHTML', Content => $Format ) if ($Format); + +# {{{ If we're asked to delete the current search, make it go away and reset the search parameters +if ( $ARGS{'Delete'} ) { + + # We set $SearchId to 'new' above already, so peek into the %ARGS + if ( $ARGS{'SearchId'} =~ /^(.*?)-(\d+)-SavedSearch-(\d+)$/ ) { + my $obj_type = $1; + my $obj_id = $2; + my $search_id = $3; + + my $container_object; + if ( $obj_type eq 'RT::User' && $obj_id == $session{'CurrentUser'}->Id ) + { + $container_object = $session{'CurrentUser'}->UserObj; + } + elsif ( $obj_type eq 'RT::Group' ) { + $container_object = RT::Group->new( $session{'CurrentUser'} ); + $container_object->Load($obj_id); + } + + if ( $container_object->id ) { + + # We have the object the entry is an attribute on; delete + # the entry.. + $container_object->Attributes->DeleteEntry( + Name => 'SavedSearch', + id => $search_id + ); + } + + } +} + +# }}} + +# {{{ If the user wants to copy a search, uncouple from the one that this was based on, but don't erase the $Query or $Format +if ( $ARGS{'CopySearch'} ) { + $SearchId = 'new'; + $search = undef; + $Description = loc( "[_1] copy", $Description ); +} + +# }}} + +# {{{ if we're asked to revert the current search, we just want to load it +if ( $ARGS{'Revert'} ) { + $ARGS{'LoadSavedSearch'} = $SearchId; +} + +# }}} + +# {{{ if we're asked to load a search, load it. + +if ( $ARGS{'LoadSavedSearch'} =~ /^(.*?)-(\d+)-SavedSearch-(\d+)$/ ) { + my $obj_type = $1; + my $obj_id = $2; + my $search_id = $3; + + # We explicitly list out the available types (user and group) and + # don't trust user input here + if ( ( $obj_type eq 'RT::User' ) + && ( $obj_id == $session{'CurrentUser'}->id ) ) + { + $search = + $session{'CurrentUser'}->UserObj->Attributes->WithId($search_id); + + } + elsif ( $obj_type eq 'RT::Group' ) { + my $group = RT::Group->new( $session{'CurrentUser'} ); + $group->Load($obj_id); + $search = $group->Attributes->WithId($search_id); + } + + # We have a $search and now; import the others + $SearchId = $ARGS{'LoadSavedSearch'}; + $Description = $search->Description; + $Format = $search->SubValue('Format'); + $Query = $search->SubValue('Query'); + $Order = $search->SubValue('Order'); + $OrderBy = $search->SubValue('OrderBy'); + $RowsPerPage = $search->SubValue('RowsPerPage'); +} + +# }}} + +# {{{ Parse the query +my $tree; +ParseQuery( $Query, \$tree, \@actions ); + +# if parsing went poorly, send them to the edit page to fix it +if ( $actions[0] ) { + $m->comp( "Edit.html", Query => $Query, actions => \@actions ); + $m->abort(); +} + +$Query = ""; + +my @options = $tree->GetDisplayedNodes; + +my @current_values = grep { defined } @options[@clauses]; + +# {{{ Try to find if we're adding a clause +foreach my $arg ( keys %ARGS ) { + if ( + $arg =~ m/^ValueOf(.+)/ + && ( ref $ARGS{$arg} eq "ARRAY" + ? grep { $_ ne "" } @{ $ARGS{$arg} } + : $ARGS{$arg} ne "" ) + ) + { + + # We're adding a $1 clause + my $field = $1; + my ( $keyword, $op, $value ); + + #figure out if it's a grouping + if ( $ARGS{ $field . "Field" } ) { + $keyword = $ARGS{ $field . "Field" }; + } + else { + $keyword = $field; + } + + my ( @ops, @values ); + if ( ref $ARGS{ 'ValueOf' . $field } eq "ARRAY" ) { + + # we have many keys/values to iterate over, because there is + # more than one CF with the same name. + @ops = @{ $ARGS{ $field . 'Op' } }; + @values = @{ $ARGS{ 'ValueOf' . $field } }; + } + else { + @ops = ( $ARGS{ $field . 'Op' } ); + @values = ( $ARGS{ 'ValueOf' . $field } ); + } + $RT::Logger->error("Bad Parameters passed into Query Builder") + unless @ops == @values; + + for my $i ( 0 .. @ops - 1 ) { + my ( $op, $value ) = ( $ops[$i], $values[$i] ); + next if $value eq ""; + + if ( $value eq 'NULL' && $op =~ /=/ ) { + if ( $op eq '=' ) { + $op = "IS"; + } + elsif ( $op eq '!=' ) { + $op = "IS NOT"; + } + + # This isn't "right", but... + # It has to be this way until #5182 is fixed + $value = "'NULL'"; + } + else { + $value = "'$value'"; + } + + my $clause = { + Key => $keyword, + Op => $op, + Value => $value + }; + + my $newnode = RT::Interface::Web::QueryBuilder::Tree->new($clause); + if (@current_values) { + foreach my $value (@current_values) { + my $newindex = $value->getIndex() + 1; + $value->insertSibling( $newindex, $newnode ); + $value = $newnode; + } + } + else { + $tree->getChild(0)->addChild($newnode); + @current_values = $newnode; + } + $newnode->getParent()->setNodeValue( $ARGS{'AndOr'} ); + } + } +} + +# }}} + +# {{{ Move things around +if ( $ARGS{"Up"} ) { + if (@current_values) { + foreach my $value (@current_values) { + my $index = $value->getIndex(); + if ( $value->getIndex() > 0 ) { + my $parent = $value->getParent(); + $parent->removeChild($index); + $parent->insertChild( $index - 1, $value ); + $value = $parent->getChild( $index - 1 ); + } + else { + push( @actions, [ loc("error: can't move up"), -1 ] ); + } + } + } + else { + push( @actions, [ loc("error: nothing to move"), -1 ] ); + } +} +elsif ( $ARGS{"Down"} ) { + if (@current_values) { + foreach my $value (@current_values) { + my $index = $value->getIndex(); + my $parent = $value->getParent(); + if ( $value->getIndex() < ( $parent->getChildCount - 1 ) ) { + $parent->removeChild($index); + $parent->insertChild( $index + 1, $value ); + $value = $parent->getChild( $index + 1 ); + } + else { + push( @actions, [ loc("error: can't move down"), -1 ] ); + } + } + } + else { + push( @actions, [ loc("error: nothing to move"), -1 ] ); + } +} +elsif ( $ARGS{"Left"} ) { + if (@current_values) { + foreach my $value (@current_values) { + my $parent = $value->getParent(); + my $grandparent = $parent->getParent(); + if ( !$grandparent->isRoot ) { + my $index = $parent->getIndex(); + $parent->removeChild($value); + $grandparent->insertChild( $index, $value ); + if ( $parent->isLeaf() ) { + $grandparent->removeChild($parent); + } + } + else { + push( @actions, [ loc("error: can't move left"), -1 ] ); + } + } + } + else { + push( @actions, [ loc("error: nothing to move"), -1 ] ); + } +} +elsif ( $ARGS{"Right"} ) { + if (@current_values) { + foreach my $value (@current_values) { + my $parent = $value->getParent(); + my $index = $value->getIndex(); + my $newparent; + if ( $index > 0 ) { + my $sibling = $parent->getChild( $index - 1 ); + if ( ref( $sibling->getNodeValue ) ) { + $parent->removeChild($value); + my $newtree = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $parent ); + $newtree->addChild($value); + } + else { + $parent->removeChild($index); + $sibling->addChild($value); + } + } + else { + $parent->removeChild($value); + $newparent = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $parent ); + $newparent->addChild($value); + } + } + } + else { + push( @actions, [ loc("error: nothing to move"), -1 ] ); + } +} +elsif ( $ARGS{"DeleteClause"} ) { + if (@current_values) { + $_->getParent()->removeChild($_) for @current_values; + } + else { + push( @actions, [ loc("error: nothing to delete"), -1 ] ); + } +} +elsif ( $ARGS{"Toggle"} ) { + my $ea; + if (@current_values) { + foreach my $value (@current_values) { + my $parent = $value->getParent(); + + if ( $parent->getNodeValue eq 'AND' ) { + $parent->setNodeValue('OR'); + } + else { + $parent->setNodeValue('AND'); + } + } + } + else { + push( @actions, [ loc("error: nothing to toggle"), -1 ] ); + } +} + +$tree->PruneChildlessAggregators; + +# }}} + +# {{{ Rebuild $Query based on the additions / movements +$Query = ""; +my $optionlist_arrayref; + +($Query, $optionlist_arrayref) = $tree->GetQueryAndOptionList(\@current_values); + +my $optionlist = join "\n", map { qq(<option value="$_->{INDEX}" $_->{SELECTED}>) + . (" " x (5 * $_->{DEPTH})) + . $m->interp->apply_escapes($_->{TEXT}, 'h') . qq(</option>) } @$optionlist_arrayref; + + + + +use Regexp::Common qw /delimited/; + +# States +use constant VALUE => 1; +use constant AGGREG => 2; +use constant OP => 4; +use constant PAREN => 8; +use constant KEYWORD => 16; + +sub ParseQuery { + my $string = shift; + my $tree = shift; + my @actions = shift; + my $want = KEYWORD | PAREN; + my $last = undef; + + my $depth = 1; + + # make a tree root + $$tree = RT::Interface::Web::QueryBuilder::Tree->new; + my $root = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $$tree ); + my $lastnode = $root; + my $parentnode = $root; + + # get the FIELDS from Tickets_Overlay + my $tickets = new RT::Tickets( $session{'CurrentUser'} ); + my %FIELDS = %{ $tickets->FIELDS }; + + # Lower Case version of FIELDS, for case insensitivity + my %lcfields = map { ( lc($_) => $_ ) } ( keys %FIELDS ); + + my @tokens = qw[VALUE AGGREG OP PAREN KEYWORD]; + my $re_aggreg = qr[(?i:AND|OR)]; + my $re_value = qr[$RE{delimited}{-delim=>qq{\'\"}}|\d+]; + my $re_keyword = qr[$RE{delimited}{-delim=>qq{\'\"}}|(?:\{|\}|\w|\.)+]; + my $re_op = + qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)] + ; # long to short + my $re_paren = qr'\(|\)'; + + # assume that $ea is AND if it is not set + my ( $ea, $key, $op, $value ) = ( "AND", "", "", "" ); + + # order of matches in the RE is important.. op should come early, + # because it has spaces in it. otherwise "NOT LIKE" might be parsed + # as a keyword or value. + + while ( + $string =~ /( + $re_aggreg + |$re_op + |$re_keyword + |$re_value + |$re_paren + )/igx + ) + { + my $val = $1; + my $current = 0; + + # Highest priority is last + $current = OP if _match( $re_op, $val ); + $current = VALUE if _match( $re_value, $val ); + $current = KEYWORD + if _match( $re_keyword, $val ) && ( $want & KEYWORD ); + $current = AGGREG if _match( $re_aggreg, $val ); + $current = PAREN if _match( $re_paren, $val ); + + unless ( $current && $want & $current ) { + + # Error + # FIXME: I will only print out the highest $want value + my $token = $tokens[ ( ( log $want ) / ( log 2 ) ) ]; + push @actions, + [ + loc( +"current: $current, want $want, Error near ->$val<- expecting a " + . $token + . " in '$string'\n" + ), + -1 + ]; + } + + # State Machine: + my $parentdepth = $depth; + + # Parens are highest priority + if ( $current & PAREN ) { + if ( $val eq "(" ) { + $depth++; + + # make a new node that the clauses can be children of + $parentnode = RT::Interface::Web::QueryBuilder::Tree->new( $ea, $parentnode ); + } + else { + $depth--; + $parentnode = $parentnode->getParent(); + $lastnode = $parentnode; + } + + $want = KEYWORD | PAREN | AGGREG; + } + elsif ( $current & AGGREG ) { + $ea = $val; + $want = KEYWORD | PAREN; + } + elsif ( $current & KEYWORD ) { + $key = $val; + $want = OP; + } + elsif ( $current & OP ) { + $op = $val; + $want = VALUE; + } + elsif ( $current & VALUE ) { + $value = $val; + + # Remove surrounding quotes from $key, $val + # (in future, simplify as for($key,$val) { action on $_ }) + if ( $key =~ /$RE{delimited}{-delim=>qq{\'\"}}/ ) { + substr( $key, 0, 1 ) = ""; + substr( $key, -1, 1 ) = ""; + } + if ( $val =~ /$RE{delimited}{-delim=>qq{\'\"}}/ ) { + substr( $val, 0, 1 ) = ""; + substr( $val, -1, 1 ) = ""; + } + + # Unescape escaped characters + $key =~ s!\\(.)!$1!g; + $val =~ s!\\(.)!$1!g; + + my $class; + if ( exists $lcfields{ lc $key } ) { + $key = $lcfields{ lc $key }; + $class = $FIELDS{$key}->[0]; + } + if ( $class ne 'INT' ) { + $val = "'$val'"; + } + + push @actions, [ loc("Unknown field: $key"), -1 ] unless $class; + + $want = PAREN | AGGREG; + } + else { + push @actions, [ loc("I'm lost"), -1 ]; + } + + if ( $current & VALUE ) { + if ( $key =~ /^CF./ ) { + $key = "'" . $key . "'"; + } + my $clause = { + Key => $key, + Op => $op, + Value => $val + }; + + # explicity add a child to it + $lastnode = RT::Interface::Web::QueryBuilder::Tree->new( $clause, $parentnode ); + $lastnode->getParent()->setNodeValue($ea); + + ( $ea, $key, $op, $value ) = ( "", "", "", "" ); + } + + $last = $current; + } # while + + push @actions, [ loc("Incomplete query"), -1 ] + unless ( ( $want | PAREN ) || ( $want | KEYWORD ) ); + + push @actions, [ loc("Incomplete Query"), -1 ] + unless ( $last && ( $last | PAREN ) || ( $last || VALUE ) ); + + # This will never happen, because the parser will complain + push @actions, [ loc("Mismatched parentheses"), -1 ] + unless $depth == 1; +} + +sub _match { + + # Case insensitive equality + my ( $y, $x ) = @_; + return 1 if $x =~ /^$y$/i; + + # return 1 if ((lc $x) eq (lc $y)); # Why isnt this equiv? + return 0; +} + +sub debug { + my $message = shift; + $m->print( $message . "<br>" ); +} + +# }}} + +# }}} + +my $queues = $tree->GetReferencedQueues; + +# {{{ Deal with format changes +my ( $AvailableColumns, $CurrentFormat ); +( $Format, $AvailableColumns, $CurrentFormat ) = $m->comp( + 'Elements/BuildFormatString', + cfqueues => $queues, + %ARGS, Format => $Format +); + +# }}} + +# {{{ if we're asked to save the current search, save it +if ( $ARGS{'Save'} ) { + + if ( $search && $search->id ) { + + # This search is based on a previously loaded search -- so + # just update the current search object with new values + $search->SetSubValues( + Format => $Format, + Query => $Query, + Order => $Order, + OrderBy => $OrderBy, + RowsPerPage => $RowsPerPage, + ); + $search->SetDescription($Description); + + } + elsif ( $SearchId eq 'new' && $ARGS{'Owner'} =~ /^(.*?)-(\d+)$/ ) { + + # We're saving a new search + my $obj_type = $1; + my $obj_id = $2; + + # Find out if we're saving on the user, or a group + my $container_object; + if ( $obj_type eq 'RT::User' && $obj_id == $session{'CurrentUser'}->Id ) + { + $container_object = $session{'CurrentUser'}->UserObj; + } + elsif ( $obj_type eq 'RT::Group' ) { + $container_object = RT::Group->new( $session{'CurrentUser'} ); + $container_object->Load($obj_id); + } + + if ( $container_object->id ) { + + # If we got one or the other, add the saerch + my ( $search_id, $search_msg ) = $container_object->AddAttribute( + Name => 'SavedSearch', + Description => $Description, + Content => { + Format => $Format, + Query => $Query, + Order => $Order, + OrderBy => $OrderBy, + RowsPerPage => $RowsPerPage, + } + ); + $search = + $session{'CurrentUser'}->UserObj->Attributes->WithId($search_id); + + # Build new SearchId + $SearchId = + ref( $session{'CurrentUser'}->UserObj ) . '-' + . $session{'CurrentUser'}->UserObj->Id + . '-SavedSearch-' + . $search->Id; + } + unless ( $search->id ) { + push @actions, [ loc("Can't find a saved search to work with"), 0 ]; + } + + } + else { + push @actions, [ loc("Can't save this search"), 0 ]; + } + +} + +# }}} + +# {{{ If we're modifying an old query, check if it has changed +my $dirty = 0; +$dirty = 1 + if defined $search + and ($search->SubValue('Format') ne $Format + or $search->SubValue('Query') ne $Query + or $search->SubValue('Order') ne $Order + or $search->SubValue('OrderBy') ne $OrderBy + or $search->SubValue('RowsPerPage') ne $RowsPerPage ); + +# }}} + +# {{{ Push the updates into the session so we don't loose 'em +$search_hash->{'SearchId'} = $SearchId; +$search_hash->{'Format'} = $Format; +$search_hash->{'Query'} = $Query; +$search_hash->{'Description'} = $Description; +$search_hash->{'Object'} = $search; +$search_hash->{'Order'} = $Order; +$search_hash->{'OrderBy'} = $OrderBy; +$search_hash->{'RowsPerPage'} = $RowsPerPage; + +$session{'CurrentSearchHash'} = $search_hash; + +# }}} + +# {{{ Show the results, if we were asked. +if ( $ARGS{"DoSearch"} ) { + $m->comp( + "Results.html", + Query => $Query, + Format => $Format, + Order => $Order, + OrderBy => $OrderBy, + Rows => $RowsPerPage + ); + $m->abort(); +} + +# }}} + +# {{{ Build a querystring for the tabs + +my $QueryString; +if ($NewQuery) { + $QueryString = '?NewQuery=1'; +} +else { + $QueryString = '?' + . $m->comp( + '/Elements/QueryString', + Query => $Query, + Format => $Format, + Order => $Order, + OrderBy => $OrderBy, + Rows => $RowsPerPage + ) + if ($Query); +} + +# }}} + +</%INIT> + +<%ARGS> +$NewQuery => 0 +$SearchId => undef +$Query => undef +$Format => undef +$Description => undef +$Order => undef +$OrderBy => undef +$RowsPerPage => undef +$HideResults => 0 +@clauses => () +</%ARGS> + diff --git a/rt/html/Search/Bulk.html b/rt/html/Search/Bulk.html index df43cfa50..b7c64e3f8 100644 --- a/rt/html/Search/Bulk.html +++ b/rt/html/Search/Bulk.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,19 +20,35 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Bulk ticket update") &> <& /Elements/Tabs, Title => loc("Bulk ticket update") &> <& /Elements/ListActions, actions => \@results &> - -<FORM METHOD=POST> +<FORM METHOD="POST" ACTION="<%$RT::WebPath%>/Search/Bulk.html" > +<input type="hidden" name="Query" value="<%$ARGS{'Query'}%>"> <TABLE WIDTH=100% border=0 cellpadding=3 CELLSPACING=0> <TR> <TH><&|/l&>Update</&></TH> @@ -42,21 +64,18 @@ my $i; - - -$session{'tickets'}->RedoSearch(); -while (my $Ticket = $session{'tickets'}->Next) { +$Tickets->RedoSearch(); +while (my $Ticket = $Tickets->Next) { $i++; if ($i % 2) { - $bgcolor = "#dddddd"; + $bgcolor = "#d4d4d4"; } else { $bgcolor = "#ffffff"; } </%PERL> <TR bgcolor="<%$bgcolor%>"> -<TD><input type=checkbox name="UpdateTicket<%$Ticket->Id%>" CHECKED></TD> -%# The ticket view is controlled by config.pm, WebOptions +<TD><input type=checkbox name="UpdateTicket<%$Ticket->Id%>" value="1" CHECKED></TD> %foreach my $col (@cols) { <TD> % if ($col eq 'id') { @@ -129,23 +148,34 @@ while (my $Ticket = $session{'tickets'}->Next) { <tr><td align=right><&|/l&>Update Type</&>:</td> <td><select name="UpdateType"> <option value="private" ><&|/l&>Comments (not sent to requestors)</&></option> -<option value="response" ><&|/l&>Response to requestors</&></option> +<option value="response" ><&|/l&>Reply to requestors</&></option> </select> </td></tr> <tr><td align=right><&|/l&>Subject</&>:</td><td> <input name="UpdateSubject" size=60 value=""></td></tr> +% while (my $CF = $TxnCFs->Next()) { +<TR> +<TD ALIGN=RIGHT><% $CF->Name %>:</TD> +<TD><& /Elements/EditCustomField, + CustomField => $CF, + NamePrefix => "Object-RT::Transaction--CustomField-" + &><em><% $CF->FriendlyType %></em></TD> +</TD></TR> +% } # end if while <tr><td align=right><&|/l&>Attach</&>:</td><td><input name="UpdateAttachment" type="file"></td></tr> <tr><td class=labeltop><&|/l&>Message</&>:</td><td> <& /Elements/MessageBox, Name=>"UpdateContent"&> </td></tr> </table> + <& /Elements/TitleBoxEnd &> -<& /Elements/TitleBoxStart, title => loc('Edit Relationships'), color => "#336633"&> -<i><&|/l&>Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces.</&></i><br> + +<& /Elements/TitleBoxStart, title => loc('Edit Links'), color => "#336633"&> +<i><&|/l&>Enter tickets or URIs to link tickets to. Separate multiple entries with spaces.</&></i><br> <& /Ticket/Elements/BulkLinks &> <& /Elements/TitleBoxEnd &> -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Update All') &> </FORM> @@ -157,8 +187,30 @@ map ($ARGS{$_} =~ /^$/ && (delete $ARGS{$_}), keys %ARGS); my ($bgcolor, @results); my @cols = qw(id Status Priority Subject QueueObj->Name OwnerObj->Name RequestorAddresses DueAsString ); -Abort(loc("No search to operate on.")) unless ($session{'tickets'}); +my $Tickets = RT::Tickets->new($session{'CurrentUser'}); +$Tickets->FromSQL($ARGS{'Query'}); + +Abort(loc("No search to operate on.")) unless ($Tickets); + +my %allcfs; +my %cfqnames; +my %cfqs; +my $count = 0; +while (my $Ticket = $Tickets->Next) { + my $cfq = $Ticket->QueueObj; + my $cfqid = $cfq->Id; + my $cfqn = $cfq->Name; + unless ( exists $cfqs{$cfqid} ) { + $cfqs{$cfqid} = 1; + $count++; + my $cfs = $cfq->TicketCustomFields; + while (my $cf = $cfs->Next) { + $allcfs{$cf->Id} = $cf; + $cfqnames{$cf->Id} = $cfqn; + } + } +} my $do_comment_reply=0; # Prepare for ticket updates @@ -174,17 +226,26 @@ if ($ARGS{'UpdateContent'} && #Iterate through each ticket we've been handed my @linkresults; +my %queues; -while (my $Ticket = $session{'tickets'}->Next) { +$Tickets->RedoSearch(); +while (my $Ticket = $Tickets->Next) { + $queues{$Ticket->QueueObj->Id}++; $RT::Logger->debug( "Checking Ticket ".$Ticket->Id ."\n"); next unless ($ARGS{"UpdateTicket".$Ticket->Id}); $RT::Logger->debug ("Matched\n"); + my @updateresults; + if ($do_comment_reply) { + ProcessUpdateMessage(TicketObj => $Ticket, ARGSRef => \%ARGS, Actions => \@updateresults); + } + #Update the basics. my @basicresults = ProcessTicketBasics(TicketObj => $Ticket, ARGSRef => \%ARGS); my @dateresults = ProcessTicketDates(TicketObj => $Ticket, ARGSRef => \%ARGS); #Update the watchers my @watchresults = ProcessTicketWatchers(TicketObj => $Ticket, ARGSRef => \%ARGS); + #Update the links $ARGS{'id'} = $Ticket; $ARGS{$Ticket->Id.'-MergeInto'} = $ARGS{'Ticket-MergeInto'}; @@ -203,15 +264,15 @@ while (my $Ticket = $session{'tickets'}->Next) { delete $ARGS{'MemberOf-'.$Ticket->Id}; delete $ARGS{$Ticket->Id.'-RefersTo'}; delete $ARGS{'RefersTo-'.$Ticket->Id}; - - my @updateresults; - if ($do_comment_reply) { - ProcessUpdateMessage(TicketObj => $Ticket, ARGSRef => \%ARGS, Actions => \@updateresults); - } - my @tempresults = (@watchresults, @basicresults, @dateresults, @updateresults, @linkresults); + my @tempresults = (@watchresults, @basicresults, @dateresults, + @updateresults, @linkresults); @tempresults = map { loc("Ticket [_1]: [_2]",$Ticket->Id,$_) } @tempresults; @results = (@results, @tempresults); } +my $TxnCFs = RT::CustomFields->new($session{CurrentUser}); +$TxnCFs->LimitToLookupType("RT::Queue-RT::Ticket-RT::Transaction"); +$TxnCFs->LimitToGlobalOrObjectId(sort keys %queues); + </%INIT> diff --git a/rt/html/Search/Edit.html b/rt/html/Search/Edit.html new file mode 100755 index 000000000..16e8a0e71 --- /dev/null +++ b/rt/html/Search/Edit.html @@ -0,0 +1,86 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/Header, Title => $title&> +<& /Ticket/Elements/Tabs, + current_tab => "Search/Edit.html?".$QueryString, + Title => $title, + Format => $Format, + Query => $Query, + Rows => $ARGS{'Rows'}, + OrderBy => $ARGS{'OrderBy'}, + Order => $ARGS{'Order'} &> + +<& Elements/NewListActions, actions => \@actions &> + +<form method="post" action="Build.html"> +<input type="hidden" name="SearchId" value="<%$SearchId%>"> +<textarea name="Query" rows="8" cols="72"><%$Query%></textarea> +<br> +<textarea name="Format" rows="8" cols="72"><%$Format%></textarea> +<br> +<& /Elements/Submit, Label => loc("Apply"), Reset => 1, Caption => loc("Apply your changes")&> +</form> + +<%INIT> +my $title = loc("Edit Query"); +$Format = $m->comp('/Elements/ScrubHTML', Content => $Format); +my $QueryString = $m->comp('/Elements/QueryString', + Query => $Query, + Format => $Format, + Rows => $ARGS{'Rows'}, + OrderBy => $ARGS{'OrderBy'}, + Order => $ARGS{'Order'}, + ); + +</%INIT> + + +<%ARGS> +$Query => undef +$Format => undef +$SearchId => 'new' +@actions => undef +</%ARGS> diff --git a/rt/html/Search/Elements/BuildFormatString b/rt/html/Search/Elements/BuildFormatString new file mode 100644 index 000000000..639e62c29 --- /dev/null +++ b/rt/html/Search/Elements/BuildFormatString @@ -0,0 +1,243 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%args> +$Format => undef +%cfqueues => undef +$Face => undef +$Size => undef +$Link => undef +$Title => undef +$AddCol => undef +$RemoveCol => undef +$ColUp => undef +$ColDown => undef +$SelectDisplayColumns => undef +$CurrentDisplayColumns => undef +</%args> +<%init> + +unless ($Format) { + $Format = $RT::DefaultSearchResultFormat; +} + + +# All the things we can display in the format string by default +my @fields = qw( + id + Status + ExtendedStatus + Subject + QueueName + OwnerName + Priority + InitialPriority + FinalPriority + Type + TimeWorked + TimeLeft + TimeEstimated + CreatedBy + LastUpdatedBy + Requestors + Cc + AdminCc + Starts + StartsRelative + Started + StartedRelative + Created + CreatedRelative + LastUpdated + LastUpdatedRelative + Told + ToldRelative + Due + DueRelative + Resolved + ResolvedRelative + RefersTo + ReferredToBy + DependsOn + DependedOnBy + MemberOf + Members + Parents + Children + NEWLINE +); + +my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'}); +foreach my $id (keys %cfqueues) { + # What does this _do_? What are the keys to cfqueues + $id =~ s/^.'*(.*).'*$/$1/; + # Gotta load up the $queue object, since queues get stored by name now. + my $queue = RT::Queue->new($session{'CurrentUser'}); + $queue->Load($id); + $CustomFields->LimitToQueue($queue->Id); +} +$CustomFields->LimitToGlobal; + +while ( my $CustomField = $CustomFields->Next ) { + my $queuestr; + if ($CustomField->QueueObj && $CustomField->QueueObj->Id != 0) { + $queuestr = $CustomField->QueueObj->Name . "."; + } + push @fields, "CustomField." . $queuestr . "{" . $CustomField->Name . "}"; +} + +my ( @seen); + +my @format = split( /,\s*/, $Format ); +foreach my $field (@format) { + my %column = (); + $field =~ s/'(.*)'/$1/; + my ( $prefix, $suffix ); + if ( $field =~ m/(.*)__(.*)__(.*)/ ) { + $prefix = $1; + $suffix = $3; + $field = $2; + } + $field = "<blank>" if !$field; + $column{Prefix} = $prefix; + $column{Suffix} = $suffix; + $field =~ s/\s*(.*)\s*/$1/; + $column{Column} = $field; + push @seen, \%column; +} + +if ( $RemoveCol ) { + my $index = $CurrentDisplayColumns; + my $column = $seen[$index]; + if ($index) { + delete $seen[$index]; + my @temp = @seen; + @seen = (); + foreach my $element (@temp) { + next unless $element; + push @seen, $element; + } + } +} +elsif ( $AddCol ) { + if ( defined $SelectDisplayColumns ) { + my $selected = $SelectDisplayColumns; + my @columns; + if (ref($selected) eq 'ARRAY') { + @columns = @$selected; + } else { + push @columns, $selected; + } + foreach my $col (@columns) { + my %column = (); + $column{Column} = $col; + + if ( $Face eq "Bold" ) { + $column{Prefix} .= "<B>"; + $column{Suffix} .= "</B>"; + } + if ( $Face eq "Italic" ) { + $column{Prefix} .= "<I>"; + $column{Suffix} .= "</I>"; + } + if ($Size) { + $column{Prefix} .= "<" . $m->interp->apply_escapes( $Size, 'h' ) . ">"; + $column{Suffix} .= "</" . $m->interp->apply_escapes( $Size, 'h' ) . ">"; + } + if ( $Link eq "Display" ) { + $column{Prefix} .= + "<A HREF=\"" . $RT::WebPath . "/Ticket/Display.html?id=__id__\">"; + $column{Suffix} .= "</a>"; + } + elsif ( $Link eq "Take" ) { + $column{Prefix} .= "<A HREF=\"" . $RT::WebPath + . "/Ticket/Display.html?Action=Take&id=__id__\">"; + $column{Suffix} .= "</a>"; + } + + if ($Title) { + $column{Suffix} .= "/TITLE:" . $m->interp->apply_escapes( $Title, 'h' ); + } + push @seen, \%column; +} +} +} +elsif ( $ColUp ) { + my $index = $CurrentDisplayColumns; + if ( defined $index && ( $index - 1 ) >= 0 ) { + my $column = $seen[$index]; + $seen[$index] = $seen[ $index - 1 ]; + $seen[ $index - 1 ] = $column; + $CurrentDisplayColumns = $index - 1; + } +} +elsif ( $ColDown ) { + my $index = $CurrentDisplayColumns; + if ( defined $index && ( $index + 1 ) < scalar @seen ) { + my $column = $seen[$index]; + $seen[$index] = $seen[ $index + 1 ]; + $seen[ $index + 1 ] = $column; + $CurrentDisplayColumns = $index + 1; + } +} + + +my @format_string; +foreach my $field (@seen) { + next unless $field; + my $row = "'" . $field->{Prefix}; + $row .= "__" . $m->interp->apply_escapes( $field->{Column}, 'h' ) . "__" + unless ( $field->{Column} eq "<blank>" ); + $row .= $field->{Suffix} . "'"; + push( @format_string, $row ); +} + +$Format = join(",\n", @format_string); + + +return($Format, \@fields, \@seen); + +</%init> + diff --git a/rt/html/Search/Elements/DisplayOptions b/rt/html/Search/Elements/DisplayOptions new file mode 100644 index 000000000..43a9d9998 --- /dev/null +++ b/rt/html/Search/Elements/DisplayOptions @@ -0,0 +1,110 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/TitleBoxStart, title => loc("Display Columns") &> +<table> +<tr> +<td> +<& EditFormat, %ARGS &> +</td> +<td valign=top> +<table valign=top> +<tr> +<td class=label> +<&|/l&>Order by</&>: +</td><td class=value> +<select name="OrderBy"> +% foreach my $field (keys %fields) { +% next unless $field; +<option value=<%$field%> +% if ($field =~ /^$OrderBy$/i) { +SELECTED +% } +><&|/l&><%$field%></&></option> +% } +</select> +<select name="Order"> +<option value="ASC" +% if ($Order eq "ASC") { +SELECTED +% } +><&|/l&>Ascending</&></option> +<option value="DESC" +% if ($Order eq "DESC") { +SELECTED +% } +><&|/l&>Descending</&></option> +</select> +</td> +</tr> +<td class=label> +<&|/l&>Rows per page</&>: +</td><td class="value"> +<& /Elements/SelectResultsPerPage, + Name => "RowsPerPage", + Default => $RowsPerPage &> +</td> +</tr> +</table> +</td> +</tr> +</table> +<& /Elements/TitleBoxEnd &> + +<%INIT> +my $tickets = new RT::Tickets($session{'CurrentUser'}); +my %fields = %{$tickets->FIELDS}; +map { $fields{$_}->[0] =~ /^(?:ENUM|INT|DATE|STRING)$/ || delete $fields{$_} } keys %fields; +delete $fields{'EffectiveId'}; + + +</%INIT> + +<%ARGS> +$Order => undef +$OrderBy => undef +$RowsPerPage => undef +$Format => undef +</%ARGS> diff --git a/rt/html/Search/Elements/EditFormat b/rt/html/Search/Elements/EditFormat new file mode 100644 index 000000000..dc8720f26 --- /dev/null +++ b/rt/html/Search/Elements/EditFormat @@ -0,0 +1,114 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<table> +<tr> +<td> +<&|/l&>Add Columns</&>: +</td> +<td> +<&|/l&>Format</&>: +</td> +<td></td> +<td> +<&|/l&>Show Columns</&>: +</td> +<tr> +<td valign=top> +<select size="6" name="SelectDisplayColumns" multiple> +% foreach my $field ( @$AvailableColumns) { +<option value="<%$field%>"><% loc( $field) %></option> +%# $m->comp( '/Elements/RT__Ticket/ColumnMap', Name => $field, Attr => 'title') || +% } +</select> +</td> +<td> +<&|/l&>Link</&>: +<select name="Link"> +<option value="None">-</option> +<option value="Display"><&|/l&>Display</&></option> +<option value="Take"><&|/l&>Take</&></option> +</select> +<br><&|/l&>Title</&>: <input name="Title" size=10> +<br><&|/l&>Size</&>: +<select name="Size"> +<option value="">-</option> +<option value="Small"><&|/l&>Small</&></option> +<option value="Large"><&|/l&>Large</&></option> +</select> +<br><&|/l&>Style</&>: +<select name="Face"> +<option value="">-</option> +<option value="Bold"><&|/l&>Bold</&></option> +<option value="Italic"><&|/l&>Italic</&></option> +</select> +</td> +<td> +<input type=submit name="AddCol" value="->"> +</td> +<td valign=top> +<select size=4 name="CurrentDisplayColumns"> +% my $i=0; +% foreach my $field (@$CurrentFormat) { +<option value="<%$i++%>><%$field->{Column}%>"> +<%loc( $field->{Column}) %></option> +% } +</select> +<br> +<center> +<input type="submit" name="ColUp" value="^"> +<input type="submit" name="ColDown" value="v"> +<input type="submit" name="RemoveCol" value="<%loc('Delete')%>"> +</center> +</td> +<td colspan=3 align=center> +</td> +</tr> +</table> + +<%ARGS> +$CurrentFormat => undef +$AvailableColumns => undef +</%ARGS> diff --git a/rt/html/Search/Elements/EditQuery b/rt/html/Search/Elements/EditQuery new file mode 100644 index 000000000..783541a64 --- /dev/null +++ b/rt/html/Search/Elements/EditQuery @@ -0,0 +1,65 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& NewListActions, actions => $actions &> +<& /Elements/TitleBoxStart, title => join(': ', grep defined, loc("Query"), $Description) &> +<select size="10" name="clauses" style="width: 100%" multiple> +% $m->out($optionlist); +</select> +<p align="center"> +<input type=submit name="Up" value="^"> +<input type=submit name="Down" value="v"> +<input type=submit name="Left" value="<"> +<input type=submit name="Right" value=">"> +<input type=submit name="Toggle" value="<&|/l&>And/Or</&>"> +<input type=submit name="DeleteClause" value="<&|/l&>Delete</&>"> +%#<input type=submit name="EditQuery" value="Advanced"> +</p> +<& /Elements/TitleBoxEnd &> +<%ARGS> +$Description +$optionlist +$actions +</%ARGS> diff --git a/rt/html/Search/Elements/EditSearches b/rt/html/Search/Elements/EditSearches new file mode 100644 index 000000000..bc6b80e6f --- /dev/null +++ b/rt/html/Search/Elements/EditSearches @@ -0,0 +1,104 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/TitleBoxStart, title => loc('Saved searches') &> +%# Hide all the save functionality if the user shouldn't see it. +% if ($session{'CurrentUser'}->HasRight( Right => 'CreateSavedSearch', +% Object=> $RT::System )) { +<&|/l&>Privacy:</&> +% if ($CurrentSearch->{'Object'} && $CurrentSearch->{'Object'}->id) { +<& SearchPrivacy, Object => $CurrentSearch->{'Object'}->Object &><br> +% } else { +<& SelectSearchObject, Name => 'Owner', Objects => \@Objects &><br> +% } +<&|/l&>Description</&>:<br> +<font size="-1"><input size="25" name="Description" value="<%$CurrentSearch->{'Description'}%>"></font> +<nobr> +% if ($SearchId ne 'new') { +% if ($Dirty) { +<input type="submit" name="Revert" value="<%loc('Revert')%>"> +% } +<input type="submit" name="Delete" value="<%loc('Delete')%>"> +<input type="submit" name="CopySearch" value="<%loc('Copy')%>"> +</nobr> + +% } + +% if ($Dirty or $SearchId eq 'new') { +<input type="submit" name="Save" value="<%loc('Save')%>"> +% } +<hr> +% } +<&|/l&>Load saved search:</&><br> +<& SelectSearchesForObjects, Name => 'LoadSavedSearch', Objects => \@Objects&> +<input value="<%loc('Load')%>" type="submit"> +<& /Elements/TitleBoxEnd &> + +<%init> + +unless ($session{'CurrentUser'}->HasRight( Right => 'LoadSavedSearch', + Object=> $RT::System )) { + return; +} +my @Objects; + +push @Objects, $session{CurrentUser}->UserObj; + +my $groups = RT::Groups->new($session{'CurrentUser'}); + +$groups->LimitToUserDefinedGroups; +$groups->WithMember(PrincipalId => $session{'CurrentUser'}->Id, + Recursively => 1); + + push (@Objects, @{$groups->ItemsArrayRef()}); +</%INIT> + +<%ARGS> +$SearchId => undef +$CurrentSearch => undef +$Description => undef +$HideResults => 0 +$Dirty => 0 +</%ARGS> diff --git a/rt/html/Search/Elements/NewListActions b/rt/html/Search/Elements/NewListActions new file mode 100644 index 000000000..eb82544f3 --- /dev/null +++ b/rt/html/Search/Elements/NewListActions @@ -0,0 +1,66 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% if ($actions[0] ) { +<b><%loc('Results')%></b><br> +% foreach my $action (@actions) { +% next unless ($action); +% my @item = @$action; +% if ($item[1] < 0) { +<font color=red> +% } + <%$item[0]%><BR> +% if ($item[1] < 0) { +</font> +% } +% } +<BR> +% } +<%init> +@actions = grep (/./,@actions); +</%init> +<%ARGS> +@actions => undef +</%ARGS> diff --git a/rt/html/Search/Elements/PickBasics b/rt/html/Search/Elements/PickBasics new file mode 100644 index 000000000..8a48f6b18 --- /dev/null +++ b/rt/html/Search/Elements/PickBasics @@ -0,0 +1,187 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<tr> +<td class="label"> +<&|/l&>id</&> +</td><td> +<& /Elements/SelectEqualityOperator, Name => "idOp" &> +</td><td> +<INPUT Name="ValueOfid" SIZE=5> +</td> +</tr> + +<tr><td align=right> +<& /Elements/SelectAttachmentField, Name => 'AttachmentField' &> +</td><td> +<& /Elements/SelectBoolean, Name => "AttachmentOp", + True => loc("matches"), + False => loc("does not match"), + TrueVal => 'LIKE', + FalseVal => 'NOT LIKE' +&> +</td><td> +<Input Name="ValueOfAttachment" Size=20> +</td> +</tr> +<tr> +<td class="label"> +<&|/l&>Queue</&> +</td><td> +<& /Elements/SelectBoolean, Name => "QueueOp" , + True => loc("is"), + False => loc("isn't"), + TrueVal=> '=', + FalseVal => '!=' &> +</td><td> +<& /Elements/SelectQueue, + Name => "ValueOfQueue", + NamedValues => 1, + CheckQueueRight => 'ShowTicket' &> +</td> +</tr> +<tr> +<td class="label"> +<&|/l&>Status</&> +</td><td> +<& /Elements/SelectBoolean, Name => "StatusOp", + True => loc("is"), + False => loc("isn't"), + TrueVal=> '=', + FalseVal => '!=' +&> +</td><td> +<& /Elements/SelectStatus, Name => "ValueOfStatus", SkipDeleted => 1 &> +</td> +</tr> +<tr><td class="label"> +<SELECT NAME="ActorField"> +<OPTION VALUE="Owner"><&|/l&>Owner</&></OPTION> +<OPTION VALUE="Creator"><&|/l&>Creator</&></OPTION> +<OPTION VALUE="LastUpdatedBy"><&|/l&>LastUpdatedBy</&></OPTION> +</SELECT> +</td><td> +<& /Elements/SelectBoolean, Name => "ActorOp", + TrueVal=> '=', + FalseVal => '!=' +&> +</td><td> +<& /Elements/SelectOwner, Name => "ValueOfActor", ValueAttribute => 'Name' &> +</td> +</tr> +<tr> +<td class="label"> +<& SelectPersonType, Name => 'WatcherField', Default => 'Requestor' &> +</td><td> +<& /Elements/SelectMatch, Name => "WatcherOp" &> +</td><td> +<Input Name="ValueOfWatcher" Size=20> +</tr> +<tr> +<td class="label"> +<& SelectPersonType, Name => 'WatcherGroupField', Default => 'RequestorGroup', Suffix => 'Group' &> +</td><td> +<& /Elements/SelectBoolean, Name => "WatcherGroupOp", + True=> loc('belongs to'), + False=> loc('does not belong to'), + TrueVal=> '=', + FalseVal => '!=' +&> +</td><td> +<& SelectGroup, Name => 'ValueOfWatcherGroup' &> +</td> +</tr> +<tr> +<td class="label"> +<& /Elements/SelectDateType, Name=>"DateField" &> +</td><td> +<& /Elements/SelectDateRelation, Name=>"DateOp" &> +</td><td> +<& /Elements/SelectDate, Name => "ValueOfDate", ShowTime => 0, Default => '' &> +</td></tr> +<tr> +<td class="label"> +<SELECT NAME="TimeField"> +<OPTION VALUE="TimeWorked"><&|/l&>Time Worked</&></OPTION> +<OPTION VALUE="TimeEstimated"><&|/l&>Time Estimated</&></OPTION> +<OPTION VALUE="TimeLeft"><&|/l&>Time Left</&></OPTION> +</SELECT> +</td><td> +<& /Elements/SelectEqualityOperator, Name => "TimeOp" &> +</td><td> +<INPUT Name="ValueOfTime" SIZE=5> +</td> +</tr> +<tr> +<td class="label"> +<SELECT NAME="PriorityField"> +<OPTION VALUE="Priority"><&|/l&>Priority</&></OPTION> +<OPTION VALUE="InitialPriority"><&|/l&>Initial Priority</&></OPTION> +<OPTION VALUE="FinalPriority"><&|/l&>Final Priority</&></OPTION> +</SELECT> +</td><td> +<& /Elements/SelectEqualityOperator, Name => "PriorityOp" &> +</td><td> +<INPUT Name="ValueOfPriority" SIZE=5> +</td> +</tr> +<tr> +<td class="label"> +<& SelectLinks, Name=>"LinksField" &> +</td><td> +<& /Elements/SelectBoolean, Name => "LinksOp", + True => loc("is"), + False => loc("isn't"), + TrueVal=> '=', + FalseVal => '!=' &> +</td><td> +<INPUT Name="ValueOfLinks" value="" SIZE=5> +</td></tr> +<%INIT> +my @people = ('Actor', + 'Watcher', + 'WatcherGroup', + ); +</%INIT> diff --git a/rt/html/Search/Elements/PickCFs b/rt/html/Search/Elements/PickCFs new file mode 100644 index 000000000..435a07ad3 --- /dev/null +++ b/rt/html/Search/Elements/PickCFs @@ -0,0 +1,78 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +% while ( my $CustomField = $CustomFields->Next ) { +% my $name = "'CF.{" . $CustomField->Name . "}'"; +<tr><td class="label"> +<% $CustomField->Name %> +</td> +<td> + <& /Elements/SelectCustomFieldOperator, Name => $name . "Op", + True => loc("is"), + False => loc("isn't"), + TrueVal=> '=', FalseVal => '!=' &> +</td> +<td> +<& /Elements/SelectCustomFieldValue, Name => "ValueOf" . $name, + CustomField => $CustomField, + &> +</td></tr> +% } +<%INIT> +my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'}); +foreach my $id (keys %cfqueues) { + $id =~ s/^.'*(.*).'*$/$1/; + # Gotta load up the $queue object, since queues get stored by name now. my $id + my $queue = RT::Queue->new($session{'CurrentUser'}); + $queue->Load($id); + $CustomFields->LimitToQueue($queue->Id); +} +$CustomFields->LimitToGlobal(); + +</%INIT> + +<%ARGS> +%cfqueues => undef +</%ARGS> diff --git a/rt/html/Search/Elements/PickCriteria b/rt/html/Search/Elements/PickCriteria new file mode 100644 index 000000000..129344443 --- /dev/null +++ b/rt/html/Search/Elements/PickCriteria @@ -0,0 +1,80 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/TitleBoxStart, title => loc('Add Criteria')&> +<table width=100% cellspacing=0 cellpadding=0 border=0> + <tr> + <td> + <table cellspacing=0 border=0> + <tr><td class=label> + <&|/l&>Aggregator</&>: + </td> + <td><& SelectAndOr, Name => "AndOr" &> + </td></tr> + </table> + </td></tr> + <tr> + <td> + <hr> + </td> + </tr> + <tr> + <td valign=top> + <table cellspacing=0 border=0> + <& PickBasics &> + <& PickCFs, cfqueues => \%cfqueues &> + </table> + </td> + </tr> + <tr><td> </td></tr> +</table> + +<& /Elements/TitleBoxEnd &> + +<%ARGS> +$addquery => 0 +$query => undef +%cfqueues => undef +</%ARGS> diff --git a/rt/html/Search/Elements/PickRestriction b/rt/html/Search/Elements/PickRestriction deleted file mode 100644 index a6911df5a..000000000 --- a/rt/html/Search/Elements/PickRestriction +++ /dev/null @@ -1,141 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<FORM ACTION="Listing.html" METHOD="GET"> -<INPUT TYPE=HIDDEN NAME="Bookmark" VALUE="<% $session{'tickets'}->FreezeLimits()|u %>"> -<& /Elements/TitleBoxStart, title => loc('Refine search')&> -<INPUT TYPE=HIDDEN NAME="CompileRestriction" VALUE=1> - -<ul> -<li><&|/l&>Owner is</&> <& /Elements/SelectBoolean, Name => "OwnerOp", - TrueVal=> '=', - FalseVal => '!=' -&> -<& /Elements/SelectOwner, Name => "ValueOfOwner" &> - -<li> -<&|/l&>Requestor email address</&> -<& /Elements/SelectMatch, Name => "RequestorOp" &> -<INPUT Name="ValueOfRequestor" SIZE=20> - -<li> -<&|/l&>Subject</&> <& /Elements/SelectMatch, Name => "SubjectOp" &> -<INPUT Name="ValueOfSubject" SIZE=20> - -<li><&|/l&>Queue</&> <& /Elements/SelectBoolean, Name => "QueueOp" , - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', - FalseVal => '!=' &> -<& /Elements/SelectQueue, Name => loc("ValueOfQueue") &> - - -<li><&|/l&>Priority</&> <& /Elements/SelectEqualityOperator, Name => "PriorityOp" &> - -<INPUT Name="ValueOfPriority" SIZE=5> - -<li> -<& /Elements/SelectDateType, Name => 'DateType' &> -<& /Elements/SelectDateRelation, Name=>"DateOp" &> -<& /Elements/SelectDate, Name => "ValueOfDate", ShowTime => 0, Default => '' &> - -<li><&|/l&>Ticket attachment</&> - -<& /Elements/SelectAttachmentField, Name => 'AttachmentField' &> -<& /Elements/SelectBoolean, Name => "AttachmentFieldOp", - True => loc("matches"), - False => loc("does not match"), - TrueVal => 'LIKE', - FalseVal => 'NOT LIKE' -&> -<Input Name="ValueOfAttachmentField" Size=20> - -<li><&|/l&>Status</&> -<& /Elements/SelectBoolean, Name => "StatusOp", - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', - FalseVal => '!=' -&> -<& /Elements/SelectStatus, Name => "ValueOfStatus" &> - - -% while ( my $CustomField = $CustomFields->Next ) { - -<li><% $CustomField->Name %> - <& /Elements/SelectCustomFieldOperator, Name => "CustomFieldOp". $CustomField->id, - True => loc("is"), - False => loc("isn't"), - TrueVal=> '=', FalseVal => '!=' &> - -<& /Elements/SelectCustomFieldValue, Name => "CustomField".$CustomField->id, - CustomField => $CustomField, - &> -% } - -</UL> - -<& /Elements/TitleBoxEnd &> - -<& /Elements/TitleBoxStart, title => loc('Ordering and sorting')&> - -<UL> - -<li><&|/l&>Results per page</&> <& /Elements/SelectResultsPerPage, Name => "RowsPerPage", - Default => $session{'tickets_rows_per_page'} || '50' -&> - -<li><&|/l&>Sort results by</&> <& /Elements/SelectTicketSortBy, Name => "TicketsSortBy", - Default => $session{'tickets_sort_by'} -&> -<& /Elements/SelectSortOrder, Name => 'TicketsSortOrder', Default => $session{'tickets_sort_order'} &> - -<li><input type="checkbox" name="HideResults" <%$ARGS{'HideResults'} && 'CHECKED'%>> <&|/l&>Don't show search results</&> -<li><& /Elements/Refresh, Name => 'RefreshSearchInterval' , Default => $session{'tickets_refresh_interval'} &> - -</UL> - - -</DIV> - - - -<& /Elements/TitleBoxEnd &> - -<& /Elements/Submit, Label => loc('Search'), Name => 'Action'&> - -</FORM> - - - <%INIT> -my $CustomFields = RT::CustomFields->new( $session{'CurrentUser'}); - foreach ( $session{'tickets'}->RestrictionValues('Queue') ) { - # Gotta load up the $queue object, since queues get stored by name now. - my $queue = RT::Queue->new($session{'CurrentUser'}); - $queue->Load($_); - $CustomFields->LimitToQueue($queue->Id); - } - - $CustomFields->LimitToGlobal(); - -</%INIT> diff --git a/rt/html/Search/Elements/SearchPrivacy b/rt/html/Search/Elements/SearchPrivacy new file mode 100644 index 000000000..270e1baa3 --- /dev/null +++ b/rt/html/Search/Elements/SearchPrivacy @@ -0,0 +1,53 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%args> +$Object => undef +</%args> +% if (ref($Object) eq 'RT::User' && $Object->id == $session{'CurrentUser'}->Id) { +<&|/l&>My saved searches</&> +% } else { +<&|/l, $Object->Name&>[_1]'s saved searches</&> +% } diff --git a/rt/html/Search/Elements/SelectAndOr b/rt/html/Search/Elements/SelectAndOr new file mode 100644 index 000000000..2f3c70477 --- /dev/null +++ b/rt/html/Search/Elements/SelectAndOr @@ -0,0 +1,51 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<input type=radio NAME="<%$Name%>" CHECKED VALUE="AND"><&|/l&>AND</&></input> +<input type=radio NAME="<%$Name%>" VALUE="OR"><&|/l&>OR</&></input> + +<%ARGS> +$Name => "Operator" +</%ARGS> diff --git a/rt/html/Search/Elements/SelectGroup b/rt/html/Search/Elements/SelectGroup new file mode 100644 index 000000000..edd53713f --- /dev/null +++ b/rt/html/Search/Elements/SelectGroup @@ -0,0 +1,65 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<SELECT NAME="<%$Name%>"> +% if ($AllowNull) { +<OPTION VALUE="">-</OPTION> +% } +%while (my $group = $groups->Next) { +<OPTION VALUE="<%$group->id%>" <%$group->id eq $Default && "SELECTED"%>><%$group->Name%></OPTION> +%} +</SELECT> + +<%INIT> +my $groups = new RT::Groups($session{'CurrentUser'}); +$groups->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => $Domain); + +</%INIT> +<%ARGS> +$AllowNull => 1 +$Default=> '' +$Name => 'Group' +$Domain => 'UserDefined'; +</%ARGS> diff --git a/rt/html/Search/Elements/SelectLinks b/rt/html/Search/Elements/SelectLinks new file mode 100644 index 000000000..00ec80bd3 --- /dev/null +++ b/rt/html/Search/Elements/SelectLinks @@ -0,0 +1,64 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<SELECT NAME="<%$Name%>"> +% foreach (@fields) { +<OPTION VALUE="<%$_%>"><&|/l&><%$_%></&></OPTION> +% } +</SELECT> +<%ARGS> +$Name => 'LinksField' +</%ARGS> + +<%INIT> +my @fields = ('HasMember', + 'MemberOf', + 'DependsOn', + 'DependedOnBy', + 'RefersTo', + 'ReferredToBy', + 'LinkedTo', + ); +</%INIT> diff --git a/rt/html/Search/Elements/SelectPersonType b/rt/html/Search/Elements/SelectPersonType new file mode 100644 index 000000000..d4127c97b --- /dev/null +++ b/rt/html/Search/Elements/SelectPersonType @@ -0,0 +1,82 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<SELECT NAME ="<%$Name%>"> +% if ($AllowNull) { +<OPTION VALUE="">-</OPTION> +% } +% for my $option (@types) { +% if ($Suffix) { +<OPTION VALUE="<% $option %><% $Suffix %>" <%$option eq $Default && "SELECTED"%> ><%loc($option)%></OPTION> +% next; +% } +% foreach my $subtype (@subtypes) { +<OPTION VALUE="<%"$option.$subtype"%>" <%$option eq $Default && $subtype eq 'EmailAddress' && "SELECTED"%> ><% loc($option) %> <% loc($subtype) %></OPTION> +% } +% } +</SELECT> + +<%INIT> +my @types; +if ($Scope =~ 'queue') { + @types = qw(Cc AdminCc); +} +elsif ($Suffix eq 'Group') { + @types = qw(Requestor Cc AdminCc Watcher); +} +else { + @types = qw(Requestor Cc AdminCc Watcher Owner); +} + +my @subtypes = qw(EmailAddress Name RealName Nickname Organization Address1 Address2 WorkPhone HomePhone MobilePhone PagerPhone); + +</%INIT> +<%ARGS> +$AllowNull => 1 +$Suffix => '' +$Default=>undef +$Scope => 'ticket' +$Name => 'WatcherType' +</%ARGS> diff --git a/rt/html/Search/Elements/SelectSearchObject b/rt/html/Search/Elements/SelectSearchObject new file mode 100644 index 000000000..e9df5179f --- /dev/null +++ b/rt/html/Search/Elements/SelectSearchObject @@ -0,0 +1,58 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%args> +@Objects => undef +$Name => undef +</%args> +<select name="<%$Name%>"> +% foreach my $object (@Objects) { +% if (ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id) { +<option value="<%ref($object)%>-<%$object->id%>"><&|/l&>My saved searches</&></option> +% } else { +<option value="<%ref($object)%>-<%$object->id%>"><&|/l, $object->Name&>[_1]'s saved searches</&></option> +% } +% } +</select> diff --git a/rt/html/Search/Elements/SelectSearchesForObjects b/rt/html/Search/Elements/SelectSearchesForObjects new file mode 100644 index 000000000..e6be66a58 --- /dev/null +++ b/rt/html/Search/Elements/SelectSearchesForObjects @@ -0,0 +1,66 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%args> +@Objects => undef +$Name => undef +</%args> +<select name="<%$Name%>"> +% foreach my $object (@Objects) { +% if (ref($object) eq 'RT::User' && $object->id == $session{'CurrentUser'}->Id) { +<option value=""><&|/l&>My saved searches</&></option> +% } else { +<option value=""></option> +<option value=""><&|/l, $object->Name&>[_1]'s saved searches</&></option> +% } +% my @searches = $object->Attributes->Named('SavedSearch'); +% foreach my $search (@searches) { +% # Skip it if it is not a ticket search. +% next if ($search->SubValue('SearchType') +% && $search->SubValue('SearchType') ne 'Ticket'); +<option value="<%ref($object)%>-<%$object->id%>-SavedSearch-<%$search->Id%>"> -<%$search->Description||loc('Unnamed search')%></option> +% } +% } +</select> diff --git a/rt/html/Search/Elements/TicketHeader b/rt/html/Search/Elements/TicketHeader deleted file mode 100644 index ed2f60e4e..000000000 --- a/rt/html/Search/Elements/TicketHeader +++ /dev/null @@ -1,40 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<TR> -<& TicketHeaderCell , Attribute => 'id', Header => '#'&> -<& TicketHeaderCell , Attribute => 'Subject'&> -<& TicketHeaderCell , Attribute => 'Status'&> -<& TicketHeaderCell , Attribute => 'Queue'&> -<& TicketHeaderCell , Attribute => 'Owner'&> -<& TicketHeaderCell , Attribute => 'Priority'&> -</TR> -<TR> -<TH class="ticketheader"> </TH> -<& TicketHeaderCell , Attribute => 'Requestor(s)'&> -<& TicketHeaderCell , Attribute => 'Created'&> -<& TicketHeaderCell , Attribute => 'Told', Header => 'Last Contact'&> -<& TicketHeaderCell , Attribute => 'LastUpdated', Header => 'Last Updated'&> -<& TicketHeaderCell , Attribute => 'TimeLeft', Header => 'Left'&> -</TR> -%# loc('Last Notified'); diff --git a/rt/html/Search/Elements/TicketHeaderCell b/rt/html/Search/Elements/TicketHeaderCell deleted file mode 100644 index 5def9ea37..000000000 --- a/rt/html/Search/Elements/TicketHeaderCell +++ /dev/null @@ -1,55 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<%INIT> -my ($order,$curorder); - $Attribute =~ s/Obj->(Name|AsString|AgeAsString)//g; - if ($session{'tickets_sort_order'} =~ /^asc$/i) { - $order = 'DESC'; - $curorder = 'ASC'; - } else { - $order = 'ASC'; - $curorder = 'DESC'; - } -$Header = $Attribute unless ($Header); - -</%INIT> -<th class="ticketheader"> -% if (grep (/^$Attribute$/i, $session{'tickets'}->SortFields)) { -<A -% if ($Attribute eq $session{'tickets_sort_by'}) { -class="currenttab" -HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|u%>&TicketsSortBy=<%$Attribute%>&TicketsSortOrder=<%$order%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>"> -% } else { -HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|u%>&TicketsSortBy=<%$Attribute%>&TicketsSortOrder=<%$curorder%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>"> -% } -<% loc($Header) %> -</A> -% } else { -<% loc($Header) %> -% } -</th> -<%ARGS> -$Header => undef -$Attribute => undef -</%ARGS> diff --git a/rt/html/Search/Elements/TicketRow b/rt/html/Search/Elements/TicketRow deleted file mode 100644 index 5d1ad209a..000000000 --- a/rt/html/Search/Elements/TicketRow +++ /dev/null @@ -1,55 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<SPAN class="search"> -<TR -% if ($i%2) { -CLASS="oddline" -% } else { -CLASS="evenline" -% } -> -<TD ROWSPAN="2"><B><A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=<%$Ticket->Id%>"><%$Ticket->id%></a></B></TD> -<TD><B><A HREF="<%$RT::WebPath%>/Ticket/Display.html?id=<%$Ticket->Id%>"><%$Ticket->Subject%></a></B></TD> -<TD><%loc($Ticket->Status)%></TD> -<TD><%$Ticket->QueueObj->Name%></TD> -<TD><%$Ticket->Owner == $RT::Nobody->Id ? loc('Nobody') : $Ticket->OwnerObj->Name%></TD> -<TD><%$Ticket->Priority%></TD> -</TR> -<TR -% if ($i%2) { -CLASS="oddline" -% } else { -CLASS="evenline" -% } -><TD><small><%$Ticket->Requestors->MemberEmailAddressesAsString%></small></TD> -<TD><SMALL><%$Ticket->CreatedObj->AgeAsString || '-'%></SMALL></TD> -<TD><SMALL><%$Ticket->ToldObj->AgeAsString || '-'%></SMALL></TD> -<TD><SMALL><%$Ticket->LastUpdatedObj->AgeAsString || '-'%></SMALL></TD> -<TD><SMALL><%$Ticket->TimeLeft%></SMALL></TD> -</TR> -</SPAN> -<%ARGS> -$Ticket => undef -$i => undef -</%ARGS> diff --git a/rt/html/Search/Listing.html b/rt/html/Search/Listing.html deleted file mode 100644 index 508534549..000000000 --- a/rt/html/Search/Listing.html +++ /dev/null @@ -1,112 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<& /Elements/Header, Title => $title, Refresh => $session{'tickets_refresh_interval'} &> -<& /Ticket/Elements/Tabs, - current_tab => 'Search/Listing.html', - Title => $title &> - -%if ($ticketcount && ! $ARGS{'HideResults'}) { -<TABLE WIDTH=100% border=0 cellpadding=2 CELLSPACING=0> -<& Elements/TicketHeader, %ARGS &> -% my $i; -%while (my $Ticket = $session{'tickets'}->Next) { -% $i++; -<& Elements/TicketRow, Ticket => $Ticket, i=> $i, %ARGS &> -%} -</TABLE> -<div align=center> -<font size=2> -<a href="Listing.html?GotoPage=1"><&|/l&>First page</&></a> - -% if ( $session{'tickets'}->FirstRow >= $session{'tickets_rows_per_page'}-1 ) { -<a href="Listing.html?GotoPage=Prev"><<&|/l&>Previous page</&></a> - -% } -% if ( $session{'tickets'}->FirstRow + $session{'tickets_rows_per_page'} < $ticketcount ) { -<a href="Listing.html?GotoPage=Next"><&|/l&>Next page</&>></a> -% } -%# <form method=get action="Listing.html"><&|/l&>Goto page</&> <input name=GotoPage size=2></form> -</font> -</div> -<!--<div align=right>--> -<table width="100%" border=0 cellpadding=3 CELLSPACING=1> -<tr> -<td align=left> -(<&|/l, ($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() ) &>[_1] - [_2] shown</&>) -</td> -<td align=right> - -<a href="Bulk.html"><&|/l&>Update all these tickets at once</&></a> -<!--</div>--> -</td> -</tr> -</table> - -% } -<TABLE WIDTH="100%"> -<TR> -<TD VALIGN="TOP"> -<& /Elements/TitleBoxStart, title => loc('Current search criteria')&> - -%my %restrictions=$session{'tickets'}->DescribeRestrictions(); -%foreach my $row (keys %restrictions){ -<%$restrictions{"$row"}%> <A HREF="<% $RT::WebPath %>/Search/Listing.html?DeleteRestriction=<%$row%>">[<&|/l&>delete</&>]</a><br> -%} -<BR> -<BR> -<A HREF="<% $RT::WebPath%>/Search/Listing.html?Bookmark=<%$session{'tickets'}->FreezeLimits()|u%>&TicketsSortBy=<%$session{'tickets_sort_by'}%>&TicketsSortOrder=<%$session{'tickets_sort_order'}%>&RowsPerPage=<%$session{'tickets_rows_per_page'}%>"><&|/l&>Bookmarkable URL for this search</&></a> -<& /Elements/TitleBoxEnd&> -</TD> -<TD> - -<& Elements/PickRestriction, %ARGS &> - -</TD> -</TR> -</TABLE> - -<%INIT> - -my ($title, $ticketcount); -$session{'i'}++; -if ($session{'tickets'}) { - if ($ARGS{'DeleteRestriction'}) { - $session{'tickets'}->DeleteRestriction($ARGS{'DeleteRestriction'}); - } - if ( ($ARGS{'ClearRestrictions'}) || ($ARGS{'NewSearch'}) ) { - $session{'tickets'}->ClearRestrictions; - } -} - ProcessSearchQuery(ARGS=>\%ARGS); - $session{'tickets'}->RedoSearch(); - if ( $session{'tickets'}->DescribeRestrictions()) { - $ticketcount = $session{tickets}->CountAll(); - $title = loc('Found [quant,_1,ticket]', $ticketcount); - } else { - $title = loc("Find tickets"); - } -</%INIT> -<%CLEANUP> -$session{'tickets'}->PrepForSerialization(); -</%CLEANUP> diff --git a/rt/html/Search/Results.html b/rt/html/Search/Results.html new file mode 100755 index 000000000..5849378a8 --- /dev/null +++ b/rt/html/Search/Results.html @@ -0,0 +1,138 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/Header, Title => $title, Refresh => $session{'tickets_refresh_interval'} &> +<& /Ticket/Elements/Tabs, + current_tab => "Search/Results.html".$QueryString, + Title => $title, + Format => $Format, + Query => $Query, + Rows => $Rows, + OrderBy => $OrderBy, + Order => $Order &> +<& /Elements/TicketList, + Query => $Query, + AllowSorting => 1, + OrderBy => $OrderBy, + Order => $Order, + Rows => $Rows, + Page => $Page, + Format => $Format, + BaseURL => $RT::WebPath."/Search/Results.html?" + + &> +<div align=right> +<form method=get action="<%$RT::WebPath%>/Search/Results.html"> +<input type="hidden" name="Query" value="<%$Query%>" /> +<input type="hidden" name="Format" value="<%$Format%>" /> +<input type="hidden" name="HideResults" value="<%$HideResults%>" /> +<input type="hidden" name="Rows" value="<%$Rows%>" /> +<input type="hidden" name="Page" value="<%$Page%>" /> +<input type="hidden" name="OrderBy" value="<%$OrderBy%>" /> +<input type="hidden" name="Order" value="<%$Order%>" /> +<& /Elements/Refresh, Name => 'TicketsRefreshInterval', Default => $session {'tickets_refresh_interval'} &> +<input type=submit value="<&|/l&>Go!</&>"> +</form> +</div> +<div align=right> +<a href="<%$RT::WebPath%>/Search/Bulk.html<%$QueryString%>"><&|/l&>Update multiple tickets</&></a><br> +<a href="<%$RT::WebPath%>/Search/Results.html<%$QueryString%>"><&|/l&>Bookmarkable link</&></a><br> +<a href="<%$RT::WebPath%>/Search/Results.tsv<%$QueryString%>"><&|/l&>spreadsheet</&></a> | +<a href="<%$RT::WebPath%>/Search/Results.rdf<%$ShortQueryString%>"><&|/l&>RSS</&></a> | +<a href="<%$RT::WebPath%>/Tools/Offline.html<%$ShortQueryString%>"><&|/l&>Work offline</&></a><br> +<& /Elements/Callback, _CallbackName => 'SearchActions', QueryString => $QueryString&> +</div> +<%INIT> +my ($title, $ticketcount); +$session{'i'}++; +$session{'tickets'} = RT::Tickets->new($session{'CurrentUser'}) ; +$session{'tickets'}->FromSQL($Query) if ($Query); +$session{'tickets'}->OrderBy(FIELD => $OrderBy, ORDER => $Order); + + +$session{'CurrentSearchHash'} = { + Format => $Format, + Query => $Query, + Order => $Order, + OrderBy => $OrderBy, + RowsPerPage => $Rows + }; + + + +if ( $session{'tickets'}->Query()) { + $ticketcount = $session{tickets}->CountAll(); + $title = loc('Found [quant,_1,ticket]', $ticketcount); +} else { + $title = loc("Find tickets"); +} + +my $QueryString = "?".$m->comp('/Elements/QueryString', + Query => $Query, + Format => $Format, + Rows => $Rows, + OrderBy => $OrderBy, + Order => $Order, + Page => $Page); + +my $ShortQueryString = "?".$m->comp('/Elements/QueryString', Query => $Query); + +if ($ARGS{'TicketsRefreshInterval'}) { + $session{'tickets_refresh_interval'} = $ARGS{'TicketsRefreshInterval'}; +} + +</%INIT> +<%CLEANUP> +$session{'tickets'}->PrepForSerialization(); +</%CLEANUP> +<%ARGS> +$Query => undef +$Format => undef +$HideResults => 0 +$Rows => 50 +$Page => 1 +$OrderBy => 'id' +$Order => 'ASC' +</%ARGS> diff --git a/rt/html/Search/Results.rdf b/rt/html/Search/Results.rdf new file mode 100644 index 000000000..ee71fea94 --- /dev/null +++ b/rt/html/Search/Results.rdf @@ -0,0 +1,85 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%INIT> + +my $Tickets = RT::Tickets->new($session{'CurrentUser'}); +$Tickets->FromSQL($ARGS{'Query'}); +$r->content_type('application/rdf+xml'); + + + + # create an RSS 1.0 file (http://purl.org/rss/1.0/) + use XML::RSS; + my $rss = new XML::RSS (version => '1.0'); + $rss->channel( + title => "$RT::rtname: Syndicated Search", + link => $RT::WebURL, + description => "", + dc => { + }, + syn => { + updatePeriod => "hourly", + updateFrequency => "1", + updateBase => "1901-01-01T00:00+00:00", + }, + ); + + + while ( my $Ticket = $Tickets->Next()) { + my $row; + $rss->add_item( + title => $Ticket->Subject, + link => $RT::WebURL."/Ticket/Display.html?id=".$Ticket->id, + description => $Ticket->Transactions->First->Content, + dc => { + subject => $Ticket->Subject, + creator => $Ticket->CreatorObj->RealName . "<".$Ticket->CreatorObj->EmailAddress.">", + }, + ); + } +$m->out($rss->as_string); +$m->abort(); +</%INIT> diff --git a/rt/html/Search/Results.tsv b/rt/html/Search/Results.tsv new file mode 100644 index 000000000..17aa88ae1 --- /dev/null +++ b/rt/html/Search/Results.tsv @@ -0,0 +1,115 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%INIT> + +my $Tickets = RT::Tickets->new($session{'CurrentUser'}); +$Tickets->FromSQL($ARGS{'Query'}); + +my @rows; +my %known_cfs; + +my @attrs = qw( id QueueObj->Name Subject Status TimeEstimated TimeWorked TimeLeft Priority FinalPriority OwnerObj->Name + Requestors->MemberEmailAddressesAsString DueObj->ISO ToldObj->ISO + CreatedObj->ISO ResolvedObj->ISO ); + + $r->content_type('application/vnd.ms-excel'); + while ( my $Ticket = $Tickets->Next()) { + my $row; + foreach my $attr (@attrs) { + my $method = '$Ticket->'.$attr.'()'; + $row->{$attr} = eval $method; + if ($@) {die "Failed to find $attr - ". $@}; + } + + my $cfs = $Ticket->QueueObj->CustomFields(); + while (my $cf = $cfs->Next) { + my @content; + my $values = $Ticket->CustomFieldValues($cf->Id); + while (my $value = $values->Next) { + push @content, $value->Content; + } + $row->{'CustomField-'.$cf->Id} = join(', ',@content); + if ($row->{'CustomField-'.$cf->Id}) { + $known_cfs{$cf->Id} = $cf->Name; + } + } + push @rows, $row; + + + } +{ +my @header; + foreach my $attr (@attrs) { + my $label = $attr; + $label =~ s'Obj-.(?:AsString|Name|ISO)''g; + $label =~ s'-\>MemberEmailAddressesAsString''g; + push @header, $label; + } + foreach my $id (sort keys %known_cfs) { + push @header, $known_cfs{$id}; + } + +$m->out(join("\t", @header)); +$m->out("\n"); +} +foreach my $row (@rows) { + my @row; + foreach my $attr(@attrs) { + push @row, $row->{"$attr"}; + } + foreach my $id (sort keys %known_cfs) { + my $val = $row->{'CustomField-'.$id}; + $val =~ s/(\n|\r)//g; + push @row, $val; + } + + $m->out(join("\t",@row)); + $m->out("\n"); +} + + +$m->abort(); +</%INIT> diff --git a/rt/html/SelfService/Attachment/dhandler b/rt/html/SelfService/Attachment/dhandler index 4bebbe565..f953c2486 100644 --- a/rt/html/SelfService/Attachment/dhandler +++ b/rt/html/SelfService/Attachment/dhandler @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <%init> $m->comp('/Ticket/Attachment/dhandler', %ARGS); $m->abort; diff --git a/rt/html/SelfService/Closed.html b/rt/html/SelfService/Closed.html index b9b2ac672..2d49a6897 100644 --- a/rt/html/SelfService/Closed.html +++ b/rt/html/SelfService/Closed.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,14 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<& /SelfService/Elements/Header, Title => loc('Closed Tickets') &> +%# END BPS TAGGED BLOCK }}} +<& /SelfService/Elements/Header, Title => loc('Closed tickets') &> <& /SelfService/Elements/MyRequests, status => ['rejected', 'resolved'], friendly_status => loc('closed') &> diff --git a/rt/html/SelfService/Create.html b/rt/html/SelfService/Create.html index 7bbc88a65..d60ae267a 100644 --- a/rt/html/SelfService/Create.html +++ b/rt/html/SelfService/Create.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& Elements/Header, Title => loc("Create a ticket") &> <FORM ACTION="Display.html" METHOD="POST" ENCTYPE="multipart/form-data"> @@ -28,43 +50,49 @@ <TABLE> <TR> -<TD> +<TD class="label"> <&|/l&>Queue</&>: -</TD> -<TD> -<& /Elements/SelectNewTicketQueue, Verbose => 'True' &> +</td> +<td class="value"> + <input type="hidden" name="Queue" value="<%$queue_obj->id%>"> + <b><%$queue_obj->Name%></b> (<%$queue_obj->Description%>) </TD> </TR> <TR> -<TD> +<TD class="label"> <&|/l&>Requestors</&>: </TD> -<TD> +<TD class="value"> <INPUT Name="Requestors" Value="<%$session{CurrentUser}->EmailAddress%>" SIZE=20> </TD> </TR> <TR> -<TD> +<TD class="label"> <&|/l&>Cc</&>: </TD> -<TD> +<TD class="value"> <INPUT NAME="Cc" SIZE=20> </TD> </TR> <TR> -<TD> +<TD class="label"> <&|/l&>Subject</&>: </TD> -<TD> +<TD class="value"> <INPUT Name="Subject" SIZE=60 MAXSIZE=100 value=""> </TD> </TR> -<TR> -<TD> +<tr> + <td colspan="2"> + <& /Ticket/Elements/EditCustomFields, QueueObj => $queue_obj &> + </td> +</tr> +<tr> +<TD class="label"> <&|/l&>Attach file</&>: </TD> -<TD> -<INPUT Name="Attach" type=file> +<TD class="value"> +<INPUT Name="Attach" type="file"> </TD> </TR> <TR> @@ -78,3 +106,10 @@ </FORM> +<%args> +$Queue => undef +</%args> +<%init> +my $queue_obj = RT::Queue->new($session{'CurrentUser'}); +$queue_obj->Load($Queue); +</%init> diff --git a/rt/html/SelfService/CreateTicketInQueue.html b/rt/html/SelfService/CreateTicketInQueue.html new file mode 100755 index 000000000..5e8973610 --- /dev/null +++ b/rt/html/SelfService/CreateTicketInQueue.html @@ -0,0 +1,61 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& Elements/Header, Title => loc("Create a ticket") &> + +<h1><&|/l&>Select a queue for your new ticket</&></h1> + +<dl> +% while (my $queue = $queues->Next) { +% next unless $queue->CurrentUserHasRight('CreateTicket'); + +<dt><a href="<%$RT::WebPath%>/SelfService/Create.html?Queue=<%$queue->id%>"><%$queue->Name%></a></dt> +<dd><%$queue->Description%></dd> +% } +</dl> +<%init> +my $queues = RT::Queues->new($session{'CurrentUser'}); +$queues->UnLimit; +</%init> diff --git a/rt/html/SelfService/Display.html b/rt/html/SelfService/Display.html index fc3fcb289..f7140df02 100644 --- a/rt/html/SelfService/Display.html +++ b/rt/html/SelfService/Display.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,31 +20,48 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('#[_1]: [_2]', $Ticket->id, $Ticket->Subject) &> <& /Elements/ListActions, actions => \@results &> <TABLE WIDTH="100%" class="ticketsummary" > <TR> - <TD VALIGN=TOP WIDTH="50%"> + <TD VALIGN=TOP WIDTH="50%" class="boxcontainer"> <& /Elements/TitleBoxStart, title => loc('The Basics'), title_class=> 'inverse', color => "#993333" &> <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &> + <& /Ticket/Elements/ShowCustomFields, Ticket => $Ticket &> <& /Elements/TitleBoxEnd &> </TD> - <TD VALIGN=TOP WIDTH="50%"> + <TD VALIGN=TOP WIDTH="50%" class="boxcontainer"> <& /Elements/TitleBoxStart, title => loc("Dates"), title_class=> 'inverse', color => "#663366" &> - <& /Ticket/Elements/ShowDates, Ticket => $Ticket &> + <& /Ticket/Elements/ShowDates, Ticket => $Ticket, UpdatedLink => 0 &> <& /Elements/TitleBoxEnd &> </TD> </TR> @@ -46,7 +69,16 @@ -<& /Ticket/Elements/ShowHistory, Ticket => $Ticket&> +%#!!pape: selfservice_find_attachments.patch {{ +<& /Ticket/Elements/ShowHistory, + Ticket => $Ticket, + URIFile => "Display.html", + ShowHeaders => $ARGS{'ShowHeaders'}, + AttachPath => "Attachment", + Attachments => $attachments, + UpdatePath => "Update.html" +&> +%#!!pape: selfservice_find_attachments.patch }} @@ -61,6 +93,30 @@ my ( $field, @results ); my @id = ( ref $id eq 'ARRAY' ) ? @{$id} : ($id); my $Ticket = new RT::Ticket( $session{'CurrentUser'} ); + +# store the uploaded attachment in session +if ( $ARGS{'Attach'} ) { # attachment? + $session{'Attachments'} = {} unless defined $session{'Attachments'}; + + my $subject = "$ARGS{'Attach'}"; + + # since CGI.pm deutf8izes the magic field, we need to add it back. + Encode::_utf8_on($subject); + + # strip leading directories + $subject =~ s#^.*[\\/]##; + + my $attachment = MakeMIMEEntity( + Subject => $subject, + Body => "", + AttachmentFieldName => 'Attach' + ); + + $session{'Attachments'} = + { %{ $session{'Attachments'} || {} }, + $ARGS{'Attach'} => $attachment }; +} + if ( $id[0] eq 'new' ) { # {{{ Create a new ticket @@ -73,65 +129,87 @@ if ( $id[0] eq 'new' ) { unless ( $Queue->CurrentUserHasRight('CreateTicket') ) { $m->comp( 'Error.html', - Why => - loc('You have no permission to create tickets in that queue.') ); + Why => + loc('You have no permission to create tickets in that queue.') ); $m->abort; } - my @Requestors = split ( /\s*,\s*/, $ARGS{'Requestors'} ); - my @Cc = split ( /\s*,\s*/, $ARGS{'Cc'} ); - - my $MIMEObj = MakeMIMEEntity( Subject => $ARGS{'Subject'}, - From => $ARGS{'From'}, - Cc => $ARGS{'Cc'}, - Body => $ARGS{'Content'}, - AttachmentFieldName => 'Attach' ); - - #TODO in Create_Details.html: priorities and due-date - my ( $id, $Trans, $ErrMsg ) = $Ticket->Create( Queue => $ARGS{Queue}, - Requestor => \@Requestors, - Cc => \@Cc, - Subject => $ARGS{Subject}, - MIMEObj => $MIMEObj ); - unless ( $id && $Trans ) { - $m->comp( 'Error.html', Why => $ErrMsg ); - $m->abort(); - } - push ( @results, $ErrMsg ); + ( $Ticket, @results ) = + CreateTicket( Attachments => $session{'Attachments'}, %ARGS, Status => 'new' ); + + unless ( $Ticket->id ) { + $m->comp( 'Error.html', Why => join( "\n", @results )); + $m->abort(); + } + + # }}} + + # delete temporary storage entry to make WebUI clean + unless ( keys %{ $session{'Attachments'} } and $ARGS{'UpdateAttach'} ) { + delete $session{'Attachments'}; + } + + # }}} + } + else { + unless ( $Ticket->Load( $id[0] ) ) { + $m->comp( 'Error.html', + Why => loc( "Couldn't load ticket '[_1]'", $id ) ); + $m->abort(); + } + } # }}} -} -else { - unless ( $Ticket->Load( $id[0] ) ) { + + unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) { $m->comp( 'Error.html', - Why => loc( "Couldn't load ticket '[_1]'", $id ) ); + Why => loc("No permission to display that ticket") ); $m->abort(); } -} -# }}} + my ( $code, $msg ); -unless ( $Ticket->CurrentUserHasRight('ShowTicket') ) { - $m->comp( 'Error.html', - Why => loc("No permission to display that ticket") ); - $m->abort(); -} + #Update the status + if ( ( defined $ARGS{'Status'} ) + and $ARGS{'Status'} + and ( $ARGS{'Status'} ne $Ticket->Status ) ) + { + ( $code, $msg ) = $Ticket->SetStatus( $ARGS{'Status'} ); + push @results, "$msg"; + } -my ( $code, $msg ); + # }}} -#Update the status -if ( ( defined $ARGS{'Status'} ) - and ( $ARGS{'Status'} ne $Ticket->Status ) ) { - ( $code, $msg ) = $Ticket->SetStatus( $ARGS{'Status'} ); - push @results, "$msg"; -} + if ( + $session{'Attachments'} + || ( $ARGS{'UpdateContent'} ne '' + && $ARGS{'UpdateContent'} ne "-- \n" + . $session{'CurrentUser'}->UserObj->Signature ) + ) + { + $ARGS{UpdateAttachments} = $session{'Attachments'}; + } + ProcessUpdateMessage( + ARGSRef => \%ARGS, + Actions => \@results, + TicketObj => $Ticket + ); + + # delete temporary storage entry to make WebUI clean + unless ( keys %{ $session{'Attachments'} } and $ARGS{'UpdateAttach'} ) { + delete $session{'Attachments'}; + } + + my @cfupdates = ProcessObjectCustomFieldUpdates(Object => $Ticket, ARGSRef => \%ARGS); + push (@results, @cfupdates); + + # }}} -ProcessUpdateMessage( ARGSRef => \%ARGS, - Actions => \@results, - TicketObj => $Ticket ); + my $Transactions = $Ticket->Transactions; -my $Transactions = $Ticket->Transactions; + my $attachments = + $m->comp( '/Ticket/Elements/FindAttachments', Ticket => $Ticket ); </%INIT> diff --git a/rt/html/SelfService/Elements/GotoTicket b/rt/html/SelfService/Elements/GotoTicket index 71da8c115..50efaa24e 100644 --- a/rt/html/SelfService/Elements/GotoTicket +++ b/rt/html/SelfService/Elements/GotoTicket @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,11 +20,27 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <FORM ACTION="<%$RT::WebPath%>/SelfService/Display.html"><input type=submit value="<&|/l&>Goto ticket</&>"> <input size=4 name=id></FORM> diff --git a/rt/html/SelfService/Elements/Header b/rt/html/SelfService/Elements/Header index 6ad137999..c7e6a9167 100644 --- a/rt/html/SelfService/Elements/Header +++ b/rt/html/SelfService/Elements/Header @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,12 +20,28 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, %ARGS, Prefs => '/SelfService/Prefs.html' &> <& /SelfService/Elements/Tabs, %ARGS &> diff --git a/rt/html/SelfService/Elements/MyRequests b/rt/html/SelfService/Elements/MyRequests index 95ede0811..2df8ce842 100644 --- a/rt/html/SelfService/Elements/MyRequests +++ b/rt/html/SelfService/Elements/MyRequests @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/TitleBoxStart, title => $title &> <TABLE BORDER=0 cellspacing=1 cellpadding=1 BGCOLOR="#eeeeee" WIDTH=100%> <TR> @@ -35,7 +57,7 @@ <a href="<%$RT::WebPath%>/SelfService/Display.html?id=<%$Ticket->Id%>"><%$Ticket->Id%>: <%$Ticket->Subject%></a> </TD> <TD> -<%$Ticket->Status%> +<%loc($Ticket->Status)%> </TD><TD> <%$Ticket->OwnerObj->Name%> </TR> @@ -49,6 +71,7 @@ $title ||= loc("My [_1] tickets", $friendly_status); my $MyTickets; $MyTickets = new RT::Tickets ($session{'CurrentUser'}); $MyTickets->LimitWatcher(TYPE => 'Requestor', VALUE => $session{'CurrentUser'}->EmailAddress); +$MyTickets->OrderBy(FIELD => 'id', ORDER => 'ASC'); foreach my $status (@status) { diff --git a/rt/html/SelfService/Elements/Tabs b/rt/html/SelfService/Elements/Tabs index efab86676..802fd6525 100644 --- a/rt/html/SelfService/Elements/Tabs +++ b/rt/html/SelfService/Elements/Tabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/PageLayout, current_toptab => $current_toptab, current_tab => $current_tab, @@ -45,12 +67,16 @@ my $tabs = { A => { title => loc('Open tickets'), path => 'SelfService/Closed.html', }, C => { title => loc('New ticket'), - path => 'SelfService/Create.html' - }, - Z => { title => loc('Preferences'), - path => 'SelfService/Prefs.html' + path => 'SelfService/CreateTicketInQueue.html' } }; +if ($session{'CurrentUser'}->HasRight( Right => 'ModifySelf', + Object => $RT::System )) { + $tabs->{Z} = { title => loc('Preferences'), + path => 'SelfService/Prefs.html' + }; +} + my $actions = { B => { html => $m->scomp('GotoTicket') } diff --git a/rt/html/SelfService/Error.html b/rt/html/SelfService/Error.html index ac93aceff..8ac9f81ea 100644 --- a/rt/html/SelfService/Error.html +++ b/rt/html/SelfService/Error.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('Error') &> <h2 class="title"><%loc('Error')%></h2> <& /Elements/TitleBoxStart, title => $Title &> diff --git a/rt/html/SelfService/Prefs.html b/rt/html/SelfService/Prefs.html index 3bbb9b913..3913203fb 100644 --- a/rt/html/SelfService/Prefs.html +++ b/rt/html/SelfService/Prefs.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => loc('Preferences') &> <& /Elements/ListActions, actions => \@results &> @@ -33,7 +55,7 @@ <& /Elements/TitleBoxEnd &> <BR> % } -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Save Changes') &> </form> diff --git a/rt/html/SelfService/Update.html b/rt/html/SelfService/Update.html index 9ff31775f..816a610aa 100644 --- a/rt/html/SelfService/Update.html +++ b/rt/html/SelfService/Update.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,24 +20,84 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<& /SelfService/Elements/Header, Title =>loc('Update ticket #[_1]', $Ticket->id) &> +%# END BPS TAGGED BLOCK }}} +<& /SelfService/Elements/Header, + Title =>loc('Update ticket #[_1]', $Ticket->id) +&> <FORM ACTION="Display.html" METHOD=POST ENCTYPE="multipart/form-data"> <input type=hidden name="UpdateType" value="response"> +<input TYPE="hidden" NAME="id" VALUE="<%$Ticket->Id%>"> +<table> + <tr> + <td class="label"> + <&|/l&>Status</&> + </td> + <td class="value"> + <& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)",loc($DefaultStatus)) &> + </td> + </tr> + <tr> + <td class="label"> + <&|/l&>Subject</&> + </td> + <td class="value"> + <input name="UpdateSubject" size=60 value="<% $Ticket->Subject %>"> + </td> -<&|/l&>Status</&>: <& /Elements/SelectStatus, Name=>"Status", Default => $DefaultStatus &><br> -<&|/l&>Subject</&>: <input name="UpdateSubject" size=60 value="Re: <% $Ticket->Subject %>"> <br> -<&|/l&>Attach</&>: <input name="UpdateAttachment" type=file><br> -<& /Elements/MessageBox, Name=>"UpdateContent", QuoteTransaction=>$ARGS{QuoteTransaction} &> - <INPUT TYPE=HIDDEN NAME=id VALUE="<%$Ticket->Id%>"><br> + </tr> +% if (exists $session{'Attachments'}) { +<tr> + <TD class="label"> + <&|/l&>Attached file</&> + </TD> + <TD COLSPAN=5 class="value"> + <&|/l&>Check box to delete</&><BR> +% foreach my $attach_name (keys %{$session{'Attachments'}}) { + <input type="checkbox" name="DeleteAttach-<%$attach_name%>" value="1"><%$attach_name%><BR> +% } # end of foreach + </TD> +</TR> +% } # end of if +<tr> + <td class"label"> + <&|/l&>Attach</&> + </td> + <td class="value"> + <input name="Attach" type="file"> + <input type="hidden" name="UpdateAttach" value="1"> + </td> + </tr> +</table> +<& /Ticket/Elements/EditCustomFields, TicketObj => $Ticket &> +<& /Elements/MessageBox, + Name => "UpdateContent", + QuoteTransaction => $ARGS{QuoteTransaction} + &> + <br> <& /Elements/Submit &> @@ -43,14 +109,14 @@ my $Ticket = LoadTicket($id); -my $title = loc("Update ticket #[_1]", $Ticket->id); +my $title = loc( "Update ticket #[_1]", $Ticket->id ); $DefaultStatus = $Ticket->Status() unless ($DefaultStatus); -Abort(loc("No permission to view update ticket")) - unless ( $Ticket->CurrentUserHasRight('ReplyToTicket') or - $Ticket->CurrentUserHasRight('ModifyTicket') ); +Abort( loc("No permission to view update ticket") ) + unless ( $Ticket->CurrentUserHasRight('ReplyToTicket') + or $Ticket->CurrentUserHasRight('ModifyTicket') ); </%INIT> diff --git a/rt/html/SelfService/index.html b/rt/html/SelfService/index.html index 71dc1156e..f3ccb8555 100644 --- a/rt/html/SelfService/index.html +++ b/rt/html/SelfService/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /SelfService/Elements/Header, Title => undef &> <& /SelfService/Elements/MyRequests &> diff --git a/rt/html/Ticket/Attachment/dhandler b/rt/html/Ticket/Attachment/dhandler index e0f00f57a..584fd721d 100644 --- a/rt/html/Ticket/Attachment/dhandler +++ b/rt/html/Ticket/Attachment/dhandler @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <%perl> my ($ticket, $trans,$attach, $filename); my $arg = $m->dhandler_arg; # get rest of path @@ -65,4 +87,6 @@ $m->out($AttachmentObj->OriginalContent); $m->abort; </%perl> - +<%attr> +AutoFlush => 0 +</%attr> diff --git a/rt/html/Ticket/Create.html b/rt/html/Ticket/Create.html index 5b8c908a1..b547242f2 100644 --- a/rt/html/Ticket/Create.html +++ b/rt/html/Ticket/Create.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,18 +20,34 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Create a new ticket") &> <& /Elements/Tabs, current_toptab => "Ticket/Create.html", Title => loc("Create a new ticket") &> -<FORM ACTION="<%$RT::WebPath%>/Ticket/Create.html" METHOD="POST" ENCTYPE="multipart/form-data"> +<FORM ACTION="<%$RT::WebPath%>/Ticket/Create.html" METHOD="POST" ENCTYPE="multipart/form-data" NAME="TicketCreate"> <INPUT TYPE=HIDDEN Name="id" VALUE="new"> <A NAME="top"> @@ -34,55 +56,55 @@ <BR> <& /Elements/TitleBoxStart, contentbg => "#cccccc", title => loc("Create a new ticket") &> <TABLE border=0 cellpadding=0 cellspacing=0> -<TR><TD><&|/l&>Queue</&></TD> -<TD><% $QueueObj->Name %> +<TR><TD class=label><&|/l&>Queue</&>:</TD> +<TD class=value><% $QueueObj->Name %> <INPUT TYPE=HIDDEN NAME=Queue Value="<%$QueueObj->Name%>"> </TD> -<TD><&|/l&>Status</&>: +<TD class=label><&|/l&>Status</&>: </TD> -<TD> -<& /Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}||'new' &> +<TD class=value> +<& /Elements/SelectStatus, Name => "Status", Default => $ARGS{Status}||'new', DefaultValue => 0 &> </TD> -<TD> +<TD class=label> <&|/l&>Owner</&>: </TD> -<TD> -<& /Elements/SelectOwner, Name => "Owner", QueueObj => $QueueObj, Default => $ARGS{Owner}||undef &> +<TD class=value> +<& /Elements/SelectOwner, Name => "Owner", QueueObj => $QueueObj, Default => $ARGS{Owner}||$RT::Nobody->Id, DefaultValue => 0 &> </TD> </TR> <TR> -<TD> +<TD class=label> <&|/l&>Requestors</&>: </TD> -<TD COLSPAN=5> +<TD class=value COLSPAN=5> <INPUT Name="Requestors" Value="<% ($ARGS{Requestors}) || $session{CurrentUser}->EmailAddress %>" SIZE=40> </TD> </TR> <TR> -<TD> +<TD class=labeltop> <&|/l&>Cc</&>: </TD> -<TD COLSPAN=5> -<INPUT NAME="Cc" SIZE=40<% $ARGS{Cc} && " VALUE=\"$ARGS{Cc}\""%>><BR> +<TD class=value COLSPAN=5> +<INPUT NAME="Cc" SIZE=40 VALUE="<% $ARGS{Cc} %>"><BR> <i><font size=-2> <&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)</&></font></i> </TD> </TR> <TR> -<TD> +<TD class=labeltop> <&|/l&>Admin Cc</&>: </TD> -<TD COLSPAN=5> -<INPUT NAME="AdminCc" SIZE=40<% $ARGS{AdminCc} && " VALUE=\"$ARGS{AdminCc}\""%>><BR> +<TD class=value COLSPAN=5> +<INPUT NAME="AdminCc" SIZE=40 VALUE="<% $ARGS{AdminCc} %>"><BR> <i><font size=-2> <&|/l&>(Sends a carbon-copy of this update to a comma-delimited list of administrative email addresses. These people <b>will</b> receive future updates.)</&></font></i> </TD> </TR> <TR> -<TD> +<TD class=label> <&|/l&>Subject</&>: </TD> -<TD COLSPAN=5> +<TD class=value COLSPAN=5> <INPUT Name="Subject" SIZE=60 MAXSIZE=100 value="<%$ARGS{Subject} || ''%>"> </TD> </TR> @@ -91,15 +113,24 @@ <& /Ticket/Elements/EditCustomFields, QueueObj => $QueueObj &> </TD> </TR> +% if ($TxnCFs->Count) { +% while (my $CF = $TxnCFs->Next()) { +<TR> +<TD ALIGN=RIGHT><% $CF->Name %>:</TD> +<TD><& /Elements/EditCustomField, CustomField => $CF, NamePrefix => + "Object-RT::Transaction--CustomField-" &><em><% $CF->FriendlyType %></em></TD> +</TD></TR> +% } +% } <TR> % if (exists $session{'Attachments'}) { -<TD> +<TD class=label> <&|/l&>Attached file</&>: </TD> <TD COLSPAN=5> <&|/l&>Check box to delete</&><BR> % foreach my $attach_name (keys %{$session{'Attachments'}}) { -<input type="checkbox" name="DeleteAttach-<%$attach_name%>"><%$attach_name%><BR> +<input type="checkbox" name="DeleteAttach-<%$attach_name%>" value="1"><%$attach_name%><BR> % } # end of foreach </TD> </TR> @@ -108,7 +139,7 @@ <TD> <&|/l&>Attach file</&>: </TD> -<TD COLSPAN=5> +<TD class=value COLSPAN=5> <INPUT TYPE=FILE NAME="Attach"> <INPUT TYPE=SUBMIT NAME="AddMoreAttach" VALUE="<&|/l&>Add More Files</&>"> </TD> @@ -117,7 +148,7 @@ <TD COLSPAN=6> <&|/l&>Describe the issue below</&>:<br> % if (exists $ARGS{Content}) { -<& /Elements/MessageBox, Default => $ARGS{Content} &> +<& /Elements/MessageBox, Default => $ARGS{Content}, IncludeSignature => 0 &> % } else { <& /Elements/MessageBox, QuoteTransaction => $QuoteTransaction &> %} @@ -152,8 +183,8 @@ <TABLE BORDER=0> <TR><TD ALIGN=RIGHT><&|/l&>Priority</&>:</TD><TD><input size=3 name="InitialPriority" value="<% $ARGS{InitialPriority} ? $ARGS{InitialPriority} : $QueueObj->InitialPriority %>"></TD></TR> <TR><TD ALIGN=RIGHT><&|/l&>Final Priority</&>:</TD><TD><input size=3 name="FinalPriority" value="<% $ARGS{FinalPriority} ? $ARGS{FinalPriority} : $QueueObj->FinalPriority %>"></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Time Worked</&>:</TD><TD><input size=3 name="TimeWorked"<% $ARGS{TimeWorked} && " VALUE=\"$ARGS{TimeWorked}\"" %>></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Time Left</&>:</TD><TD><input size=3 name="TimeLeft"<% $ARGS{TimeLeft} && " VALUE=\"$ARGS{TimeLeft}\"" %>></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Time Worked</&>:</TD><TD><&|/l,'<input size=3 name="TimeWorked" value="'.$ARGS{TimeWorked}.'">'&>[_1] min</&></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Time Left</&>:</TD><TD><&|/l,'<input size=3 name="TimeLeft" value="'.$ARGS{TimeLeft}.'">'&>[_1] min</&></TD></TR> </TABLE> <& /Elements/TitleBoxEnd &> <br> @@ -162,26 +193,27 @@ color => "#663366" &> <TABLE BORDER=0> -<TR><TD ALIGN=RIGHT><&|/l&>Starts</&>:</TD><TD><input size=10 name="Starts"<% $ARGS{Starts} && " VALUE=\"$ARGS{Starts}\"" %>></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Due</&>:</TD><TD><input size=10 name="Due"<% $ARGS{Due} && " VALUE=\"$ARGS{Due}\"" %>></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Starts</&>:</TD><TD><input size=10 name="Starts" value="<% $ARGS{Starts} %>"></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Due</&>:</TD><TD><input size=10 name="Due" value="<% +$ARGS{Due}%>"></TD></TR> </TABLE> <& /Elements/TitleBoxEnd &> <BR> </TD> <TD VALIGN="TOP"> -<& /Elements/TitleBoxStart, title => loc('Relationships'), +<& /Elements/TitleBoxStart, title => loc('Links'), title_class=> 'inverse', titleright => '', color=> "#336633" &> -<i><&|/l&>(Enter ticket ids or URLs, seperated with spaces)</&></i> +<i><&|/l&>(Enter ticket ids or URLs, separated with spaces)</&></i> <TABLE BORDER=0> -<TR><TD ALIGN=RIGHT><&|/l&>Depends on</&></TD><TD><input size=10 name="new-DependsOn"<% $ARGS{'new-DependsOn'} && " VALUE=\"$ARGS{'new-DependsOn'}\""%>></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Depended on by</&></TD><TD><input size=10 name="DependsOn-new"<% $ARGS{'DependsOn-new'} && " VALUE=\"$ARGS{'DependsOn-new'}\"" %>></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Parents</&></TD><TD><input size=10 name="new-MemberOf"<% $ARGS{'new-MemberOf'} && " VALUE=\"$ARGS{'new-MemberOf'}\"" %>></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Children</&></TD><TD><input size=10 name="MemberOf-new" <% $ARGS{'MemberOf-new'} && " VALUE=\"$ARGS{'MemberOf-new'}\"" %>></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Refers to</&></TD><TD><input size=10 name="new-RefersTo"<% $ARGS{'new-RefersTo'} && " VALUE=\"$ARGS{'new-MemberOf'}\"" %>></TD></TR> -<TR><TD ALIGN=RIGHT><&|/l&>Referred to by</&></TD><TD><input size=10 name="RefersTo-new"<% $ARGS{'RefersTo-new'} && " VALUE=\"$ARGS{'RefersTo-new'}\"" %>></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Depends on</&></TD><TD><input size=10 name="new-DependsOn" value="<% $ARGS{'new-DependsOn'} %>"></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Depended on by</&></TD><TD><input size=10 name="DependsOn-new" value="<% $ARGS{'DependsOn-new'} %>"></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Parents</&></TD><TD><input size=10 name="new-MemberOf" value="<% $ARGS{'new-MemberOf'} %>"></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Children</&></TD><TD><input size=10 name="MemberOf-new" value="<% $ARGS{'MemberOf-new'} %>"></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Refers to</&></TD><TD><input size=10 name="new-RefersTo" value="<% $ARGS{'new-RefersTo'} %>"></TD></TR> +<TR><TD ALIGN=RIGHT><&|/l&>Referred to by</&></TD><TD><input size=10 name="RefersTo-new" value="<% $ARGS{'RefersTo-new'} %>"></TD></TR> </TABLE> @@ -200,9 +232,22 @@ <BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR> <%INIT> + + + my $QueueObj = new RT::Queue($session{'CurrentUser'}); $QueueObj->Load($Queue) || Abort(loc("Queue could not be loaded.")); -my $CFs = $QueueObj->CustomFields(); +my $CFs = $QueueObj->TicketCustomFields(); +my $TxnCFs = $QueueObj->TicketTransactionCustomFields(); + +# if no due date has been set explicitly, then use the +# queue's default if it exists +if ($QueueObj->DefaultDueIn && !$ARGS{'Due'}) { + my $default_due = RT::Date->new($session{'CurrentUser'}); + $default_due->SetToNow(); + $default_due->AddDays($QueueObj->DefaultDueIn); + $ARGS{'Due'} = $default_due->ISO(); +} # {{{ deal with deleting uploaded attachments foreach my $key (keys %ARGS) { @@ -218,8 +263,6 @@ if ($ARGS{'Attach'}) { # attachment? my $subject = "$ARGS{'Attach'}"; - # since CGI.pm deutf8izes the magic field, we need to add it back. - Encode::_utf8_on($subject); # strip leading directories $subject =~ s#^.*[\\/]##; @@ -244,7 +287,7 @@ unless (keys %{$session{'Attachments'}} and $ARGS{'id'} eq 'new') { if ((!exists $ARGS{'AddMoreAttach'}) && ($ARGS{'id'} eq 'new')) { # new ticket? $m->comp('Display.html', %ARGS); - $m->abort(); + return(); } </%INIT> diff --git a/rt/html/Ticket/Display.html b/rt/html/Ticket/Display.html index cf32dce9d..dd4c093dc 100644 --- a/rt/html/Ticket/Display.html +++ b/rt/html/Ticket/Display.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,45 +20,73 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, - Title => loc("#[_1]: [_2]", $Ticket->Id, $Ticket->Subject) &> + Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &> <& /Ticket/Elements/Tabs, - Ticket => $Ticket, - current_tab => 'Ticket/Display.html?id='.$Ticket->id, - Title => loc("#[_1]: [_2]", $Ticket->Id, $Ticket->Subject) &> + Ticket => $TicketObj, + current_tab => 'Ticket/Display.html?id='.$TicketObj->id, + Title => loc("#[_1]: [_2]", $TicketObj->Id, $TicketObj->Subject) &> <& /Elements/ListActions, actions => \@Actions &> -<& /Ticket/Elements/ShowSummary, Ticket => $Ticket &> - +<& /Elements/TitleBoxStart, title => loc('Ticket metadata'), contentbg => +'#ffffff' &> +<& /Ticket/Elements/ShowSummary, Ticket => $TicketObj, Attachments => $attachments &> +<& /Elements/TitleBoxEnd &> <BR> + +<& /Elements/Callback, _CallbackName => 'BeforeShowHistory', Ticket => $TicketObj, %ARGS &> + <& /Ticket/Elements/ShowHistory , - Ticket => $Ticket, + Ticket => $TicketObj, + Tickets => $Tickets, Collapsed => $ARGS{'Collapsed'}, - ShowHeaders => $ARGS{'ShowHeaders'} &> + ShowHeaders => $ARGS{'ShowHeaders'}, + Attachments => $attachments, + AttachmentContent => $attachment_content + + &> <%ARGS> $id => undef $Create => undef -$ShowHeaders => undef +$ShowHeaders => 0 $Collapsed => undef +$TicketObj => undef </%ARGS> <%INIT> - my ($linkid, $message, $tid, $Ticket, @Actions); -$Ticket = new RT::Ticket($session{'CurrentUser'}); +$m->comp('/Elements/Callback', _CallbackName => 'Initial', TicketObj => $TicketObj, ARGSRef => \%ARGS); -unless ($id) { +my ($linkid, $message, $tid, @Actions, $Tickets); + +unless ($id || $TicketObj) { Abort('No ticket specified'); } @@ -67,50 +101,59 @@ if ($ARGS{'id'} eq 'new') { unless ($Queue->CurrentUserHasRight('CreateTicket')) { Abort('You have no permission to create tickets in that queue.'); } - ($Ticket, @Actions) = - CreateTicket(Attachments => $session{'Attachments'}, %ARGS); + ($TicketObj, @Actions) = + CreateTicket(Attachments => $session{'Attachments'}, %ARGS); delete $session{'Attachments'}; - unless ($Ticket->CurrentUserHasRight('ShowTicket')) { - Abort("No permission to view newly created ticket #".$Ticket->id."."); - } + unless ($TicketObj->CurrentUserHasRight('ShowTicket')) { + Abort("No permission to view newly created ticket #".$TicketObj->id."."); + } # }}} -} +} else { + if (!$TicketObj) { -else { - $Ticket = LoadTicket($ARGS{'id'}); - unless ($Ticket->CurrentUserHasRight('ShowTicket')) { - Abort("No permission to view ticket"); - } + $TicketObj = RT::Ticket->new($session{'CurrentUser'}); + $TicketObj = LoadTicket($ARGS{'id'}); + unless ($TicketObj->CurrentUserHasRight('ShowTicket')) { + Abort("No permission to view ticket"); + } + } -if (defined $ARGS{'Action'}) { - if ($ARGS{'Action'} =~ /^(Steal|Kill|Take|SetTold)$/) { - my $action = $1; - my ($res, $msg)=$Ticket->$action(); - push(@Actions, $msg); - } -} + if (defined $ARGS{'Action'}) { + if ($ARGS{'Action'} =~ /^(Steal|Kill|Take|SetTold)$/) { + my $action = $1; + my ($res, $msg)=$TicketObj->$action(); + push(@Actions, $msg); + } + } - if ( $ARGS{'UpdateContent'} ) { - $ARGS{'UpdateContent'} =~ s/\r\n/\n/g; - if ( $ARGS{'UpdateContent'} ne '' - && $ARGS{'UpdateContent'} ne "-- \n" - . $session{'CurrentUser'}->UserObj->Signature ) { - $ARGS{UpdateAttachments} = $session{'Attachments'}; - ProcessUpdateMessage( ARGSRef => \%ARGS, - Actions => \@Actions, - TicketObj => $Ticket ); - delete $session{'Attachments'}; - } + $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'}; } -#Process status updates -my @BasicActions = ProcessTicketBasics(ARGSRef => \%ARGS, TicketObj=>$Ticket); -my @results = ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS); + #Process status updates + my @BasicActions = ProcessTicketBasics(ARGSRef => \%ARGS, TicketObj=>$TicketObj); + my @results = ProcessTicketLinks( TicketObj => $TicketObj, ARGSRef => \%ARGS); -push (@Actions, @BasicActions, @results); + push (@Actions, @BasicActions, @results); } -</%INIT> +$m->comp('/Elements/Callback', _CallbackName => 'BeforeDisplay', + TicketObj => \$TicketObj, Tickets => \$Tickets, ARGSRef => \%ARGS); + +my $attachments = $m->comp('Elements/FindAttachments', Ticket => $TicketObj, Tickets => $Tickets); +my $attachment_content = $m->comp('Elements/LoadTextAttachments', Ticket => $TicketObj); + +</%INIT> diff --git a/rt/html/Ticket/Elements/AddCustomers b/rt/html/Ticket/Elements/AddCustomers new file mode 100644 index 000000000..01c7367c4 --- /dev/null +++ b/rt/html/Ticket/Elements/AddCustomers @@ -0,0 +1,50 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# +%# 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. +<BR> +<%$msg%><br> + +% if (@Customers) { + +<br><i>(Check box to link)<i> +<table> +% foreach my $customer (@Customers) { +<tr> + <td> + <input type="checkbox" name="Ticket-AddCustomer-<% $customer->{'custnum'} %>" VALUE="1" <% scalar(@Customers) == 1 ? 'CHECKED' : '' %>> + <A HREF="<%$freeside_url%>/view/cust_main.cgi?<% $customer->{'custnum'} %>"><% &RT::URI::freeside::small_custview($customer->{'custnum'}, &RT::URI::freeside::FreesideGetConfig('countrydefault'), 1) |n %> + </td> +</tr> +% } + +% } + +<%INIT> +my ($msg); + +my $freeside_url = &RT::URI::freeside::FreesideURL(); + +my @Customers = (); +if ( $CustomerString ) { + @Customers = &RT::URI::freeside::smart_search( 'search' => $CustomerString ); +} + +my @Services = (); +if ($ServiceString) { + @Services = (); #service_search(); +} + +</%INIT> + +<%ARGS> +$CustomerString => undef +$ServiceString => undef +</%ARGS> diff --git a/rt/html/Ticket/Elements/AddWatchers b/rt/html/Ticket/Elements/AddWatchers index e9f651593..98314b9d2 100644 --- a/rt/html/Ticket/Elements/AddWatchers +++ b/rt/html/Ticket/Elements/AddWatchers @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <BR> <%$msg%><br> @@ -77,6 +99,7 @@ my ($msg, $Users, $Groups); if ($UserString) { $Users = RT::Users->new($session{'CurrentUser'}); $Users->Limit(FIELD => $UserField, VALUE => $UserString, OPERATOR => $UserOp); + $Users->LimitToPrivileged if $PrivilegedOnly; } if ($GroupString) { @@ -94,4 +117,5 @@ $UserString => undef $GroupField => 'Name' $GroupOp => '=' $GroupString => undef +$PrivilegedOnly => undef </%ARGS> diff --git a/rt/html/Ticket/Elements/BulkLinks b/rt/html/Ticket/Elements/BulkLinks index e6b9cd54f..6a3859aa3 100644 --- a/rt/html/Ticket/Elements/BulkLinks +++ b/rt/html/Ticket/Elements/BulkLinks @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <TABLE> <TR> <TD class="label"><&|/l&>Merge into</&>:</TD> diff --git a/rt/html/Ticket/Elements/EditBasics b/rt/html/Ticket/Elements/EditBasics index 5d66b1fc1..715685153 100644 --- a/rt/html/Ticket/Elements/EditBasics +++ b/rt/html/Ticket/Elements/EditBasics @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,62 +20,71 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <TABLE> - <TR><td> - <table> + <TR> <td class="label"><&|/l&>Subject</&>:</td> - <td class="value"> - <input name=Subject value="<%$TicketObj->Subject|h%>" SIZE=50> - </td> - </table> - </td></TR> - <TR><td> - <table> - <TD> - <& /Elements/ShadedBox, - title => loc('Status'), - content => $SelectStatus &> - </TD> - <TD> - <& /Elements/ShadedBox, - title => loc('Time Worked'), - content => "<input name=TimeWorked value=\"".$TicketObj->TimeWorked."\" SIZE=5>" &> - </TD> - <TD> - <& /Elements/ShadedBox, - title => loc('Time Left'), - content => "<input name=TimeLeft value=\"".$TicketObj->TimeLeft."\" SIZE=5>" -&> - </TD> - <TD> - <& /Elements/ShadedBox, - title => loc('Priority'), - content => "<input name=Priority value=\"".$TicketObj->Priority."\" SIZE=3>" &> - </TD> - <TD> - <& /Elements/ShadedBox, - title => loc('Final Priority'), - content => "<input name=FinalPriority value=\"".$TicketObj->FinalPriority."\" SIZE=3>" &> - </TD> - <TD> - <& /Elements/ShadedBox, - title => loc('Queue'), - content => "$SelectQueue" &> - </TD> - </table> - </td></TR> + <td class="value"><input name=Subject value="<%$TicketObj->Subject|h%>" SIZE=50></td> + </TR> + + <TR> + <td class="label"><&|/l&>Status</&>:</td> + <td class="value"><%$SelectStatus|n%></td> + </TR> + <TR> + <td class="label"><&|/l&>Queue</&>:</td> + <td class="value"><%$SelectQueue|n%></td> + </TR> + <TR> + <td class="label"><&|/l&>Time Estimated</&>:</td> + <td class="value"><input name=TimeEstimated value="<%$TicketObj->TimeEstimated|h%>" SIZE="5"></td> + </TR> + <TR> + <td class="label"><&|/l&>Time Worked</&>:</td> + <td class="value"><input name=TimeWorked value="<%$TicketObj->TimeWorked|h%>" SIZE="5"></td> + </TR> + <TR> + <td class="label"><&|/l&>Time Left</&>:</td> + <td class="value"><input name=TimeLeft value="<%$TicketObj->TimeLeft|h%>" SIZE="5"></td> + </TR> + + <TR> + <td class="label"><&|/l&>Priority</&>:</td> + <td class="value"><input name=Priority value="<%$TicketObj->Priority|h%>" SIZE="5"></td> + </TR> + + <TR> + <td class="label"><&|/l&>Final Priority</&>:</td> + <td class="value"><input name=FinalPriority value="<%$TicketObj->FinalPriority|h%>" SIZE="5"></td> + </TR> +<& /Elements/Callback, _CallbackName => 'EndOfList', TicketObj => $TicketObj, %ARGS &> </TABLE> <%INIT> #It's hard to do this inline, so we'll preload the html of the selectstatus in here. -my $SelectStatus = $m->scomp("/Elements/SelectStatus", Name => 'Status', Default=> $TicketObj->Status); +my $SelectStatus = $m->scomp("/Elements/SelectStatus", Name => 'Status', DefaultLabel => loc("[_1] (Unchanged)",loc($TicketObj->Status))); my $SelectQueue = $m->scomp("/Elements/SelectQueue", Name => 'Queue', Default =>$TicketObj->QueueObj->Id); </%INIT> diff --git a/rt/html/Ticket/Elements/EditCustomField b/rt/html/Ticket/Elements/EditCustomField index 1fc7d4388..63687acd7 100644 --- a/rt/html/Ticket/Elements/EditCustomField +++ b/rt/html/Ticket/Elements/EditCustomField @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,57 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -% my $Values; -% if ($TicketObj) { -% $Values = $TicketObj->CustomFieldValues($CustomField->id); -% } -% if ($CustomField->Type eq 'FreeformSingle') { - <input name="<%$NamePrefix%><%$CustomField->Id%>-Value" - size="<%$Cols%>" -% if ($TicketObj) { - value="<%$Values->Count ? $Values->First->Content : ''%>" -% } -> -% } elsif ($CustomField->Type eq 'FreeformMultiple') { -% my $content; -% if ($TicketObj) { -% while (my $value = $Values->Next ) { -% $content .= $value->Content; -% } -% } -<input type="hidden" name="<%$NamePrefix%><%$CustomField->Id%>-Values-Magic" value="1"> -<textarea cols=<%$Cols%> rows=<%$Rows%> name="<%$NamePrefix%><%$CustomField->Id%>-Values"><%$content%></textarea> -% } elsif ($CustomField->Type =~ /^Select/) { - <input type="hidden" name="<%$NamePrefix%><%$CustomField->Id%>-Values-Magic" value="1"> - <select name="<%$NamePrefix%><%$CustomField->Id%>-Values" - size="<%$Rows%>" - <%$CustomField->Type eq 'SelectMultiple' && 'MULTIPLE'%>> -% my $CustomFieldValues = $CustomField->Values(); -% my $selected; -% while (my $value = $CustomFieldValues->Next) { - <option value="<%$value->Name%>" -% if ($TicketObj) { - <% $Values->HasEntry($value->Name) && ($selected = 1) && 'SELECTED' %> -% } elsif ($Default) { - <% ($Default eq $value->Name) && ($selected = 1) && 'SELECTED' %> -% } - ><% $value->Name%></option> -% } - <option value="" <% !$selected && 'SELECTED' %>><&|/l&>(no value)</&></option> - </select> -% } -<%ARGS> -$TicketObj => undef -$CustomField => undef -$NamePrefix => undef -$Rows => 5 -$Cols=> 15 -$Default => undef -</%ARGS> +%# END BPS TAGGED BLOCK }}} +<%init> + +# RT 3.2 API compatibility glue + +$RT::Logger->debug("Ticket/Elements/EditCustomField is deprecated in RT 3.4 and will be removed in 3.6."); + +$ARGS{'NamePrefix'} =~ s/^Ticket-/Object-RT::Ticket-/; +$ARGS{'NamePrefix'} =~ s/^CustomField-/Object-RT::Ticket--CustomField-/; +$m->comp('/Elements/EditCustomField', %ARGS, Object=> $ARGS{'TicketObj'}); +</%init> diff --git a/rt/html/Ticket/Elements/EditCustomFields b/rt/html/Ticket/Elements/EditCustomFields index 6b2738965..d566f4e71 100644 --- a/rt/html/Ticket/Elements/EditCustomFields +++ b/rt/html/Ticket/Elements/EditCustomFields @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <table> <tr> <td valign="top" width="50%"> @@ -44,7 +66,11 @@ <b><%$CustomField->Name%></b><br> <i><%$CustomField->FriendlyType%></i> </td> - <td class="entry"><& EditCustomField, TicketObj => $TicketObj, CustomField => $CustomField, NamePrefix => $NamePrefix &></td> + <td class="entry"><& /Elements/EditCustomField, + Object => $TicketObj, + CustomField => $CustomField, + NamePrefix => $NamePrefix + &></td> </tr> % } </table> @@ -57,12 +83,12 @@ my $CustomFields; my $NamePrefix; if ($TicketObj) { - $CustomFields = $TicketObj->QueueObj->CustomFields(); - $NamePrefix = "Ticket-".$TicketObj->Id."-CustomField-"; + $CustomFields = $TicketObj->CustomFields(); + $NamePrefix = "Object-RT::Ticket-".$TicketObj->Id."-CustomField-"; } else { - $CustomFields = $QueueObj->CustomFields(); - $NamePrefix = "CustomField-"; + $CustomFields = $QueueObj->TicketCustomFields(); + $NamePrefix = "Object-RT::Ticket--CustomField-"; } diff --git a/rt/html/Ticket/Elements/EditCustomers b/rt/html/Ticket/Elements/EditCustomers new file mode 100644 index 000000000..c5a6f708c --- /dev/null +++ b/rt/html/Ticket/Elements/EditCustomers @@ -0,0 +1,67 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# +%# 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. +<TABLE width=100%> + <TR> + <TD VALIGN=TOP WIDTH=50%> + <h3><&|/l&>Current Customers</&></h3> + +<table> + <tr> + <td><i><&|/l&>(Check box to disassociate)</&></i></td> + </tr> + <tr> + <td class="value"> +% #while (my $link = $Ticket->MemberOf->Next) { +% foreach my $link ( +% grep { $_->TargetURI->Resolver->{'fstable'} eq 'cust_main' } +% grep { $_->TargetURI->Scheme eq 'freeside' } +% @{ $Ticket->_Links('Base')->ItemsArrayRef } +% ) { + + <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>"> +%# <& ShowLink, URI => $link->TargetURI &><br> + <A HREF="<% $link->TargetURI->Resolver->HREF %>"><% $link->TargetURI->Resolver->AsStringLong |n %></A> + <BR> +% } + </td> + </tr> +</table> + +</TD> + +<TD VALIGN=TOP> +<h3><&|/l&>New Customer Links</&></h3> +<&|/l&>Find customer</&><BR> +<input name="CustomerString"> +<input type=submit name="OnlySearchForCustomers" value="<&|/l&>Go!</&>"> +<br><i>cust #, name, company or phone</i> +<BR> +%#<BR> +%#<&|/l&>Find service</&><BR> +%#<input name="ServiceString"> +%#<input type=submit name="OnlySearchForServices" value="<&|/l&>Go!</&>"> +%#<br><i>username, username@domain, domain, or IP address</i> +%#<BR> + +<& AddCustomers, Ticket => $Ticket, + CustomerString => $CustomerString, + ServiceString => $ServiceString, &> + +</TD> +</TR> +</TABLE> + +<%ARGS> +$CustomerString => undef +$ServiceString => undef +$Ticket => undef +</%ARGS> diff --git a/rt/html/Ticket/Elements/EditDates b/rt/html/Ticket/Elements/EditDates index 1f3bf1b49..a19774192 100644 --- a/rt/html/Ticket/Elements/EditDates +++ b/rt/html/Ticket/Elements/EditDates @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <TABLE> <TR> <TD class="label"><&|/l&>Starts</&>:</TD> diff --git a/rt/html/Ticket/Elements/EditLinks b/rt/html/Ticket/Elements/EditLinks deleted file mode 100644 index 7a522dda6..000000000 --- a/rt/html/Ticket/Elements/EditLinks +++ /dev/null @@ -1,150 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<TABLE width=100%> - <TR> - <TD VALIGN=TOP WIDTH=50%> - <h3><&|/l&>Current Relationships</&></h3> - -<table> - <tr> - <td></td> - <td><i><&|/l&>(Check box to delete)</&></i></td> - </tr> - <tr> - <td class="labeltop"><&|/l&>Depends on</&>:</td> - <td class="value"> -% while (my $link = $Ticket->DependsOn->Next) { -% my $member = $link->TargetObj; - <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>"> - <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> - [<%$member->Status%>]<br> -% } - </td> - </tr> - <tr> - <td class="labeltop"><&|/l&>Depended on by</&>:</td> - <td class="value"> -% while (my $link = $Ticket->DependedOnBy->Next) { -% my $member = $link->BaseObj; - <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-"> - <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> - [<%$member->Status%>]<br> -% } - </td> - </tr> - <tr> - <td class="labeltop"><&|/l&>Parents</&>:</td> - <td class="value"> -% while (my $link = $Ticket->MemberOf->Next) { -% my $member = $link->TargetObj; - <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>"> - <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> - [<%$member->Status%>]<br> -% } - </td> - </tr> - <tr> - <td class="labeltop"><&|/l&>Children</&>:</td> - <td class="value"> -% while (my $link = $Ticket->Members->Next) { - <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-"> -% my $member = $link->BaseObj; - <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> - [<%$member->Status%>]<br> -% } - </td> - </tr> - <tr> - <td class="labeltop"><&|/l&>Refers to</&>:</td> - <td class="value"> -% while (my $link = $Ticket->RefersTo->Next) { - <INPUT TYPE=CHECKBOX NAME="DeleteLink--<%$link->Type%>-<%$link->Target%>"> -% if ($link->TargetURI->IsLocal) { -% my $member = $link->TargetObj; - <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br> -% } else { - <A HREF="<%$link->TargetURI->Resolver->HREF%>"><%$link->TargetURI->Resolver->AsString%></A><br> -% } -%} - </td> - </tr> - <tr> - <td class="labeltop"><&|/l&>Referred to by</&>:</td> - <td class="value"> -% while (my $link = $Ticket->ReferredToBy->Next) { - <INPUT TYPE=CHECKBOX NAME="DeleteLink-<%$link->Base%>-<%$link->Type%>-"> -% if ($link->BaseURI->IsLocal) { -% my $member = $link->BaseObj; - <a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br> -% } else { - <A HREF="<%$link->BaseURI->Resolver->HREF%>"><%$link->BaseURI->Resolver->AsString%></A><br> -%} -% } - </td> - </tr> -</table> - -</TD> -<TD VALIGN=TOP> -<h3><&|/l&>New Relationships</&></h3> -<i><&|/l&>Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces.</&></i><br> -<TABLE> - <TR> - <TD class="label"><&|/l&>Merge into</&>:</TD> - <TD class="entry"><input name="<%$Ticket->Id%>-MergeInto"> <i><&|/l&>(only one ticket)</&></i></TD> - </TR> - <TR> - <TD class="label"><&|/l&>Depends on</&>:</TD> - <TD class="entry"><input name="<%$Ticket->Id%>-DependsOn"></TD> - </TR> - <TR> - <TD class="label"><&|/l&>Depended on by</&>:</TD> - <TD class="entry"><input name="DependsOn-<%$Ticket->Id%>"></TD> - </TR> - <TR> - <TD class="label"><&|/l&>Parents</&>:</TD> - <TD class="entry"><input name="<%$Ticket->Id%>-MemberOf"></TD> - </TR> - <TR> - <TD class="label"><&|/l&>Children</&>:</TD> - <TD class="entry"> <input name="MemberOf-<%$Ticket->Id%>"></TD> - </TR> - <TR> - <TD class="label"><&|/l&>Refers to</&>:</TD> - <TD class="entry"><input name="<%$Ticket->Id%>-RefersTo"></TD> - </TR> - <TR> - <TD class="label"><&|/l&>Referred to by</&>:</TD> - <TD class="entry"> <input name="RefersTo-<%$Ticket->Id%>"></TD> - </TR> -</TABLE> -</TD> -</TR> -</TABLE> - - - -<%ARGS> -$Ticket => undef -</%ARGS> diff --git a/rt/html/Ticket/Elements/EditPeople b/rt/html/Ticket/Elements/EditPeople index 1ab8f4ace..055d7ba20 100644 --- a/rt/html/Ticket/Elements/EditPeople +++ b/rt/html/Ticket/Elements/EditPeople @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <TABLE> <TR> <TD VALIGN=TOP> @@ -30,17 +52,17 @@ <& /Elements/SelectUsers &> <input type=submit name="OnlySearchForPeople" value="<&|/l&>Go!</&>"> <BR> -<&|/l&>Find group whose</&><BR> +<&|/l&>Find groups whose</&><BR> <& /Elements/SelectGroups &> <input type=submit name="OnlySearchForGroup" value="<&|/l&>Go!</&>"> <& AddWatchers, Ticket => $Ticket, UserString => $UserString, UserOp => $UserOp, UserField => $UserField, GroupString => $GroupString, GroupOp => $GroupOp, - GroupField => $GroupField &> + GroupField => $GroupField, PrivilegedOnly => $PrivilegedOnly &> </TD><TD VALIGN=TOP> <h3><&|/l&>Owner</&></h3> -<&|/l&>Owner</&>: <& /Elements/SelectOwner, Name => 'Owner', QueueObj => $Ticket->QueueObj, TicketObj => $Ticket, Default => $Ticket->OwnerObj->Id &> +<&|/l&>Owner</&>: <& /Elements/SelectOwner, Name => 'Owner', QueueObj => $Ticket->QueueObj, TicketObj => $Ticket, Default => $Ticket->OwnerObj->Id, DefaultValue => 0&> <h3><&|/l&>Current watchers</&></h3> <&|/l&>(Check box to delete)</&><br> @@ -64,5 +86,6 @@ $UserString => undef $GroupField => undef $GroupOp => undef $GroupString => undef +$PrivilegedOnly => undef $Ticket => undef </%ARGS> diff --git a/rt/html/Ticket/Elements/EditWatchers b/rt/html/Ticket/Elements/EditWatchers index 145071cec..0089932f4 100644 --- a/rt/html/Ticket/Elements/EditWatchers +++ b/rt/html/Ticket/Elements/EditWatchers @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <ul> %# Print out a placeholder if there are none. %if ($Members->Count == 0 ) { @@ -30,7 +52,7 @@ %while (my $watcher=$Members->Next) { <li> -<INPUT TYPE=CHECKBOX NAME="Ticket-DelWatcher-Type-<%$Watchers->Type%>-Principal-<%$watcher->MemberId%>" UNCHECKED> +<INPUT TYPE=CHECKBOX NAME="Ticket-DeleteWatcher-Type-<%$Watchers->Type%>-Principal-<%$watcher->MemberId%>" value="1" UNCHECKED> %if ($watcher->MemberObj->IsUser) { <a href="<%$RT::WebPath%>/Admin/Users/Modify.html?id=<%$watcher->MemberObj->Object->id%>"> <%$watcher->MemberObj->Object->Name%></a> diff --git a/rt/html/Ticket/Elements/FindAttachments b/rt/html/Ticket/Elements/FindAttachments new file mode 100755 index 000000000..017c77288 --- /dev/null +++ b/rt/html/Ticket/Elements/FindAttachments @@ -0,0 +1,93 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%INIT> +my %documents; + +#A default implementation here loops through all transactions and pulls out all their attachments. +# We end up doing an end-run around that to get a bit more performance + +# We force the cache of ticket transactions to get populated up front. otherwise, the +# code that looks at attachments will look at each one in turn. +my $attachments = RT::Attachments->new( $session{'CurrentUser'} ); + +$attachments->Columns( qw( Id Filename ContentType Headers Subject Parent ContentEncoding ContentType TransactionId Created)); + +my $transactions = $attachments->NewAlias('Transactions'); +$attachments->Join( ALIAS1 => 'main', + FIELD1 => 'TransactionId', + ALIAS2 => $transactions, + FIELD2 => 'id' ); + +my $tickets = $attachments->NewAlias('Tickets'); + + $attachments->Join( ALIAS1 => $transactions, + FIELD1 => 'ObjectId', + ALIAS2 => $tickets, + FIELD2 => 'id' ); + + $attachments->Limit( ALIAS => $transactions, + FIELD => 'ObjectType', + VALUE => 'RT::Ticket'); +if ($Tickets) { + while ($Ticket = $Tickets->Next) { + $attachments->Limit( ALIAS => $tickets, + FIELD => 'EffectiveId', + VALUE => $Ticket->id() ); + } +} else { + $attachments->Limit( ALIAS => $tickets, + FIELD => 'EffectiveId', + VALUE => $Ticket->id() ); +} + + +return ($attachments); +</%INIT> +<%ARGS> +$Ticket => undef +$Tickets => undef +</%ARGS> + diff --git a/rt/html/Ticket/Elements/LoadTextAttachments b/rt/html/Ticket/Elements/LoadTextAttachments new file mode 100755 index 000000000..943568fb3 --- /dev/null +++ b/rt/html/Ticket/Elements/LoadTextAttachments @@ -0,0 +1,90 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%INIT> + +my $attachments = RT::Attachments->new( $session{'CurrentUser'} ); + +$attachments->Columns( qw(id Content ContentType TransactionId ContentEncoding)); + +if ( $Ticket->CurrentUserHasRight('ShowTicket') ) { + my $transactions = $attachments->NewAlias('Transactions'); + $attachments->Join( ALIAS1 => 'main', + FIELD1 => 'TransactionId', + ALIAS2 => $transactions, + FIELD2 => 'id' ); + + my $tickets = $attachments->NewAlias('Tickets'); + + + $attachments->Join( ALIAS1 => $transactions, + FIELD1 => 'ObjectId', + ALIAS2 => $tickets, + FIELD2 => 'id' ); + + $attachments->Limit( ALIAS => $transactions, + FIELD => 'ObjectType', + VALUE => 'RT::Ticket'); + + + $attachments->Limit( ALIAS => $tickets, + FIELD => 'EffectiveId', + VALUE => $Ticket->id() ); + # if the user may not see comments do not return them + unless ( $Ticket->CurrentUserHasRight('ShowTicketComments') ) { + $attachments->Limit( ALIAS => $transactions, FIELD => 'Type', OPERATOR => '!=', VALUE => "Comment" ); + } + + $attachments->Limit ( FIELD => 'ContentType', OPERATOR => '=', VALUE => 'text/plain'); + $attachments->Limit ( FIELD => 'ContentType', OPERATOR => 'STARTSWITH', VALUE => 'message/'); + $attachments->Limit ( FIELD => 'ContentType', OPERATOR => '=', VALUE => 'text'); + +} +return ($attachments); +</%INIT> +<%ARGS> +$Ticket => undef +</%ARGS> + diff --git a/rt/html/Ticket/Elements/PreviewScrips b/rt/html/Ticket/Elements/PreviewScrips new file mode 100755 index 000000000..a3492b749 --- /dev/null +++ b/rt/html/Ticket/Elements/PreviewScrips @@ -0,0 +1,124 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%args> +$TicketObj => undef + +</%args> +<%init> + +my $arg = 'Ticket-'.$TicketObj->Id.'-SquelchMailTo'; +my @squelchto = ref($ARGS{$arg}) eq 'ARRAY' ? @{$ARGS{$arg}} : ($ARGS{$arg}); + +foreach my $address (@squelchto) { + $TicketObj->SquelchMailTo($address) if ($address); +} + + +$arg = 'Ticket-'.$TicketObj->Id.'-UnsquelchMailTo'; +my @unsquelchto = ref($ARGS{$arg}) eq 'ARRAY' ? @{$ARGS{$arg}} : ($ARGS{$arg}); + +foreach my $address (@unsquelchto) { + $TicketObj->UnsquelchMailTo($address) if ($address); +} + + +my $action; + +if (( $ARGS{'UpdateType'} eq 'response' ) || ($ARGS{'Action'} eq 'Respond' )) { + $action = 'Correspond'; +} +else { + $action = 'Comment'; +} + +my $Message = MakeMIMEEntity( + Subject => $ARGS{'UpdateSubject'}, + Body => $ARGS{'UpdateContent'}, +); + +my ( $Transaction, $Description, $Object ) = $TicketObj->$action( + CcMessageTo => $ARGS{'UpdateCc'}, + BccMessageTo => $ARGS{'UpdateBcc'}, + MIMEObj => $Message, + TimeTaken => $ARGS{'UpdateTimeWorked'}, + DryRun => 1 +); + + +my @non_recipients = $TicketObj->SquelchMailTo; +</%init> +<h2><&|/l&>This message will be sent to...</&></h2> +<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> +<&|/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) { +%my @addresses = $scrip->ActionObj->Action->$type(); +<ul> +%foreach my $addr (@addresses) { +<li> <b><%loc($type)%></b>: <input type="checkbox" name="Ticket-<%$TicketObj->id%>-SquelchMailTo" value="<%$addr->address%>"> <%$addr->address%> +% } +</ul> +% } +% if ($RT::PreviewScripMessages) { +<textarea cols=80 rows="5"> +<%$scrip->ActionObj->TemplateObj->MIMEObj->as_string%> +</textarea> +% } +%} +<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> +<ul> +% foreach my $recipient (@non_recipients) { +<li><input type="checkbox" name="Ticket-<%$TicketObj->id%>-UnsquelchMailTo" value="<%$recipient->Content%>"> +<% $recipient->Content %> +% } +</ul> +<& /Elements/Submit, Value => 'UpdatePreview', Label => loc('Save changes')&> diff --git a/rt/html/Ticket/Elements/ShowAttachments b/rt/html/Ticket/Elements/ShowAttachments index 22b60d11b..82028dd28 100644 --- a/rt/html/Ticket/Elements/ShowAttachments +++ b/rt/html/Ticket/Elements/ShowAttachments @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,20 +20,35 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} % if (keys %documents) { <& /Elements/TitleBoxStart, title => loc('Attachments'), title_class=> 'inverse', color => "#336699" &> % foreach my $key (keys %documents) { -% my $fontsize='size="-1"'; <%$key%><br> <ul> @@ -46,10 +67,12 @@ if ($size) { </%PERL> -<li><font <%$fontsize%>> - <A HREF="<%$RT::WebPath%>/Ticket/Attachment/<%$rev->TransactionObj->Id%>/<%$rev->Id%>/<%$rev->Filename%>"><%$rev->CreatedAsString%> (<% $size %>)</a></font></li> +<li><font size="-2"> +<A HREF="<%$RT::WebPath%>/Ticket/Attachment/<%$rev->TransactionId%>/<%$rev->Id%>/<%$rev->Filename | u%>"> +<&|/l, $rev->CreatedAsString, $size, $rev->CreatorObj->Name &>[_1] ([_2]) by [_3]</&> +</a> +</font></li> % } -% $fontsize='size="-2"'; % } </ul> @@ -59,18 +82,20 @@ if ($size) { % } <%INIT> + +# If we haven't been passed in an Attachments object (through the precaching mechanism) +# then we need to find one +$Attachments ||= $m->comp('FindAttachments', Ticket => $Ticket); + my %documents; -my $transactions = $Ticket->Transactions(); -while (my $trans = $transactions->Next()) { - my $attachments = $trans->Attachments(); - while (my $attach = $attachments->Next()) { - next unless ($attach->Filename()); - # most recent at the top - unshift (@{$documents{$attach->Filename}}, $attach); - } +while ( my $attach = $Attachments->Next() ) { + next unless ($attach->Filename()); + unshift( @{ $documents{ $attach->Filename } }, $attach ); } + </%INIT> <%ARGS> $Ticket => undef +$Attachments => undef </%ARGS> diff --git a/rt/html/Ticket/Elements/ShowBasics b/rt/html/Ticket/Elements/ShowBasics index ad23e8c8c..00ed3ccd1 100644 --- a/rt/html/Ticket/Elements/ShowBasics +++ b/rt/html/Ticket/Elements/ShowBasics @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <table> <tr> <td class="label"><&|/l&>Id</&>:</td> @@ -30,9 +52,21 @@ <td class="label"><&|/l&>Status</&>:</td> <td class="value"><&|/l&><% $Ticket->Status%></&></td> </tr> +% if ($Ticket->TimeEstimated) { + <tr> + <td class="label"><&|/l&>Estimated</&>:</td> + <td class="value"><&|/l, $Ticket->TimeEstimated &>[_1] min</&></td> + </tr> +% } +% if ($Ticket->TimeWorked) { <tr> <td class="label"><&|/l&>Worked</&>:</td> - <td class="value"><&|/l, $TimeWorked &>[_1] min</&></td> + <td class="value"><&|/l, $Ticket->TimeWorked &>[_1] min</&></td> + </tr> +% } + <tr> + <td class="label"><&|/l&>Left</&>:</td> + <td class="value"><&|/l, $Ticket->TimeLeft &>[_1] min</&></td> </tr> <tr> <td class="label"><&|/l&>Priority</&>:</td> @@ -42,13 +76,8 @@ <td class="label"><&|/l&>Queue</&>:</td> <td class="value"><%$Ticket->QueueObj->Name%></td> </tr> +<& /Elements/Callback, _CallbackName => 'EndOfList', TicketObj => $Ticket, %ARGS &> </table> -<%INIT> -my $TimeWorked = $Ticket->TimeWorked; -if ($Ticket->TimeLeft > 0 ) { - $TimeWorked = $Ticket->TimeWorked."/".$Ticket->TimeLeft; -} -</%INIT> <%ARGS> $Ticket => undef </%ARGS> diff --git a/rt/html/Ticket/Elements/ShowCustomFields b/rt/html/Ticket/Elements/ShowCustomFields index 50d28f0d1..eb49212c5 100644 --- a/rt/html/Ticket/Elements/ShowCustomFields +++ b/rt/html/Ticket/Elements/ShowCustomFields @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,33 +20,30 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<table> -% my @entry_fields; -% while (my $CustomField = $CustomFields->Next()) { -% my $Values = $Ticket->CustomFieldValues($CustomField->Id); - <tr> - <td class="label"><%$CustomField->Name%>:</td> - <td class="value"> -% while (my $Value = $Values->Next()) { -<%$Value->Content%><br> -% } -% unless ($Values->Count()) { -<i><&|/l&>(no value)</&></i> -% } - </td> - </tr> -% } -</table> -<%INIT> -my $CustomFields = $Ticket->QueueObj->CustomFields(); -</%INIT> +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/ShowCustomFields, Object => $Ticket &> <%ARGS> $Ticket => undef </%ARGS> diff --git a/rt/html/Ticket/Elements/ShowCustomers b/rt/html/Ticket/Elements/ShowCustomers new file mode 100644 index 000000000..612727ede --- /dev/null +++ b/rt/html/Ticket/Elements/ShowCustomers @@ -0,0 +1,40 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# +%# 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. +<table> +% my $cust = 0; +% foreach my $customerURI ( +% grep { $_->Resolver->{'fstable'} eq 'cust_main' } +% grep { $_->Scheme eq 'freeside' } +% map { $_->TargetURI } +% @{ $Ticket->_Links('Base')->ItemsArrayRef } +% ) { +% $cust++; +% my $cust_main = ''; + <tr> + <td class="value"> + <A HREF="<% $customerURI->Resolver->HREF %>"><% $customerURI->Resolver->AsStringLong |n %></A> + </td> + </tr> +% } +% unless ( $cust ) { + <tr> + <td class="labeltop"> + <i>(none)<i> + </td> + </tr> + +% } +</table> +<%ARGS> +$Ticket => undef +</%ARGS> + diff --git a/rt/html/Ticket/Elements/ShowDates b/rt/html/Ticket/Elements/ShowDates index da7f75bb6..2ccbb3fea 100644 --- a/rt/html/Ticket/Elements/ShowDates +++ b/rt/html/Ticket/Elements/ShowDates @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <TABLE> <TR> <TD class="label"><&|/l&>Created</&>:</TD> @@ -35,7 +57,7 @@ <TD class="value"><% $Ticket->StartedObj->AsString %></TD> </TR> <TR> - <TD class="label"><&|/l&>Last Contact</&>:</TD> + <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> </TR> <TR> @@ -48,9 +70,15 @@ </TR> <TR> <TD class="label"><&|/l&>Updated</&>:</TD> - <TD class="value"><A HREF="#lasttrans"><% $Ticket->LastUpdated ? (loc("[_1] by [_2]", $Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name)) : loc("Never") | h %></a></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> +% } else { + <TD class="value"><% $UpdatedString | h %></TD> +% } </TR> </TABLE> <%ARGS> $Ticket => undef +$UpdatedLink => 1 </%ARGS> diff --git a/rt/html/Ticket/Elements/ShowDependencies b/rt/html/Ticket/Elements/ShowDependencies index b7f396871..f276bc949 100644 --- a/rt/html/Ticket/Elements/ShowDependencies +++ b/rt/html/Ticket/Elements/ShowDependencies @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <&|/l&>Depends on</&>:<BR> % while (my $Link = $Ticket->DependsOn->Next) { % my $member = $Link->TargetObj; diff --git a/rt/html/Ticket/Elements/ShowGroupMembers b/rt/html/Ticket/Elements/ShowGroupMembers new file mode 100644 index 000000000..1fdb79aab --- /dev/null +++ b/rt/html/Ticket/Elements/ShowGroupMembers @@ -0,0 +1,60 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# Released under the terms of version 2 of the GNU Public License + +% my $UserMembers = $Group->UserMembersObj; +% while (my $member = $UserMembers->Next()) { +<& ShowUserEntry, User => $member &><br> +% } +% my $GroupMembers = $Group->MembersObj; +% $GroupMembers->LimitToGroups(); +% while (my $member = $GroupMembers->Next()) { +<&|/l&>Group</&>: <%$member->MemberObj->Object->Name%><br> +% } + +<%ARGS> +$Group => undef +</%ARGS>
\ No newline at end of file diff --git a/rt/html/Ticket/Elements/ShowHistory b/rt/html/Ticket/Elements/ShowHistory index 2958f8706..75e34776f 100644 --- a/rt/html/Ticket/Elements/ShowHistory +++ b/rt/html/Ticket/Elements/ShowHistory @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <%perl> if ($ShowDisplayModes or $ShowTitle) { my $title; @@ -32,7 +54,7 @@ else { $title = ' '; } $titleright = loc('Display mode') . ":"; -if ($ShowHeaders && $ShowHeaders == $Ticket->Id ) { +if ($ShowHeaders) { $titleright .= "[<A HREF=\"" . $URIFile . "?id=" . $Ticket->id . "\">" . loc("Brief headers") @@ -44,8 +66,8 @@ else { . loc("Brief headers") . "]</b> [<A HREF=\"" . $URIFile - . "?ShowHeaders=" - . $Ticket->Id . "&id=" + . "?ShowHeaders=1" + . "&id=" . $Ticket->id . "\">" . loc("Full headers") . "</a>]"; } @@ -54,33 +76,83 @@ else { % } <TABLE WIDTH=100% CELLSPACING=0 CELLPADDING=2 BORDER=0> -% while (my $Transaction = $Transactions->Next) { -% my $skip = 0; -% $m->comp('/Elements/Callback', _CallbackName => 'SkipTransaction', Transaction => $Transaction, skip => \$skip, %ARGS); -% next if $skip; -% $i++; -% if ($Transactions->IsLast) { - <a name="lasttrans"></a> -% } - <& ShowTransaction, Ticket => $Ticket, Transaction => $Transaction, ShowHeaders => $ShowHeaders, Collapsed => $Collapsed, RowNum => $i, ShowTitleBarCommands => $ShowTitleBarCommands &> -% } +<%perl> +my @attachments = @{$Attachments->ItemsArrayRef()}; +my @attachment_content = @{$AttachmentContent->ItemsArrayRef()}; + + + + + +while ( my $Transaction = $Transactions->Next ) { + my $skip = 0; + $m->comp( '/Elements/Callback', + _CallbackName => 'SkipTransaction', + Transaction => $Transaction, + skip => \$skip, + %ARGS ); + next if $skip; + $i++; + + my @trans_attachments = grep { $_->TransactionId == $Transaction->Id } @attachments; + + my $trans_content = {}; + grep { ($_->TransactionId == $Transaction->Id ) && ($trans_content->{$_->Id} = $_) } @attachment_content; + + + #Args is first because we're clobbering the "Attachments" parameter + $m->comp( 'ShowTransaction', + %ARGS, + + AttachPath => $AttachPath, + UpdatePath => $UpdatePath, + Ticket => $Ticket, + Transaction => $Transaction, + ShowHeaders => $ShowHeaders, + Collapsed => $Collapsed, + RowNum => $i, + ShowTitleBarCommands => $ShowTitleBarCommands, + Attachments => \@trans_attachments, + AttachmentContent => $trans_content, + LastTransaction => $Transactions->IsLast + ); + +# manually flush the content buffer after each txn, so the user sees +# some update +$m->flush_buffer(); +} + +</%perl> </TABLE> % if ($ShowDisplayModes or $ShowTitle) { <& /Elements/TitleBoxEnd &> % } <%INIT> - -my $Transactions = $Ticket->Transactions; +my $Transactions = new RT::Transactions($session{'CurrentUser'}); +if ($Tickets) { + while (my $t = $Tickets->Next) { + $Transactions->LimitToTicket($t->id); + } +} else { + $Transactions = $Ticket->Transactions; +} my $i; +$Attachments ||= $m->comp('/Ticket/Elements/FindAttachments', Ticket => $Ticket, Tickets => $Tickets || undef); +$AttachmentContent ||= $m->comp('/Ticket/Elements/LoadTextAttachments', Ticket => $Ticket); </%INIT> <%ARGS> -$URIFile => 'Display.html' +$URIFile => $RT::WebPath."/Ticket/Display.html" $Ticket => undef +$Tickets => undef +$Attachments => undef +$AttachmentContent => undef $ShowHeaders => undef $Collapsed => undef $ShowTitle => 1 $ShowDisplayModes => 1 $ShowTitleBarCommands => 1 +$AttachPath => $RT::WebPath."/Ticket/Attachment" +$UpdatePath => $RT::WebPath."/Ticket/Update.html" </%ARGS> diff --git a/rt/html/Ticket/Elements/ShowLink b/rt/html/Ticket/Elements/ShowLink deleted file mode 100644 index 493fd95a5..000000000 --- a/rt/html/Ticket/Elements/ShowLink +++ /dev/null @@ -1,40 +0,0 @@ -%# BEGIN LICENSE BLOCK -%# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -%# -%# (Except where explictly superceded by other copyright notices) -%# -%# 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. -%# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. -%# -%# -%# END LICENSE BLOCK -<A href="<%$URI->Resolver->HREF%>"> -% if ($URI->IsLocal) { -% my $member = $URI->Object; -% if (UNIVERSAL::isa($member, "RT::Ticket")) { -<%$member->Id%>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<% loc($member->Status) %>] -% } elsif ( UNIVERSAL::can($member, 'Name')) { -<%$URI->Resolver->AsString%>: <%$member->Name%> -% } else { -<%$URI->Resolver->AsString%> -% } -% } else { -<%$URI->Resolver->AsString%> -% } -</a> -<%ARGS> -$URI => undef -</%ARGS> diff --git a/rt/html/Ticket/Elements/ShowMemberOf b/rt/html/Ticket/Elements/ShowMemberOf index 79e0a3ba2..e443132bc 100644 --- a/rt/html/Ticket/Elements/ShowMemberOf +++ b/rt/html/Ticket/Elements/ShowMemberOf @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,17 +20,33 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <UL> % my $memberof = $Ticket->MemberOf; % while (my $member_of = $memberof->Next) { -<LI><a href="/Ticket/Display.html?id=<%$member_of->Id%>"><%$member_of->Id%></a>: <%$member_of->Subject%> [<%$member_of->Status%>] +<LI><a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member_of->Id%>"><%$member_of->Id%></a>: <%$member_of->Subject%> [<%$member_of->Status%>] % } </UL> diff --git a/rt/html/Ticket/Elements/ShowMembers b/rt/html/Ticket/Elements/ShowMembers index e1016626a..f4fec1c7c 100644 --- a/rt/html/Ticket/Elements/ShowMembers +++ b/rt/html/Ticket/Elements/ShowMembers @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} % if ($members->Count) { <UL> % while (my $link = $members->Next) { diff --git a/rt/html/Ticket/Elements/ShowMessageHeaders b/rt/html/Ticket/Elements/ShowMessageHeaders index 11d873c3e..8dc76bae3 100644 --- a/rt/html/Ticket/Elements/ShowMessageHeaders +++ b/rt/html/Ticket/Elements/ShowMessageHeaders @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,19 +20,69 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -<%$content |n%> +%# END BPS TAGGED BLOCK }}} +% use Data::Dumper; +<table> +% foreach my $header (@headers) { +% next unless ($display_headers{'_all'} || $display_headers{lc($header->{'Tag'})}); +<tr> +<td align="right" class="message-header-key"><%$header->{'Tag'}%>:</td> +<td class="message-header-value"><%$header->{'Value'} | n%></td> +</tr> +% } +</table> <%INIT> my $content = $Headers; -RT::Interface::Web::EscapeUTF8(\$content); $m->comp('/Elements/Callback', content => \$content, %ARGS); + +# apply html escaping on the original content +# we'll display the value without escaping later (for MakeClicky et al.) +$content = $m->interp->apply_escapes($content, 'h'); + +my @lines = split (/\n/,$content); +my $in_header = 0; +my @headers =(); +foreach (@lines) { + if (/^(\S+):\s+(.*)$/) { + push (@headers, { Tag => $1, Value => $2} ); + } elsif ($headers[-1]) { + $headers[-1]->{'Value'} .= $_; + } else { + + push (@headers, { Tag => $_, Value => ''} ); + } +} + +my %display_headers; + +map { $display_headers{lc($_)} = 1 } @$DisplayHeaders; + +$m->comp('/Elements/Callback', _CallbackName => 'Headers', content => \$content, headers => \@headers, display_headers => \%display_headers, %ARGS); + </%INIT> <%ARGS> $Headers => undef +$DisplayHeaders => undef </%ARGS> diff --git a/rt/html/Ticket/Elements/ShowMessageStanza b/rt/html/Ticket/Elements/ShowMessageStanza index b0998068f..eaf551de9 100644 --- a/rt/html/Ticket/Elements/ShowMessageStanza +++ b/rt/html/Ticket/Elements/ShowMessageStanza @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,31 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} +% if (ref($Message)) { +<font color="<%$colors[$Depth]%>"> <%perl> foreach my $stanza (@$Message) { if ( ref $stanza eq "ARRAY" ) { @@ -33,11 +57,19 @@ foreach my $stanza (@$Message) { my $content = $stanza->{raw}; RT::Interface::Web::EscapeUTF8(\$content); $m->comp('/Elements/Callback', content => \$content, %ARGS); - $content =~ s/\n/<br>/gi; + $content =~ s/\n/<br>/gi if defined $content; </%perl> -<font color="<%$colors[$Depth]%>"><%$content |n%><br></font> +<%$content |n%><br> % } +% } # end foreach +</font> +% } else { +% my $content = $Message; +% RT::Interface::Web::EscapeUTF8(\$content); +% $m->comp('/Elements/Callback', content => \$content, %ARGS); +% $content =~ s/\n/<br>/gi; +<%$content |n%><br> % } <%INIT> use URI::URL; diff --git a/rt/html/Ticket/Elements/ShowPeople b/rt/html/Ticket/Elements/ShowPeople index 0b8026949..dbec93928 100644 --- a/rt/html/Ticket/Elements/ShowPeople +++ b/rt/html/Ticket/Elements/ShowPeople @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,32 +20,47 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <table> <tr> <td class="label"><&|/l&>Owner</&>:</td> - <td class="value"><%$Ticket->OwnerObj->Name%></td> + <td class="value"><& ShowUserEntry, User => $Ticket->OwnerObj &></td> </tr> <tr> - <td class="label"><&|/l&>Requestors</&>:</td> - <td class="value"><%$Ticket->RequestorAddresses%></td> + <td class="labeltop"><&|/l&>Requestors</&>:</td> + <td class="value"><& ShowGroupMembers, Group => $Ticket->Requestors &></td> </tr> <tr> - <td class="label"><&|/l&>Cc</&>:</td> - <td class="value"><%$Ticket->CcAddresses%></td> + <td class="labeltop"><&|/l&>Cc</&>:</td> + <td class="value"><& ShowGroupMembers, Group => $Ticket->Cc &></td> </tr> <tr> - <td class="label"><&|/l&>AdminCc</&>:</td> - <td class="value"><%$Ticket->AdminCcAddresses%></td> + <td class="labeltop"><&|/l&>AdminCc</&>:</td> + <td class="value"><& ShowGroupMembers, Group => $Ticket->AdminCc &></td> </tr> </table> <%ARGS> $Ticket => undef </%ARGS> - diff --git a/rt/html/Ticket/Elements/ShowReferences b/rt/html/Ticket/Elements/ShowReferences index 831923b2b..bb323f66c 100644 --- a/rt/html/Ticket/Elements/ShowReferences +++ b/rt/html/Ticket/Elements/ShowReferences @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,20 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <UL> % while (my $Link = $Ticket->RefersTo->Next) { <LI> % if ($Link->TargetURI->IsLocal) { % my $member = $Link->TargetObj; -<a href="/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br> +<a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br> % } else { <A HREF="<%$Link->TargetURI->HREF%>"><%$Link->Target%></A> % } @@ -39,7 +61,7 @@ <LI> % if ($Link->BaseURI->IsLocal) { % my $member = $Link->BaseObj; -<a href="/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br> +<a href="<%$RT::WebPath%>/Ticket/Display.html?id=<%$member->Id%>"><%$member->Id%></a>: (<%$member->OwnerObj->Name%>) <%$member->Subject%> [<%$member->Status%>]<br> % } else { <A HREF="<%$Link->BaseURI->HREF%>"><%$Link->Base%></A> %} diff --git a/rt/html/Ticket/Elements/ShowRequestor b/rt/html/Ticket/Elements/ShowRequestor index cc91f590f..421d38e0a 100644 --- a/rt/html/Ticket/Elements/ShowRequestor +++ b/rt/html/Ticket/Elements/ShowRequestor @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,18 +20,33 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <%PERL> my $rows = 10; -my $people = $Ticket->Requestors->MembersObj; -while (my $member=$people->Next) { -my $requestor = $member->MemberObj->Object; +my $people = $Ticket->Requestors->UserMembersObj; +while (my $requestor=$people->Next) { my $name=$requestor->RealName || $requestor->EmailAddress; my $tickets = RT::Tickets->new($session{'CurrentUser'}); $tickets->LimitWatcher(TYPE => 'Requestor', VALUE => $requestor->EmailAddress ); @@ -40,6 +61,9 @@ $tickets->OrderBy(FIELD => 'Priority', <& /Elements/TitleBoxStart, title => "<a class='inverse' href=\"$RT::WebPath/Admin/Users/Modify.html?id=".$requestor->id."\">".loc("More about [_1]", $name)."</a>" &> +%# Additional information about this user. Empty by default. +<& /Elements/Callback, _CallbackName => 'AboutThisUser', requestor => $requestor, %ARGS &> + <&|/l&>Comments about this user</&>:<BR> <B><% ($requestor->Comments || loc("No comment entered about this user")) %></B><BR> @@ -49,6 +73,11 @@ $tickets->OrderBy(FIELD => 'Priority', <LI><a href="<%$RT::WebPath%><%$DisplayPath%>?id=<%$w->id%>"><%$w->Id%>: <%$w->Subject%></a> (<%$w->Status%>) %} </UL> + +<&|/l&>Groups this user belongs to</&>:<BR> + +<& /Elements/ShowMemberships, UserObj => $requestor &> + <& /Elements/TitleBoxEnd &> % } diff --git a/rt/html/Ticket/Elements/ShowSummary b/rt/html/Ticket/Elements/ShowSummary index 6ae875832..5a6e7e099 100644 --- a/rt/html/Ticket/Elements/ShowSummary +++ b/rt/html/Ticket/Elements/ShowSummary @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,16 +20,32 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <TABLE WIDTH="100%" class="ticketsummary" > <TR> - <TD VALIGN=TOP WIDTH="50%"> + <TD VALIGN=TOP WIDTH="50%" class="boxcontainer"> <& /Elements/TitleBoxStart, title => loc('The Basics'), title_href =>"$RT::WebPath/Ticket/Modify.html?id=".$Ticket->Id, title_class=> 'inverse', @@ -31,7 +53,7 @@ <& /Ticket/Elements/ShowBasics, Ticket => $Ticket &> <& /Elements/TitleBoxEnd &> <br> -% if ($Ticket->QueueObj->CustomFields()->First) { +% if ($Ticket->QueueObj->TicketCustomFields->First) { <& /Elements/TitleBoxStart, title => loc('Custom Fields'), title_href =>"$RT::WebPath/Ticket/Modify.html?id=".$Ticket->Id, title_class=> 'inverse', @@ -47,9 +69,18 @@ color => "#333399" &> <& /Ticket/Elements/ShowPeople, Ticket => $Ticket &> <& /Elements/TitleBoxEnd &> + <br> + + <& /Elements/TitleBoxStart, title => loc('Customers'), + title_href =>"$RT::WebPath/Ticket/ModifyCustomers.html?id=".$Ticket->Id, + title_class=> 'inverse', + color => "#7f007b" &> + <& /Ticket/Elements/ShowCustomers, Ticket => $Ticket &> + <& /Elements/TitleBoxEnd &> + <BR> </TD> - <TD VALIGN=TOP WIDTH="50%"> + <TD VALIGN=TOP WIDTH="50%" class="boxcontainer"> <& /Elements/TitleBoxStart, title => loc("Dates"), title_href =>"$RT::WebPath/Ticket/ModifyDates.html?id=".$Ticket->Id, @@ -58,14 +89,14 @@ <& /Ticket/Elements/ShowDates, Ticket => $Ticket &> <& /Elements/TitleBoxEnd &> <BR> - <& /Elements/TitleBoxStart, title => loc('Relationships'), + <& /Elements/TitleBoxStart, title => loc('Links'), title_href => "$RT::WebPath/Ticket/ModifyLinks.html?id=".$Ticket->Id, title_class=> 'inverse', titleright => '', color=> "#336633" &> - <& /Ticket/Elements/ShowLinks, Ticket => $Ticket &> + <& /Elements/ShowLinks, Ticket => $Ticket &> <& /Elements/TitleBoxEnd &> <BR> - <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket &> + <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket, Attachments => $Attachments &> <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &> @@ -75,6 +106,7 @@ </TABLE> <%ARGS> $Ticket => undef +$Attachments => undef </%ARGS> diff --git a/rt/html/Ticket/Elements/ShowTransaction b/rt/html/Ticket/Elements/ShowTransaction index f2f89d35c..8bf589d45 100644 --- a/rt/html/Ticket/Elements/ShowTransaction +++ b/rt/html/Ticket/Elements/ShowTransaction @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,15 +20,31 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <TR class="<% $RowNum%2 ? 'oddline' : 'evenline'%>" > -<TD bgcolor="<%$bgcolor%>"><A NAME="txn-<%$Transaction->Id%>" href="#txn-<%$Transaction->Id%>">#</A> </TD> +<TD rowspan="2" valign="top" bgcolor="<%$bgcolor%>"><A NAME="txn-<%$Transaction->Id%>" href="<% $DisplayPath %>#txn-<%$Transaction->Id%>">#</A><% $LastTransaction ? '<a name="lasttrans"> </a>' : ' ' |n %></TD> <TD>  </TD> <TD><font size=-2><% $transdate|n %></font> </TD> % my $desc = $Transaction->BriefDescription; @@ -33,69 +55,13 @@ <TD><%$TimeTaken%> </TD> <TD ALIGN="RIGHT"><font size=-1><%$titlebar_commands|n%></font></TD> </TR> -<%PERL> - -unless ($Collapsed) { - $attachments->GotoFirstItem; - while (my $message=$attachments->Next) { - #we don't want to show any empty transactions, unless they have kids - next unless ($message->ContentLength || $message->Children->Count); - - my ($headers, $quoted); - if ($ShowHeaders && ($ShowHeaders == $Ticket->Id)) { - $headers = $message->Headers; - } else { - $headers = $message->NiceHeaders; - } - chomp $headers; - if ($headers) { - # localize the common headers (like 'Subject:'), too. - eval {$headers =~ s/^([^:]+)(?=:)/loc($1)/em; } # we eval here to catch errors when 5.6 panics - } - # 13456 is a random # of about the biggest size we want to see inline text - my $MAX_INLINE_BODY = 13456; - if ($message->ContentType =~ m{^(text/plain|message|text$)}i && - $message->ContentLength < $MAX_INLINE_BODY ) { - require Text::Quoted; - $quoted = Text::Quoted::extract($message->Content); - } - -</%PERL> -<TR class="<% $RowNum%2 ? 'oddline' : 'evenline'%>" > - <TD BGCOLOR="<%$bgcolor%>"> </TD> - <TD> </TD> - <TD COLSPAN=3 VALIGN=TOP> -<span class="message"> - <PRE> -<& ShowMessageHeaders, Headers => $headers, Transaction => $Transaction &> -</PRE> -<& ShowMessageStanza, Depth => 0, Message => $quoted, Transaction => $Transaction &> -</span> - </TD> - <TD VALIGN=TOP ALIGN=RIGHT> - -% if ($message->Parent == 0 ) { -<BR> -% } -<%PERL> -my $size = $message->ContentLength; - -if ($size) { - if ($size > 1024) { - $size = loc("[_1]k", int($size/102.4)/10); - } - else { - $size = loc("[_1]b", $size); - } -</%PERL> -<font size=-1><A HREF="<%$RT::WebPath%>/Ticket/Attachment/<%$Transaction->Id%>/<%$message->Id%>/<%$message->Filename%>"><&|/l&>Download</&> <% $message->Filename|| loc('(untitled)') %></a> <% $size %></font> +<TR class="<% $RowNum%2 ? 'oddline' : 'evenline'%>"><TD colspan=5> +% if ($Transaction->CustomFieldValues->Count) { +<& /Elements/ShowCustomFields, Object => $Transaction &> % } +% $m->comp('ShowTransactionAttachments', %ARGS, Parent => 0) unless ($Collapsed ||!$ShowBody); </TD> </TR> -% } -% } - - <%ARGS> $Ticket => undef @@ -104,66 +70,117 @@ $ShowHeaders => 0 $Collapsed => undef $ShowTitleBarCommands => 1 $RowNum => 1 +$DisplayPath => $RT::WebPath."/Ticket/Display.html?id=".$Ticket->id +$AttachPath => $RT::WebPath."/Ticket/Attachment" +$UpdatePath => $RT::WebPath."/Ticket/Update.html" +$EmailRecordPath => $RT::WebPath."/Ticket/ShowEmailRecord.html" +$Attachments => undef +$AttachmentContent => undef +$ShowBody => 1 +$LastTransaction => 0 </%ARGS> <%INIT> - -my ($TimeTaken, $TicketString, $bgcolor); +my ( $TimeTaken, $TicketString, $bgcolor ); my $transdate = $Transaction->CreatedAsString(); $transdate =~ s/\s/ /g; -if ($Transaction->Type =~ /^(Create|Correspond|Comment$)/) { - if ($Transaction->IsInbound) { - $bgcolor="#336699"; - } - else { - $bgcolor="#339999"; - } -} elsif (($Transaction->Field =~ /^Owner$/) or - ($Transaction->Type =~ /^(AddWatcher|DelWatcher)$/)) { - $bgcolor="#333399"; - -} elsif ($Transaction->Type =~ /^(AddLink|DeleteLink)$/) { - $bgcolor="#336633"; -} elsif ($Transaction->Type =~ /^(Status|Set|Told)$/) { - if ($Transaction->Field =~ /^(Told|Starts|Started|Due)$/) { - $bgcolor="#663366"; - } - else { - $bgcolor="#993333"; - } +if ( $Transaction->Type =~ /^(Create|Correspond|Comment$)/ ) { + if ( $Transaction->IsInbound ) { + $bgcolor = "#336699"; + } + else { + $bgcolor = "#339999"; + } +} +elsif ( ( $Transaction->Field =~ /^Owner$/ ) + or ( $Transaction->Type =~ /^(AddWatcher|DelWatcher)$/ ) ) { + $bgcolor = "#333399"; + +} +elsif ( $Transaction->Type =~ /^(AddLink|DeleteLink)$/ ) { + $bgcolor = "#336633"; +} +elsif ( $Transaction->Type =~ /^(Status|Set|Told)$/ ) { + if ( $Transaction->Field =~ /^(Told|Starts|Started|Due)$/ ) { + $bgcolor = "#663366"; + } + else { + $bgcolor = "#993333"; + } } else { - $bgcolor="#cccccc"; + $bgcolor = "#cccccc"; } -if ($Ticket->Id != $Transaction->Ticket) { - $TicketString = "Ticket ".$Transaction->Ticket .": "; +if ( $Ticket->Id != $Transaction->Ticket ) { + $TicketString = "Ticket " . $Transaction->Ticket . ": "; } +$TicketString ||= ''; -if ($Transaction->TimeTaken > 0) { - $TimeTaken = $Transaction->TimeTaken." min" +if ( $Transaction->TimeTaken != 0 ) { + $TimeTaken = $Transaction->TimeTaken . " min"; +} else { + $TimeTaken = ''; } -my $attachments = $Transaction->Attachments; -my $titlebar_commands=' '; +unless ($Attachments) { + my $attachments = $Transaction->Attachments; + $attachments->Columns( qw( Id Filename ContentType Headers Subject Parent ContentEncoding ContentType TransactionId) ); + $Attachments = $attachments->ItemsArrayRef(); +} +my $titlebar_commands = ' '; -# If the transaction has anything attached to it at all -if ($Transaction->Attachments->First && $ShowTitleBarCommands) { - if ($Transaction->TicketObj->CurrentUserHasRight('ReplyToTicket')) { - $titlebar_commands .= - "[<a href=\"Update.html?id=". - $Transaction->Ticket . "&QuoteTransaction=".$Transaction->Id. - "&Action=Respond\">". loc('Reply') ."</a>] "; - } - if ($Transaction->TicketObj->CurrentUserHasRight('CommentOnTicket')) { - $titlebar_commands .= - "[<a href=\"Update.html?id=".$Transaction->Ticket. - "&QuoteTransaction=".$Transaction->Id. - "&Action=Comment\">". loc('Comment') ."</a>]"; - } +my @DisplayHeaders=qw ( _all); + +if ( $Transaction->Type =~ /EmailRecord$/ ) { + @DisplayHeaders = qw(To Cc Bcc); + + $titlebar_commands .= + "[<a target=\"_blank\" href=\"$EmailRecordPath?id=" + . $Transaction->Ticket + . "&Transaction=" + . $Transaction->Id + . "&Attachment=" + . ( $Transaction->Attachments->First + && $Transaction->Attachments->First->Id ) + + . '">' . loc('Show') . "</a>] "; + $ShowBody = 0; } + +# If the transaction has anything attached to it at all +else { + + unless ( $ShowHeaders ) { + @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject); + } + + if ( $Attachments->[0] && $ShowTitleBarCommands ) { + if ( $Transaction->TicketObj->CurrentUserHasRight('ReplyToTicket') + or $Transaction->TicketObj->CurrentUserHasRight('ModifyTicket')) { + $titlebar_commands .= + "[<a href=\"".$UpdatePath."?id=" + . $Transaction->Ticket + . "&QuoteTransaction=" + . $Transaction->Id + . "&Action=Respond\">" + . loc('Reply') + . "</a>] "; + } + if ( $Transaction->TicketObj->CurrentUserHasRight('CommentOnTicket') + or $Transaction->TicketObj->CurrentUserHasRight('ModifyTicket')) { + $titlebar_commands .= + "[<a href=\"".$UpdatePath."?id=" + . $Transaction->Ticket + . "&QuoteTransaction=" + . $Transaction->Id + . "&Action=Comment\">" + . loc('Comment') . "</a>]"; + } + } +} </%INIT> diff --git a/rt/html/Ticket/Elements/ShowTransactionAttachments b/rt/html/Ticket/Elements/ShowTransactionAttachments new file mode 100644 index 000000000..8dabff421 --- /dev/null +++ b/rt/html/Ticket/Elements/ShowTransactionAttachments @@ -0,0 +1,201 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%perl> +# Find all the attachments which have parent $Parent +# For each of these attachments +foreach my $message ( grep { $_->Parent == $Parent } @$Attachments ) { + + # {{{ show the headers + my $headers = $message->Headers; + chomp $headers; + + # localize the common headers (like 'Subject:'), too. + $headers =~ s/^([^:]+)(?=:)/loc($1)/em; + $m->comp( + 'ShowMessageHeaders', + Headers => $headers, + Transaction => $Transaction, + DisplayHeaders => \@DisplayHeaders + ); + + # }}} + # {{{ if there's any size at all, show the download link + my $size = $message->ContentLength; + if ($size) { + +</%perl> +<div class="downloadattachment"> +<%perl> + + # show a download link + if ( $size > 1024 ) { + $size = loc( "[_1]k", int( $size / 102.4 ) / 10 ); + } + else { + $size = loc( "[_1]b", $size ); + } + +</%PERL> +<A HREF="<%$AttachPath%>/<%$Transaction->Id%>/<%$message->Id%>/<%$message->Filename | u%>"><&|/l&>Download</&> <%$message->Filename || loc('(untitled)') %></a> +<div class="downloadcontenttype"> +<%$message->ContentType%> <% $size %> +</div> +</div> +% } +% # }}} +<div class="messagebody"> +<%perl> +# {{{ if it has a content-disposition: attachment, don't show inline +unless ( $message->GetHeader('Content-Disposition') =~ /attachment/i ) { + + my $content; + + # If it's text + if ( $message->ContentType =~ m{^(text|message)}i + && $size <= $RT::MaxInlineBody ) + { + + if ( + + # it's a toplevel object + !$ParentObj + + # or its parent isn't a multipart alternative + || ( $ParentObj->ContentType !~ m{^multipart/alternative$}i ) + + # or it's of our prefered alterative type + || ( + ( + $RT::PreferRichText + && ( $message->ContentType =~ m{^text/(?:html|enriched)$} ) + ) + || ( !$RT::PreferRichText + && ( $message->ContentType !~ m{^text/(?:html|enriched)$} ) + ) + ) + ) + { + + if ( $AttachmentContent->{ $message->id } ) { + $content = $AttachmentContent->{ $message->id }->Content; + } + else { + $content = $message->Content; + } + + # if it's a text/html clean the body and show it + if ( $message->ContentType =~ m{^text/(?:html|enriched)$}i ) { + $content = + $m->comp( '/Elements/ScrubHTML', Content => $content ); + $m->out($content); + } + + # if it's a text/plain show the body + elsif ( $message->ContentType =~ m{^(text|message|text)}i ) { + + eval { $content = Text::Quoted::extract($content); }; + if ($@) { 1; } + + $m->comp( + 'ShowMessageStanza', + Depth => 0, + Message => $content, + Transaction => $Transaction + ); + } + } + + } + + # if it's an image, show it as an image + elsif ( $message->ContentType =~ /^image\//i ) { + $m->out('<img src="' + . $AttachPath . '/' + . $Transaction->Id . '/' + . $message->Id + . '/">' ); + } +} + +# }}} + +$m->comp( + 'ShowTransactionAttachments', %ARGS, + Parent => $message->id, + ParentObj => $message +); + +} +</%PERL> +</div> +<%ARGS> +$Ticket => undef +$Transaction => undef +$ShowHeaders => 0 +$Collapsed => undef +$ShowTitleBarCommands => 1 +$RowNum => 1 +$AttachPath => $RT::WebPath."/Ticket/Attachment" +$UpdatePath => $RT::WebPath."/Ticket/Update.html" +$EmailRecordPath => $RT::WebPath."/Ticket/ShowEmailRecord.html" +$Attachments => undef +$AttachmentContent => undef +$ShowBody => 1 +$Parent => 0 +$ParentObj => 0 +</%ARGS> +<%INIT> +my @DisplayHeaders=qw( _all); + +if ( $Transaction->Type =~ /EmailRecord$/ ) { + @DisplayHeaders = qw(To Cc Bcc); +} + +# If the transaction has anything attached to it at all +elsif (!$ShowHeaders) { + @DisplayHeaders = qw(To From RT-Send-Cc Cc Bcc Date Subject); +} +</%INIT> diff --git a/rt/html/Ticket/Elements/ShowUserEntry b/rt/html/Ticket/Elements/ShowUserEntry new file mode 100644 index 000000000..163bcbdb1 --- /dev/null +++ b/rt/html/Ticket/Elements/ShowUserEntry @@ -0,0 +1,55 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +%# Released under the terms of version 2 of the GNU Public License + +<%$User->Name%> +% if ($User->EmailAddress && $User->EmailAddress ne $User->Name) { +<<%$User->EmailAddress%>> +% } + +<%ARGS> +$User => undef +</%ARGS>
\ No newline at end of file diff --git a/rt/html/Ticket/Elements/Tabs b/rt/html/Ticket/Elements/Tabs index 81c92e8c2..46e1d4a27 100644 --- a/rt/html/Ticket/Elements/Tabs +++ b/rt/html/Ticket/Elements/Tabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Callback, Ticket => $Ticket, actions=> $actions, tabs => $tabs, %ARGS &> <& /Elements/Tabs, tabs => $tabs, @@ -31,12 +53,8 @@ <%INIT> my $tabs = {}; -my $current_toptab = "Search/Listing.html", - my $searchtabs = { new => { title => loc('New Search'), - path => 'Search/Listing.html?ClearRestrictions=1'} - - -} ; +my $current_toptab = "Search/Build.html", +my $searchtabs = {}; my $actions; if ( $Ticket) { @@ -45,11 +63,17 @@ my $id = $Ticket->id(); if ( defined $session{'tickets'} ) { + # we have to update session data if we get new ItemMap + my $updatesession = 1 unless($session{'tickets'}->{'item_map'}); -my $item_map = $session{'tickets'}->ItemMap; + my $item_map = $session{'tickets'}->ItemMap; - # Don't $current_toptab = display prev links if we're on the first ticket + if ($updatesession) { + $session{'i'}++; + $session{'tickets'}->PrepForSerialization(); + } + # Don't display prev links if we're on the first ticket if ($item_map->{$Ticket->Id}->{prev}) { $searchtabs->{'_a'} = { class => "nav", @@ -95,9 +119,11 @@ my $ticket_page_tabs = { { title => loc('People'), path => "Ticket/ModifyPeople.html?id=" . $id, }, _E => { title => loc('Links'), path => "Ticket/ModifyLinks.html?id=" . $id, }, + _Eb=> { title => loc('Customers'), + path => "Ticket/ModifyCustomers.html?id=" . $id, }, _F => { title => loc('Jumbo'), path => "Ticket/ModifyAll.html?id=" . $id, - seperator => 1 + separator => 1 }, }; @@ -154,17 +180,41 @@ if ( $Ticket->CurrentUserHasRight('ModifyTicket') }; } } -$tabs->{"g"} = { path => 'Search/Listing.html', - title => loc('Search'), - separator => 1, - subtabs => $searchtabs }; + +my $args = "?" . $m->comp( + '/Elements/QueryString', + Query => $ARGS{'Query'} || $session{'CurrentSearchHash'}->{'Query'}, + Format => $ARGS{'Format'} || $session{'CurrentSearchHash'}->{'Format'}, + OrderBy => $ARGS{'OrderBy'} || $session{'CurrentSearchHash'}->{'OrderBy'}, + Order => $ARGS{'Order'} || $session{'CurrentSearchHash'}->{'Order'}, + Rows => $ARGS{'Rows'}, + ) if ($ARGS{'Query'} or $session{'CurrentSearchHash'}->{'Query'}); +$args ||= ''; + +$tabs->{"f"} = { path => "Search/Build.html?NewQuery=1", + title => loc('New Query')}; +$tabs->{"g"} = { path => "Search/Build.html$args", + title => loc('Query Builder')}; +$tabs->{"h"} = { path => "Search/Edit.html$args", + title => loc('Advanced'), + separator => 1 }; +if (defined $session{'tickets'} and $session{'tickets'}->Count) { + $tabs->{"i"} = { path => "Search/Results.html$args", + title => loc('Show Results'), + separator => 1, + subtabs => $searchtabs }; + if ($current_tab =~ "Search/Results.html") { + $current_tab = "Search/Results.html$args"; + } +} + </%INIT> <%ARGS> $Ticket => undef $subtabs => undef -$current_tab => undef -$current_subtab => undef +$current_tab => '' +$current_subtab => '' $Title => undef </%ARGS> diff --git a/rt/html/Ticket/History.html b/rt/html/Ticket/History.html index cb02f1c75..a80cd0002 100644 --- a/rt/html/Ticket/History.html +++ b/rt/html/Ticket/History.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Ticket History # [_1] [_2]", $Ticket->Id, $Ticket->Subject) &> <& /Ticket/Elements/Tabs, Ticket => $Ticket, current_tab => 'Ticket/History.html?id='.$Ticket->id, @@ -28,7 +50,13 @@ <BR> -<& /Ticket/Elements/ShowHistory , Ticket => $Ticket, ShowHeaders => $ARGS{'ShowHeaders'}, URIFile => 'History.html' &> +<& /Ticket/Elements/ShowHistory , + Ticket => $Ticket, + ShowHeaders => $ARGS{'ShowHeaders'}, + URIFile => 'History.html', + Attachments => $attachments, + AttachmentContent => $attachment_content + &> <%ARGS> @@ -45,6 +73,11 @@ unless ($Ticket->CurrentUserHasRight('ShowTicket')) { Abort("No permission to view ticket"); } +my $attachments = $m->comp('Elements/FindAttachments', Ticket => $Ticket); +my $attachment_content = $m->comp('Elements/LoadTextAttachments', Ticket => +$Ticket); + + </%INIT> diff --git a/rt/html/Ticket/Modify.html b/rt/html/Ticket/Modify.html index c97fd0994..a6c316141 100644 --- a/rt/html/Ticket/Modify.html +++ b/rt/html/Ticket/Modify.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,20 +20,36 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Modify ticket #[_1]', $TicketObj->Id) &> <& /Ticket/Elements/Tabs, Ticket => $TicketObj, current_subtab => "Ticket/Modify.html?id=".$TicketObj->Id, Title => loc('Modify ticket #[_1]', $TicketObj->Id) &> <& /Elements/ListActions, actions => \@results &> -<FORM METHOD=POST ACTION="Modify.html"> +<FORM METHOD=POST ACTION="Modify.html" ENCTYPE="multipart/form-data"> <INPUT TYPE=HIDDEN NAME=id VALUE="<%$TicketObj->Id%>"> <& /Elements/TitleBoxStart, title => loc('Modify ticket #[_1]',$TicketObj->Id), color=> "#993333", width => "100%" &> @@ -40,13 +62,13 @@ <%INIT> my $TicketObj = LoadTicket($id); -my $CustomFields = $TicketObj->QueueObj->CustomFields(); +my $CustomFields = $TicketObj->QueueObj->TicketCustomFields(); # Now let callbacks have a chance at editing %ARGS $m->comp('/Elements/Callback', TicketObj => $TicketObj, CustomFields => $CustomFields, %ARGS); my @results = ProcessTicketBasics(TicketObj => $TicketObj, ARGSRef => \%ARGS); -my @cf_results = ProcessTicketCustomFieldUpdates(ARGSRef => \%ARGS); +my @cf_results = ProcessObjectCustomFieldUpdates(Object => $TicketObj, ARGSRef => \%ARGS); push (@results, @cf_results); # TODO: display the results, even if we can't display the ticket diff --git a/rt/html/Ticket/ModifyAll.html b/rt/html/Ticket/ModifyAll.html index a50689398..23cd93570 100644 --- a/rt/html/Ticket/ModifyAll.html +++ b/rt/html/Ticket/ModifyAll.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Ticket #[_1] Jumbo update: [_2]", $Ticket->Id, $Ticket->Subject) &> <& /Ticket/Elements/Tabs, Ticket => $Ticket, @@ -53,8 +75,8 @@ <BR> -<& /Elements/TitleBoxStart, title => loc('Relationships'), color => "#336633"&> -<& Elements/EditLinks, Ticket => $Ticket &> +<& /Elements/TitleBoxStart, title => loc('Links'), color => "#336633"&> +<& /Elements/EditLinks, Object => $Ticket, Merge => 1 &> <& /Elements/TitleBoxEnd &> <BR> @@ -69,15 +91,26 @@ <option value="private" ><&|/l&>Comments (Not sent to requestors)</&></option> % } % if ($CanRespond) { - <option value="response"><&|/l&>Response to requestors</&></option> + <option value="response"><&|/l&>Reply to requestors</&></option> % } </select> </td> </tr> <tr> <td class="label"><&|/l&>Subject</&>:</td> - <td class="entry"><input name="UpdateSubject" size=60 value=""></td> + <td class="entry"><input name="UpdateSubject" size=60 value="<%$Ticket->Subject%>"></td> </tr> +% if (my $TxnCFs = $Ticket->TransactionCustomFields) { +% while (my $CF = $TxnCFs->Next()) { +<TR> +<TD class="label"><% $CF->Name %>:</TD> +<TD class="entry"><& /Elements/EditCustomField, + CustomField => $CF, + NamePrefix => "Object-RT::Transaction--CustomField-" + &><em><% $CF->FriendlyType %></em></TD> +</TD></TR> +% } # end if while +% } # end of if <tr> <td class="label"><&|/l&>Attach</&>:</td> <td class="entry"><input name="UpdateAttachment" type=file></td> @@ -90,7 +123,9 @@ <& /Elements/TitleBoxEnd &> -<& /Elements/Submit, Label => loc('Save Changes'), Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &> +<& /Elements/Submit, + Label => loc('Save Changes'), + Caption => loc("If you've updated anything above, be sure to"), color => "#333399" &> </form> <%INIT> @@ -114,22 +149,33 @@ my (@wresults, @results, @dresults, @lresults, @cf_results); unless ($OnlySearchForPeople) { @wresults = ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS); - @results = ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS); - @cf_results = ProcessTicketCustomFieldUpdates(ARGSRef => \%ARGS); + @cf_results = ProcessObjectCustomFieldUpdates( Object => $Ticket, ARGSRef => \%ARGS); @dresults = ProcessTicketDates( TicketObj => $Ticket, ARGSRef => \%ARGS); @lresults = ProcessTicketLinks( TicketObj => $Ticket, ARGSRef => \%ARGS); - $ARGS{'UpdateContent'} =~ s/\r\n/\n/g; - - if ($ARGS{'UpdateContent'} && - $ARGS{'UpdateContent'} ne '' && - $ARGS{'UpdateContent'} ne "-- \n" . - $session{'CurrentUser'}->UserObj->Signature - ) { - ProcessUpdateMessage(TicketObj => $Ticket, - ARGSRef=>\%ARGS, - Actions=>\@results); + if ($ARGS{'UpdateAttachment'}) { + my $subject = "$ARGS{'UpdateAttachment'}"; + # since CGI.pm deutf8izes the magic field, we need to add it back. + Encode::_utf8_on($subject); + # strip leading directories + $subject =~ s#^.*[\\/]##; + + my $attachment = MakeMIMEEntity( + Subject => $subject, + Body => "", + AttachmentFieldName => 'UpdateAttachment' + ); + delete $ARGS{'UpdateAttachment'}; + $ARGS{'UpdateAttachments'}->{ $subject } = $attachment; + } + + $ARGS{'UpdateContent'} =~ s/\r+\n/\n/g; + + if ($ARGS{'UpdateAttachments'} || ( $ARGS{'UpdateContent'} && $ARGS{'UpdateContent'} ne "-- \n" . + $session{'CurrentUser'}->UserObj->Signature)) { + ProcessUpdateMessage(TicketObj => $Ticket, ARGSRef=>\%ARGS, Actions=>\@results); } + @results = ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS); } push @results, @wresults; push @results, @dresults; diff --git a/rt/html/Ticket/ModifyCustomers.html b/rt/html/Ticket/ModifyCustomers.html new file mode 100644 index 000000000..72d103b23 --- /dev/null +++ b/rt/html/Ticket/ModifyCustomers.html @@ -0,0 +1,49 @@ +%# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +%# +%# 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. +<& /Elements/Header, Title => loc("Customers for ticket #[_1]", $Ticket->Id) &> +<& /Ticket/Elements/Tabs, + Ticket => $Ticket, + current_tab => "Ticket/ModifyCustomers.html?id=".$Ticket->Id, + Title => loc("Customers for ticket #[_1]", $Ticket->Id) &> + +<& /Elements/ListActions, actions => \@results &> + +<form action="ModifyCustomers.html" method="post"> +<input type="hidden" name="id" value="<%$Ticket->id%>"> + +<& /Elements/TitleBoxStart, title => loc('Edit Customer Links'), color => "#7f007b"&> +<& Elements/EditCustomers, Ticket => $Ticket, CustomerString => $CustomerString, ServiceString => $ServiceString &> +<& /Elements/TitleBoxEnd &> +<& /Elements/Submit, color => "#7f007b", Label => loc('Save Changes') &> +</form> + + +<%INIT> + +my @results = (); +my $Ticket = LoadTicket($id); + +# if we're trying to search for customers/services and nothing else +unless ( $OnlySearchForCustomers || $OnlySearchForServices) { + @results = ProcessTicketCustomers( TicketObj => $Ticket, ARGSRef => \%ARGS); +} + +</%INIT> + + +<%ARGS> +$OnlySearchForCustomers => undef +$OnlySearchForServices => undef +$CustomerString => undef +$ServiceString => undef +$id => undef +</%ARGS> diff --git a/rt/html/Ticket/ModifyDates.html b/rt/html/Ticket/ModifyDates.html index 3ccae4431..a4f68f2f5 100644 --- a/rt/html/Ticket/ModifyDates.html +++ b/rt/html/Ticket/ModifyDates.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Modify dates for #[_1]', $TicketObj->Id) &> <& /Ticket/Elements/Tabs, Ticket => $TicketObj, @@ -35,7 +57,7 @@ <& Elements/EditDates, TicketObj => $TicketObj &> <& /Elements/TitleBoxEnd &> -<& /Elements/Submit, color => "#663366" &> +<& /Elements/Submit, Label => loc('Save Changes'), color => "#663366" &> </form> diff --git a/rt/html/Ticket/ModifyLinks.html b/rt/html/Ticket/ModifyLinks.html index 1d050088b..150597d89 100644 --- a/rt/html/Ticket/ModifyLinks.html +++ b/rt/html/Ticket/ModifyLinks.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Link ticket #[_1]", $Ticket->Id) &> <& /Ticket/Elements/Tabs, Ticket => $Ticket, @@ -32,10 +54,10 @@ <form action="ModifyLinks.html" method="post"> <input type="hidden" name="id" value="<%$Ticket->id%>"> -<& /Elements/TitleBoxStart, title => loc('Edit Relationships'), color => "#336633"&> -<& Elements/EditLinks, Ticket => $Ticket &> +<& /Elements/TitleBoxStart, title => loc('Edit Links'), color => "#336633"&> +<& /Elements/EditLinks, Object => $Ticket, Merge => 1 &> <& /Elements/TitleBoxEnd &> -<& /Elements/Submit, color => "#336633", Caption=> loc('Save Changes') &> +<& /Elements/Submit, color => "#336633", Label => loc('Save Changes') &> </form> diff --git a/rt/html/Ticket/ModifyPeople.html b/rt/html/Ticket/ModifyPeople.html index 2e41664d9..61cbe6c27 100644 --- a/rt/html/Ticket/ModifyPeople.html +++ b/rt/html/Ticket/ModifyPeople.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc('Modify people related to ticket #[_1]', $Ticket->id) &> <& /Ticket/Elements/Tabs, Ticket => $Ticket, @@ -44,7 +66,7 @@ my (@results, @wresults); my $Ticket = LoadTicket($id); # if we're trying to search for watchers and nothing else -unless ($OnlySearchForPeople) { +unless ($OnlySearchForPeople or $OnlySearchForGroup) { @results = ProcessTicketBasics( TicketObj => $Ticket, ARGSRef => \%ARGS); @wresults = ProcessTicketWatchers( TicketObj => $Ticket, ARGSRef => \%ARGS); } @@ -56,6 +78,7 @@ push @results, @wresults; <%ARGS> $OnlySearchForPeople => undef +$OnlySearchForGroup => undef $UserField => undef $UserOp => undef $UserString => undef diff --git a/rt/html/Ticket/ShowEmailRecord.html b/rt/html/Ticket/ShowEmailRecord.html new file mode 100644 index 000000000..38eddd3d2 --- /dev/null +++ b/rt/html/Ticket/ShowEmailRecord.html @@ -0,0 +1,71 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<%args> +$Attachment => undef +$Transaction => undef +</%ARGS> +<%init> + my $AttachmentObj = new RT::Attachment($session{'CurrentUser'}); + $AttachmentObj->Load($Attachment) || Abort(loc("Attachment '[_1]' could not be loaded", $Attachment)); + + + unless ($AttachmentObj->id) { + Abort(loc("Attachment '[_1]' could not be loaded", $Attachment)); + } + unless ($AttachmentObj->TransactionId() == $Transaction ) { + Abort(loc("Attachment '[_1]' could not be loaded", $Attachment)); + } + +</%init> +<& /Elements/Header, ShowBar => 0 &> +<pre> +<%$AttachmentObj->Headers%> + +<%$AttachmentObj->Content%> +</pre> +</body> +</html> +%$m->abort; diff --git a/rt/html/Ticket/Update.html b/rt/html/Ticket/Update.html index e19aacf6a..df739c9c7 100644 --- a/rt/html/Ticket/Update.html +++ b/rt/html/Ticket/Update.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,16 +20,32 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /Ticket/Elements/Tabs, - Ticket => $Ticket , + Ticket => $TicketObj, Title=> $title &> <FORM ACTION="Update.html" NAME="TicketUpdate" @@ -31,50 +53,33 @@ <input type="hidden" name="QuoteTransaction" value="<% $ARGS{QuoteTransaction} %>"> <input type="hidden" name="DefaultStatus" value="<% $DefaultStatus %>"> <input type="hidden" name="Action" value="<% $ARGS{Action} %>"> -<font size=-1> - -<TABLE> -<TR><TD> -<a href="ModifyPeople.html?id=<%$Ticket->Id%>"><&|/l&>Ticket watchers</&></A></TD><TD align=right> -<&|/l&>Requestor</&>: -</TD><TD> -<b><% $Ticket->RequestorAddresses %></b> -</TD></TR> -<TR><TD> </TD><TD align=right> -<&|/l&>Cc</&>: -</TD><TD> -<b><% $Ticket->CcAddresses %></b> -</TD></TR> -<TR><TD> </TD><TD align=right> -<&|/l&>AdminCc</&>: -</TD><TD> -<b><% $Ticket->AdminCcAddresses %></b> -</TD></TR> -</TR> -</TABLE> -<hr> <TABLE BORDER=0> <tr><td align=right><&|/l&>Status</&>:</td> <td> -<& /Elements/SelectStatus, Name=>"Status", Default => $DefaultStatus &> +<& /Elements/SelectStatus, Name=>"Status", DefaultLabel => loc("[_1] (Unchanged)", loc($TicketObj->Status)), Default => $ARGS{'Status'} || ($TicketObj->Status eq $DefaultStatus ? undef : $DefaultStatus)&> <&|/l&>Owner</&>: -<& /Elements/SelectOwner, Name=>"Owner", Default => ($ARGS{'Owner'} || $Ticket->OwnerObj->Id()), QueueObj => $Ticket->QueueObj, TicketObj => $Ticket &> +<& /Elements/SelectOwner, Name=>"Owner", DefaultLabel => loc("[_1] (Unchanged)", $TicketObj->OwnerObj->Name()), QueueObj => $TicketObj->QueueObj, TicketObj => $TicketObj, Default => $ARGS{'Owner'} &> <&|/l&>Worked</&>: <input size=4 name="UpdateTimeWorked" value="<% $ARGS{UpdateTimeWorked}%>"> <&|/l&>minutes</&></td></tr> +% my $skip; +<& /Elements/Callback, _CallbackName => 'BeforeUpdateType', skip => \$skip, %ARGS &> +% if (!$skip) { +<INPUT TYPE=HIDDEN NAME=id VALUE="<%$TicketObj->Id%>"><br> +% } <tr><td align=right><&|/l&>Update Type</&>:</td> <td><select name="UpdateType"> % if ($CanComment) { - <option value="private" <%$CommentDefault%>><&|/l&>Comments (Not sent to requestors)</&></option> + <option value="private" <%$ARGS{'UpdateType'} eq "private" ? "SELECTED" : !$ARGS{'UpdateType'}&&$CommentDefault%>><&|/l&>Comments (Not sent to requestors)</&></option> % } % if ($CanRespond) { - <option value="response" <%$ResponseDefault%>><&|/l&>Response to requestors</&></option> + <option value="response" <%$ARGS{'UpdateType'} eq "response" ? "SELECTED" : !$ARGS{'UpdateType'}&&$ResponseDefault%>><&|/l&>Reply to requestors</&></option> % } </select> </td></tr> -<tr><td align=right><&|/l&>Subject</&>:</td><td> <input name="UpdateSubject" size=60 value="<% ($ARGS{UpdateSubject}) ? $ARGS{UpdateSubject} : $Ticket->Subject()%>"></td></tr> +<tr><td align=right><&|/l&>Subject</&>:</td><td> <input name="UpdateSubject" size=60 value="<% $ARGS{UpdateSubject} || $TicketObj->Subject()%>"></td></tr> <tr><td align=right><&|/l&>Cc</&>:</td><td> <input name="UpdateCc" size=60 -value=<% $ARGS{UpdateCc} %>><BR> +value="<% $ARGS{UpdateCc} %>"><BR> <i><font size=-2> <&|/l&>(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.)</&></font></i> </td></tr> @@ -89,44 +94,56 @@ value=<% $ARGS{UpdateCc} %>><BR> <TD COLSPAN=5> <&|/l&>Check box to delete</&><BR> % foreach my $attach_name (keys %{$session{'Attachments'}}) { -<input type="checkbox" name="DeleteAttach-<%$attach_name%>"><%$attach_name%><BR> +<input type="checkbox" name="DeleteAttach-<%$attach_name%>" value="1"><%$attach_name%><BR> % } # end of foreach </TD> </TR> <TR> % } # end of if + +% if (my $TxnCFs = $TicketObj->TransactionCustomFields) { +% while (my $CF = $TxnCFs->Next()) { +<TR> +<TD ALIGN=RIGHT><% $CF->Name %>:</TD> +<TD><& /Elements/EditCustomField, CustomField => $CF, NamePrefix => + "Object-RT::Transaction--CustomField-" &><em><% $CF->FriendlyType %></em></TD> +</TR> +% } # end if while +% } # end of if + <tr><td align=right><&|/l&>Attach</&>:</td><td><input name="Attach" type="file"><INPUT TYPE=SUBMIT NAME="AddMoreAttach" VALUE="<&|/l&>Add More Files</&>"><input type="hidden" name="UpdateAttach" value="1"> </td></tr> <tr><td align="right" valign="top"><&|/l&>Message</&>:</td><td> <& /Elements/Callback, _CallbackName => 'BeforeMessageBox', %ARGS &> % if (exists $ARGS{UpdateContent}) { +% # preserve QuoteTransaction so we can use it to set up sane references/in/reply to +% my $temp = $ARGS{'QuoteTransaction'}; % delete $ARGS{'QuoteTransaction'}; -<& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, %ARGS&> +<& /Elements/MessageBox, Name=>"UpdateContent", Default=>$ARGS{UpdateContent}, IncludeSignature => 0, %ARGS&> +% $ARGS{'QuoteTransaction'} = $temp; % } else { <& /Elements/MessageBox, Name=>"UpdateContent", %ARGS &> % } </td></tr> - <INPUT TYPE=HIDDEN NAME=id VALUE="<%$Ticket->Id%>"><br> </table> -<& /Elements/Submit, Name => 'SubmitTicket' &> - </FORM> - - - +<& /Elements/Submit, Label => loc('Update Ticket'), Name => 'SubmitTicket' &> +% if ($TicketObj->CurrentUserHasRight('ShowOutgoingEmail')) { +<& /Ticket/Elements/PreviewScrips, TicketObj => $TicketObj, %ARGS &> +% } +</FORM> <%INIT> - my $CanRespond = 0; my $CanComment = 0; my $title; -my $Ticket = LoadTicket($id); +my $TicketObj = LoadTicket($id); unless($DefaultStatus){ - $DefaultStatus=($ARGS{'Status'} ||$Ticket->Status()); + $DefaultStatus=($ARGS{'Status'} ||$TicketObj->Status()); } if ($DefaultStatus =~ '^new$'){ @@ -134,27 +151,27 @@ if ($DefaultStatus =~ '^new$'){ } if ($DefaultStatus eq 'resolved') { - $title = loc("Resolve ticket #[_1] ([_2])", $Ticket->id, $Ticket->Subject); + $title = loc("Resolve ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject); } else { - $title = loc("Update ticket #[_1] ([_2])", $Ticket->id, $Ticket->Subject); + $title = loc("Update ticket #[_1] ([_2])", $TicketObj->id, $TicketObj->Subject); } # Things needed in the template - we'll do the processing here, just # for the convenience: my ($CommentDefault, $ResponseDefault); -if (($Action eq 'Comment') or ($ARGS{'UpdateType'} eq 'private')) { +if ($Action ne 'Respond') { $CommentDefault = "SELECTED"; } else { $ResponseDefault = "SELECTED"; } -$CanRespond = 1 if ( $Ticket->CurrentUserHasRight('ReplyToTicket') or - $Ticket->CurrentUserHasRight('ModifyTicket') ); +$CanRespond = 1 if ( $TicketObj->CurrentUserHasRight('ReplyToTicket') or + $TicketObj->CurrentUserHasRight('ModifyTicket') ); -$CanComment = 1 if ( $Ticket->CurrentUserHasRight('CommentOnTicket') or - $Ticket->CurrentUserHasRight('ModifyTicket') ); +$CanComment = 1 if ( $TicketObj->CurrentUserHasRight('CommentOnTicket') or + $TicketObj->CurrentUserHasRight('ModifyTicket') ); # {{{ deal with deleting uploaded attachments @@ -164,6 +181,7 @@ foreach my $key (keys %ARGS) { } $session{'Attachments'} = { %{$session{'Attachments'} || {}} }; } +# }}} # {{{ store the uploaded attachment in session if ($ARGS{'Attach'}) { # attachment? @@ -176,7 +194,7 @@ if ($ARGS{'Attach'}) { # attachment? $subject =~ s#^.*[\\/]##; my $attachment = MakeMIMEEntity( - Subject => $subject, + Filename => $subject, Body => "", AttachmentFieldName => 'Attach' ); @@ -193,9 +211,10 @@ unless (keys %{$session{'Attachments'}} and $ARGS{'UpdateAttach'}) { # }}} if ( exists $ARGS{SubmitTicket} ) { - $m->comp('Display.html', %ARGS); + $m->comp('Display.html', TicketObj => $TicketObj, %ARGS); return; } + </%INIT> <%ARGS> diff --git a/rt/html/Tools/Elements/Tabs b/rt/html/Tools/Elements/Tabs new file mode 100644 index 000000000..fc4153b98 --- /dev/null +++ b/rt/html/Tools/Elements/Tabs @@ -0,0 +1,72 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/Tabs, + tabs => $tabs, + current_toptab => 'Tools/Offline.html', + current_tab => $current_tab, + Title => $Title &> + +<%INIT> + my $tabs = { a => { title => loc('Offline'), + path => 'Tools/Offline.html', + }, + }; + + foreach my $tab (sort keys %{$tabs}) { + if ($tabs->{$tab}->{'path'} eq $current_tab) { + $tabs->{$tab}->{"subtabs"} = $subtabs; + $tabs->{$tab}->{"current_subtab"} = $current_subtab; + } + } +</%INIT> + + +<%ARGS> +$subtabs => undef +$current_tab => undef +$current_subtab => undef +$Title => undef +</%ARGS> diff --git a/rt/html/Tools/MyDay.html b/rt/html/Tools/MyDay.html new file mode 100644 index 000000000..a20209c9b --- /dev/null +++ b/rt/html/Tools/MyDay.html @@ -0,0 +1,91 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/Header, title => "What I did today" &> +(displaying new and open tickets for <%$session{'CurrentUser'}->Name%>) +<FORM METHOD=POST ACTION="MyDay.html"> +<TABLE width=100% cellpadding=0 cellspacing=0> +% while ( my $Ticket = $Tickets->Next()) { +% my $class; +% $i++; +% if ($i % 2 ) { +% $class = 'class="oddline"'; +% } +<TR <%$class|n%>><TD COLSPAN=2><h2><A +HREF="<%$RT::WebPath%>/Ticket/Display.html?id=<%$Ticket->Id%>"><%$Ticket->Id%>: +<%$Ticket->Subject%></A></h2></td></tr> +<TR <%$class|n%>><TD><SPAN CLASS=label>Worked:</SPAN><input size=3 name="UpdateTimeWorked-<%$Ticket->Id%>"> minutes +</TD> +<TD ROWSPAN=2><SPAN CLASS=label>Comments:<br></SPAN><textarea name="UpdateContent-<%$Ticket->Id%>" rows=5 +cols=60></textarea></TD></TR> +<TR <%$class|n%>> +<TD><SPAN CLASS="label">Status:</SPAN> <& /Elements/SelectStatus, Name=> 'UpdateStatus-'.$Ticket->Id, + DefaultLabel => loc("[_1] (Unchanged)",loc($Ticket->Status())) &></TD> + </TR> + +% } +</TABLE> +<& /Elements/Submit, Label => "Record all updates" , Reset => 'Clear'&> +</FORM> +</HTML> + +<%INIT> + +my $i = 0; + +my $Tickets = RT::Tickets->new($session{'CurrentUser'}); +$Tickets->LimitOwner(VALUE => $session{'CurrentUser'}->Id); +$Tickets->LimitStatus( VALUE => 'open' ); +$Tickets->LimitStatus ( VALUE => 'new'); +$Tickets->OrderBy ( FIELD => 'Priority', ORDER => 'DESC'); + +while (my $Ticket = $Tickets->Next()) { + #Process updates + + +} + +</%INIT> + diff --git a/rt/html/Tools/Offline.html b/rt/html/Tools/Offline.html new file mode 100644 index 000000000..8b12784e8 --- /dev/null +++ b/rt/html/Tools/Offline.html @@ -0,0 +1,166 @@ +%# BEGIN BPS TAGGED BLOCK {{{ +%# +%# COPYRIGHT: +%# +%# 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 +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} +<& /Elements/Header, Title => loc("Offline upload") &> +<& Elements/Tabs, + current_tab => "Tools/Offline.html", + Title => loc("Offline edits") &> + +<& /Elements/ListActions, actions => \@results &> + +<& /Elements/Callback, Requestor => \$requestoraddress, + Queue => \$qname, %ARGS &> + +<FORM ACTION="Offline.html" NAME="TicketUpdate" + METHOD=POST enctype="multipart/form-data"> +<table> +<tr> +<td class=label> +<&|/l&>Default Queue</&>: +</td> +<td> +<& /Elements/SelectQueue, Name => "qname", NamedValues => 1 &> +<i><&|/l&>If no queue is specified, create tickets in this queue.</&></i> +</td> +</tr> +<tr> +<td class=label> +<&|/l&>Default Requestor</&>: +</td> +<td> +<input name=requestoraddress value=<%$requestoraddress%>> +<i><&|/l&>If no Requestor is specified, create tickets with this requestor.</&></i> +</td> +</tr> +<tr><td class=labeltop> +<&|/l&>Template</&>: +</td> +<td colspan=2> +<textarea name=string cols=80 rows=30> +<%$string%> +</textarea> +</td> +</tr> +<tr><td class=label> +<&|/l&>Get template from file</&>: +</td> +<td> +<input name="Template" type="file" value="foo"> +<INPUT TYPE=SUBMIT NAME="Parse" VALUE="<&|/l&>Go</&>"> +</td> +</tr> +</table> +<& /Elements/Submit, Name => 'UpdateTickets', Label => loc('Upload'), Caption => loc("Upload your changes"), color => "#993333" &> + +</FORM> +<%args> +$requestoraddress => undef +$qname => undef +$string => undef +</%args> +<%INIT> + +my @results; +use RT::Action::CreateTickets; +my $action = RT::Action::CreateTickets->new(CurrentUser => $session{'CurrentUser'}); +; +if ($ARGS{'Parse'} && $ARGS{'Template'}) { + $string = ""; + my $cgi_object = $m->cgi_object; + my $fh = $cgi_object->upload('Template'); + my $filename = "$fh"; + + my ($buffer, $template); + while ( my $bytesread = read( $fh, $buffer, 4096 ) ) { + $template .= $buffer; + } + $template =~ s/\r\n/\n/gs; + $action->Parse(Content => $template, Queue => $qname, Requestor => $requestoraddress); + foreach ( @{ $action->{'create_tickets'} } ) { + my $id = $_; + $id =~ s/^create\-//; + $string .= "===Create-Ticket: $id\n"; + $string .= $action->{'templates'}->{$_} . "\n"; + } + foreach ( @{ $action->{'update_tickets'} } ) { + my $id = $_; + $id =~ s/^update\-//; + $string .= "===Update-Ticket: $id\n"; + $string .= $action->{'templates'}->{$_} . "\n"; + } + + +} elsif ($ARGS{'UpdateTickets'}) { + $action->Parse(Content => $ARGS{string}, Queue => $qname, Requestor=> $requestoraddress); + push @results, $action->CreateByTemplate(); + push @results, $action->UpdateByTemplate(); +} else { + if ($ARGS{'Query'}) { + my $Tickets = RT::Tickets->new($session{'CurrentUser'}); + $Tickets->FromSQL($ARGS{'Query'}); + + while (my $t = $Tickets->Next) { + $string .= "===Update-Ticket: " . $t->Id . "\n"; + $string .= $action->GetUpdateTemplate($t); + $string .= "" . "\n"; + } + + $string .= "" . "\n"; + $string .= "===# DO NOT EDIT BELOW THIS LINE#===\n"; + $string .= "" . "\n"; + + while (my $t = $Tickets->Next) { + $string .= "===# DO NOT EDIT #===\n"; + $string .= "===Base-Ticket: " . $t->Id . "\n"; + $string .= $action->GetBaseTemplate($t); + $string .= "===# DO NOT EDIT #===\n"; + $string .= "" . "\n"; + } + } else { + $string .= "===Create-Ticket: ticket1\n"; + $string .= $action->GetCreateTemplate(); + } +} +</%INIT> diff --git a/rt/html/User/Delegation.html b/rt/html/User/Delegation.html index c036f78ec..3347fda1f 100644 --- a/rt/html/User/Delegation.html +++ b/rt/html/User/Delegation.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Delegate rights") &> <& /User/Elements/Tabs, current_tab => 'User/Delegation.html', @@ -33,7 +55,7 @@ <& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::Queue' &> <& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::Group' &> -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Modify Rights') &> </form> <%INIT> diff --git a/rt/html/User/Elements/DelegateRights b/rt/html/User/Elements/DelegateRights index 7ff83280f..79ecb5977 100644 --- a/rt/html/User/Elements/DelegateRights +++ b/rt/html/User/Elements/DelegateRights @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <h2><%$sectionheading%></h2> <%perl> @@ -59,7 +81,7 @@ while ( my $delegation = $delegations->Next) { </td> % while (my $pg = $personalgroups->Next) { <td align=center> - <input name="Delegate-ACE-<% $right->Id %>-to-<% $pg->PrincipalId%>" type=checkbox <%$ del_hash->{$pg->PrincipalId} && 'CHECKED' %>> + <input name="Delegate-ACE-<% $right->Id %>-to-<% $pg->PrincipalId%>" type=checkbox value="1" <%$ del_hash->{$pg->PrincipalId} && 'CHECKED' %>> % if ( $del_hash->{$pg->PrincipalId}) { <input type=hidden name="Delegate-Existing-ACE-<% $right->Id %>-to-<% $pg->PrincipalId%>-as-<%$del_hash->{$pg->PrincipalId}->Id%>"> % } diff --git a/rt/html/User/Elements/GroupTabs b/rt/html/User/Elements/GroupTabs index 89d7125b9..2e79df268 100644 --- a/rt/html/User/Elements/GroupTabs +++ b/rt/html/User/Elements/GroupTabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /User/Elements/Tabs, subtabs => $tabs, current_tab => 'User/Groups/', diff --git a/rt/html/User/Elements/Tabs b/rt/html/User/Elements/Tabs index 195cf1c60..1d25fb926 100644 --- a/rt/html/User/Elements/Tabs +++ b/rt/html/User/Elements/Tabs @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Tabs, tabs => $tabs, current_toptab => 'User/Prefs.html', diff --git a/rt/html/User/Groups/Members.html b/rt/html/User/Groups/Members.html index db83b8c0f..2068e5a5b 100644 --- a/rt/html/User/Groups/Members.html +++ b/rt/html/User/Groups/Members.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /User/Elements/GroupTabs, GroupObj => $Group, @@ -59,7 +81,7 @@ % $UserMembers->LimitToUsers(); <UL> % while (my $member = $UserMembers->Next()) { -<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>"> +<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>" value="1"> <%$member->MemberObj->Object->Name%> (<%$member->MemberObj->Object->RealName%>) % } </ul> @@ -68,7 +90,7 @@ % my $GroupMembers = $Group->MembersObj; % $GroupMembers->LimitToGroups(); % while (my $member = $GroupMembers->Next()) { -<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>"> +<LI><INPUT TYPE=CHECKBOX Name="DeleteMember-<%$member->MemberId%>" value="1"> <%$member->MemberObj->Object->Name%> % } % } @@ -76,7 +98,7 @@ </TD> </TR> </TABLE> -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Modify Members') &> </form> diff --git a/rt/html/User/Groups/Modify.html b/rt/html/User/Groups/Modify.html index f731e1a82..c0e9ce575 100644 --- a/rt/html/User/Groups/Modify.html +++ b/rt/html/User/Groups/Modify.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /User/Elements/GroupTabs, @@ -52,7 +74,7 @@ <INPUT TYPE=CHECKBOX NAME="Enabled" VALUE="1" <%$EnabledChecked%>> <&|/l&>Enabled (Unchecking this box disables this group)</&><BR> </TR> </TABLE> -<& /Elements/Submit, Caption => loc("Be sure to save your changes"), Reset => 1 &> +<& /Elements/Submit, Label => loc('Save Changes'), Reset => 1 &> </form> <%INIT> diff --git a/rt/html/User/Groups/index.html b/rt/html/User/Groups/index.html index 12b43b409..6d2e15d47 100644 --- a/rt/html/User/Groups/index.html +++ b/rt/html/User/Groups/index.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => $title &> <& /User/Elements/GroupTabs, current_subtab => 'User/Groups/index.html', diff --git a/rt/html/User/Prefs.html b/rt/html/User/Prefs.html index b89fc40ae..f1c755826 100644 --- a/rt/html/User/Prefs.html +++ b/rt/html/User/Prefs.html @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,29 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title=>loc("Preferences") &> <& /User/Elements/Tabs, current_tab => 'User/Prefs.html', @@ -34,70 +56,104 @@ <TABLE WIDTH=100% BORDER=0> <TR> -<TD VALIGN=TOP ROWSPAN=2> +<TD VALIGN=TOP class="boxcontainer"> <& /Elements/TitleBoxStart, title => loc('Identity') &> <input type=hidden name="Name" value="<%$UserObj->Name%>"> -<&|/l&>Email</&>: <input name="EmailAddress" value="<%$UserObj->EmailAddress%>"> -<BR> -<&|/l&>Real Name</&>: <input name="RealName" value="<%$UserObj->RealName%>"> -<BR> -<&|/l&>Nickname</&>: <input name="NickName" value="<%$UserObj->NickName%>"> +<table callspacing=0 cellpadding=0> + <tr> + <td class=label><&|/l&>Email</&>: </td> + <td class=value><input name="EmailAddress" value="<%$UserObj->EmailAddress%>"></td> + </tr> + <tr> + <td class=label><&|/l&>Real Name</&>:</td> + <td class=value><input name="RealName" value="<%$UserObj->RealName%>"></td> </tr> + <tr> + <td class=label><&|/l&>Nickname</&>:</td> + <td class=value><input name="NickName" value="<%$UserObj->NickName%>"></td> + </tr> + <tr> + <td class=label><&|/l&>Language</&>:</td> + <td class=value><& /Elements/SelectLang, Name => 'Lang', Default => $UserObj->Lang &></td> + </tr> +</table> <& /Elements/TitleBoxEnd &> <br> <& /Elements/TitleBoxStart, title => loc('Phone numbers') &> -<&|/l&>Residence</&>: <input name="HomePhone" value="<%$UserObj->HomePhone%>" size=13> -<BR> -<&|/l&>Work</&>: <input name="WorkPhone" value="<%$UserObj->WorkPhone%>" size=13> -<BR> -<&|/l&>Mobile</&>: <input name="MobilePhone" value="<%$UserObj->MobilePhone%>" size=13> -<BR> -<&|/l&>Pager</&>: <input name="PagerPhone" value="<%$UserObj->PagerPhone%>" size=13> +<table callspacing=0 cellpadding=0> + <tr> + <td class=label><&|/l&>Residence</&>:</td> + <td class=value><input name="HomePhone" value="<%$UserObj->HomePhone%>" size=13></td> + </tr> + <tr> + <td class=label><&|/l&>Work</&>:</td> + <td class=value><input name="WorkPhone" value="<%$UserObj->WorkPhone%>" size=13></td> + </tr> + <tr> + <td class=label><&|/l&>Mobile</&>:</td> + <td class=value><input name="MobilePhone" value="<%$UserObj->MobilePhone%>" size=13></td> + </tr> + <tr> + <td class=label><&|/l&>Pager</&>:</td> + <td class=value><input name="PagerPhone" value="<%$UserObj->PagerPhone%>" size=13></td> + </tr> +</table> <& /Elements/TitleBoxEnd &> </TD> -<TD VALIGN=TOP> +<TD VALIGN=TOP class="boxcontainer"> % unless ($RT::WebExternalAuth and !$RT::WebFallbackToInternalAuth) { <& /Elements/TitleBoxStart, title => loc('Password') &> <TABLE> <TR> -<TD ALIGN=RIGHT> +<TD class=label> <&|/l&>New Password</&>: </TD> -<TD ALIGN=LEFT> +<TD class=value> <input type=password name="Pass1"> </TD> </TR> -<TR><TD ALIGN=RIGHT> +<TR><TD class=label> <&|/l&>Retype Password</&>: </TD> -<TD> +<TD class=value> <input type=password name="Pass2"> </TD> </TR> </TABLE> -% } <& /Elements/TitleBoxEnd &> -</TD> -<TR> +% } -<TD VALIGN=TOP> <& /Elements/TitleBoxStart, title => loc('Location') &> -<&|/l&>Organization</&>: <input name="Organization" value="<%$UserObj->Organization%>"> -<BR> -<&|/l&>Address1</&>: <input name="Address1" value="<%$UserObj->Address1%>"> -<BR> -<&|/l&>Address2</&>: <input name="Address2" value="<%$UserObj->Address2%>"> -<BR> -<&|/l&>City</&>: <input name="City" value="<%$UserObj->City%>" size=14> - -<&|/l&>State</&>: <input name="State" value="<%$UserObj->State%>" size=3> - -<&|/l&>Zip</&>: <input name="Zip" value="<%$UserObj->Zip%>" size=9> -<BR> -<&|/l&>Country</&>: <input name="Country" value="<%$UserObj->Country%>"> -<BR> - - +<table callspacing=0 cellpadding=0> + <tr> + <td class=label><&|/l&>Organization</&>:</td> + <td class=value><input name="Organization" value="<%$UserObj->Organization%>"></td> + </tr> + <tr> + <td class=label><&|/l&>Address1</&>:</td> + <td class=value><input name="Address1" value="<%$UserObj->Address1%>"></td> + </tr> + <tr> + <td class=label><&|/l&>Address2</&>:</td> + <td class=value><input name="Address2" value="<%$UserObj->Address2%>"></td> + </tr> + <tr> + <td class=label><&|/l&>City</&>:</td> + <td><input name="City" value="<%$UserObj->City%>" size=14></td> + </tr> + <tr> + <td class=label><&|/l&>State</&>:</td> + <td class=value><input name="State" value="<%$UserObj->State%>" size=3></td> + </tr> + <tr> + <td class=label><&|/l&>Zip</&>:</td> + <td class=value><input name="Zip" value="<%$UserObj->Zip%>" size=9></td> + </tr> + <tr> + <td class=label><&|/l&>Country</&>:</td> + <td class=value><input name="Country" value="<%$UserObj->Country%>"></td> + </tr> +</table> <& /Elements/TitleBoxEnd &> </TD> </TR> @@ -105,11 +161,11 @@ -<TD COLSPAN=2 VALIGN=TOP> +<TD COLSPAN=2 VALIGN=TOP class="boxcontainer"> %if ($UserObj->Privileged) { <BR> <& /Elements/TitleBoxStart, title => loc('Signature') &> -<TEXTAREA COLS=80 ROWS=5 name="Signature" WRAP=HARD> +<TEXTAREA COLS=80 ROWS=5 name="Signature" class="signature" WRAP=HARD> <%$UserObj->Signature%></TEXTAREA> <& /Elements/TitleBoxEnd &> % } @@ -120,7 +176,7 @@ </TABLE> -<& /Elements/Submit &> +<& /Elements/Submit, Label => loc('Save Preferences') &> </form> @@ -147,12 +203,17 @@ if ($UserObj->Id) { Organization RealName NickName Lang EmailEncoding WebEncoding ExternalContactInfoId ContactInfoSystem Gecos ExternalAuthId AuthSystem HomePhone WorkPhone MobilePhone PagerPhone Address1 - Address2 City State Zip Country + Address2 City State Zip Country Lang ); my @fieldresults = UpdateRecordObject ( AttributesRef => \@fields, Object => $UserObj, ARGSRef => \%ARGS ); + if ($Lang) { + $session{'CurrentUser'}->LanguageHandle($Lang); + $session{'CurrentUser'} = $session{'CurrentUser'}; # force writeback + } + push (@results,@fieldresults); diff --git a/rt/html/autohandler b/rt/html/autohandler index ce8b7569e..c854c2b33 100644 --- a/rt/html/autohandler +++ b/rt/html/autohandler @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,40 +20,56 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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.) %# -%# END LICENSE BLOCK +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <%INIT> # Roll back any dangling transactions from a previous failed connection $RT::Handle->ForceRollback() if $RT::Handle->TransactionDepth; -local *session; +local *session unless $m->is_subrequest; # avoid reentrancy, as suggested by masonbook + +# Disable AutoFlush using an attribute +if ($m->request_comp->attr_exists('AutoFlush')) { + $m->autoflush($m->request_comp->attr('AutoFlush')); +} + %ARGS = map { - # if they've passed multiple values, they'll be an array. if they've passed just one, a scalar - # whatever they are, mark them as utf8 + # if they've passed multiple values, they'll be an array. if they've + # passed just one, a scalar whatever they are, mark them as utf8 my $type = ref($_); (!$type) - ? Encode::decode(utf8 => $_, Encode::FB_PERLQQ) : - ($type eq 'ARRAY') - ? [ map { ref($_) ? $_ : Encode::decode(utf8 => $_, Encode::FB_PERLQQ) } @$_ ] : - ($type eq 'HASH') - ? { map { ref($_) ? $_ : Encode::decode(utf8 => $_, Encode::FB_PERLQQ) } %$_ } : $_ -} %ARGS; - -if ($ARGS{'Debug'}) { - require Time::HiRes; - $m->{'rt_base_time'} = [Time::HiRes::gettimeofday()]; + ? Encode::is_utf8($_) ? $_ : Encode::decode(utf8 => $_, Encode::FB_PERLQQ) : + ($type eq 'ARRAY') + ? [ map { (ref($_) or Encode::is_utf8($_)) ? $_ : Encode::decode(utf8 => $_, Encode::FB_PERLQQ) } @$_ ] : + ($type eq 'HASH') + ? { map { (ref($_) or Encode::is_utf8($_)) ? $_ : Encode::decode(utf8 => $_, Encode::FB_PERLQQ) } %$_ } : $_ + } %ARGS; + +$m->{'rt_base_time'} = [Time::HiRes::gettimeofday()]; -} -else { - $m->{'rt_base_time'} = time; -} $m->comp('/Elements/SetupSessionCookie', %ARGS); unless ($session{'CurrentUser'} && $session{'CurrentUser'}->Id) { @@ -58,76 +80,102 @@ unless ($session{'CurrentUser'} && $session{'CurrentUser'}->Id) { $r->content_type("text/html; charset=utf-8"); # If it's a noauth file, don't ask for auth. -if ($m->base_comp->path =~ '^/+NoAuth/' || - $m->base_comp->path =~ '^/+REST/\d+\.\d+/NoAuth/') +if ($m->base_comp->path =~ $RT::WebNoAuthRegex ) { $m->call_next(%ARGS); $m->abort(); } -# If RT is configured for external auth, let's get REMOTE_USER -elsif ($RT::WebExternalAuth and length($ENV{'REMOTE_USER'})) { - my $orig_user = $user; - - $user = $ENV{'REMOTE_USER'}; - $session{'CurrentUser'} = RT::CurrentUser->new(); - my $load_method = $RT::WebExternalGecos ? 'LoadByGecos' : 'Load'; - - if ($^O eq 'MSWin32' and $RT::WebExternalGecos) { - my $NodeName = Win32::NodeName(); - $user =~ s/^\Q$NodeName\E\\//i; - } - - $session{'CurrentUser'}->$load_method($user); - - if ($RT::WebExternalAuto and !$session{'CurrentUser'}->Id() ) { - # Create users on-the-fly with default attributes - - my $UserObj = RT::User->new(RT::CurrentUser->new('root')); - - my ($val, $msg) = $UserObj->Create( - %{ref($RT::AutoCreate) ? $RT::AutoCreate : {}}, - Name => $user, - Gecos => $user, - ); - - if ($val) { - $UserObj->SetPrivileged(1); - - if ($^O !~ /^(?:riscos|MacOS|MSWin32|dos|os2)$/) { - # Populate fields with information from Unix /etc/passwd - - my ($comments, $realname) = (getpwnam($user))[5, 6]; - $UserObj->SetComments($comments) if defined $comments; - $UserObj->SetRealName($realname) if defined $realname; +# If RT is configured for external auth, let's go through and get REMOTE_USER +elsif ( $RT::WebExternalAuth ) { + + # do we actually have a REMOTE_USER equivlent? + if ( RT::Interface::Web::WebCanonicalizeInfo() ) { + + my $orig_user = $user; + + $user = RT::Interface::Web::WebCanonicalizeInfo(); + $session{'CurrentUser'} = RT::CurrentUser->new(); + my $load_method = $RT::WebExternalGecos ? 'LoadByGecos' : 'Load'; + + if ($^O eq 'MSWin32' and $RT::WebExternalGecos) { + my $NodeName = Win32::NodeName(); + $user =~ s/^\Q$NodeName\E\\//i; + } + + $session{'CurrentUser'}->$load_method($user); + + if ($RT::WebExternalAuto and !$session{'CurrentUser'}->Id() ) { + # Create users on-the-fly + + my $UserObj = RT::User->new(RT::CurrentUser->new('RT_System')); + + my ($val, $msg) = $UserObj->Create( + %{ref($RT::AutoCreate) ? $RT::AutoCreate : {}}, + Name => $user, + Gecos => $user, + ); + + if ($val) { + + # now get user specific information, to better create our user. + my $new_user_info = RT::Interface::Web::WebExternalAutoInfo($user); + + # set the attributes that have been defined. + # FIXME: this is a horrible kludge. I'm sure there's something cleaner + foreach my $attribute ('Name', 'Comments', 'Signature', 'EmailAddress', + 'PagerEmailAddress', 'FreeformContactInfo', + 'Organization', 'Disabled', 'Privileged', + 'RealName', 'NickName', 'Lang', 'EmailEncoding', + 'WebEncoding', 'ExternalContactInfoId', + 'ContactInfoSystem', 'ExternalAuthId', 'Gecos', + 'HomePhone', 'WorkPhone', 'MobilePhone', + 'PagerPhone', 'Address1', 'Address2', 'City', + 'State', 'Zip', 'Country') { + $m->comp('/Elements/Callback', %ARGS, _CallbackName => 'NewUser'); + + my $method = "Set$attribute"; + $UserObj->$method($new_user_info->{$attribute}) + if( defined $new_user_info->{$attribute} ); + } + $session{'CurrentUser'}->Load($user); } - elsif ($^O eq 'MSWin32' and eval 'use Net::AdminMisc; 1') { - # Populate fields with information from NT domain controller + else { + # we failed to successfully create the user. abort abort abort. + delete $session{'CurrentUser'}; + $m->abort() unless $RT::WebFallbackToInternalAuth; + $m->comp('/Elements/Login', %ARGS, + Error=> loc('Cannot create user: [_1]', $msg)); } - - $session{'CurrentUser'}->Load($user); } - else { + + unless ( $session{'CurrentUser'}->Id() ) { delete $session{'CurrentUser'}; - $m->abort() unless $RT::WebFallbackToInternalAuth; - $m->comp('/Elements/Login', %ARGS, Error=> loc('Cannot create user: [_1]', $msg)); + $user = $orig_user; + + if ( $RT::WebExternalOnly ) { + $m->comp('/Elements/Login', %ARGS, + Error=> loc('You are not an authorized user')); + $m->abort(); + } } } - - unless ( $session{'CurrentUser'}->Id() ) { - delete $session{'CurrentUser'}; - $user = $orig_user; - - if ( $RT::WebExternalOnly ) { - $m->comp('/Elements/Login', %ARGS, Error=> loc('You are not an authorized user')); - $m->abort(); + elsif ($RT::WebFallbackToInternalAuth) { + unless (defined($session{'CurrentUser'})) { + $m->comp('/Elements/Login', %ARGS, + Error=> loc('You are not an authorized user')); + $m->abort(); } + } else { + # WebExternalAuth is set, but we don't have a REMOTE_USER. abort + delete $session{'CurrentUser'} if defined $session{'CurrentUser'}; } } delete $session{'CurrentUser'} unless $session{'CurrentUser'} and defined $session{'CurrentUser'}->Id; + # Process per-page authentication callbacks $m->comp('/Elements/Callback', %ARGS, _CallbackName => 'Auth'); @@ -140,10 +188,14 @@ if (!$session{'CurrentUser'} && defined ($user) && defined ($pass) ){ !$session{'CurrentUser'}->IsPassword($pass)) { delete $session{'CurrentUser'}; + $RT::Logger->error("FAILED LOGIN for $user from $ENV{'REMOTE_ADDR'}"); $m->comp('/Elements/Login', %ARGS, Error => loc('Your username or password is incorrect')); $m->abort(); } + else { + $RT::Logger->info("Successful login for $user from $ENV{'REMOTE_ADDR'}"); + } } # If we've got credentials, let's serve the file up. diff --git a/rt/html/index.html b/rt/html/index.html index 39eac8d61..04d48ece6 100644 --- a/rt/html/index.html +++ b/rt/html/index.html @@ -1,8 +1,40 @@ -%# BEGIN LICENSE BLOCK +<!-- +% $m->out('--'.'>'); +% if (0) { +%# --> +<html><head> +<META HTTP-EQUIV=Refresh CONTENT="3; URL=http://bestpractical.com/rt/rt-broken-install.html"> +<title>Almost there!</title></head> +<body> + +<img src="http://www.bestpractical.com/images/unconfigured-rtlogo.jpg"> +<br><br> +<h1>You're almost there!</h1> +You haven't yet configured your webserver to run RT. + +You appear to have installed RT's web interface correctly, but haven't yet configured your web +server to "run" the RT server which powers the web interface. + +The next step is to edit your webserver's configuration file to instruct it to use +RT's <b>mod_perl</b>, <b>fastcgi</b> or <b>speedycgi</b> handler. + +If you need commercial support, please contact us at sales@bestpractical.com. + + +<!-- +% } + +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,28 +46,47 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# 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: %# -%# END LICENSE BLOCK +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) +%# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. +%# +%# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title=>loc("RT at a glance"), Refresh => $session{'home_refresh_interval'} &> <& /Elements/Tabs, current_toptab => '', Title=>loc("RT at a glance") &> +<& /Elements/ListActions, actions => \@results &> <TABLE BORDER=0 WIDTH=100%> <TR VALIGN=TOP> -<TD WIDTH=70%> +<TD WIDTH=70% class="boxcontainer"> <& /Elements/MyTickets &> <BR> <& /Elements/MyRequests &> +<BR> +<& /Elements/QuickCreate &> </TD> -<TD> +<TD class="boxcontainer"> <& /Elements/Quicksearch &> <BR> -<form method=get action="index.html"> +<form method=get action="<%$RT::WebPath%>/index.html"> <& /Elements/Refresh, Name => 'HomeRefreshInterval', Default => $session {'home_refresh_interval'} &> <div align=right><input type=submit value="<&|/l&>Go!</&>"></div> </form> @@ -43,38 +94,57 @@ </TR> </TABLE> <%init> + +my @results; + +if ($ARGS{'QuickCreate'} ) { + my $ticket = RT::Ticket->new($session{'CurrentUser'}); + my ($tid, $trans, $tmsg) = $ticket->Create(Queue => $ARGS{'Queue'}, + Owner => $ARGS{'Owner'}, + Subject => $ARGS{'Subject'}); + + + push (@results, $tmsg); +} + + if ( $ARGS{'q'} ) { my $query = $ARGS{'q'}; - if ( $query =~ m/^\s*(\d+)\s*$/ ) { - $m->redirect("$RT::WebPath/Ticket/Display.html?id=$1"); + if ( $query =~ m/^\s*(\d+)\s*$/ ) { + $m->comp("/Ticket/Display.html" , id=> $1); + return(); + } + + if ($m->comp('/Elements/Callback', _CallbackName => 'SearchPreFilter', + query => $query, %ARGS)) { + return(); } $session{'tickets'} = RT::Tickets->new( $session{'CurrentUser'} ); if ( $query =~ m/\@/ ) { - $session{'tickets'}->LimitRequestor( VALUE => $query, - OPERATOR => '=', ); - $m->redirect("$RT::WebPath/Search/Listing.html"); + $m->comp("/Search/Results.html", Query => "Requestor = '$query'"); + + return(); } # # Any search on queue name or subject will be for new/open tickets # only. # - $session{'tickets'}->LimitStatus( VALUE => $_, - OPERATOR => '=', ) for qw(open new); + + my $status = "Status = 'new' OR Status = 'open'"; my $queue = RT::Queue->new( $session{'CurrentUser'} ); if ( $queue->Load($query) && $queue->Id ) { - $session{'tickets'}->LimitQueue( VALUE => $queue->Id, - OPERATOR => '=', ); - $m->redirect("$RT::WebPath/Search/Listing.html"); + $m->comp("/Search/Results.html", Query => "Queue = '" . $queue->Id . "' AND ($status)"); + return(); } - $session{'tickets'}->LimitSubject( VALUE => $query, - OPERATOR => 'LIKE' ); - $m->redirect("$RT::WebPath/Search/Listing.html"); + $m->comp("/Search/Results.html", Query => "Subject LIKE '$query' AND ($status)"); + return(); + } if ($ARGS{'HomeRefreshInterval'}) { @@ -82,3 +152,5 @@ if ($ARGS{'HomeRefreshInterval'}) { } </%init> + +%# --></body></html> @@ -1,8 +1,14 @@ -%# BEGIN LICENSE BLOCK +%# BEGIN BPS TAGGED BLOCK {{{ %# -%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +%# COPYRIGHT: +%# +%# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +%# <jesse@bestpractical.com> %# -%# (Except where explictly superceded by other copyright notices) +%# (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 @@ -14,13 +20,31 @@ %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# -%# Unless otherwise specified, all modifications, corrections or -%# extensions to this work which alter its source code become the -%# property of Best Practical Solutions, LLC when submitted for -%# inclusion in the work. +%# You should have received a copy of the GNU General Public License +%# along with this program; if not, write to the Free Software +%# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%# +%# +%# CONTRIBUTION SUBMISSION POLICY: +%# +%# (The following paragraph is not intended to limit the rights granted +%# to you to modify and distribute this software under the terms of +%# the GNU General Public License and is only of importance to you if +%# you choose to contribute your changes and enhancements to the +%# community by submitting them to Best Practical Solutions, LLC.) %# +%# By intentionally submitting any modifications, corrections or +%# derivatives to this work, or any other work intended for use with +%# Request Tracker, to Best Practical Solutions, LLC, you confirm that +%# you are the copyright holder for those contributions and you grant +%# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +%# royalty-free, perpetual, license to use, copy, create derivative +%# works based on those contributions, and sublicense and distribute +%# those contributions and any derivatives thereof. %# -%# END LICENSE BLOCK -% my $hand = ($session{'CurrentUser'} ||= RT::CurrentUser->new)->LanguageHandle; -% $m->print($hand->maketext($m->content,@_)); -% return(1); +%# END BPS TAGGED BLOCK }}} +<%init> + my $hand = ($session{'CurrentUser'} ||= RT::CurrentUser->new)->LanguageHandle; + $m->print($hand->maketext($m->content,@_)); + return(1); +</%init> diff --git a/rt/lib/RT.pm b/rt/lib/RT.pm index 90c332bc0..7e941a2b2 100644 --- a/rt/lib/RT.pm +++ b/rt/lib/RT.pm @@ -47,7 +47,7 @@ use vars qw($VERSION $System $SystemUser $Nobody $Handle $Logger $MasonSessionDir ); -$VERSION = '3.0.4'; +$VERSION = '3.0.9'; $CORE_CONFIG_FILE = "/opt/rt3/etc/RT_Config.pm"; $SITE_CONFIG_FILE = "/opt/rt3/etc/RT_SiteConfig.pm"; @@ -117,13 +117,10 @@ sub LoadConfig { =cut sub Init { - require RT::Handle; + #Get a database connection - unless ($Handle && $Handle->dbh->ping) { - $Handle = RT::Handle->new(); - } - $Handle->Connect(); - + ConnectToDatabase(); + #RT's system user is a genuine database user. its id lives here $SystemUser = new RT::CurrentUser(); $SystemUser->LoadByName('RT_System'); @@ -137,6 +134,21 @@ sub Init { InitLogging(); } + +=head2 ConnectToDatabase + +Get a database connection + +=cut + +sub ConnectToDatabase { + require RT::Handle; + unless ($Handle && $Handle->dbh && $Handle->dbh->ping) { + $Handle = RT::Handle->new(); + } + $Handle->Connect(); +} + =head2 InitLogging Create the RT::Logger object. @@ -282,8 +294,15 @@ sub DropSetGIDPermissions { =head1 BUGS +Please report them to rt-3.0-bugs@fsck.com, if you know what's broken and have at least some idea of what needs to be fixed. +If you're not sure what's going on, report them rt-devel@lists.fsck.com. + =head1 SEE ALSO +L<RT::StyleGuide> +L<DBIx::SearchBuilder> + + =begin testing diff --git a/rt/lib/RT.pm.in b/rt/lib/RT.pm.in index 065734e2f..f7c882b61 100644 --- a/rt/lib/RT.pm.in +++ b/rt/lib/RT.pm.in @@ -1,29 +1,48 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2002 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 +# 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. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. # +# CONTRIBUTION SUBMISSION POLICY: # -# END LICENSE BLOCK - - +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT; use strict; use RT::I18N; @@ -33,7 +52,6 @@ use RT::System; use vars qw($VERSION $System $SystemUser $Nobody $Handle $Logger $CORE_CONFIG_FILE $SITE_CONFIG_FILE - $VENDOR_CONFIG_FILE $BasePath $EtcPath $VarPath @@ -41,6 +59,7 @@ use vars qw($VERSION $System $SystemUser $Nobody $Handle $Logger $LocalEtcPath $LocalLexiconPath $LogDir + $BinPath $MasonComponentRoot $MasonLocalComponentRoot $MasonDataDir @@ -51,9 +70,12 @@ $VERSION = '@RT_VERSION_MAJOR@.@RT_VERSION_MINOR@.@RT_VERSION_PATCH@'; $CORE_CONFIG_FILE = "@CONFIG_FILE_PATH@/RT_Config.pm"; $SITE_CONFIG_FILE = "@CONFIG_FILE_PATH@/RT_SiteConfig.pm"; +@DATABASE_ENV_PREF@ + $BasePath = '@RT_PATH@'; $EtcPath = '@RT_ETC_PATH@'; +$BinPath = '@RT_BIN_PATH@'; $VarPath = '@RT_VAR_PATH@'; $LocalPath = '@RT_LOCAL_PATH@'; $LocalEtcPath = '@LOCAL_ETC_PATH@'; @@ -80,22 +102,26 @@ $MasonSessionDir = '@MASON_SESSION_PATH@'; =head1 NAME - RT - Request Tracker +RT - Request Tracker =head1 SYNOPSIS - A fully featured request tracker package +A fully featured request tracker package =head1 DESCRIPTION +=head2 LoadConfig -=cut - -=item LoadConfig +Load RT's config file. First, the site configuration file +(C<RT_SiteConfig.pm>) is loaded, in order to establish overall site +settings like hostname and name of RT instance. Then, the core +configuration file (C<RT_Config.pm>) is loaded to set fallback values +for all settings; it bases some values on settings from the site +configuration file. -Load RT's config file. First, go after the core config file. -After that, try to load the vendor config. -After that, go after the site config. +In order for the core configuration to not override the site's +settings, the function C<Set> is used; it only sets values if they +have not been set already. =cut @@ -110,20 +136,17 @@ sub LoadConfig { RT::I18N->Init; } -=item Init +=head2 Init + +Conenct to the database, set up logging. - Conenct to the database, set up logging. - =cut sub Init { - require RT::Handle; + #Get a database connection - unless ($Handle && $Handle->dbh->ping) { - $Handle = RT::Handle->new(); - } - $Handle->Connect(); - + ConnectToDatabase(); + #RT's system user is a genuine database user. its id lives here $SystemUser = new RT::CurrentUser(); $SystemUser->LoadByName('RT_System'); @@ -134,17 +157,34 @@ sub Init { $System = RT::System->new(); - InitLogging(); + InitClasses(); + InitLogging(); } + +=head2 ConnectToDatabase + +Get a database connection + +=cut + +sub ConnectToDatabase { + require RT::Handle; + unless ($Handle && $Handle->dbh && $Handle->dbh->ping) { + $Handle = RT::Handle->new(); + } + $Handle->Connect(); +} + =head2 InitLogging Create the RT::Logger object. =cut + sub InitLogging { - # We have to set the record seperator ($, man perlvar) + # We have to set the record separator ($, man perlvar) # or Log::Dispatch starts getting # really pissy, as some other module we use unsets it. @@ -156,21 +196,24 @@ sub InitLogging { $RT::Logger=Log::Dispatch->new(); if ($RT::LogToFile) { - - unless (-d $RT::LogDir && -w $RT::LogDir) { - # localizing here would be hard when we don't have a current user yet - # die $self->loc("Log directory [_1] not found or couldn't be written.\n RT can't run.", $RT::LogDir); - die ("Log directory $RT::LogDir not found or couldn't be written.\n RT can't run."); - } - - my $filename; + my ($filename, $logdir); if ($RT::LogToFileNamed =~ m![/\\]!) { # looks like an absolute path. $filename = $RT::LogToFileNamed; + ($logdir) = $RT::LogToFileNamed =~ m!^(.*[/\\])!; } else { $filename = "$RT::LogDir/$RT::LogToFileNamed"; + $logdir = $RT::LogDir; } + + unless ( -d $logdir && ( ( -f $filename && -w $filename ) || -w $logdir ) ) { + # localizing here would be hard when we don't have a current user yet + # die $self->loc("Log directory [_1] not found or couldn't be written.\n RT can't run.", $RT::LogDir); + die ("Log file $filename couldn't be written or created.\n RT can't run."); + } + + package Log::Dispatch::File; require Log::Dispatch::File; @@ -188,6 +231,7 @@ sub InitLogging { )); } if ($RT::LogToScreen) { + package Log::Dispatch::Screen; require Log::Dispatch::Screen; $RT::Logger->add(Log::Dispatch::Screen->new ( name => 'screen', @@ -201,6 +245,7 @@ sub InitLogging { )); } if ($RT::LogToSyslog) { + package Log::Dispatch::Syslog; require Log::Dispatch::Syslog; $RT::Logger->add(Log::Dispatch::Syslog->new ( name => 'syslog', @@ -219,7 +264,8 @@ sub InitLogging { return "$p{message} ($filename:$line)\n"} }, - stderr => 1 + stderr => 1, + @RT::LogToSyslogConf )); } @@ -232,7 +278,14 @@ sub InitLogging { ## Mason). It will log all problems through the standard logging ## mechanism (see above). -$SIG{__WARN__} = sub {$RT::Logger->warning($_[0])}; +$SIG{__WARN__} = sub { + my $w = shift; + $w =~ s/(?:\r*\n)+$//; + # The 'wide character' warnings has to be silenced for now, at least + # until HTML::Mason offers a sane way to process both raw output and + # unicode strings. + $RT::Logger->warning($w) if index($w, 'Wide character in ') != 0; +}; #When we call die, trap it and log->crit with the value of the die. @@ -252,6 +305,30 @@ $SIG{__DIE__} = sub { } +=head2 InitClasses + +Load all modules that define base classes + +=cut + +sub InitClasses { + require RT::Tickets; + require RT::Transactions; + require RT::Users; + require RT::CurrentUser; + require RT::Templates; + require RT::Queues; + require RT::ScripActions; + require RT::ScripConditions; + require RT::Scrips; + require RT::Groups; + require RT::GroupMembers; + require RT::CustomFields; + require RT::CustomFieldValues; + require RT::ObjectCustomFields; + require RT::ObjectCustomFieldValues; +} + # }}} @@ -263,37 +340,25 @@ sub Nobody { return ($Nobody); } +=head1 BUGS -=head2 DropSetGIDPermissions - -Drops setgid permissions. - -=cut - -sub DropSetGIDPermissions { - # Now that we got the config read in, we have the database - # password and don't need to be setgid - # make the effective group the real group - $) = $(; -} - - -=head1 SYNOPSIS +Please report them to rt-bugs@fsck.com, if you know what's broken and have at least +some idea of what needs to be fixed. -=head1 BUGS +If you're not sure what's going on, report them rt-devel@lists.bestpractical.com. =head1 SEE ALSO +L<RT::StyleGuide> +L<DBIx::SearchBuilder> =begin testing - ok ($RT::Nobody->Name() eq 'Nobody', "Nobody is nobody"); ok ($RT::Nobody->Name() ne 'root', "Nobody isn't named root"); ok ($RT::SystemUser->Name() eq 'RT_System', "The system user is RT_System"); ok ($RT::SystemUser->Name() ne 'noname', "The system user isn't noname"); - =end testing =cut diff --git a/rt/lib/RT/ACE.pm b/rt/lib/RT/ACE.pm index 1501a125e..9073b02b9 100755 --- a/rt/lib/RT/ACE.pm +++ b/rt/lib/RT/ACE.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -104,7 +126,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -113,14 +135,14 @@ Returns the current value of id. =cut -=item PrincipalType +=head2 PrincipalType Returns the current value of PrincipalType. (In the database, PrincipalType is stored as varchar(25).) -=item SetPrincipalType VALUE +=head2 SetPrincipalType VALUE Set PrincipalType to VALUE. @@ -131,14 +153,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item PrincipalId +=head2 PrincipalId Returns the current value of PrincipalId. (In the database, PrincipalId is stored as int(11).) -=item SetPrincipalId VALUE +=head2 SetPrincipalId VALUE Set PrincipalId to VALUE. @@ -149,14 +171,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item RightName +=head2 RightName Returns the current value of RightName. (In the database, RightName is stored as varchar(25).) -=item SetRightName VALUE +=head2 SetRightName VALUE Set RightName to VALUE. @@ -167,14 +189,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ObjectType +=head2 ObjectType Returns the current value of ObjectType. (In the database, ObjectType is stored as varchar(25).) -=item SetObjectType VALUE +=head2 SetObjectType VALUE Set ObjectType to VALUE. @@ -185,14 +207,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ObjectId +=head2 ObjectId Returns the current value of ObjectId. (In the database, ObjectId is stored as int(11).) -=item SetObjectId VALUE +=head2 SetObjectId VALUE Set ObjectId to VALUE. @@ -203,14 +225,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item DelegatedBy +=head2 DelegatedBy Returns the current value of DelegatedBy. (In the database, DelegatedBy is stored as int(11).) -=item SetDelegatedBy VALUE +=head2 SetDelegatedBy VALUE Set DelegatedBy to VALUE. @@ -221,14 +243,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item DelegatedFrom +=head2 DelegatedFrom Returns the current value of DelegatedFrom. (In the database, DelegatedFrom is stored as int(11).) -=item SetDelegatedFrom VALUE +=head2 SetDelegatedFrom VALUE Set DelegatedFrom to VALUE. @@ -240,25 +262,25 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, PrincipalType => - {read => 1, write => 1, type => 'varchar(25)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''}, PrincipalId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, RightName => - {read => 1, write => 1, type => 'varchar(25)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''}, ObjectType => - {read => 1, write => 1, type => 'varchar(25)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 25, is_blob => 0, is_numeric => 0, type => 'varchar(25)', default => ''}, ObjectId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, DelegatedBy => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, DelegatedFrom => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, } }; @@ -290,7 +312,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/ACE_Overlay.pm b/rt/lib/RT/ACE_Overlay.pm index 65e5a9c45..75e39d03a 100644 --- a/rt/lib/RT/ACE_Overlay.pm +++ b/rt/lib/RT/ACE_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 SYNOPSIS use RT::ACE; @@ -41,6 +64,9 @@ ok(require RT::ACE); =cut + +package RT::ACE; + use strict; no warnings qw(redefine); use RT::Principals; @@ -107,8 +133,8 @@ Load an ACE by specifying a paramhash with the following fields: OR - ObjectType => undef, - ObjectId => undef + ObjectType => undef, + ObjectId => undef =cut @@ -133,16 +159,9 @@ sub LoadByValues { ); } - my ($object_type, $object_id); - - if ($args{'Object'} && UNIVERSAL::can($args{'Object'},'id')) { - $object_type = ref($args{'Object'}); - $object_id = $args{'Object'}->id; - } elsif ($args{'ObjectId'} || $args{'ObjectType'}) { - $object_type = $args{'ObjectType'}; - $object_id = $args{'ObjectId'}; - } else { - return ( 0, $self->loc("System error. Right not granted.") ); + my ($object, $object_type, $object_id) = $self->_ParseObjectArg( %args ); + unless( $object ) { + return ( 0, $self->loc("System error. Right not granted.") ); } $self->LoadByCols( PrincipalId => $princ_obj->Id, @@ -186,6 +205,12 @@ PARAMS is a parameter hash with the following elements: ObjectType => the type of the object in question (ref ($object)) ObjectId => the id of the object in question $object->Id + + + Returns a tuple of (STATUS, MESSAGE); If the call succeeded, STATUS is true. Otherwise it's false. + + + =cut sub Create { @@ -193,8 +218,16 @@ sub Create { my %args = ( PrincipalId => undef, PrincipalType => undef, RightName => undef, - Object => $RT::System, + Object => undef, @_ ); + #if we haven't specified any sort of right, we're talking about a global right + if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) { + $args{'Object'} = $RT::System; + } + ($args{'Object'}, $args{'ObjectType'}, $args{'ObjectId'}) = $self->_ParseObjectArg( %args ); + unless( $args{'Object'} ) { + return ( 0, $self->loc("System error. Right not granted.") ); + } # {{{ Validate the principal my $princ_obj; @@ -210,17 +243,6 @@ sub Create { # }}} - - if ($args{'Object'} && ($args{'ObjectId'} || $args{'ObjectType'})) { - use Carp; - $RT::Logger->crit(Carp::cluck("ACE::Create called with an ObjectType or an ObjectId")); - } - - - - unless ($args{'Object'} && UNIVERSAL::can($args{'Object'},'id')) { - return ( 0, $self->loc("System error. Right not granted.") ); - } # {{{ Check the ACL if (ref( $args{'Object'}) eq 'RT::Group' ) { @@ -270,17 +292,14 @@ sub Create { } } - unless ( $args{'RightName'} ) { - return ( 0, $self->loc('Invalid right') ); - } # }}} # Make sure the right doesn't already exist. $self->LoadByCols( PrincipalId => $princ_obj->id, PrincipalType => $args{'PrincipalType'}, RightName => $args{'RightName'}, - ObjectType => ref($args{'Object'}), - ObjectId => $args{'Object'}->id, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, DelegatedBy => 0, DelegatedFrom => 0 ); if ( $self->Id ) { @@ -296,7 +315,7 @@ sub Create { DelegatedFrom => 0 ); #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - RT::Principal->_InvalidateACLCache(); + RT::Principal->InvalidateACLCache(); if ( $id > 0 ) { return ( $id, $self->loc('Right Granted') ); @@ -606,7 +625,7 @@ sub Delegate { #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); + RT::Principal->InvalidateACLCache(); if ( $id > 0 ) { return ( $id, $self->loc('Right Delegated') ); @@ -669,7 +688,7 @@ sub _Delete { while ( my $delegated_ace = $delegated_from_this->Next ) { ( $delete_succeeded, $submsg ) = $delegated_ace->_Delete( InsideTransaction => 1 ); - last if ($delete_succeeded); + last unless ($delete_succeeded); } unless ($delete_succeeded) { @@ -679,18 +698,23 @@ sub _Delete { my ( $val, $msg ) = $self->SUPER::Delete(@_); - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); + # If we're revoking delegation rights (see above), we may need to + # revoke all rights delegated by the recipient. + if ($val and ($self->RightName() eq 'DelegateRights' or + $self->RightName() eq 'SuperUser')) { + $val = $self->PrincipalObj->_CleanupInvalidDelegations( InsideTransaction => 1 ); + } if ($val) { + #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. + # TODO what about the groups key cache? + RT::Principal->InvalidateACLCache(); $RT::Handle->Commit() unless $InsideTransaction; return ( $val, $self->loc('Right revoked') ); } - else { - $RT::Handle->Rollback() unless $InsideTransaction; - return ( 0, $self->loc('Right could not be revoked') ); - } + + $RT::Handle->Rollback() unless $InsideTransaction; + return ( 0, $self->loc('Right could not be revoked') ); } # }}} @@ -903,5 +927,32 @@ sub _CanonicalizePrincipal { return ( $princ_obj, $princ_type ); } +sub _ParseObjectArg { + my $self = shift; + my %args = ( Object => undef, + ObjectId => undef, + ObjectType => undef, + @_ ); + + if( $args{'Object'} && ($args{'ObjectId'} || $args{'ObjectType'}) ) { + $RT::Logger->crit( "Method called with an ObjectType or an ObjectId and Object args" ); + return (); + } elsif( $args{'Object'} && !UNIVERSAL::can($args{'Object'},'id') ) { + $RT::Logger->crit( "Method called called Object that has no id method" ); + return (); + } elsif( $args{'Object'} ) { + my $obj = $args{'Object'}; + return ($obj, ref $obj, $obj->id); + } elsif ( $args{'ObjectType'} ) { + my $obj = $args{'ObjectType'}->new( $self->CurrentUser ); + $obj->Load( $args{'ObjectId'} ); + return ($obj, ref $obj, $obj->id); + } else { + $RT::Logger->crit( "Method called with wrong args" ); + return (); + } +} + + # }}} 1; diff --git a/rt/lib/RT/ACL.pm b/rt/lib/RT/ACL.pm index 81f59c6d0..aafc1d22c 100755 --- a/rt/lib/RT/ACL.pm +++ b/rt/lib/RT/ACL.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::ACE item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/ACL_Overlay.pm b/rt/lib/RT/ACL_Overlay.pm index 977577697..c20bfd3be 100644 --- a/rt/lib/RT/ACL_Overlay.pm +++ b/rt/lib/RT/ACL_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::ACL - collection of RT ACE objects @@ -43,6 +66,9 @@ ok(require RT::ACL); =cut + +package RT::ACL; + use strict; no warnings qw(redefine); @@ -64,13 +90,64 @@ Limit the ACL to rights for the object $object. It needs to be an RT::Record cla sub LimitToObject { my $self = shift; - my $obj = shift; - unless (defined($obj) && ref($obj) && UNIVERSAL::can($obj, 'id')) { - return undef; + my $obj = shift; + unless ( defined($obj) + && ref($obj) + && UNIVERSAL::can( $obj, 'id' ) + && $obj->id ) + { + return undef; } - $self->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => ref($obj), ENTRYAGGREGATOR => 'OR'); - $self->Limit(FIELD => 'ObjectId', OPERATOR=> '=', VALUE => $obj->id, ENTRYAGGREGATOR => 'OR', QUOTEVALUE => 0); + $self->Limit( + FIELD => 'ObjectType', + OPERATOR => '=', + VALUE => ref($obj), + ENTRYAGGREGATOR => 'OR' + ); + $self->Limit( + FIELD => 'ObjectId', + OPERATOR => '=', + VALUE => $obj->id, + ENTRYAGGREGATOR => 'OR', + QUOTEVALUE => 0 + ); + +} + +# }}} + +# {{{ LimitNotObject +=head2 LimitNotObject $object + +Limit the ACL to rights NOT on the object $object. $object needs to be +an RT::Record class. + +=cut + +sub LimitNotObject { + my $self = shift; + my $obj = shift; + unless ( defined($obj) + && ref($obj) + && UNIVERSAL::can( $obj, 'id' ) + && $obj->id ) + { + return undef; + } + $self->Limit( FIELD => 'ObjectType', + OPERATOR => '!=', + VALUE => ref($obj), + ENTRYAGGREGATOR => 'OR', + SUBCLAUSE => $obj->id + ); + $self->Limit( FIELD => 'ObjectId', + OPERATOR => '!=', + VALUE => $obj->id, + ENTRYAGGREGATOR => 'OR', + QUOTEVALUE => 0, + SUBCLAUSE => $obj->id + ); } # }}} @@ -119,11 +196,11 @@ sub LimitToPrincipal { # lead me to start to suspect that we really want users and groups # to just be the same table. or _maybe_ that we want an object db. my $princ = RT::Principal->new($RT::SystemUser); - $princ->Load($args{'PrincipalId'}); + $princ->Load($args{'Id'}); if ($princ->PrincipalType eq 'User') { my $group = RT::Group->new($RT::SystemUser); $group->LoadACLEquivalenceGroup($princ); - $args{'PrincipalId'} = $group->PrincipalId; + $args{'Id'} = $group->PrincipalId; } $self->Limit( FIELD => 'PrincipalId', OPERATOR => '=', diff --git a/rt/lib/RT/Action/AutoOpen.pm b/rt/lib/RT/Action/AutoOpen.pm index ea6da1952..3423db93e 100644 --- a/rt/lib/RT/Action/AutoOpen.pm +++ b/rt/lib/RT/Action/AutoOpen.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # This Action will open the BASE if a dependent is resolved. package RT::Action::AutoOpen; @@ -52,6 +74,8 @@ sub Prepare { if ( ( $self->TicketObj->Status eq 'open' ) || ( ( $self->TicketObj->Status eq 'new' ) && $self->TransactionObj->IsInbound ) + || ( defined $self->TransactionObj->Message->First + && $self->TransactionObj->Message->First->GetHeader('RT-Control') =~ /\bno-autoopen\b/i ) ) { return undef; @@ -67,7 +91,7 @@ sub Commit { my $oldstatus = $self->TicketObj->Status(); $self->TicketObj->__Set( Field => 'Status', Value => 'open' ); $self->TicketObj->_NewTransaction( - Type => 'Set', + Type => 'Status', Field => 'Status', OldValue => $oldstatus, NewValue => 'open', diff --git a/rt/lib/RT/Action/Autoreply.pm b/rt/lib/RT/Action/Autoreply.pm index 81f7bddfa..c1ac5f897 100755 --- a/rt/lib/RT/Action/Autoreply.pm +++ b/rt/lib/RT/Action/Autoreply.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::Action::Autoreply; require RT::Action::SendEmail; @@ -28,6 +50,18 @@ use strict; use vars qw/@ISA/; @ISA = qw(RT::Action::SendEmail); +=head2 Prepare + +Set up the relevant recipients, then call our parent. + +=cut + + +sub Prepare { + my $self = shift; + $self->SetRecipients(); + $self->SUPER::Prepare(); +} # {{{ sub SetRecipients @@ -74,10 +108,18 @@ sub SetReturnAddress { } unless ($self->TemplateObj->MIMEObj->head->get('From')) { - my $friendly_name = $self->TicketObj->QueueObj->Description || - $self->TicketObj->QueueObj->Name; - $friendly_name =~ s/"/\\"/g; - $self->SetHeader('From', "\"$friendly_name\" <$replyto>"); + if ($RT::UseFriendlyFromLine) { + my $friendly_name = $self->TicketObj->QueueObj->Description || + $self->TicketObj->QueueObj->Name; + $friendly_name =~ s/"/\\"/g; + $self->SetHeader( 'From', + sprintf($RT::FriendlyFromLineFormat, + $self->MIMEEncodeString( $friendly_name, $RT::EmailOutputEncoding ), $replyto), + ); + } + else { + $self->SetHeader( 'From', $replyto ); + } } unless ($self->TemplateObj->MIMEObj->head->get('Reply-To')) { diff --git a/rt/lib/RT/Action/CreateTickets.pm b/rt/lib/RT/Action/CreateTickets.pm index 0ab206771..b708f2ea5 100644 --- a/rt/lib/RT/Action/CreateTickets.pm +++ b/rt/lib/RT/Action/CreateTickets.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,17 +20,34 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::Action::CreateTickets; require RT::Action::Generic; use strict; +use warnings; use vars qw/@ISA/; @ISA = qw(RT::Action::Generic); @@ -39,9 +62,9 @@ Create one or more tickets according to an externally supplied template. =head1 SYNOPSIS - ===Create-Ticket: codereview + ===Create-Ticket codereview Subject: Code review for {$Tickets{'TOP'}->Subject} - Depended-On-By: {$Tickets{'TOP'}->Id} + Depended-On-By: TOP Content: Someone has created a ticket. you should review and approve it, so they can finish their work ENDOFCONTENT @@ -84,13 +107,13 @@ After each ticket is created, it's stuffed into a hash called %Tickets so as to be available during the creation of other tickets during the same ScripAction. The hash is prepopulated with the ticket which triggered the ScripAction as $Tickets{'TOP'}; you can also access that ticket using the -shorthand $TOP. +shorthand TOP. A simple example: ===Create-Ticket: codereview Subject: Code review for {$Tickets{'TOP'}->Subject} - Depended-On-By: {$Tickets{'TOP'}->Id} + Depended-On-By: TOP Content: Someone has created a ticket. you should review and approve it, so they can finish their work ENDOFCONTENT @@ -125,11 +148,11 @@ A convoluted example push (@admins, $admin->EmailAddress); } } - Queue: Approvals - Type: Approval + Queue: ___Approvals + Type: approval AdminCc: {join ("\nAdminCc: ",@admins) } - Depended-On-By: {$Tickets{"TOP"}->Id} - Refers-To: {$Tickets{"TOP"}->Id} + Depended-On-By: TOP + Refers-To: TOP Subject: Approval for ticket: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject} Due: {time + 86400} Content-Type: text/plain @@ -139,9 +162,9 @@ A convoluted example ENDOFCONTENT ===Create-Ticket: two Subject: Manager approval - Depended-On-By: {$Tickets{"TOP"}->Id} + Depended-On-By: TOP Refers-On: {$Tickets{"approval"}->Id} - Queue: Approvals + Queue: ___Approvals Content-Type: text/plain Content: Your approval is requred for this ticket, too. @@ -190,7 +213,7 @@ A complete list of acceptable fields for this beastie: Fields marked with an * are required. -Fields marked with a + man have multiple values, simply +Fields marked with a + may have multiple values, simply by repeating the fieldname on a new line with an additional value. Fields marked with a ! are postponed to be processed after all @@ -220,27 +243,11 @@ ok ($approvalsq->Id, "Created Approvals test queue"); my $approvals = '===Create-Ticket: approval -{ my $name = "HR"; - my $groups = RT::Groups->new($RT::SystemUser); - $groups->LimitToUserDefinedGroups(); - $groups->Limit(FIELD => "Name", OPERATOR => "=", VALUE => "$name"); - $groups->WithMember($Transaction->CreatorObj->Id); - - my $groupid = $groups->First->Id; - - my $adminccs = RT::Users->new($RT::SystemUser); - $adminccs->WhoHaveRight(Right => "AdminGroup", IncludeSystemRights => undef, IncludeSuperusers => 0, IncludeSubgroupMembers => 0, Object => $groups->First); - - my @admins; - while (my $admin = $adminccs->Next) { - push (@admins, $admin->EmailAddress); - } -} -Queue: Approvals -Type: Approval +Queue: ___Approvals +Type: approval AdminCc: {join ("\nAdminCc: ",@admins) } Depended-On-By: {$Tickets{"TOP"}->Id} -Refers-To: {$Tickets{"TOP"}->Id} +Refers-To: TOP Subject: Approval for ticket: {$Tickets{"TOP"}->Id} - {$Tickets{"TOP"}->Subject} Due: {time + 86400} Content-Type: text/plain @@ -250,11 +257,11 @@ Blah ENDOFCONTENT ===Create-Ticket: two Subject: Manager approval. -Depends-On: {$Tickets{"approval"}->Id} -Queue: Approvals +Depended-On-By: approval +Queue: ___Approvals Content-Type: text/plain Content: -Your minion approved this ticket. you ok with that? +Your minion approved ticket {$Tickets{"TOP"}->Id}. you ok with that? ENDOFCONTENT '; @@ -281,10 +288,173 @@ ok ($scrip->ConditionObj->Id, "Created the scrip condition"); ok ($scrip->ActionObj->Id, "Created the scrip action"); my $t = RT::Ticket->new($RT::SystemUser); -$t->Create(Subject => "Sample workflow test", +my($tid, $ttrans, $tmsg) = $t->Create(Subject => "Sample workflow test", Owner => "root", Queue => $q->Id); +ok ($tid,$tmsg); + +my $deps = $t->DependsOn; +is ($deps->Count, 1, "The ticket we created depends on one other ticket"); +my $dependson= $deps->First->TargetObj; +ok ($dependson->Id, "It depends on a real ticket"); +unlike ($dependson->Subject, qr/{/, "The subject doesn't have braces in it. that means we're interpreting expressions"); +is ($t->ReferredToBy->Count,1, "It's only referred to by one other ticket"); +is ($t->ReferredToBy->First->BaseObj->Id,$t->DependsOn->First->TargetObj->Id, "The same ticket that depends on it refers to it."); +use RT::Action::CreateTickets; +my $action = RT::Action::CreateTickets->new( CurrentUser => $RT::SystemUser);; + +# comma-delimited templates +my $commas = <<"EOF"; +id,Queue,Subject,Owner,Content +ticket1,General,"foo, bar",root,blah +ticket2,General,foo bar,root,blah +ticket3,General,foo' bar,root,blah'boo +ticket4,General,foo' bar,,blah'boo +EOF + + +# Comma delimited templates with missing data +my $sparse_commas = <<"EOF"; +id,Queue,Subject,Owner,Requestor +ticket14,General,,,bobby +ticket15,General,,,tommy +ticket16,General,,suzie,tommy +ticket17,General,Foo "bar" baz,suzie,tommy +ticket18,General,'Foo "bar" baz',suzie,tommy +ticket19,General,'Foo bar' baz,suzie,tommy +EOF + + +# tab-delimited templates +my $tabs = <<"EOF"; +id\tQueue\tSubject\tOwner\tContent +ticket10\tGeneral\t"foo' bar"\troot\tblah' +ticket11\tGeneral\tfoo, bar\troot\tblah +ticket12\tGeneral\tfoo' bar\troot\tblah'boo +ticket13\tGeneral\tfoo' bar\t\tblah'boo +EOF + +my %expected; + +$expected{ticket1} = <<EOF; +Queue: General +Subject: foo, bar +Owner: root +Content: blah +ENDOFCONTENT +EOF + +$expected{ticket2} = <<EOF; +Queue: General +Subject: foo bar +Owner: root +Content: blah +ENDOFCONTENT +EOF + +$expected{ticket3} = <<EOF; +Queue: General +Subject: foo' bar +Owner: root +Content: blah'boo +ENDOFCONTENT +EOF + +$expected{ticket4} = <<EOF; +Queue: General +Subject: foo' bar +Owner: +Content: blah'boo +ENDOFCONTENT +EOF + +$expected{ticket10} = <<EOF; +Queue: General +Subject: foo' bar +Owner: root +Content: blah' +ENDOFCONTENT +EOF + +$expected{ticket11} = <<EOF; +Queue: General +Subject: foo, bar +Owner: root +Content: blah +ENDOFCONTENT +EOF + +$expected{ticket12} = <<EOF; +Queue: General +Subject: foo' bar +Owner: root +Content: blah'boo +ENDOFCONTENT +EOF + +$expected{ticket13} = <<EOF; +Queue: General +Subject: foo' bar +Owner: +Content: blah'boo +ENDOFCONTENT +EOF + + +$expected{'ticket14'} = <<EOF; +Queue: General +Subject: +Owner: +Requestor: bobby +EOF +$expected{'ticket15'} = <<EOF; +Queue: General +Subject: +Owner: +Requestor: tommy +EOF +$expected{'ticket16'} = <<EOF; +Queue: General +Subject: +Owner: suzie +Requestor: tommy +EOF +$expected{'ticket17'} = <<EOF; +Queue: General +Subject: Foo "bar" baz +Owner: suzie +Requestor: tommy +EOF +$expected{'ticket18'} = <<EOF; +Queue: General +Subject: Foo "bar" baz +Owner: suzie +Requestor: tommy +EOF +$expected{'ticket19'} = <<EOF; +Queue: General +Subject: 'Foo bar' baz +Owner: suzie +Requestor: tommy +EOF + + + + +$action->Parse(Content =>$commas); +$action->Parse(Content =>$sparse_commas); +$action->Parse(Content => $tabs); + +my %got; +foreach (@{ $action->{'create_tickets'} }) { + $got{$_} = $action->{'templates'}->{$_}; +} + +foreach my $id ( sort keys %expected ) { + ok(exists($got{"create-$id"}), "template exists for $id"); + is($got{"create-$id"}, $expected{$id}, "template is correct for $id"); +} =end testing @@ -300,265 +470,872 @@ perl(1). =cut my %LINKTYPEMAP = ( - MemberOf => { Type => 'MemberOf', - Mode => 'Target', }, - Members => { Type => 'MemberOf', - Mode => 'Base', }, - HasMember => { Type => 'MemberOf', - Mode => 'Base', }, - RefersTo => { Type => 'RefersTo', - Mode => 'Target', }, - ReferredToBy => { Type => 'RefersTo', - Mode => 'Base', }, - DependsOn => { Type => 'DependsOn', - Mode => 'Target', }, - DependedOnBy => { Type => 'DependsOn', - Mode => 'Base', }, + MemberOf => { + Type => 'MemberOf', + Mode => 'Target', + }, + Parents => { + Type => 'MemberOf', + Mode => 'Target', + }, + Members => { + Type => 'MemberOf', + Mode => 'Base', + }, + Children => { + Type => 'MemberOf', + Mode => 'Base', + }, + HasMember => { + Type => 'MemberOf', + Mode => 'Base', + }, + RefersTo => { + Type => 'RefersTo', + Mode => 'Target', + }, + ReferredToBy => { + Type => 'RefersTo', + Mode => 'Base', + }, + DependsOn => { + Type => 'DependsOn', + Mode => 'Target', + }, + DependedOnBy => { + Type => 'DependsOn', + Mode => 'Base', + }, ); # {{{ Scrip methods (Commit, Prepare) -# {{{ sub Commit +# {{{ sub Commit #Do what we need to do and send it out. sub Commit { my $self = shift; - my (@links, @postponed); + + # Create all the tickets we care about + return (1) unless $self->TicketObj->Type eq 'ticket'; + + $self->CreateByTemplate( $self->TicketObj ); + $self->UpdateByTemplate( $self->TicketObj ); + return (1); +} + +# }}} + +# {{{ sub Prepare + +sub Prepare { + my $self = shift; + + unless ( $self->TemplateObj ) { + $RT::Logger->warning("No template object handed to $self\n"); + } + + unless ( $self->TransactionObj ) { + $RT::Logger->warning("No transaction object handed to $self\n"); + + } + + unless ( $self->TicketObj ) { + $RT::Logger->warning("No ticket object handed to $self\n"); + + } + + $self->Parse( Content => $self->TemplateObj->Content, _ActiveContent => 1); + return 1; + +} + +# }}} + +# }}} + +sub CreateByTemplate { + my $self = shift; + my $top = shift; + + $RT::Logger->debug("In CreateByTemplate"); + + my @results; # XXX: cargo cult programming that works. i'll be back. use bytes; - # Create all the tickets we care about - return(1) unless $self->TicketObj->Type eq 'ticket'; + local %T::Tickets = %T::Tickets; + local $T::TOP = $T::TOP; + local $T::ID = $T::ID; + $T::Tickets{'TOP'} = $T::TOP = $top if $top; + + my $ticketargs; + my ( @links, @postponed ); + foreach my $template_id ( @{ $self->{'create_tickets'} } ) { + $RT::Logger->debug("Workflow: processing $template_id of $T::TOP") + if $T::TOP; + + $T::ID = $template_id; + @T::AllID = @{ $self->{'create_tickets'} }; + + ( $T::Tickets{$template_id}, $ticketargs ) = + $self->ParseLines( $template_id, \@links, \@postponed ); + + # Now we have a %args to work with. + # Make sure we have at least the minimum set of + # reasonable data and do our thang + + my ( $id, $transid, $msg ) = + $T::Tickets{$template_id}->Create(%$ticketargs); + + foreach my $res ( split( '\n', $msg ) ) { + push @results, + $T::Tickets{$template_id} + ->loc( "Ticket [_1]", $T::Tickets{$template_id}->Id ) . ': ' + . $res; + } + if ( !$id ) { + if ( $self->TicketObj ) { + $msg = + "Couldn't create related ticket $template_id for " + . $self->TicketObj->Id . " " + . $msg; + } + else { + $msg = "Couldn't create ticket $template_id " . $msg; + } - %T::Tickets = (); + $RT::Logger->error($msg); + next; + } - foreach my $template_id ( @{ $self->{'template_order'} } ) { - $T::Tickets{'TOP'} = $T::TOP = $self->TicketObj; - $RT::Logger->debug("Workflow: processing $template_id of $T::TOP"); + $RT::Logger->debug("Assigned $template_id with $id"); + $T::Tickets{$template_id}->SetOriginObj( $self->TicketObj ) + if $self->TicketObj + && $T::Tickets{$template_id}->can('SetOriginObj'); - $T::ID = $template_id; - @T::AllID = @{ $self->{'template_order'} }; + } - my $template = Text::Template->new( - TYPE => 'STRING', - SOURCE => $self->{'templates'}->{$template_id} + $self->PostProcess( \@links, \@postponed ); + + return @results; +} + +sub UpdateByTemplate { + my $self = shift; + my $top = shift; + + # XXX: cargo cult programming that works. i'll be back. + use bytes; + + my @results; + local %T::Tickets = %T::Tickets; + local $T::ID = $T::ID; + + my $ticketargs; + my ( @links, @postponed ); + foreach my $template_id ( @{ $self->{'update_tickets'} } ) { + $RT::Logger->debug("Update Workflow: processing $template_id"); + + $T::ID = $template_id; + @T::AllID = @{ $self->{'update_tickets'} }; + + ( $T::Tickets{$template_id}, $ticketargs ) = + $self->ParseLines( $template_id, \@links, \@postponed ); + + # Now we have a %args to work with. + # Make sure we have at least the minimum set of + # reasonable data and do our thang + + my @attribs = qw( + Subject + FinalPriority + Priority + TimeEstimated + TimeWorked + TimeLeft + Status + Queue + Due + Starts + Started + Resolved + ); + + my $id = $template_id; + $id =~ s/update-(\d+).*/$1/; + $T::Tickets{$template_id}->Load($id); + + my $msg; + if ( !$T::Tickets{$template_id}->Id ) { + $msg = "Couldn't update ticket $template_id " . $msg; + + $RT::Logger->error($msg); + next; + } + + my $current = $self->GetBaseTemplate( $T::Tickets{$template_id} ); + + $template_id =~ m/^update-(.*)/; + my $base_id = "base-$1"; + my $base = $self->{'templates'}->{$base_id}; + if ($base) { + $base =~ s/\r//g; + $base =~ s/\n+$//; + $current =~ s/\n+$//; + + # If we have no base template, set what we can. + if ($base ne $current) { + push @results, + "Could not update ticket " + . $T::Tickets{$template_id}->Id + . ": Ticket has changed"; + next; + } + } + push @results, $T::Tickets{$template_id}->Update( + AttributesRef => \@attribs, + ARGSRef => $ticketargs ); - $RT::Logger->debug("Workflow: evaluating\n$self->{templates}{$template_id}"); + push @results, + $self->UpdateWatchers( $T::Tickets{$template_id}, $ticketargs ); + + next unless exists $ticketargs->{'UpdateType'}; + if ( $ticketargs->{'UpdateType'} =~ /^(private|public)$/ ) { + my ( $Transaction, $Description, $Object ) = + $T::Tickets{$template_id}->Comment( + CcMessageTo => $ticketargs->{'Cc'}, + BccMessageTo => $ticketargs->{'Bcc'}, + MIMEObj => $ticketargs->{'MIMEObj'}, + TimeTaken => $ticketargs->{'TimeWorked'} + ); + push( @results, + $T::Tickets{$template_id} + ->loc( "Ticket [_1]", $T::Tickets{$template_id}->id ) . ': ' + . $Description ); + } + elsif ( $ticketargs->{'UpdateType'} eq 'response' ) { + my ( $Transaction, $Description, $Object ) = + $T::Tickets{$template_id}->Correspond( + CcMessageTo => $ticketargs->{'Cc'}, + BccMessageTo => $ticketargs->{'Bcc'}, + MIMEObj => $ticketargs->{'MIMEObj'}, + TimeTaken => $ticketargs->{'TimeWorked'} + ); + push( @results, + $T::Tickets{$template_id} + ->loc( "Ticket [_1]", $T::Tickets{$template_id}->id ) . ': ' + . $Description ); + } + else { + push( @results, + $T::Tickets{$template_id} + ->loc("Update type was neither correspondence nor comment.") + . " " + . $T::Tickets{$template_id}->loc("Update not recorded.") ); + } + } + + $self->PostProcess( \@links, \@postponed ); + + return @results; +} + +=head2 Parse TEMPLATE_CONTENT, DEFAULT_QUEUE, DEFAULT_REQEUESTOR ACTIVE - my $err; - my $filled_in = $template->fill_in( PACKAGE => 'T', BROKEN => sub { - $err = { @_ }->{error}; - } ); +Parse a template from TEMPLATE_CONTENT - $RT::Logger->debug("Workflow: yielding\n$filled_in"); +If $active is set to true, then we'll use Text::Template to parse the templates, +allowing you to embed active perl in your templates. - if ($err) { - $RT::Logger->error("Ticket creation failed for ".$self->TicketObj->Id." ".$err); - while (my ($k, $v) = each %T::X) { - $RT::Logger->debug("Eliminating $template_id from ${k}'s parents."); - delete $v->{$template_id}; - } - next; +=cut + +sub Parse { + my $self = shift; + my %args = ( Content => undef, + Queue => undef, + Requestor => undef, + _ActiveContent => undef, + @_); + + if ($args{'_ActiveContent'}) { + $self->{'UsePerlTextTemplate'} =1; + } else { + + $self->{'UsePerlTextTemplate'} = 0; + } + + my @template_order; + my $template_id; + my ( $queue, $requestor ); + if ( substr( $args{'Content'}, 0, 3 ) eq '===' ) { + $RT::Logger->debug("Line: ==="); + foreach my $line ( split( /\n/, $args{'Content'} ) ) { + $line =~ s/\r$//; + $RT::Logger->debug("Line: $line"); + if ( $line =~ /^===/ ) { + if ( $template_id && !$queue && $args{'Queue'} ) { + $self->{'templates'}->{$template_id} .= "Queue: $args{'Queue'}\n"; + } + if ( $template_id && !$requestor && $args{'Requestor'} ) { + $self->{'templates'}->{$template_id} .= + "Requestor: $args{'Requestor'}\n"; + } + $queue = 0; + $requestor = 0; + } + if ( $line =~ /^===Create-Ticket: (.*)$/ ) { + $template_id = "create-$1"; + $RT::Logger->debug("**** Create ticket: $template_id"); + push @{ $self->{'create_tickets'} }, $template_id; + } + elsif ( $line =~ /^===Update-Ticket: (.*)$/ ) { + $template_id = "update-$1"; + $RT::Logger->debug("**** Update ticket: $template_id"); + push @{ $self->{'update_tickets'} }, $template_id; + } + elsif ( $line =~ /^===Base-Ticket: (.*)$/ ) { + $template_id = "base-$1"; + $RT::Logger->debug("**** Base ticket: $template_id"); + push @{ $self->{'base_tickets'} }, $template_id; + } + elsif ( $line =~ /^===#.*$/ ) { # a comment + next; + } + else { + if ( $line =~ /^Queue:(.*)/i ) { + $queue = 1; + my $value = $1; + $value =~ s/^\s//; + $value =~ s/\s$//; + if ( !$value && $args{'Queue'}) { + $value = $args{'Queue'}; + $line = "Queue: $value"; + } + } + if ( $line =~ /^Requestor:(.*)/i ) { + $requestor = 1; + my $value = $1; + $value =~ s/^\s//; + $value =~ s/\s$//; + if ( !$value && $args{'Requestor'}) { + $value = $args{'Requestor'}; + $line = "Requestor: $value"; + } + } + $self->{'templates'}->{$template_id} .= $line . "\n"; + } + } + if ( $template_id && !$queue && $args{'Queue'} ) { + $self->{'templates'}->{$template_id} .= "Queue: $args{'Queue'}\n"; } + } + elsif ( substr( $args{'Content'}, 0, 2 ) =~ /^id$/i ) { + $RT::Logger->debug("Line: id"); + use Regexp::Common qw(delimited); + my $first = substr( $args{'Content'}, 0, index( $args{'Content'}, "\n" ) ); + $first =~ s/\r$//; + + my $delimiter; + if ( $first =~ /\t/ ) { + $delimiter = "\t"; + } + else { + $delimiter = ','; + } + my @fields = split( /$delimiter/, $first ); + - my %args; - my @lines = ( split ( /\n/, $filled_in ) ); - while ( defined(my $line = shift @lines) ) { - if ( $line =~ /^(.*?):(?:\s+(.*))?$/ ) { - my $value = $2; - my $tag = lc ($1); - $tag =~ s/-//g; - - if (ref($args{$tag})) { #If it's an array, we want to push the value - push @{$args{$tag}}, $value; - } - elsif (defined ($args{$tag})) { #if we're about to get a second value, make it an array - $args{$tag} = [$args{$tag}, $value]; - } - else { #if there's nothing there, just set the value - $args{ $tag } = $value; - } - - if ( $tag eq 'content' ) { #just build up the content - # convert it to an array - $args{$tag} = defined($value) ? [ $value."\n" ] : []; - while ( defined(my $l = shift @lines) ) { - last if ($l =~ /^ENDOFCONTENT\s*$/) ; - push @{$args{'content'}}, $l."\n"; + my $delimiter_re = qr[$delimiter]; + + my $delimited = qr[[^$delimiter]+]; + my $empty = qr[^[$delimiter](?=[$delimiter])]; + my $justquoted = qr[$RE{quoted}]; + + $args{'Content'} = substr( $args{'Content'}, index( $args{'Content'}, "\n" ) + 1 ); + $RT::Logger->debug("First: $first"); + + my $queue; + foreach my $line ( split( /\n/, $args{'Content'} ) ) { + next unless $line; + $RT::Logger->debug("Line: $line"); + + # first item is $template_id + my $i = 0; + my $template_id; + while ($line && $line =~ s/^($justquoted|.*?)(?:$delimiter_re|$)//ix) { + if ( $i == 0 ) { + $queue = 0; + $requestor = 0; + my $tid = $1; + $tid =~ s/^\s//; + $tid =~ s/\s$//; + next unless $tid; + + + if ($tid =~ /^\d+$/) { + $template_id = 'update-' . $tid; + push @{ $self->{'update_tickets'} }, $template_id; + + } elsif ($tid =~ /^#base-(\d+)$/) { + + $template_id = 'base-' . $1; + push @{ $self->{'base_tickets'} }, $template_id; + + } else { + $template_id = 'create-' . $tid; + push @{ $self->{'create_tickets'} }, $template_id; + } + $RT::Logger->debug("template_id: $tid"); + } + else { + my $value = $1; + $value = '' if ( $value =~ /^$delimiter$/ ); + if ($value =~ /^$RE{delimited}{-delim=>qq{\'\"}}$/) { + substr($value,0,1) = ""; + substr($value,-1,1) = ""; + } + my $field = $fields[$i]; + next unless $field; + $field =~ s/^\s//; + $field =~ s/\s$//; + if ( $field =~ /Body/i + || $field =~ /Data/i + || $field =~ /Message/i ) + { + $field = 'Content'; + } + if ( $field =~ /Summary/i ) { + $field = 'Subject'; + } + if ( $field =~ /Queue/i ) { + $queue = 1; + if ( !$value && $args{'Queue'} ) { + $value = $args{'Queue'}; } + } + if ( $field =~ /Requestor/i ) { + $requestor = 1; + if ( !$value && $args{'Requestor'} ) { + $value = $args{'Requestor'}; + } + } + $self->{'templates'}->{$template_id} .= $field . ": "; + $self->{'templates'}->{$template_id} .= $value || ""; + $self->{'templates'}->{$template_id} .= "\n"; + $self->{'templates'}->{$template_id} .= "ENDOFCONTENT\n" + if $field =~ /content/i; } + $i++; } - } + if ( !$queue && $args{'Queue'} ) { + $self->{'templates'}->{$template_id} .= "Queue: $args{'Queue'}\n"; + } + if ( !$requestor && $args{'Requestor'} ) { + $self->{'templates'}->{$template_id} .= + "Requestor: $args{'Requestor'}\n"; + } + } + } +} - foreach my $date qw(due starts started resolved) { - my $dateobj = RT::Date->new($RT::SystemUser); - next unless $args{$date}; - if ($args{$date} =~ /^\d+$/) { - $dateobj->Set(Format => 'unix', Value => $args{$date}); - } else { - $dateobj->Set(Format => 'unknown', Value => $args{$date}); - } - $args{$date} = $dateobj->ISO; - } - my $mimeobj = MIME::Entity->new(); - $mimeobj->build(Type => $args{'contenttype'}, - Data => $args{'content'}); - # Now we have a %args to work with. - # Make sure we have at least the minimum set of - # reasonable data and do our thang - $T::Tickets{$template_id} ||= RT::Ticket->new($RT::SystemUser); - - # Deferred processing - push @links, ( - $T::Tickets{$template_id}, { - DependsOn => $args{'dependson'}, - DependedOnBy => $args{'dependedonby'}, - RefersTo => $args{'refersto'}, - ReferredToBy => $args{'referredtoby'}, - Members => $args{'members'}, - MemberOf => $args{'memberof'}, - } - ); - - push @postponed, ( - # Status is postponed so we don't violate dependencies - $T::Tickets{$template_id}, { - Status => $args{'status'}, - } - ); - - $args{'requestor'} ||= $self->TicketObj->Requestors->MemberEmailAddresses; - - my %ticketargs = ( Queue => $args{'queue'}, - Subject=> $args{'subject'}, - Status => 'new', - Due => $args{'due'}, - Starts => $args{'starts'}, - Started => $args{'started'}, - Resolved => $args{'resolved'}, - Owner => $args{'owner'}, - Requestor => $args{'requestor'}, - Cc => $args{'cc'}, - AdminCc=> $args{'admincc'}, - TimeWorked =>$args{'timeworked'}, - TimeEstimated =>$args{'timeestimated'}, - TimeLeft =>$args{'timeleft'}, - InitialPriority => $args{'initialpriority'}, - FinalPriority => $args{'finalpriority'}, - Type => $args{'type'}, - MIMEObj => $mimeobj); - - - foreach my $key (keys(%args)) { - $key =~ /^customfield-(\d+)$/ or next; - $ticketargs{ "CustomField-" . $1 } = $args{$key}; - } +sub ParseLines { + my $self = shift; + my $template_id = shift; + my $links = shift; + my $postponed = shift; - my ($id, $transid, $msg) = $T::Tickets{$template_id}->Create(%ticketargs); - if (!$id) { - $RT::Logger->error( - "Couldn't create related ticket $template_id for ". - $self->TicketObj->Id." ".$msg - ); - next; - } - $RT::Logger->debug("Assigned $template_id with $id"); - $T::Tickets{$template_id}->SetOriginObj($self->TicketObj) - if $T::Tickets{$template_id}->can('SetOriginObj'); + my $content = $self->{'templates'}->{$template_id}; + + if ( $self->{'UsePerlTextTemplate'} ) { + + $RT::Logger->debug( + "Workflow: evaluating\n$self->{templates}{$template_id}"); + + my $template = Text::Template->new( + TYPE => 'STRING', + SOURCE => $content + ); + + my $err; + $content = $template->fill_in( + PACKAGE => 'T', + BROKEN => sub { + $err = {@_}->{error}; + } + ); + + $RT::Logger->debug("Workflow: yielding\n$content"); + + if ($err) { + $RT::Logger->error( "Ticket creation failed: " . $err ); + while ( my ( $k, $v ) = each %T::X ) { + $RT::Logger->debug( + "Eliminating $template_id from ${k}'s parents."); + delete $v->{$template_id}; + } + next; + } } + + my $TicketObj ||= RT::Ticket->new($self->CurrentUser); + + my %args; + my @lines = ( split( /\n/, $content ) ); + while ( defined( my $line = shift @lines ) ) { + if ( $line =~ /^(.*?):(?:\s+)(.*?)(?:\s*)$/ ) { + my $value = $2; + my $tag = lc($1); + $tag =~ s/-//g; + + if ( ref( $args{$tag} ) ) + { #If it's an array, we want to push the value + push @{ $args{$tag} }, $value; + } + elsif ( defined( $args{$tag} ) ) + { #if we're about to get a second value, make it an array + $args{$tag} = [ $args{$tag}, $value ]; + } + else { #if there's nothing there, just set the value + $args{$tag} = $value; + } - # postprocessing: add links + if ( $tag eq 'content' ) { #just build up the content + # convert it to an array + $args{$tag} = defined($value) ? [ $value . "\n" ] : []; + while ( defined( my $l = shift @lines ) ) { + last if ( $l =~ /^ENDOFCONTENT\s*$/ ); + push @{ $args{'content'} }, $l . "\n"; + } + } + else { - while (my $ticket = shift(@links)) { - $RT::Logger->debug("Handling links for " . $ticket->Id); - my %args = %{shift(@links)}; - - foreach my $type ( keys %LINKTYPEMAP ) { - next unless (defined $args{$type}); - foreach my $link ( - ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) - { - if (!exists $T::Tickets{$link}) { - $RT::Logger->debug("Skipping $type link for $link (non-existent)"); - next; - } - $RT::Logger->debug("Building $type link for $link: " . $T::Tickets{$link}->Id); - $link = $T::Tickets{$link}->Id; - - my ( $wval, $wmsg ) = $ticket->AddLink( - Type => $LINKTYPEMAP{$type}->{'Type'}, - $LINKTYPEMAP{$type}->{'Mode'} => $link, - Silent => 1 - ); - - $RT::Logger->warning("AddLink thru $link failed: $wmsg") unless $wval; - # push @non_fatal_errors, $wmsg unless ($wval); - } + # if it's not content, strip leading and trailing spaces + if ( $args{$tag} ) { + $args{$tag} =~ s/^\s+//g; + $args{$tag} =~ s/\s+$//g; + } + } + } + } - } + foreach my $date qw(due starts started resolved) { + my $dateobj = RT::Date->new($self->CurrentUser); + next unless $args{$date}; + if ( $args{$date} =~ /^\d+$/ ) { + $dateobj->Set( Format => 'unix', Value => $args{$date} ); + } + else { + $dateobj->Set( Format => 'unknown', Value => $args{$date} ); + } + $args{$date} = $dateobj->ISO; } - # postponed actions -- Status only, currently - while (my $ticket = shift(@postponed)) { - $RT::Logger->debug("Handling postponed actions for $ticket"); - my %args = %{shift(@postponed)}; + $args{'requestor'} ||= $self->TicketObj->Requestors->MemberEmailAddresses + if $self->TicketObj; + + $args{'type'} ||= 'ticket'; + + my %ticketargs = ( + Queue => $args{'queue'}, + Subject => $args{'subject'}, + Status => 'new', + Due => $args{'due'}, + Starts => $args{'starts'}, + Started => $args{'started'}, + Resolved => $args{'resolved'}, + Owner => $args{'owner'}, + Requestor => $args{'requestor'}, + Cc => $args{'cc'}, + AdminCc => $args{'admincc'}, + TimeWorked => $args{'timeworked'}, + TimeEstimated => $args{'timeestimated'}, + TimeLeft => $args{'timeleft'}, + InitialPriority => $args{'initialpriority'} || 0, + FinalPriority => $args{'finalpriority'} || 0, + Type => $args{'type'}, + ); - $ticket->SetStatus($args{Status}) if defined $args{Status}; + if ($args{content}) { + my $mimeobj = MIME::Entity->new(); + $mimeobj->build( + Type => $args{'contenttype'}, + Data => $args{'content'} + ); + $ticketargs{MIMEObj} = $mimeobj; + $ticketargs{UpdateType} = $args{'updatetype'} if $args{'updatetype'}; } - return(1); + foreach my $key ( keys(%args) ) { + $key =~ /^customfield(\d+)$/ or next; + $ticketargs{ "CustomField-" . $1 } = $args{$key}; + } + + $self->GetDeferred( \%args, $template_id, $links, $postponed ); + + return $TicketObj, \%ticketargs; } -# }}} -# {{{ sub Prepare - -sub Prepare { - my $self = shift; - - unless ($self->TemplateObj) { - $RT::Logger->warning("No template object handed to $self\n"); - } - - unless ($self->TransactionObj) { - $RT::Logger->warning("No transaction object handed to $self\n"); - - } - - unless ($self->TicketObj) { - $RT::Logger->warning("No ticket object handed to $self\n"); - - } - +sub GetDeferred { + my $self = shift; + my $args = shift; + my $id = shift; + my $links = shift; + my $postponed = shift; + + # Deferred processing + push @$links, + ( + $id, + { + DependsOn => $args->{'dependson'}, + DependedOnBy => $args->{'dependedonby'}, + RefersTo => $args->{'refersto'}, + ReferredToBy => $args->{'referredtoby'}, + Children => $args->{'children'}, + Parents => $args->{'parents'}, + } + ); + + push @$postponed, ( + + # Status is postponed so we don't violate dependencies + $id, { Status => $args->{'status'}, } + ); +} - +sub GetUpdateTemplate { + my $self = shift; + my $t = shift; + + my $string; + $string .= "Queue: " . $t->QueueObj->Name . "\n"; + $string .= "Subject: " . $t->Subject . "\n"; + $string .= "Status: " . $t->Status . "\n"; + $string .= "UpdateType: response\n"; + $string .= "Content: \n"; + $string .= "ENDOFCONTENT\n"; + $string .= "Due: " . $t->DueObj->AsString . "\n"; + $string .= "Starts: " . $t->StartsObj->AsString . "\n"; + $string .= "Started: " . $t->StartedObj->AsString . "\n"; + $string .= "Resolved: " . $t->ResolvedObj->AsString . "\n"; + $string .= "Owner: " . $t->OwnerObj->Name . "\n"; + $string .= "Requestor: " . $t->RequestorAddresses . "\n"; + $string .= "Cc: " . $t->CcAddresses . "\n"; + $string .= "AdminCc: " . $t->AdminCcAddresses . "\n"; + $string .= "TimeWorked: " . $t->TimeWorked . "\n"; + $string .= "TimeEstimated: " . $t->TimeEstimated . "\n"; + $string .= "TimeLeft: " . $t->TimeLeft . "\n"; + $string .= "InitialPriority: " . $t->Priority . "\n"; + $string .= "FinalPriority: " . $t->FinalPriority . "\n"; + + foreach my $type ( sort keys %LINKTYPEMAP ) { + + # don't display duplicates + if ( $type eq "HasMember" + || $type eq "Members" + || $type eq "MemberOf" ) + { + next; + } + $string .= "$type: "; + + my $mode = $LINKTYPEMAP{$type}->{Mode}; + my $method = $LINKTYPEMAP{$type}->{Type}; + + my $links; + while ( my $link = $t->$method->Next ) { + $links .= ", " if $links; + + my $object = $mode . "Obj"; + my $member = $link->$object; + $links .= $member->Id if $member; + } + $string .= $links; + $string .= "\n"; + } -my $template_id; -foreach my $line (split(/\n/,$self->TemplateObj->Content)) { - if ($line =~ /^===Create-Ticket: (.*)$/) { - $template_id = $1; - push @{$self->{'template_order'}},$template_id; - } else { - $self->{'templates'}->{$template_id} .= $line."\n"; - } - - + return $string; } - - return 1; - + +sub GetBaseTemplate { + my $self = shift; + my $t = shift; + + my $string; + $string .= "Queue: " . $t->Queue . "\n"; + $string .= "Subject: " . $t->Subject . "\n"; + $string .= "Status: " . $t->Status . "\n"; + $string .= "Due: " . $t->DueObj->Unix . "\n"; + $string .= "Starts: " . $t->StartsObj->Unix . "\n"; + $string .= "Started: " . $t->StartedObj->Unix . "\n"; + $string .= "Resolved: " . $t->ResolvedObj->Unix . "\n"; + $string .= "Owner: " . $t->Owner . "\n"; + $string .= "Requestor: " . $t->RequestorAddresses . "\n"; + $string .= "Cc: " . $t->CcAddresses . "\n"; + $string .= "AdminCc: " . $t->AdminCcAddresses . "\n"; + $string .= "TimeWorked: " . $t->TimeWorked . "\n"; + $string .= "TimeEstimated: " . $t->TimeEstimated . "\n"; + $string .= "TimeLeft: " . $t->TimeLeft . "\n"; + $string .= "InitialPriority: " . $t->Priority . "\n"; + $string .= "FinalPriority: " . $t->FinalPriority . "\n"; + + return $string; } -# }}} +sub GetCreateTemplate { + my $self = shift; -# }}} + my $string; + + $string .= "Queue: General\n"; + $string .= "Subject: \n"; + $string .= "Status: new\n"; + $string .= "Content: \n"; + $string .= "ENDOFCONTENT\n"; + $string .= "Due: \n"; + $string .= "Starts: \n"; + $string .= "Started: \n"; + $string .= "Resolved: \n"; + $string .= "Owner: \n"; + $string .= "Requestor: \n"; + $string .= "Cc: \n"; + $string .= "AdminCc:\n"; + $string .= "TimeWorked: \n"; + $string .= "TimeEstimated: \n"; + $string .= "TimeLeft: \n"; + $string .= "InitialPriority: \n"; + $string .= "FinalPriority: \n"; + + foreach my $type ( keys %LINKTYPEMAP ) { + + # don't display duplicates + if ( $type eq "HasMember" + || $type eq 'Members' + || $type eq 'MemberOf' ) + { + next; + } + $string .= "$type: \n"; + } + return $string; +} + +sub UpdateWatchers { + my $self = shift; + my $ticket = shift; + my $args = shift; + + my @results; + + foreach my $type qw(Requestor Cc AdminCc) { + my $method = $type . 'Addresses'; + my $oldaddr = $ticket->$method; + + + # Skip unless we have a defined field + next unless defined $args->{$type}; + my $newaddr = $args->{$type}; + + my @old = split( ', ', $oldaddr ); + my @new = split( ', ', $newaddr ); + my %oldhash = map { $_ => 1 } @old; + my %newhash = map { $_ => 1 } @new; + + my @add = grep( !defined $oldhash{$_}, @new ); + my @delete = grep( !defined $newhash{$_}, @old ); + + foreach (@add) { + my ( $val, $msg ) = $ticket->AddWatcher( + Type => $type, + Email => $_ + ); + + push @results, + $ticket->loc( "Ticket [_1]", $ticket->Id ) . ': ' . $msg; + } + + foreach (@delete) { + my ( $val, $msg ) = $ticket->DeleteWatcher( + Type => $type, + Email => $_ + ); + push @results, + $ticket->loc( "Ticket [_1]", $ticket->Id ) . ': ' . $msg; + } + } + return @results; +} + +sub PostProcess { + my $self = shift; + my $links = shift; + my $postponed = shift; + + # postprocessing: add links + + while ( my $template_id = shift(@$links) ) { + my $ticket = $T::Tickets{$template_id}; + $RT::Logger->debug( "Handling links for " . $ticket->Id ); + my %args = %{ shift(@$links) }; + + foreach my $type ( keys %LINKTYPEMAP ) { + next unless ( defined $args{$type} ); + foreach my $link ( + ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) + { + next unless $link; + + if ($link =~ /^TOP$/i) { + $RT::Logger->debug( "Building $type link for $link: " . $T::Tickets{TOP}->Id ); + $link = $T::Tickets{TOP}->Id; + + } + elsif ( $link !~ m/^\d+$/ ) { + my $key = "create-$link"; + if ( !exists $T::Tickets{$key} ) { + $RT::Logger->debug( "Skipping $type link for $key (non-existent)"); + next; + } + $RT::Logger->debug( "Building $type link for $link: " . $T::Tickets{$key}->Id ); + $link = $T::Tickets{$key}->Id; + } + else { + $RT::Logger->debug("Building $type link for $link"); + } + + my ( $wval, $wmsg ) = $ticket->AddLink( + Type => $LINKTYPEMAP{$type}->{'Type'}, + $LINKTYPEMAP{$type}->{'Mode'} => $link, + Silent => 1 + ); + + $RT::Logger->warning("AddLink thru $link failed: $wmsg") + unless $wval; + + # push @non_fatal_errors, $wmsg unless ($wval); + } + + } + } + + # postponed actions -- Status only, currently + while ( my $template_id = shift(@$postponed) ) { + my $ticket = $T::Tickets{$template_id}; + $RT::Logger->debug("Handling postponed actions for ".$ticket->id); + my %args = %{ shift(@$postponed) }; + $ticket->SetStatus( $args{Status} ) if defined $args{Status}; + } + +} eval "require RT::Action::CreateTickets_Vendor"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Vendor.pm}); +die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Vendor.pm} ); eval "require RT::Action::CreateTickets_Local"; -die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Local.pm}); +die $@ if ( $@ && $@ !~ qr{^Can't locate RT/Action/CreateTickets_Local.pm} ); 1; diff --git a/rt/lib/RT/Action/EscalatePriority.pm b/rt/lib/RT/Action/EscalatePriority.pm index 7ed63ae01..c54992166 100644 --- a/rt/lib/RT/Action/EscalatePriority.pm +++ b/rt/lib/RT/Action/EscalatePriority.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,22 +20,40 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Action::EscalatePriority =head1 DESCRIPTION -EscalatePriority is a ScripAction which is NOT intended to be called per -transaction. It's intended to be called by an RT escalation daemon. -(The daemon is called escalator). +EscalatePriority is a ScripAction which is NOT intended to be called +per transaction. It's intended to be called by an RT escalation tool. +One such tool is called rt-crontool and is located in $RTHOME/bin (see +C<rt-crontool -h> for more details) EsclatePriority uses the following formula to change a ticket's priority: diff --git a/rt/lib/RT/Action/Generic.pm b/rt/lib/RT/Action/Generic.pm index 007d299c7..cf7600a63 100755 --- a/rt/lib/RT/Action/Generic.pm +++ b/rt/lib/RT/Action/Generic.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Action::Generic - a generic baseclass for RT Actions @@ -44,6 +67,9 @@ ok (require RT::Action::Generic); package RT::Action::Generic; use strict; +use Scalar::Util; + +use base qw/RT::Base/; # {{{ sub new sub new { @@ -56,31 +82,35 @@ sub new { } # }}} -# {{{ sub new -sub loc { - my $self = shift; - return $self->{'ScripObj'}->loc(@_); -} -# }}} - # {{{ sub _Init sub _Init { my $self = shift; - my %args = ( TransactionObj => undef, - TicketObj => undef, - ScripObj => undef, - TemplateObj => undef, - Argument => undef, - Type => undef, - @_ ); - - + my %args = ( Argument => undef, + CurrentUser => undef, + ScripActionObj => undef, + ScripObj => undef, + TemplateObj => undef, + TicketObj => undef, + TransactionObj => undef, + Type => undef, + + @_ ); + $self->{'Argument'} = $args{'Argument'}; + $self->CurrentUser( $args{'CurrentUser'}); + $self->{'ScripActionObj'} = $args{'ScripActionObj'}; $self->{'ScripObj'} = $args{'ScripObj'}; + $self->{'TemplateObj'} = $args{'TemplateObj'}; $self->{'TicketObj'} = $args{'TicketObj'}; $self->{'TransactionObj'} = $args{'TransactionObj'}; - $self->{'TemplateObj'} = $args{'TemplateObj'}; $self->{'Type'} = $args{'Type'}; + + Scalar::Util::weaken($self->{'ScripActionObj'}); + Scalar::Util::weaken($self->{'ScripObj'}); + Scalar::Util::weaken($self->{'TemplateObj'}); + Scalar::Util::weaken($self->{'TicketObj'}); + Scalar::Util::weaken($self->{'TransactionObj'}); + } # }}} @@ -121,6 +151,13 @@ sub ScripObj { } # }}} +# {{{ sub ScripActionObj +sub ScripActionObj { + my $self = shift; + return($self->{'ScripActionObj'}); +} +# }}} + # {{{ sub Type sub Type { my $self = shift; @@ -176,13 +213,11 @@ sub DESTROY { # We need to clean up all the references that might maybe get # oddly circular + $self->{'ScripActionObj'} = undef; + $self->{'ScripObj'} = undef; $self->{'TemplateObj'} =undef $self->{'TicketObj'} = undef; $self->{'TransactionObj'} = undef; - $self->{'ScripObj'} = undef; - - - } # }}} diff --git a/rt/lib/RT/Action/Notify.pm b/rt/lib/RT/Action/Notify.pm index 1e4e4c073..0daaa5586 100755 --- a/rt/lib/RT/Action/Notify.pm +++ b/rt/lib/RT/Action/Notify.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,20 +20,51 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} +# package RT::Action::Notify; require RT::Action::SendEmail; - +use Mail::Address; use strict; use vars qw/@ISA/; @ISA = qw(RT::Action::SendEmail); + +=head2 Prepare + +Set up the relevant recipients, then call our parent. + +=cut + + +sub Prepare { + my $self = shift; + $self->SetRecipients(); + $self->SUPER::Prepare(); +} + # {{{ sub SetRecipients =head2 SetRecipients @@ -47,10 +84,18 @@ sub SetRecipients { my ( @To, @PseudoTo, @Cc, @Bcc ); - if ($arg =~ /\bOtherRecipients\b/) { - if ($self->TransactionObj->Attachments->First) { - push (@Cc, $self->TransactionObj->Attachments->First->GetHeader('RT-Send-Cc')); - push (@Bcc, $self->TransactionObj->Attachments->First->GetHeader('RT-Send-Bcc')); + if ( $arg =~ /\bOtherRecipients\b/ ) { + if ( $self->TransactionObj->Attachments->First ) { + my @cc_addresses = Mail::Address->parse($self->TransactionObj->Attachments->First->GetHeader('RT-Send-Cc')); + foreach my $addr (@cc_addresses) { + push @Cc, $addr->address; + } + my @bcc_addresses = Mail::Address->parse($self->TransactionObj->Attachments->First->GetHeader('RT-Send-Bcc')); + + foreach my $addr (@bcc_addresses) { + push @Bcc, $addr->address; + } + } } @@ -113,12 +158,12 @@ sub SetRecipients { @{ $self->{'Bcc'} } = @Bcc; } else { - @{ $self->{'To'} } = grep ( !/^$creator$/, @To ); - @{ $self->{'Cc'} } = grep ( !/^$creator$/, @Cc ); - @{ $self->{'Bcc'} } = grep ( !/^$creator$/, @Bcc ); + @{ $self->{'To'} } = grep ( lc $_ ne lc $creator, @To ); + @{ $self->{'Cc'} } = grep ( lc $_ ne lc $creator, @Cc ); + @{ $self->{'Bcc'} } = grep ( lc $_ ne lc $creator, @Bcc ); } @{ $self->{'PseudoTo'} } = @PseudoTo; - return (1); + } diff --git a/rt/lib/RT/Action/NotifyAsComment.pm b/rt/lib/RT/Action/NotifyAsComment.pm index 210e4ab15..f7cc87543 100755 --- a/rt/lib/RT/Action/NotifyAsComment.pm +++ b/rt/lib/RT/Action/NotifyAsComment.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::Action::NotifyAsComment; require RT::Action::Notify; diff --git a/rt/lib/RT/Action/RecordComment.pm b/rt/lib/RT/Action/RecordComment.pm new file mode 100644 index 000000000..d9740dcd1 --- /dev/null +++ b/rt/lib/RT/Action/RecordComment.pm @@ -0,0 +1,118 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::Action::RecordComment; +require RT::Action::Generic; +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Action::Generic); + +=head1 NAME + +RT::Action::RecordComment - An Action which can be used from an +external tool, or in any situation where a ticket transaction has not +been started, to make a comment on the ticket. + +=head1 SYNOPSIS + +my $action_obj = RT::Action::RecordComment->new('TicketObj' => $ticket_obj, + 'TemplateObj' => $template_obj, + ); +my $result = $action_obj->Prepare(); +$action_obj->Commit() if $result; + +=head1 METHODS + +=head2 Prepare + +Check for the existence of a Transaction. If a Transaction already +exists, and is of type "Comment" or "Correspond", abort because that +will give us a loop. + +=cut + + +sub Prepare { + my $self = shift; + if (defined $self->{'TransactionObj'} && + $self->{'TransactionObj'}->Type =~ /^(Comment|Correspond)$/) { + return undef; + } + return 1; +} + +=head2 Commit + +Create a Transaction by calling the ticket's Comment method on our +parsed Template, which may have an RT-Send-Cc or RT-Send-Bcc header. +The Transaction will be of type Comment. This Transaction can then be +used by the scrips that actually send the email. + +=cut + +sub Commit { + my $self = shift; + $self->CreateTransaction(); +} + +sub CreateTransaction { + my $self = shift; + + my ($result, $msg) = $self->{'TemplateObj'}->Parse( + TicketObj => $self->{'TicketObj'}); + return undef unless $result; + + my ($trans, $desc, $transaction) = $self->{'TicketObj'}->Comment( + MIMEObj => $self->TemplateObj->MIMEObj); + $self->{'TransactionObj'} = $transaction; +} + + +eval "require RT::Action::RecordComment_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordComment_Vendor.pm}); +eval "require RT::Action::RecordComment_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordComment_Local.pm}); + +1; diff --git a/rt/lib/RT/Action/RecordCorrespondence.pm b/rt/lib/RT/Action/RecordCorrespondence.pm new file mode 100644 index 000000000..62255ec53 --- /dev/null +++ b/rt/lib/RT/Action/RecordCorrespondence.pm @@ -0,0 +1,119 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::Action::RecordCorrespondence; +require RT::Action::Generic; +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Action::Generic); + +=head1 NAME + +RT::Action::RecordCorrespondence - An Action which can be used from an +external tool, or in any situation where a ticket transaction has not +been started, to make a comment on the ticket. + +=head1 SYNOPSIS + +my $action_obj = RT::Action::RecordCorrespondence->new( + 'TicketObj' => $ticket_obj, + 'TemplateObj' => $template_obj, + ); +my $result = $action_obj->Prepare(); +$action_obj->Commit() if $result; + +=head1 METHODS + +=head2 Prepare + +Check for the existence of a Transaction. If a Transaction already +exists, and is of type "Comment" or "Correspond", abort because that +will give us a loop. + +=cut + + +sub Prepare { + my $self = shift; + if (defined $self->{'TransactionObj'} && + $self->{'TransactionObj'}->Type =~ /^(Comment|Correspond)$/) { + return undef; + } + return 1; +} + +=head2 Commit + +Create a Transaction by calling the ticket's Correspond method on our +parsed Template, which may have an RT-Send-Cc or RT-Send-Bcc header. +The Transaction will be of type Correspond. This Transaction can then +be used by the scrips that actually send the email. + +=cut + +sub Commit { + my $self = shift; + $self->CreateTransaction(); +} + +sub CreateTransaction { + my $self = shift; + + my ($result, $msg) = $self->{'TemplateObj'}->Parse( + TicketObj => $self->{'TicketObj'}); + return undef unless $result; + + my ($trans, $desc, $transaction) = $self->{'TicketObj'}->Correspond( + MIMEObj => $self->TemplateObj->MIMEObj); + $self->{'TransactionObj'} = $transaction; +} + + +eval "require RT::Action::RecordCorrespondence_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordCorrespondence_Vendor.pm}); +eval "require RT::Action::RecordCorrespondence_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Action/RecordCorrespondence_Local.pm}); + +1; diff --git a/rt/lib/RT/Action/ResolveMembers.pm b/rt/lib/RT/Action/ResolveMembers.pm index 02ff3a58c..00813181c 100644 --- a/rt/lib/RT/Action/ResolveMembers.pm +++ b/rt/lib/RT/Action/ResolveMembers.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # This Action will resolve all members of a resolved group ticket package RT::Action::ResolveMembers; diff --git a/rt/lib/RT/Action/SendEmail.pm b/rt/lib/RT/Action/SendEmail.pm index dac8fc8e7..3c70dc401 100755 --- a/rt/lib/RT/Action/SendEmail.pm +++ b/rt/lib/RT/Action/SendEmail.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} # Portions Copyright 2000 Tobias Brox <tobix@cpan.org> package RT::Action::SendEmail; @@ -33,6 +55,7 @@ use vars qw/@ISA/; use MIME::Words qw(encode_mimeword); use RT::EmailParser; +use Mail::Address; =head1 NAME @@ -51,13 +74,6 @@ RT::Action::AutoReply is a good example subclass. Basically, you create another module RT::Action::YourAction which ISA RT::Action::SendEmail. -If you want to set the recipients of the mail to something other than -the addresses mentioned in the To, Cc, Bcc and headers in -the template, you should subclass RT::Action::SendEmail and override -either the SetRecipients method or the SetTo, SetCc, etc methods (see -the comments for the SetRecipients sub). - - =begin testing ok (require RT::Action::SendEmail); @@ -77,228 +93,207 @@ perl(1). # {{{ Scrip methods (_Init, Commit, Prepare, IsApplicable) -# {{{ sub _Init -# We use _Init from RT::Action -# }}} # {{{ sub Commit -#Do what we need to do and send it out. + sub Commit { my $self = shift; - my $MIMEObj = $self->TemplateObj->MIMEObj; - my $msgid = $MIMEObj->head->get('Message-Id'); - chomp $msgid; - $RT::Logger->info($msgid." #".$self->TicketObj->id."/".$self->TransactionObj->id." - Scrip ". $self->ScripObj->id ." ".$self->ScripObj->Description); - #send the email + return($self->SendMessage($self->TemplateObj->MIMEObj)); +} - # Weed out any RT addresses. We really don't want to talk to ourselves! - @{$self->{'To'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'To'}}); - @{$self->{'Cc'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'Cc'}}); - @{$self->{'Bcc'}} = RT::EmailParser::CullRTAddresses("", @{$self->{'Bcc'}}); - # If there are no recipients, don't try to send the message. - # If the transaction has content and has the header RT-Squelch-Replies-To +# }}} - if ( defined $self->TransactionObj->Attachments->First() ) { +# {{{ sub Prepare - my $squelch = $self->TransactionObj->Attachments->First->GetHeader( 'RT-Squelch-Replies-To'); +sub Prepare { + my $self = shift; - if ($squelch) { - my @blacklist = split ( /,/, $squelch ); - - # Cycle through the people we're sending to and pull out anyone on the - # system blacklist - - foreach my $person_to_yank (@blacklist) { - $person_to_yank =~ s/\s//g; - @{ $self->{'To'} } = - grep ( !/^$person_to_yank$/, @{ $self->{'To'} } ); - @{ $self->{'Cc'} } = - grep ( !/^$person_to_yank$/, @{ $self->{'Cc'} } ); - @{ $self->{'Bcc'} } = - grep ( !/^$person_to_yank$/, @{ $self->{'Bcc'} } ); - } - } + my ( $result, $message ) = $self->TemplateObj->Parse( + Argument => $self->Argument, + TicketObj => $self->TicketObj, + TransactionObj => $self->TransactionObj + ); + if ( !$result ) { + return (undef); } + my $MIMEObj = $self->TemplateObj->MIMEObj; + + # Header + $self->SetRTSpecialHeaders(); + + $self->RemoveInappropriateRecipients(); + # Go add all the Tos, Ccs and Bccs that we need to to the message to # make it happy, but only if we actually have values in those arrays. - $self->SetHeader( 'To', join ( ',', @{ $self->{'To'} } ) ) - if ( $self->{'To'} && @{ $self->{'To'} } ); - $self->SetHeader( 'Cc', join ( ',', @{ $self->{'Cc'} } ) ) - if ( $self->{'Cc'} && @{ $self->{'Cc'} } ); - $self->SetHeader( 'Bcc', join ( ',', @{ $self->{'Bcc'} } ) ) - if ( $self->{'Cc'} && @{ $self->{'Bcc'} } ); + # TODO: We should be pulling the recipients out of the template and shove them into To, Cc and Bcc + + $self->SetHeader( 'To', join ( ', ', @{ $self->{'To'} } ) ) + if ( ! $MIMEObj->head->get('To') && $self->{'To'} && @{ $self->{'To'} } ); + $self->SetHeader( 'Cc', join ( ', ', @{ $self->{'Cc'} } ) ) + if ( !$MIMEObj->head->get('Cc') && $self->{'Cc'} && @{ $self->{'Cc'} } ); + $self->SetHeader( 'Bcc', join ( ', ', @{ $self->{'Bcc'} } ) ) + if ( !$MIMEObj->head->get('Bcc') && $self->{'Bcc'} && @{ $self->{'Bcc'} } ); + # PseudoTo (fake to headers) shouldn't get matched for message recipients. + # If we don't have any 'To' header (but do have other recipients), drop in + # the pseudo-to header. + $self->SetHeader( 'To', join ( ', ', @{ $self->{'PseudoTo'} } ) ) + if ( $self->{'PseudoTo'} && ( @{ $self->{'PseudoTo'} } ) + and ( !$MIMEObj->head->get('To') ) ) and ( $MIMEObj->head->get('Cc') or $MIMEObj->head->get('Bcc')); - $self->SetHeader('MIME-Version', '1.0'); + # We should never have to set the MIME-Version header + $self->SetHeader( 'MIME-Version', '1.0' ); # try to convert message body from utf-8 to $RT::EmailOutputEncoding $self->SetHeader( 'Content-Type', 'text/plain; charset="utf-8"' ); - RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, $RT::EmailOutputEncoding, 'mime_words_ok' ); - $self->SetHeader( 'Content-Type', 'text/plain; charset="' . $RT::EmailOutputEncoding . '"' ); + # fsck.com #5959: Since RT sends 8bit mail, we should say so. + $self->SetHeader( 'Content-Transfer-Encoding','8bit'); - # Build up a MIME::Entity that looks like the original message. - - my $do_attach = $self->TemplateObj->MIMEObj->head->get('RT-Attach-Message'); + RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, $RT::EmailOutputEncoding, + 'mime_words_ok' ); + $self->SetHeader( 'Content-Type', 'text/plain; charset="' . $RT::EmailOutputEncoding . '"' ); - if ($do_attach) { - $self->TemplateObj->MIMEObj->head->delete('RT-Attach-Message'); + # Build up a MIME::Entity that looks like the original message. + $self->AddAttachments() if ( $MIMEObj->head->get('RT-Attach-Message') ); - my $attachments = RT::Attachments->new($RT::SystemUser); - $attachments->Limit( FIELD => 'TransactionId', - VALUE => $self->TransactionObj->Id ); - $attachments->OrderBy('id'); + return $result; - my $transaction_content_obj = $self->TransactionObj->ContentObj; +} - # attach any of this transaction's attachments - while ( my $attach = $attachments->Next ) { +# }}} - # Don't attach anything blank - next unless ( $attach->ContentLength ); +# }}} - # We want to make sure that we don't include the attachment that's being sued as the "Content" of this message" - next - if ( $transaction_content_obj - && $transaction_content_obj->Id == $attach->Id - && $transaction_content_obj->ContentType =~ qr{text/plain}i - ); - $MIMEObj->make_multipart('mixed'); - $MIMEObj->attach( Type => $attach->ContentType, - Charset => $attach->OriginalEncoding, - Data => $attach->OriginalContent, - Filename => $self->MIMEEncodeString( $attach->Filename, $RT::EmailOutputEncoding ), - Encoding => '-SUGGEST'); - } - } +=head2 To - my $retval = $self->SendMessage($MIMEObj); +Returns an array of Mail::Address objects containing all the To: recipients for this notification +=cut - return ($retval); +sub To { + my $self = shift; + return ($self->_AddressesFromHeader('To')); } -# }}} +=head2 Cc -# {{{ sub Prepare +Returns an array of Mail::Address objects containing all the Cc: recipients for this notification -sub Prepare { - my $self = shift; +=cut - # This actually populates the MIME::Entity fields in the Template Object +sub Cc { + my $self = shift; + return ($self->_AddressesFromHeader('Cc')); +} - unless ( $self->TemplateObj ) { - $RT::Logger->warning("No template object handed to $self\n"); - } +=head2 Bcc - unless ( $self->TransactionObj ) { - $RT::Logger->warning("No transaction object handed to $self\n"); +Returns an array of Mail::Address objects containing all the Bcc: recipients for this notification - } +=cut - unless ( $self->TicketObj ) { - $RT::Logger->warning("No ticket object handed to $self\n"); - } +sub Bcc { + my $self = shift; + return ($self->_AddressesFromHeader('Bcc')); - my ( $result, $message ) = $self->TemplateObj->Parse( - Argument => $self->Argument, - TicketObj => $self->TicketObj, - TransactionObj => $self->TransactionObj - ); - if ($result) { - - # Header - $self->SetSubject(); - $self->SetSubjectToken(); - $self->SetRecipients(); - $self->SetReturnAddress(); - $self->SetRTSpecialHeaders(); - if ($RT::EmailOutputEncoding) { - - # l10n related header - $self->SetHeaderAsEncoding( 'Subject', $RT::EmailOutputEncoding ); - } - } +} - return $result; +sub _AddressesFromHeader { + my $self = shift; + my $field = shift; + my $header = $self->TemplateObj->MIMEObj->head->get($field); + my @addresses = Mail::Address->parse($header); + return (@addresses); } -# }}} - -# }}} # {{{ SendMessage + =head2 SendMessage MIMEObj sends the message using RT's preferred API. -TODO: Break this out to a seperate module +TODO: Break this out to a separate module =cut sub SendMessage { - my $self = shift; + my $self = shift; my $MIMEObj = shift; - my $msgid = $MIMEObj->head->get('Message-Id'); + my $msgid = $MIMEObj->head->get('Message-ID'); + chomp $msgid; + $self->ScripActionObj->{_Message_ID}++; + + $RT::Logger->info( $msgid . " #" + . $self->TicketObj->id . "/" + . $self->TransactionObj->id + . " - Scrip " + . $self->ScripObj->id . " " + . $self->ScripObj->Description ); #If we don't have any recipients to send to, don't send a message; - unless ( $MIMEObj->head->get('To') - || $MIMEObj->head->get('Cc') - || $MIMEObj->head->get('Bcc') ) { - $RT::Logger->info($msgid. " No recipients found. Not sending.\n"); + unless ( $MIMEObj->head->get('To') + || $MIMEObj->head->get('Cc') + || $MIMEObj->head->get('Bcc') ) + { + $RT::Logger->info( $msgid . " No recipients found. Not sending.\n" ); return (1); } - # PseudoTo (fake to headers) shouldn't get matched for message recipients. - # If we don't have any 'To' header, drop in the pseudo-to header. - $self->SetHeader( 'To', join ( ',', @{ $self->{'PseudoTo'} } ) ) - if ( $self->{'PseudoTo'} && ( @{ $self->{'PseudoTo'} } ) - and ( !$MIMEObj->head->get('To') ) ); if ( $RT::MailCommand eq 'sendmailpipe' ) { eval { - open( MAIL, "|$RT::SendmailPath $RT::SendmailArguments" ); + open( MAIL, "|$RT::SendmailPath $RT::SendmailArguments" ) || die $!; print MAIL $MIMEObj->as_string; close(MAIL); - }; - if ($@) { - $RT::Logger->crit($msgid. "Could not send mail. -".$@ ); + }; + if ($@) { + $RT::Logger->crit( $msgid . "Could not send mail. -" . $@ ); } } else { - my @mailer_args = ($RT::MailCommand); - local $ENV{MAILADDRESS}; + my @mailer_args = ($RT::MailCommand); + + local $ENV{MAILADDRESS}; if ( $RT::MailCommand eq 'sendmail' ) { - push @mailer_args, $RT::SendmailArguments; + push @mailer_args, split(/\s+/, $RT::SendmailArguments); } elsif ( $RT::MailCommand eq 'smtp' ) { - $ENV{MAILADDRESS} = $RT::SMTPFrom || $MIMEObj->head->get('From'); - push @mailer_args, (Server => $RT::SMTPServer); - push @mailer_args, (Debug => $RT::SMTPDebug); + $ENV{MAILADDRESS} = $RT::SMTPFrom || $MIMEObj->head->get('From'); + push @mailer_args, ( Server => $RT::SMTPServer ); + push @mailer_args, ( Debug => $RT::SMTPDebug ); + } + else { + push @mailer_args, $RT::MailParams; } - else { - push @mailer_args, $RT::MailParams; - } - unless ( $MIMEObj->send( @mailer_args ) ) { - $RT::Logger->crit($msgid. "Could not send mail." ); + unless ( $MIMEObj->send(@mailer_args) ) { + $RT::Logger->crit( $msgid . "Could not send mail." ); return (0); } } - - my $success = ($msgid. " sent To: ".$MIMEObj->head->get('To') . " Cc: ".$MIMEObj->head->get('Cc') . " Bcc: ".$MIMEObj->head->get('Bcc')); + my $success = + ( $msgid + . " sent To: " + . $MIMEObj->head->get('To') . " Cc: " + . $MIMEObj->head->get('Cc') . " Bcc: " + . $MIMEObj->head->get('Bcc') ); $success =~ s/\n//gi; + + $self->RecordOutgoingMailTransaction($MIMEObj) if ($RT::RecordOutgoingEmail); + $RT::Logger->info($success); return (1); @@ -306,7 +301,121 @@ sub SendMessage { # }}} -# {{{ Deal with message headers (Set* subs, designed for easy overriding) +# {{{ AddAttachments + +=head2 AddAttachments + +Takes any attachments to this transaction and attaches them to the message +we're building. + +=cut + + +sub AddAttachments { + my $self = shift; + + my $MIMEObj = $self->TemplateObj->MIMEObj; + + $MIMEObj->head->delete('RT-Attach-Message'); + + my $attachments = RT::Attachments->new($RT::SystemUser); + $attachments->Limit( + FIELD => 'TransactionId', + VALUE => $self->TransactionObj->Id + ); + $attachments->OrderBy('id'); + + my $transaction_content_obj = $self->TransactionObj->ContentObj; + + # attach any of this transaction's attachments + while ( my $attach = $attachments->Next ) { + + # Don't attach anything blank + next unless ( $attach->ContentLength ); + +# We want to make sure that we don't include the attachment that's being sued as the "Content" of this message" + next + if ( $transaction_content_obj + && $transaction_content_obj->Id == $attach->Id + && $transaction_content_obj->ContentType =~ qr{text/plain}i ); + $MIMEObj->make_multipart('mixed'); + $MIMEObj->attach( + Type => $attach->ContentType, + Charset => $attach->OriginalEncoding, + Data => $attach->OriginalContent, + Filename => $self->MIMEEncodeString( $attach->Filename, + $RT::EmailOutputEncoding ), + 'RT-Attachment:' => $self->TicketObj->Id."/".$self->TransactionObj->Id."/".$attach->id, + Encoding => '-SUGGEST' + ); + } + +} + +# }}} + +# {{{ RecordOutgoingMailTransaction + +=head2 RecordOutgoingMailTransaction MIMEObj + +Record a transaction in RT with this outgoing message for future record-keeping purposes + +=cut + + + +sub RecordOutgoingMailTransaction { + my $self = shift; + my $MIMEObj = shift; + + + my @parts = $MIMEObj->parts; + my @attachments; + my @keep; + foreach my $part (@parts) { + my $attach = $part->head->get('RT-Attachment'); + if ($attach) { + $RT::Logger->debug("We found an attachment. we want to not record it."); + push @attachments, $attach; + } else { + $RT::Logger->debug("We found a part. we want to record it."); + push @keep, $part; + } + } + $MIMEObj->parts(\@keep); + foreach my $attachment (@attachments) { + $MIMEObj->head->add('RT-Attachment', $attachment); + } + + RT::I18N::SetMIMEEntityToEncoding( $MIMEObj, 'utf-8', 'mime_words_ok' ); + + my $transaction = RT::Transaction->new($self->TransactionObj->CurrentUser); + + # XXX: TODO -> Record attachments as references to things in the attachments table, maybe. + + my $type; + if ($self->TransactionObj->Type eq 'Comment') { + $type = 'CommentEmailRecord'; + } else { + $type = 'EmailRecord'; + } + + my $msgid = $MIMEObj->head->get('Message-ID'); + chomp $msgid; + + my ( $id, $msg ) = $transaction->Create( + Ticket => $self->TicketObj->Id, + Type => $type, + Data => $msgid, + MIMEObj => $MIMEObj, + ActivateScrips => 0 + ); + + +} + +# }}} +# # {{{ sub SetRTSpecialHeaders @@ -320,84 +429,155 @@ that don't matter much to anybody else. sub SetRTSpecialHeaders { my $self = shift; - $self->SetReferences(); - - $self->SetMessageID(); + $self->SetSubject(); + $self->SetSubjectToken(); + $self->SetHeaderAsEncoding( 'Subject', $RT::EmailOutputEncoding ) + if ($RT::EmailOutputEncoding); + $self->SetReturnAddress(); + $self->SetReferencesHeaders(); + + unless ($self->TemplateObj->MIMEObj->head->get('Message-ID')) { + # Get Message-ID for this txn + my $msgid = ""; + $msgid = $self->TransactionObj->Message->First->GetHeader("RT-Message-ID") + || $self->TransactionObj->Message->First->GetHeader("Message-ID") + if $self->TransactionObj->Message && $self->TransactionObj->Message->First; + + # If there is one, and we can parse it, then base our Message-ID on it + if ($msgid + and $msgid =~ s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>$/ + "<$1." . $self->TicketObj->id + . "-" . $self->ScripObj->id + . "-" . $self->ScripActionObj->{_Message_ID} + . "@" . $RT::Organization . ">"/eg + and $2 == $self->TicketObj->id) { + $self->SetHeader( "Message-ID" => $msgid ); + } else { + $self->SetHeader( 'Message-ID', + "<rt-" + . $RT::VERSION . "-" + . $$ . "-" + . CORE::time() . "-" + . int(rand(2000)) . '.' + . $self->TicketObj->id . "-" + . $self->ScripObj->id . "-" # Scrip + . $self->ScripActionObj->{_Message_ID} . "@" # Email sent + . $RT::Organization + . ">" ); + } + } - $self->SetPrecedence(); + $self->SetHeader( 'Precedence', "bulk" ) + unless ( $self->TemplateObj->MIMEObj->head->get("Precedence") ); $self->SetHeader( 'X-RT-Loop-Prevention', $RT::rtname ); $self->SetHeader( 'RT-Ticket', - $RT::rtname . " #" . $self->TicketObj->id() ); + $RT::rtname . " #" . $self->TicketObj->id() ); $self->SetHeader( 'Managed-by', - "RT $RT::VERSION (http://www.bestpractical.com/rt/)" ); + "RT $RT::VERSION (http://www.bestpractical.com/rt/)" ); $self->SetHeader( 'RT-Originator', - $self->TransactionObj->CreatorObj->EmailAddress ); - return (); + $self->TransactionObj->CreatorObj->EmailAddress ); } -# {{{ sub SetReferences +# }}} + -=head2 SetReferences - - # This routine will set the References: and In-Reply-To headers, -# autopopulating it with all the correspondence on this ticket so -# far. This should make RT responses threadable. +# }}} + +# {{{ RemoveInappropriateRecipients + +=head2 RemoveInappropriateRecipients + +Remove addresses that are RT addresses or that are on this transaction's blacklist =cut -sub SetReferences { +sub RemoveInappropriateRecipients { my $self = shift; - # TODO: this one is broken. What is this email really a reply to? - # If it's a reply to an incoming message, we'll need to use the - # actual message-id from the appropriate Attachment object. For - # incoming mails, we would like to preserve the In-Reply-To and/or - # References. + my @blacklist; - $self->SetHeader( 'In-Reply-To', - "<rt-" . $self->TicketObj->id() . "\@" . $RT::rtname . ">" ); + my @types = qw/To Cc Bcc/; - # TODO We should always add References headers for all message-ids - # of previous messages related to this ticket. -} + # Weed out any RT addresses. We really don't want to talk to ourselves! + foreach my $type (@types) { + @{ $self->{$type} } = + RT::EmailParser::CullRTAddresses( "", @{ $self->{$type} } ); + } -# }}} + # If there are no recipients, don't try to send the message. + # If the transaction has content and has the header RT-Squelch-Replies-To -# {{{ sub SetMessageID + if ( $self->TransactionObj->Attachments->First() ) { + if ( + $self->TransactionObj->Attachments->First->GetHeader( + 'RT-DetectedAutoGenerated') + ) + { -=head2 SetMessageID + # What do we want to do with this? It's probably (?) a bounce + # caused by one of the watcher addresses being broken. + # Default ("true") is to redistribute, for historical reasons. -Without this one, threading won't work very nice in email agents. -Anyway, I'm not really sure it's that healthy if we need to send -several separate/different emails about the same transaction. + if ( !$RT::RedistributeAutoGeneratedMessages ) { -=cut + # Don't send to any watchers. + @{ $self->{'To'} } = (); + @{ $self->{'Cc'} } = (); + @{ $self->{'Bcc'} } = (); -sub SetMessageID { - my $self = shift; + } + elsif ( $RT::RedistributeAutoGeneratedMessages eq 'privileged' ) { - # TODO this one might be sort of broken. If we have several scrips +++ - # sending several emails to several different persons, we need to - # pull out different message-ids. I'd suggest message ids like - # "rt-ticket#-transaction#-scrip#-receipient#" - - $self->SetHeader( 'Message-ID', - "<rt-" - . $RT::VERSION ."-" - . $self->TicketObj->id() . "-" - . $self->TransactionObj->id() . "." - . rand(20) . "\@" - . $RT::Organization . ">" ) - unless $self->TemplateObj->MIMEObj->head->get('Message-ID'); -} + # Only send to "privileged" watchers. + # -# }}} + foreach my $type (@types) { -# }}} + foreach my $addr ( @{ $self->{$type} } ) { + my $user = RT::User->new($RT::SystemUser); + $user->LoadByEmail($addr); + @{ $self->{$type} } = + grep ( !/^\Q$addr\E$/, @{ $self->{$type} } ) + if ( !$user->Privileged ); + + } + } + + } + + } + + my $squelch = + $self->TransactionObj->Attachments->First->GetHeader( + 'RT-Squelch-Replies-To'); + + if ($squelch) { + @blacklist = split( /,/, $squelch ); + } + } + # Let's grab the SquelchMailTo attribue and push those entries into the @blacklist + my @non_recipients = $self->TicketObj->SquelchMailTo; + foreach my $attribute (@non_recipients) { + push @blacklist, $attribute->Content; + } + + # Cycle through the people we're sending to and pull out anyone on the + # system blacklist + + foreach my $person_to_yank (@blacklist) { + $person_to_yank =~ s/\s//g; + foreach my $type (@types) { + @{ $self->{$type} } = + grep ( !/^\Q$person_to_yank\E$/, @{ $self->{$type} } ); + } + } +} + +# }}} # {{{ sub SetReturnAddress =head2 SetReturnAddress is_comment => BOOLEAN @@ -409,8 +589,10 @@ Calculate and set From and Reply-To headers based on the is_comment flag. sub SetReturnAddress { my $self = shift; - my %args = ( is_comment => 0, - @_ ); + my %args = ( + is_comment => 0, + @_ + ); # From and Reply-To # $args{is_comment} should be set if the comment address is to be used. @@ -426,21 +608,26 @@ sub SetReturnAddress { } unless ( $self->TemplateObj->MIMEObj->head->get('From') ) { - if ($RT::UseFriendlyFromLine) { - my $friendly_name = $self->TransactionObj->CreatorObj->RealName; - if ( $friendly_name =~ /^"(.*)"$/ ) { # a quoted string - $friendly_name = $1; - } - - $friendly_name =~ s/"/\\"/g; - $self->SetHeader( 'From', - sprintf($RT::FriendlyFromLineFormat, - $self->MIMEEncodeString( $friendly_name, $RT::EmailOutputEncoding ), $replyto), - ); - } - else { - $self->SetHeader( 'From', $replyto ); - } + if ($RT::UseFriendlyFromLine) { + my $friendly_name = $self->TransactionObj->CreatorObj->RealName; + if ( $friendly_name =~ /^"(.*)"$/ ) { # a quoted string + $friendly_name = $1; + } + + $friendly_name =~ s/"/\\"/g; + $self->SetHeader( + 'From', + sprintf( + $RT::FriendlyFromLineFormat, + $self->MIMEEncodeString( $friendly_name, + $RT::EmailOutputEncoding ), + $replyto + ), + ); + } + else { + $self->SetHeader( 'From', $replyto ); + } } unless ( $self->TemplateObj->MIMEObj->head->get('Reply-To') ) { @@ -473,82 +660,6 @@ sub SetHeader { # }}} -# {{{ sub SetRecipients - -=head2 SetRecipients - -Dummy method to be overriden by subclasses which want to set the recipients. - -=cut - -sub SetRecipients { - my $self = shift; - return (); -} - -# }}} - -# {{{ sub SetTo - -=head2 SetTo - -Takes a string that is the addresses you want to send mail to - -=cut - -sub SetTo { - my $self = shift; - my $addresses = shift; - return $self->SetHeader( 'To', $addresses ); -} - -# }}} - -# {{{ sub SetCc - -=head2 SetCc - -Takes a string that is the addresses you want to Cc - -=cut - -sub SetCc { - my $self = shift; - my $addresses = shift; - - return $self->SetHeader( 'Cc', $addresses ); -} - -# }}} - -# {{{ sub SetBcc - -=head2 SetBcc - -Takes a string that is the addresses you want to Bcc - -=cut - -sub SetBcc { - my $self = shift; - my $addresses = shift; - - return $self->SetHeader( 'Bcc', $addresses ); -} - -# }}} - -# {{{ sub SetPrecedence - -sub SetPrecedence { - my $self = shift; - - unless ( $self->TemplateObj->MIMEObj->head->get("Precedence") ) { - $self->SetHeader( 'Precedence', "bulk" ); - } -} - -# }}} # {{{ sub SetSubject @@ -564,36 +675,33 @@ sub SetSubject { my $self = shift; my $subject; - unless ( $self->TemplateObj->MIMEObj->head->get('Subject') ) { - my $message = $self->TransactionObj->Attachments; - my $ticket = $self->TicketObj->Id; - - if ( $self->{'Subject'} ) { - $subject = $self->{'Subject'}; - } - elsif ( ( $message->First() ) - && ( $message->First->Headers ) ) { - my $header = $message->First->Headers(); - $header =~ s/\n\s+/ /g; - if ( $header =~ /^Subject: (.*?)$/m ) { - $subject = $1; - } - else { - $subject = $self->TicketObj->Subject(); - } - + my $message = $self->TransactionObj->Attachments; + if ( $self->TemplateObj->MIMEObj->head->get('Subject') ) { + return (); + } + if ( $self->{'Subject'} ) { + $subject = $self->{'Subject'}; + } + elsif ( ( $message->First() ) && ( $message->First->Headers ) ) { + my $header = $message->First->Headers(); + $header =~ s/\n\s+/ /g; + if ( $header =~ /^Subject: (.*?)$/m ) { + $subject = $1; } else { $subject = $self->TicketObj->Subject(); } - $subject =~ s/(\r\n|\n|\s)/ /gi; + } + else { + $subject = $self->TicketObj->Subject(); + } + + $subject =~ s/(\r\n|\n|\s)/ /gi; - chomp $subject; - $self->SetHeader( 'Subject', $subject ); + chomp $subject; + $self->SetHeader( 'Subject', $subject ); - } - return ($subject); } # }}} @@ -619,9 +727,94 @@ sub SetSubjectToken { # }}} +=head2 SetReferencesHeaders + +Set References and In-Reply-To headers for this message. + +=cut + +sub SetReferencesHeaders { + + my $self = shift; + my ( @in_reply_to, @references, @msgid ); + + my $attachments = $self->TransactionObj->Message; + + if ( my $top = $attachments->First() ) { + @in_reply_to = split(/\s+/m, $top->GetHeader('In-Reply-To') || ''); + @references = split(/\s+/m, $top->GetHeader('References') || '' ); + @msgid = split(/\s+/m, $top->GetHeader('Message-ID') || ''); + } + else { + return (undef); + } + + # There are two main cases -- this transaction was created with + # the RT Web UI, and hence we want to *not* append its Message-ID + # to the References and In-Reply-To. OR it came from an outside + # source, and we should treat it as per the RFC + if ( "@msgid" =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>/) { + + # Make all references which are internal be to version which we + # have sent out + for (@references, @in_reply_to) { + s/<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>$/ + "<$1." . $self->TicketObj->id . + "-" . $self->ScripObj->id . + "-" . $self->ScripActionObj->{_Message_ID} . + "@" . $RT::Organization . ">"/eg + } + + # In reply to whatever the internal message was in reply to + $self->SetHeader( 'In-Reply-To', join( " ", ( @in_reply_to ))); + + # Default the references to whatever we're in reply to + @references = @in_reply_to unless @references; + + # References are unchanged from internal + } else { + # In reply to that message + $self->SetHeader( 'In-Reply-To', join( " ", ( @msgid ))); + + # Default the references to whatever we're in reply to + @references = @in_reply_to unless @references; + + # Push that message onto the end of the references + push @references, @msgid; + } + + # Push pseudo-ref to the front + my $pseudo_ref = $self->PseudoReference; + @references = ($pseudo_ref, grep { $_ ne $pseudo_ref } @references); + + # If there are more than 10 references headers, remove all but the + # first four and the last six (Gotta keep this from growing + # forever) + splice(@references, 4, -6) if ($#references >= 10); + + # Add on the references + $self->SetHeader( 'References', join( " ", @references) ); + $self->TemplateObj->MIMEObj->head->fold_length( 'References', 80 ); + +} + # }}} -# {{{ +=head2 PseudoReference + +Returns a fake Message-ID: header for the ticket to allow a base level of threading + +=cut + +sub PseudoReference { + + my $self = shift; + my $pseudo_ref = '<RT-Ticket-'.$self->TicketObj->id .'@'.$RT::Organization .'>'; + return $pseudo_ref; +} + + +# {{{ SetHeadingAsEncoding =head2 SetHeaderAsEncoding($field_name, $charset_encoding) @@ -652,7 +845,7 @@ sub SetHeaderAsEncoding { } # }}} -# {{{ MIMENcodeString +# {{{ MIMEEncodeString =head2 MIMEEncodeString STRING ENCODING @@ -663,15 +856,41 @@ Takes a string and a possible encoding and returns the string wrapped in MIME go sub MIMEEncodeString { my $self = shift; my $value = shift; - my $enc = shift; + # using RFC2047 notation, sec 2. + # encoded-word = "=?" charset "?" encoding "?" encoded-text "?=" + my $charset = shift; + my $encoding = 'B'; + # An 'encoded-word' may not be more than 75 characters long + # + # MIME encoding increases 4/3*(number of bytes), and always in multiples + # of 4. Thus we have to find the best available value of bytes available + # for each chunk. + # + # First we get the integer max which max*4/3 would fit on space. + # Then we find the greater multiple of 3 lower or equal than $max. + my $max = int(((75-length('=?'.$charset.'?'.$encoding.'?'.'?='))*3)/4); + $max = int($max/3)*3; chomp $value; return ($value) unless $value =~ /[^\x20-\x7e]/; $value =~ s/\s*$//; Encode::_utf8_off($value); - my $res = Encode::from_to( $value, "utf-8", $enc ); - $value = encode_mimeword( $value, 'B', $enc ); + my $res = Encode::from_to( $value, "utf-8", $charset ); + + if ($max > 0) { + # copy value and split in chuncks + my $str=$value; + my @chunks = unpack("a$max" x int(length($str)/$max + + ((length($str) % $max) ? 1:0)), $str); + # encode an join chuncks + $value = join " ", + map encode_mimeword( $_, $encoding, $charset ), @chunks ; + return($value); + } else { + # gives an error... + $RT::Logger->crit("Can't encode! Charset or encoding too big.\n"); + } } # }}} diff --git a/rt/lib/RT/Action/SetPriority.pm b/rt/lib/RT/Action/SetPriority.pm index 515eeb58c..c129bf0a2 100644 --- a/rt/lib/RT/Action/SetPriority.pm +++ b/rt/lib/RT/Action/SetPriority.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::Action::SetPriority; require RT::Action::Generic; diff --git a/rt/lib/RT/Action/UserDefined.pm b/rt/lib/RT/Action/UserDefined.pm index e2e3d72ce..90653f68a 100644 --- a/rt/lib/RT/Action/UserDefined.pm +++ b/rt/lib/RT/Action/UserDefined.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::Action::UserDefined; diff --git a/rt/lib/RT/Attachment.pm b/rt/lib/RT/Attachment.pm index 2ed520162..2a09b1240 100755 --- a/rt/lib/RT/Attachment.pm +++ b/rt/lib/RT/Attachment.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -110,7 +132,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -119,14 +141,14 @@ Returns the current value of id. =cut -=item TransactionId +=head2 TransactionId Returns the current value of TransactionId. (In the database, TransactionId is stored as int(11).) -=item SetTransactionId VALUE +=head2 SetTransactionId VALUE Set TransactionId to VALUE. @@ -137,14 +159,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Parent +=head2 Parent Returns the current value of Parent. (In the database, Parent is stored as int(11).) -=item SetParent VALUE +=head2 SetParent VALUE Set Parent to VALUE. @@ -155,14 +177,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item MessageId +=head2 MessageId Returns the current value of MessageId. (In the database, MessageId is stored as varchar(160).) -=item SetMessageId VALUE +=head2 SetMessageId VALUE Set MessageId to VALUE. @@ -173,14 +195,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Subject +=head2 Subject Returns the current value of Subject. (In the database, Subject is stored as varchar(255).) -=item SetSubject VALUE +=head2 SetSubject VALUE Set Subject to VALUE. @@ -191,14 +213,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Filename +=head2 Filename Returns the current value of Filename. (In the database, Filename is stored as varchar(255).) -=item SetFilename VALUE +=head2 SetFilename VALUE Set Filename to VALUE. @@ -209,14 +231,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ContentType +=head2 ContentType Returns the current value of ContentType. (In the database, ContentType is stored as varchar(80).) -=item SetContentType VALUE +=head2 SetContentType VALUE Set ContentType to VALUE. @@ -227,14 +249,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ContentEncoding +=head2 ContentEncoding Returns the current value of ContentEncoding. (In the database, ContentEncoding is stored as varchar(80).) -=item SetContentEncoding VALUE +=head2 SetContentEncoding VALUE Set ContentEncoding to VALUE. @@ -245,14 +267,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Content +=head2 Content Returns the current value of Content. (In the database, Content is stored as longtext.) -=item SetContent VALUE +=head2 SetContent VALUE Set Content to VALUE. @@ -263,14 +285,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Headers +=head2 Headers Returns the current value of Headers. (In the database, Headers is stored as longtext.) -=item SetHeaders VALUE +=head2 SetHeaders VALUE Set Headers to VALUE. @@ -281,7 +303,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -290,7 +312,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -300,33 +322,33 @@ Returns the current value of Created. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, TransactionId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Parent => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, MessageId => - {read => 1, write => 1, type => 'varchar(160)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 160, is_blob => 0, is_numeric => 0, type => 'varchar(160)', default => ''}, Subject => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Filename => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, ContentType => - {read => 1, write => 1, type => 'varchar(80)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, ContentEncoding => - {read => 1, write => 1, type => 'varchar(80)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, Content => - {read => 1, write => 1, type => 'longtext', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''}, Headers => - {read => 1, write => 1, type => 'longtext', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -358,7 +380,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Attachment_Overlay.pm b/rt/lib/RT/Attachment_Overlay.pm index d31aa75ad..fe189e378 100644 --- a/rt/lib/RT/Attachment_Overlay.pm +++ b/rt/lib/RT/Attachment_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 SYNOPSIS use RT::Attachment; @@ -44,24 +67,28 @@ ok (require RT::Attachment); =cut + +package RT::Attachment; + use strict; no warnings qw(redefine); use MIME::Base64; use MIME::QuotedPrint; -# {{{ sub _ClassAccessible -sub _ClassAccessible { + +# {{{ sub _OverlayAccessible +sub _OverlayAccessible { { - TransactionId => { 'read'=>1, 'public'=>1, }, - MessageId => { 'read'=>1, }, - Parent => { 'read'=>1, }, - ContentType => { 'read'=>1, }, - Subject => { 'read'=>1, }, - Content => { 'read'=>1, }, - ContentEncoding => { 'read'=>1, }, - Headers => { 'read'=>1, }, - Filename => { 'read'=>1, }, + TransactionId => { 'read'=>1, 'public'=>1, 'write' => 0 }, + MessageId => { 'read'=>1, 'write' => 0 }, + Parent => { 'read'=>1, 'write' => 0 }, + ContentType => { 'read'=>1, 'write' => 0 }, + Subject => { 'read'=>1, 'write' => 0 }, + Content => { 'read'=>1, 'write' => 0 }, + ContentEncoding => { 'read'=>1, 'write' => 0 }, + Headers => { 'read'=>1, 'write' => 0 }, + Filename => { 'read'=>1, 'write' => 0 }, Creator => { 'read'=>1, 'auto'=>1, }, Created => { 'read'=>1, 'auto'=>1, }, }; @@ -83,6 +110,9 @@ sub TransactionObj { $self->{_TransactionObj}=RT::Transaction->new($self->CurrentUser); $self->{_TransactionObj}->Load($self->TransactionId); } + unless ($self->{_TransactionObj}->Id) { + $RT::Logger->crit("Attachment ".$self->id." can't find transaction ".$self->TransactionId." which it is ostensibly part of. That's bad"); + } return $self->{_TransactionObj}; } @@ -112,8 +142,8 @@ sub Create { #For ease of reference my $Attachment = $args{'Attachment'}; - #if we didn't specify a ticket, we need to bail - if ( $args{'TransactionId'} == 0 ) { + #if we didn't specify a ticket, we need to bail + if ( $args{'TransactionId'} == 0 ) { $RT::Logger->crit( "RT::Attachment->Create couldn't, as you didn't specify a transaction\n" ); return (0); @@ -127,19 +157,35 @@ sub Create { defined($Subject) or $Subject = ''; chomp($Subject); + #Get the Message-ID + my $MessageId = $Attachment->head->get( 'Message-ID', 0 ); + defined($MessageId) or $MessageId = ''; + chomp ($MessageId); + $MessageId =~ s/^<(.*)>$/$1/go; + + #Get the filename my $Filename = $Attachment->head->recommended_filename || eval { ${ $Attachment->head->{mail_hdr_hash}{'Content-Disposition'}[0] } =~ /^.*\bfilename="(.*)"$/ ? $1 : '' }; - if ( $Attachment->parts ) { + # If a message has no bodyhandle, that means that it has subparts (or appears to) + # and we should act accordingly. + unless ( defined $Attachment->bodyhandle ) { + $id = $self->SUPER::Create( TransactionId => $args{'TransactionId'}, Parent => 0, ContentType => $Attachment->mime_type, Headers => $Attachment->head->as_string, + MessageId => $MessageId, Subject => $Subject); + + unless ($id) { + $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr); + + } foreach my $part ( $Attachment->parts ) { my $SubAttachment = new RT::Attachment( $self->CurrentUser ); @@ -148,7 +194,6 @@ sub Create { Parent => $id, Attachment => $part, ContentType => $Attachment->mime_type, - Headers => $Attachment->head->as_string(), ); } @@ -158,73 +203,21 @@ sub Create { #If it's not multipart else { - my $ContentEncoding = 'none'; - - my $Body = $Attachment->bodyhandle->as_string; - - #get the max attachment length from RT - my $MaxSize = $RT::MaxAttachmentSize; - - #if the current attachment contains nulls and the - #database doesn't support embedded nulls - - if ( $RT::AlwaysUseBase64 or - ( !$RT::Handle->BinarySafeBLOBs ) && ( $Body =~ /\x00/ ) ) { - - # set a flag telling us to mimencode the attachment - $ContentEncoding = 'base64'; - - #cut the max attchment size by 25% (for mime-encoding overhead. - $RT::Logger->debug("Max size is $MaxSize\n"); - $MaxSize = $MaxSize * 3 / 4; - # Some databases (postgres) can't handle non-utf8 data - } elsif ( !$RT::Handle->BinarySafeBLOBs - && $Attachment->mime_type !~ /text\/plain/gi - && !Encode::is_utf8( $Body, 1 ) ) { - $ContentEncoding = 'quoted-printable'; - } - - #if the attachment is larger than the maximum size - if ( ($MaxSize) and ( $MaxSize < length($Body) ) ) { - - # if we're supposed to truncate large attachments - if ($RT::TruncateLongAttachments) { - - # truncate the attachment to that length. - $Body = substr( $Body, 0, $MaxSize ); - - } - - # elsif we're supposed to drop large attachments on the floor, - 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" ); - return (undef); - } - } - - # if we need to mimencode the attachment - if ( $ContentEncoding eq 'base64' ) { - - # base64 encode the attachment - Encode::_utf8_off($Body); - $Body = MIME::Base64::encode_base64($Body); - - } elsif ($ContentEncoding eq 'quoted-printable') { - Encode::_utf8_off($Body); - $Body = MIME::QuotedPrint::encode($Body); - } - - + my ($ContentEncoding, $Body) = $self->_EncodeLOB($Attachment->bodyhandle->as_string, $Attachment->mime_type); my $id = $self->SUPER::Create( TransactionId => $args{'TransactionId'}, ContentType => $Attachment->mime_type, ContentEncoding => $ContentEncoding, Parent => $args{'Parent'}, - Headers => $Attachment->head->as_string, + Headers => $Attachment->head->as_string, Subject => $Subject, Content => $Body, - Filename => $Filename, ); + Filename => $Filename, + MessageId => $MessageId + ); + unless ($id) { + $RT::Logger->crit("Attachment insert failed - ".$RT::Handle->dbh->errstr); + } + return ($id); } } @@ -241,7 +234,14 @@ Create an attachment exactly as specified in the named parameters. sub Import { my $self = shift; - return($self->SUPER::Create(@_)); + my %args = ( ContentEncoding => 'none', + + @_ ); + + + ($args{'ContentEncoding'}, $args{'Content'}) = $self->_EncodeLOB($args{'Content'}, $args{'MimeType'}); + + return($self->SUPER::Create(%args)); } # {{{ sub Content @@ -255,26 +255,7 @@ before returning it. sub Content { my $self = shift; - my $decode_utf8 = (($self->ContentType eq 'text/plain') ? 1 : 0); - - if ( $self->ContentEncoding eq 'none' || ! $self->ContentEncoding ) { - return $self->_Value( - 'Content', - decode_utf8 => $decode_utf8, - ); - } elsif ( $self->ContentEncoding eq 'base64' ) { - return ( $decode_utf8 - ? Encode::decode_utf8(MIME::Base64::decode_base64($self->_Value('Content'))) - : MIME::Base64::decode_base64($self->_Value('Content')) - ); - } elsif ( $self->ContentEncoding eq 'quoted-printable' ) { - return ( $decode_utf8 - ? Encode::decode_utf8(MIME::QuotedPrint::decode($self->_Value('Content'))) - : MIME::QuotedPrint::decode($self->_Value('Content')) - ); - } else { - return( $self->loc("Unknown ContentEncoding [_1]", $self->ContentEncoding)); - } + $self->_DecodeLOB($self->ContentType, $self->ContentEncoding, $self->_Value('Content', decode_utf8 => 0)); } @@ -286,7 +267,7 @@ sub Content { =head2 OriginalContent Returns the attachment's content as octets before RT's mangling. -Currently, this just means restoring text/plain content back to its +Currently, this just means restoring text content back to its original encoding. =cut @@ -294,7 +275,8 @@ original encoding. sub OriginalContent { my $self = shift; - return $self->Content unless $self->ContentType eq 'text/plain'; + return $self->Content unless ( + $self->ContentType =~ qr{^(text/plain|message/rfc822)$}i) ; my $enc = $self->OriginalEncoding; my $content; @@ -309,11 +291,15 @@ sub OriginalContent { } # Encode::_utf8_on($content); - if (!$enc or $enc eq 'utf8' or $enc eq 'utf-8') { + if (!$enc || $enc eq '' || $enc eq 'utf8' || $enc eq 'utf-8') { # If we somehow fail to do the decode, at least push out the raw bits eval {return( Encode::decode_utf8($content))} || return ($content); } - Encode::from_to($content, 'utf8' => $enc); + + eval { Encode::from_to($content, 'utf8' => $enc);}; + if ($@) { + $RT::Logger->error("Could not convert attachment from assumed utf8 to '$enc' :".$@); + } return $content; } @@ -415,18 +401,18 @@ sub Quote { =head2 NiceHeaders -Returns the To, From, Cc, Date and Subject headers. - -It is a known issue that this breaks if any of these headers are not -properly unfolded. +Returns a multi-line string of the To, From, Cc, Date and Subject headers. =cut sub NiceHeaders { - my $self=shift; - my $hdrs=""; - for (split(/\n/,$self->Headers)) { - $hdrs.="$_\n" if /^(To|From|RT-Send-Cc|Cc|Date|Subject): /i + my $self = shift; + my $hdrs = ""; + my @hdrs = $self->_SplitHeaders; + while (my $str = shift @hdrs) { + next unless $str =~ /^(To|From|RT-Send-Cc|Cc|Bcc|Date|Subject):/i; + $hdrs .= $str . "\n"; + $hdrs .= shift( @hdrs ) . "\n" while ($hdrs[0] =~ /^[ \t]+/); } return $hdrs; } @@ -439,7 +425,7 @@ sub NiceHeaders { Returns this object's headers as a string. This method specifically removes the RT-Send-Bcc: header, so as to never reveal to whom RT sent a Bcc. We need to record the RT-Send-Cc and RT-Send-Bcc values so that we can actually send -out mail. (The mailing rules are seperated from the ticket update code by +out mail. (The mailing rules are separated from the ticket update code by an abstraction barrier that makes it impossible to pass this data directly =cut @@ -447,10 +433,9 @@ an abstraction barrier that makes it impossible to pass this data directly sub Headers { my $self = shift; my $hdrs=""; - for (split(/\n/,$self->SUPER::Headers)) { - $hdrs.="$_\n" unless /^(RT-Send-Bcc): /i - } - return $hdrs; + my @headers = grep { !/^RT-Send-Bcc/i } $self->_SplitHeaders; + return join("\n",@headers); + } @@ -468,8 +453,8 @@ done in Headers() above. sub GetHeader { my $self = shift; my $tag = shift; - foreach my $line (split(/\n/,$self->SUPER::Headers)) { - if ($line =~ /^\Q$tag\E:\s+(.*)$/i) { #if we find the header, return its value + foreach my $line ($self->_SplitHeaders) { + if ($line =~ /^\Q$tag\E:\s+(.*)$/si) { #if we find the header, return its value return ($1); } } @@ -492,7 +477,7 @@ sub SetHeader { my $tag = shift; my $newheader = ''; - foreach my $line (split(/\n/,$self->SUPER::Headers)) { + foreach my $line ($self->_SplitHeaders) { if (defined $tag and $line =~ /^\Q$tag\E:\s+(.*)$/i) { $newheader .= "$tag: $_[0]\n"; undef $tag; @@ -516,35 +501,84 @@ Returns its value as a string, if the user passes an ACL check =cut -sub _Value { +sub _Value { - my $self = shift; + my $self = shift; my $field = shift; - - + #if the field is public, return it. - if ($self->_Accessible($field, 'public')) { - #$RT::Logger->debug("Skipping ACL check for $field\n"); - return($self->__Value($field, @_)); - + if ( $self->_Accessible( $field, 'public' ) ) { + return ( $self->__Value( $field, @_ ) ); } - + #If it's a comment, we need to be extra special careful - elsif ( (($self->TransactionObj->CurrentUserHasRight('ShowTicketComments')) and - ($self->TransactionObj->Type eq 'Comment') ) or - ($self->TransactionObj->CurrentUserHasRight('ShowTicket'))) { - return($self->__Value($field, @_)); + elsif ( $self->TransactionObj->Type =~ /^Comment/ ) { + if ( $self->TransactionObj->CurrentUserHasRight('ShowTicketComments') ) + { + return ( $self->__Value( $field, @_ ) ); + } + } + elsif ( $self->TransactionObj->CurrentUserHasRight('ShowTicket') ) { + return ( $self->__Value( $field, @_ ) ); } + #if they ain't got rights to see, don't let em else { - return(undef); - } - - + return (undef); + } + } # }}} +=head2 _SplitHeaders + +Returns an array of this attachment object's headers, with one header +per array entry. multiple lines are folded. + +=begin testing + +my $test1 = "From: jesse"; +my @headers = RT::Attachment->_SplitHeaders($test1); +is ($#headers, 0, $test1 ); + +my $test2 = qq{From: jesse +To: bobby +Subject: foo +}; + +@headers = RT::Attachment->_SplitHeaders($test2); +is ($#headers, 2, "testing a bunch of singline multiple headers" ); + + +my $test3 = qq{From: jesse +To: bobby, + Suzie, + Sally, + Joey: bizzy, +Subject: foo +}; + +@headers = RT::Attachment->_SplitHeaders($test3); +is ($#headers, 2, "testing a bunch of singline multiple headers" ); + + +=end testing + +=cut + +sub _SplitHeaders { + my $self = shift; + my $headers = (shift || $self->SUPER::Headers()); + my @headers; + for (split(/\n(?=\w|\z)/,$headers)) { + push @headers, $_; + + } + return(@headers); +} + + sub ContentLength { my $self = shift; @@ -568,4 +602,13 @@ sub ContentLength { # }}} +# Transactions don't change. by adding this cache congif directiove, we don't lose pathalogically on long tickets. +sub _CacheConfig { + { + 'cache_p' => 1, + 'fast_update_p' => 1, + 'cache_for_sec' => 180, + } +} + 1; diff --git a/rt/lib/RT/Attachments.pm b/rt/lib/RT/Attachments.pm index 177cdd094..aedd7ad2b 100755 --- a/rt/lib/RT/Attachments.pm +++ b/rt/lib/RT/Attachments.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Attachment item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Attachments_Overlay.pm b/rt/lib/RT/Attachments_Overlay.pm index ce94c9dfa..1ea56e47c 100644 --- a/rt/lib/RT/Attachments_Overlay.pm +++ b/rt/lib/RT/Attachments_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Attachments - a collection of RT::Attachment objects @@ -46,6 +69,9 @@ ok (require RT::Attachments); =cut + +package RT::Attachments; + use strict; no warnings qw(redefine); @@ -109,6 +135,34 @@ sub NewItem { return($item); } # }}} + +# {{{ sub Next +sub Next { + my $self = shift; + + my $Attachment = $self->SUPER::Next(); + if ((defined($Attachment)) and (ref($Attachment))) { + if ($Attachment->TransactionObj->__Value('Type') =~ /^Comment/ && + $Attachment->TransactionObj->TicketObj->CurrentUserHasRight('ShowTicketComments')) { + return($Attachment); + } elsif ($Attachment->TransactionObj->__Value('Type') !~ /^Comment/ && + $Attachment->TransactionObj->TicketObj->CurrentUserHasRight('ShowTicket')) { + return($Attachment); + } + + #If the user doesn't have the right to show this ticket + else { + return($self->Next()); + } + } + + #if there never was any ticket + else { + return(undef); + } +} +# }}} + 1; diff --git a/rt/lib/RT/Attribute.pm b/rt/lib/RT/Attribute.pm new file mode 100644 index 000000000..a46f4d8a2 --- /dev/null +++ b/rt/lib/RT/Attribute.pm @@ -0,0 +1,347 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) +# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. +# +# !! DO NOT EDIT THIS FILE !! +# + +use strict; + + +=head1 NAME + +RT::Attribute + + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=cut + +package RT::Attribute; +use RT::Record; + + +use vars qw( @ISA ); +@ISA= qw( RT::Record ); + +sub _Init { + my $self = shift; + + $self->Table('Attributes'); + $self->SUPER::_Init(@_); +} + + + + + +=head2 Create PARAMHASH + +Create takes a hash of values and creates a row in the database: + + varchar(255) 'Name'. + varchar(255) 'Description'. + text 'Content'. + varchar(16) 'ContentType'. + varchar(64) 'ObjectType'. + int(11) 'ObjectId'. + +=cut + + + + +sub Create { + my $self = shift; + my %args = ( + Name => '', + Description => '', + Content => '', + ContentType => '', + ObjectType => '', + ObjectId => '', + + @_); + $self->SUPER::Create( + Name => $args{'Name'}, + Description => $args{'Description'}, + Content => $args{'Content'}, + ContentType => $args{'ContentType'}, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, +); + +} + + + +=head2 id + +Returns the current value of id. +(In the database, id is stored as int(11).) + + +=cut + + +=head2 Name + +Returns the current value of Name. +(In the database, Name is stored as varchar(255).) + + + +=head2 SetName VALUE + + +Set Name to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, Name will be stored as a varchar(255).) + + +=cut + + +=head2 Description + +Returns the current value of Description. +(In the database, Description is stored as varchar(255).) + + + +=head2 SetDescription VALUE + + +Set Description to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, Description will be stored as a varchar(255).) + + +=cut + + +=head2 Content + +Returns the current value of Content. +(In the database, Content is stored as text.) + + + +=head2 SetContent VALUE + + +Set Content to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, Content will be stored as a text.) + + +=cut + + +=head2 ContentType + +Returns the current value of ContentType. +(In the database, ContentType is stored as varchar(16).) + + + +=head2 SetContentType VALUE + + +Set ContentType to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ContentType will be stored as a varchar(16).) + + +=cut + + +=head2 ObjectType + +Returns the current value of ObjectType. +(In the database, ObjectType is stored as varchar(64).) + + + +=head2 SetObjectType VALUE + + +Set ObjectType to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ObjectType will be stored as a varchar(64).) + + +=cut + + +=head2 ObjectId + +Returns the current value of ObjectId. +(In the database, ObjectId is stored as int(11).) + + + +=head2 SetObjectId VALUE + + +Set ObjectId to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ObjectId will be stored as a int(11).) + + +=cut + + +=head2 Creator + +Returns the current value of Creator. +(In the database, Creator is stored as int(11).) + + +=cut + + +=head2 Created + +Returns the current value of Created. +(In the database, Created is stored as datetime.) + + +=cut + + +=head2 LastUpdatedBy + +Returns the current value of LastUpdatedBy. +(In the database, LastUpdatedBy is stored as int(11).) + + +=cut + + +=head2 LastUpdated + +Returns the current value of LastUpdated. +(In the database, LastUpdated is stored as datetime.) + + +=cut + + + +sub _CoreAccessible { + { + + id => + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, + Name => + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, + Description => + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, + Content => + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, + ContentType => + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, + ObjectType => + {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''}, + ObjectId => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, + Creator => + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + Created => + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, + LastUpdatedBy => + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + LastUpdated => + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, + + } +}; + + + eval "require RT::Attribute_Overlay"; + if ($@ && $@ !~ qr{^Can't locate RT/Attribute_Overlay.pm}) { + die $@; + }; + + eval "require RT::Attribute_Vendor"; + if ($@ && $@ !~ qr{^Can't locate RT/Attribute_Vendor.pm}) { + die $@; + }; + + eval "require RT::Attribute_Local"; + if ($@ && $@ !~ qr{^Can't locate RT/Attribute_Local.pm}) { + die $@; + }; + + + + +=head1 SEE ALSO + +This class allows "overlay" methods to be placed +into the following files _Overlay is for a System overlay by the original author, +_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. + +These overlay files can contain new subs or subs to replace existing subs in this module. + +Each of these files should begin with the line + + no warnings qw(redefine); + +so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. + +RT::Attribute_Overlay, RT::Attribute_Vendor, RT::Attribute_Local + +=cut + + +1; diff --git a/rt/lib/RT/Attribute_Overlay.pm b/rt/lib/RT/Attribute_Overlay.pm new file mode 100644 index 000000000..ead842ea2 --- /dev/null +++ b/rt/lib/RT/Attribute_Overlay.pm @@ -0,0 +1,464 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::Attribute; + +use strict; +no warnings qw(redefine); +use Storable qw/nfreeze thaw/; +use MIME::Base64; + + +=head1 NAME + + RT::Attribute_Overlay + +=head1 Content + +=cut + +# the acl map is a map of "name of attribute" and "what right the user must have on the associated object to see/edit it + +our $ACL_MAP = { + SavedSearch => { create => 'EditSavedSearches', + update => 'EditSavedSearches', + delete => 'EditSavedSearches', + display => 'ShowSavedSearches' }, + +}; + +# There are a number of attributes that users should be able to modify for themselves, such as saved searches +# we could do this with a different set of "modify" rights, but that gets very hacky very fast. this is even faster and even +# hackier. we're hardcoding that a different set of rights are needed for attributes on oneself +our $PERSONAL_ACL_MAP = { + SavedSearch => { create => 'ModifySelf', + update => 'ModifySelf', + delete => 'ModifySelf', + display => 'allow' }, + +}; + +=head2 LookupObjectRight { ObjectType => undef, ObjectId => undef, Name => undef, Right => { create, update, delete, display } } + +Returns the right that the user needs to have on this attribute's object to perform the related attribute operation. Returns "allow" if the right is otherwise unspecified. + +=cut + +sub LookupObjectRight { + my $self = shift; + my %args = ( ObjectType => undef, + ObjectId => undef, + Right => undef, + Name => undef, + @_); + + # if it's an attribute on oneself, check the personal acl map + if (($args{'ObjectType'} eq 'RT::User') && ($args{'ObjectId'} eq $self->CurrentUser->Id)) { + return('allow') unless ($PERSONAL_ACL_MAP->{$args{'Name'}}); + return('allow') unless ($PERSONAL_ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); + return($PERSONAL_ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); + + } + # otherwise check the main ACL map + else { + return('allow') unless ($ACL_MAP->{$args{'Name'}}); + return('allow') unless ($ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); + return($ACL_MAP->{$args{'Name'}}->{$args{'Right'}}); + } +} + + + + +=head2 Create PARAMHASH + +Create takes a hash of values and creates a row in the database: + + varchar(200) 'Name'. + varchar(255) 'Content'. + varchar(16) 'ContentType', + varchar(64) 'ObjectType'. + int(11) 'ObjectId'. + +You may pass a C<Object> instead of C<ObjectType> and C<ObjectId>. + +=cut + + + + +sub Create { + my $self = shift; + my %args = ( + Name => '', + Description => '', + Content => '', + ContentType => '', + Object => undef, + @_); + + if ($args{Object} and UNIVERSAL::can($args{Object}, 'Id')) { + $args{ObjectType} = ref($args{Object}); + $args{ObjectId} = $args{Object}->Id; + } else { + return(0, $self->loc("Required parameter '[_1]' not specified", 'Object')); + + } + + # object_right is the right that the user has to have on the object for them to have $right on this attribute + my $object_right = $self->LookupObjectRight( + Right => 'create', + ObjectId => $args{'ObjectId'}, + ObjectType => $args{'ObjectType'}, + Name => $args{'Name'} + ); + if ($object_right eq 'deny') { + return (0, $self->loc('Permission Denied')); + } + elsif ($object_right eq 'allow') { + # do nothing, we're ok + } + elsif (!$self->CurrentUser->HasRight( Object => $args{Object}, Right => $object_right)) { + return (0, $self->loc('Permission Denied')); + } + + + if (ref ($args{'Content'}) ) { + eval {$args{'Content'} = $self->_SerializeContent($args{'Content'}); }; + if ($@) { + return(0, $@); + } + $args{'ContentType'} = 'storable'; + } + + + $self->SUPER::Create( + Name => $args{'Name'}, + Content => $args{'Content'}, + ContentType => $args{'ContentType'}, + Description => $args{'Description'}, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, +); + +} + + +# {{{ sub LoadByNameAndObject + +=head2 LoadByNameAndObject (Object => OBJECT, Name => NAME) + +Loads the Attribute named NAME for Object OBJECT. + +=cut + +sub LoadByNameAndObject { + my $self = shift; + my %args = ( + Object => undef, + Name => undef, + @_, + ); + + return ( + $self->LoadByCols( + Name => $args{'Name'}, + ObjectType => ref($args{'Object'}), + ObjectId => $args{'Object'}->Id, + ) + ); + +} + +# }}} + + +=head2 _DeserializeContent + +DeserializeContent returns this Attribute's "Content" as a hashref. + + +=cut + +sub _DeserializeContent { + my $self = shift; + my $content = shift; + + my $hashref; + eval {$hashref = thaw(decode_base64($content))} ; + if ($@) { + $RT::Logger->error("Deserialization of attribute ".$self->Id. " failed"); + } + + return($hashref); + +} + + +=head2 Content + +Returns this attribute's content. If it's a scalar, returns a scalar +If it's data structure returns a ref to that data structure. + +=cut + +sub Content { + my $self = shift; + # Here we call _Value to get the ACL check. + my $content = $self->_Value('Content'); + if ($self->__Value('ContentType') eq 'storable') { + eval {$content = $self->_DeserializeContent($content); }; + if ($@) { + $RT::Logger->error("Deserialization of content for attribute ".$self->Id. " failed. Attribute was: ".$content); + } + } + + return($content); + +} + +sub _SerializeContent { + my $self = shift; + my $content = shift; + return( encode_base64(nfreeze($content))); +} + + +sub SetContent { + my $self = shift; + my $content = shift; + + # Call __Value to avoid ACL check. + if ($self->__Value('ContentType') eq 'storable') { + # We eval the serialization because it will lose on a coderef. + eval {$content = $self->_SerializeContent($content); }; + if ($@) { + $RT::Logger->error("For some reason, content couldn't be frozen"); + return(0, $@); + } + } + return ($self->SUPER::SetContent($content)); +} + +=head2 SubValue KEY + +Returns the subvalue for $key. + +=begin testing + +my $user = $RT::SystemUser; +my ($id, $msg) = $user->AddAttribute(Name => 'SavedSearch', Content => { Query => 'Foo'} ); +ok ($id, $msg); +my $attr = RT::Attribute->new($RT::SystemUser); +$attr->Load($id); +ok($attr->Name eq 'SavedSearch'); +$attr->SetSubValues( Format => 'baz'); + +my $format = $attr->SubValue('Format'); +is ($format , 'baz'); + +$attr->SetSubValues( Format => 'bar'); +$format = $attr->SubValue('Format'); +is ($format , 'bar'); + +$attr->DeleteAllSubValues(); +$format = $attr->SubValue('Format'); +is ($format, undef); + +$attr->SetSubValues(Format => 'This is a format'); + +my $attr2 = RT::Attribute->new($RT::SystemUser); +$attr2->Load($id); +is ($attr2->SubValue('Format'), 'This is a format'); + + +=end testing + +=cut + +sub SubValue { + my $self = shift; + my $key = shift; + my $values = $self->Content(); + return undef unless ref($values); + return($values->{$key}); +} + +=head2 DeleteSubValue NAME + +Deletes the subvalue with the key NAME + +=cut + +sub DeleteSubValue { + my $self = shift; + my $key = shift; + my %values = $self->Content(); + delete $values{$key}; + $self->SetContent(%values); + + + +} + + +=head2 DeleteAllSubValues + +Deletes all subvalues for this attribute + +=cut + + +sub DeleteAllSubValues { + my $self = shift; + $self->SetContent({}); +} + +=head2 SetSubValues { } + +Takes a hash of keys and values and stores them in the content of this attribute. + +Each key B<replaces> the existing key with the same name + +Returns a tuple of (status, message) + +=cut + + +sub SetSubValues { + my $self = shift; + my %args = (@_); + my $values = ($self->Content() || {} ); + foreach my $key (keys %args) { + $values->{$key} = $args{$key}; + } + + $self->SetContent($values); + +} + + +sub Object { + my $self = shift; + my $object_type = $self->__Value('ObjectType'); + my $object; + eval { $object = $object_type->new($self->CurrentUser) }; + unless(UNIVERSAL::isa($object, $object_type)) { + $RT::Logger->error("Attribute ".$self->Id." has a bogus object type - $object_type (".$@.")"); + return(undef); + } + $object->Load($self->__Value('ObjectId')); + + return($object); + +} + + +sub Delete { + my $self = shift; + unless ($self->CurrentUserHasRight('delete')) { + return (0,$self->loc('Permission Denied')); + } + return($self->SUPER::Delete(@_)); +} + + +sub _Value { + my $self = shift; + unless ($self->CurrentUserHasRight('display')) { + return (0,$self->loc('Permission Denied')); + } + + return($self->SUPER::_Value(@_)); + + +} + + +sub _Set { + my $self = shift; + unless ($self->CurrentUserHasRight('modify')) { + + return (0,$self->loc('Permission Denied')); + } + return($self->SUPER::_Set(@_)); + +} + + +=head2 CurrentUserHasRight + +One of "display" "modify" "delete" or "create" and returns 1 if the user has that right for attributes of this name for this object.Returns undef otherwise. + +=cut + +sub CurrentUserHasRight { + my $self = shift; + my $right = shift; + + # object_right is the right that the user has to have on the object for them to have $right on this attribute + my $object_right = $self->LookupObjectRight( + Right => $right, + ObjectId => $self->__Value('ObjectId'), + ObjectType => $self->__Value('ObjectType'), + Name => $self->__Value('Name') + ); + + return (1) if ($object_right eq 'allow'); + return (0) if ($object_right eq 'deny'); + return(1) if ($self->CurrentUser->HasRight( Object => $self->Object, Right => $object_right)); + return(0); + +} + + +=head1 TODO + +We should be deserializing the content on load and then enver again, rather than at every access + +=cut + + +1; diff --git a/rt/lib/RT/Attributes.pm b/rt/lib/RT/Attributes.pm new file mode 100644 index 000000000..bb63b8146 --- /dev/null +++ b/rt/lib/RT/Attributes.pm @@ -0,0 +1,137 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) +# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. +# +# !! DO NOT EDIT THIS FILE !! +# + +use strict; + + +=head1 NAME + + RT::Attributes -- Class Description + +=head1 SYNOPSIS + + use RT::Attributes + +=head1 DESCRIPTION + + +=head1 METHODS + +=cut + +package RT::Attributes; + +use RT::SearchBuilder; +use RT::Attribute; + +use vars qw( @ISA ); +@ISA= qw(RT::SearchBuilder); + + +sub _Init { + my $self = shift; + $self->{'table'} = 'Attributes'; + $self->{'primary_key'} = 'id'; + + + return ( $self->SUPER::_Init(@_) ); +} + + +=head2 NewItem + +Returns an empty new RT::Attribute item + +=cut + +sub NewItem { + my $self = shift; + return(RT::Attribute->new($self->CurrentUser)); +} + + eval "require RT::Attributes_Overlay"; + if ($@ && $@ !~ qr{^Can't locate RT/Attributes_Overlay.pm}) { + die $@; + }; + + eval "require RT::Attributes_Vendor"; + if ($@ && $@ !~ qr{^Can't locate RT/Attributes_Vendor.pm}) { + die $@; + }; + + eval "require RT::Attributes_Local"; + if ($@ && $@ !~ qr{^Can't locate RT/Attributes_Local.pm}) { + die $@; + }; + + + + +=head1 SEE ALSO + +This class allows "overlay" methods to be placed +into the following files _Overlay is for a System overlay by the original author, +_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. + +These overlay files can contain new subs or subs to replace existing subs in this module. + +Each of these files should begin with the line + + no warnings qw(redefine); + +so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. + +RT::Attributes_Overlay, RT::Attributes_Vendor, RT::Attributes_Local + +=cut + + +1; diff --git a/rt/lib/RT/Attributes_Overlay.pm b/rt/lib/RT/Attributes_Overlay.pm new file mode 100644 index 000000000..0e79df12d --- /dev/null +++ b/rt/lib/RT/Attributes_Overlay.pm @@ -0,0 +1,197 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +=head1 NAME + + RT::Attributes - collection of RT::Attribute objects + +=head1 SYNOPSIS + + use RT:Attributes; +my $Attributes = new RT::Attributes($CurrentUser); + +=head1 DESCRIPTION + + +=head1 METHODS + +=cut + + +package RT::Attributes; + +use strict; +no warnings qw(redefine); + + +sub _DoSearch { + my $self = shift; + $self->SUPER::_DoSearch(); + $self->_BuildAccessTable(); +} + + +sub _BuildAccessTable { + my $self = shift; + delete $self->{'attr'}; + while (my $attr = $self->Next) { + push @{$self->{'attr'}->{$attr->Name}}, $attr; + } +} + + +sub _AttrHash { + my $self = shift; + $self->_DoSearch if ($self->{'must_redo_search'}); + unless ($self->{'attr'}) { + $self->{'attr'}->{'__none'} = RT::Attribute->new($self->CurrentUser); + } + return ($self->{'attr'}); +} + +=head2 Names + +Returns a list of the Names of all attributes for this object. + +=cut + +sub Names { + my $self = shift; + my @keys = keys %{$self->_AttrHash}; + return(@keys); + + +} + +=head2 Named STRING + +Returns an array of all the RT::Attribute objects with the name STRING + +=cut + +sub Named { + my $self = shift; + my $name = shift; + my @attributes; + if ($self->_AttrHash) { + @attributes = @{($self->_AttrHash->{$name}||[])}; + } + return (@attributes); +} + +=head2 WithId ID + +Returns the RT::Attribute objects with the id ID + +XXX TODO XXX THIS NEEDS A BETTER ACL CHECK + +=cut + +sub WithId { + my $self = shift; + my $id = shift; + + my $attr = RT::Attribute->new($self->CurrentUser); + $attr->LoadByCols( id => $id ); + return($attr); +} + +=head2 DeleteEntry { Name => Content => , id => } + +Deletes attributes with + the matching name + and the matching content or id + +If Content and id are both undefined, delete all attributes with +the matching name. + +=cut + + +sub DeleteEntry { + my $self = shift; + my %args = ( Name => undef, + Content => undef, + id => undef, + @_); + my $found = 0; + foreach my $attr ($self->Named($args{'Name'})){ + if ((!defined $args{'id'} and !defined $args{'Content'}) + or (defined $args{'id'} and $attr->id eq $args{'id'}) + or (defined $args{'Content'} and $attr->Content eq $args{'Content'})) { + my ($id, $msg) = $attr->Delete; + return ($id, $msg) unless $id; + $found = 1; + } + } + return (0, "No entry found") unless $found; + $self->_DoSearch(); + return (1, $self->loc('Attribute Deleted')); +} + + +# {{{ LimitToObject + +=head2 LimitToObject $object + +Limit the Attributes to rights for the object $object. It needs to be an RT::Record class. + +=cut + +sub LimitToObject { + my $self = shift; + my $obj = shift; + unless (defined($obj) && ref($obj) && UNIVERSAL::can($obj, 'id') && $obj->id) { + return undef; + } + $self->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => ref($obj), ENTRYAGGREGATOR => 'OR'); + $self->Limit(FIELD => 'ObjectId', OPERATOR=> '=', VALUE => $obj->id, ENTRYAGGREGATOR => 'OR', QUOTEVALUE => 0); + +} + +# }}} + +1; diff --git a/rt/lib/RT/Base.pm b/rt/lib/RT/Base.pm index 3b2dcfd3d..f32922103 100644 --- a/rt/lib/RT/Base.pm +++ b/rt/lib/RT/Base.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,24 +20,50 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::Base; use Carp; +use Scalar::Util; use strict; use vars qw(@EXPORT); @EXPORT=qw(loc CurrentUser); -=head1 FUNCTIONS +=head1 NAME + +RT::Base +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 FUNCTIONS + +=cut # {{{ sub CurrentUser @@ -47,23 +79,37 @@ sub CurrentUser { my $self = shift; if (@_) { + $self->{'original_user'} = $self->{'user'}; $self->{'user'} = shift; + # We need to weaken the CurrentUser ($self->{'user'}) reference + # if the object in question is the currentuser object. + # This avoids memory leaks. + Scalar::Util::weaken($self->{'user'}) if (ref($self->{'user'}) && + $self->{'user'} == $self ); } - unless ( $self->{'user'} ) { - $RT::Logger->err( - "$self was created without a CurrentUser\n" . Carp::cluck() ); + unless ( ref( $self->{'user'}) ) { + $RT::Logger->err( "$self was created without a CurrentUser\n" . Carp::cluck() ); return (0); - die; } return ( $self->{'user'} ); } # }}} +sub OriginalUser { + my $self = shift; + + if (@_) { + $self->{'original_user'} = shift; + Scalar::Util::weaken($self->{'original_user'}) + if (ref($self->{'original_user'}) && $self->{'original_user'} == $self ); + } + return ( $self->{'original_user'} || $self->{'user'} ); +} -=item loc LOC_STRING +=head2 loc LOC_STRING l is a method which takes a loc string to this object's CurrentUser->LanguageHandle for localization. @@ -80,12 +126,26 @@ In english, this would return: sub loc { my $self = shift; - unless ($self->CurrentUser) { + if (my $user = $self->OriginalUser) { + return $user->loc(@_); + } + else { + use Carp; + Carp::confess("No currentuser"); + return ("Critical error:$self has no CurrentUser", $self); + } +} + +sub loc_fuzzy { + my $self = shift; + if (my $user = $self->OriginalUser) { + return $user->loc_fuzzy(@_); + } + else { use Carp; Carp::confess("No currentuser"); return ("Critical error:$self has no CurrentUser", $self); } - return($self->CurrentUser->loc(@_)); } eval "require RT::Base_Vendor"; diff --git a/rt/lib/RT/CachedGroupMember.pm b/rt/lib/RT/CachedGroupMember.pm index fc3e1bf00..bc7f62e97 100644 --- a/rt/lib/RT/CachedGroupMember.pm +++ b/rt/lib/RT/CachedGroupMember.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -98,7 +120,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -107,14 +129,14 @@ Returns the current value of id. =cut -=item GroupId +=head2 GroupId Returns the current value of GroupId. (In the database, GroupId is stored as int(11).) -=item SetGroupId VALUE +=head2 SetGroupId VALUE Set GroupId to VALUE. @@ -125,14 +147,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item MemberId +=head2 MemberId Returns the current value of MemberId. (In the database, MemberId is stored as int(11).) -=item SetMemberId VALUE +=head2 SetMemberId VALUE Set MemberId to VALUE. @@ -143,14 +165,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Via +=head2 Via Returns the current value of Via. (In the database, Via is stored as int(11).) -=item SetVia VALUE +=head2 SetVia VALUE Set Via to VALUE. @@ -161,14 +183,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ImmediateParentId +=head2 ImmediateParentId Returns the current value of ImmediateParentId. (In the database, ImmediateParentId is stored as int(11).) -=item SetImmediateParentId VALUE +=head2 SetImmediateParentId VALUE Set ImmediateParentId to VALUE. @@ -179,14 +201,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Disabled +=head2 Disabled Returns the current value of Disabled. (In the database, Disabled is stored as smallint(6).) -=item SetDisabled VALUE +=head2 SetDisabled VALUE Set Disabled to VALUE. @@ -198,21 +220,21 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, GroupId => - {read => 1, write => 1, type => 'int(11)', default => ''}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, MemberId => - {read => 1, write => 1, type => 'int(11)', default => ''}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Via => - {read => 1, write => 1, type => 'int(11)', default => ''}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, ImmediateParentId => - {read => 1, write => 1, type => 'int(11)', default => ''}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Disabled => - {read => 1, write => 1, type => 'smallint(6)', default => '0'}, + {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, } }; @@ -244,7 +266,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/CachedGroupMember_Overlay.pm b/rt/lib/RT/CachedGroupMember_Overlay.pm index f2dc86f0d..15f6bd73d 100644 --- a/rt/lib/RT/CachedGroupMember_Overlay.pm +++ b/rt/lib/RT/CachedGroupMember_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,35 +20,67 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} +package RT::CachedGroupMember; + use strict; no warnings qw(redefine); -# {{{ Create +=head1 NAME + + RT::CachedGroupMember + +=head1 SYNOPSIS + + use RT::CachedGroupMember; -=item Create PARAMHASH +=head1 DESCRIPTION + +=head1 METHODS + +=cut + +# {{ Create + +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: - 'Group' is the "top level" group we're building the cache for. This is an - RT::Principal object + 'Group' is the "top level" group we're building the cache for. This + is an RT::Principal object - 'Member' is the RT::Principal of the user or group we're adding - to the cache. + 'Member' is the RT::Principal of the user or group we're adding to + the cache. - 'ImmediateParent' is the RT::Principal of the group that this principal - belongs to to get here + 'ImmediateParent' is the RT::Principal of the group that this + principal belongs to to get here int(11) 'Via' is an internal reference to CachedGroupMembers->Id of - the "parent" record of this cached group member. It should be empty if this - member is a "direct" member of this group. (In that case, it will be set to this - cached group member's id after creation) + the "parent" record of this cached group member. It should be empty if + this member is a "direct" member of this group. (In that case, it will + be set to this cached group member's id after creation) This routine should _only_ be called by GroupMember->Create @@ -88,7 +126,7 @@ sub Create { Via => $args{'Via'}, ); unless ($id) { - $RT::Logger->warn( "Couldn't create " + $RT::Logger->warning( "Couldn't create " . $args{'Member'} . " as a cached member of " . $args{'Group'}->Id . " via " @@ -98,7 +136,7 @@ sub Create { if ( $self->__Value('Via') == 0 ) { my ( $vid, $vmsg ) = $self->__Set( Field => 'Via', Value => $id ); unless ($vid) { - $RT::Logger->warn( "Due to a via error, couldn't create " + $RT::Logger->warning( "Due to a via error, couldn't create " . $args{'Member'} . " as a cached member of " . $args{'Group'}->Id . " via " @@ -218,11 +256,14 @@ mysql supported foreign keys with cascading SetDisableds. sub SetDisabled { my $self = shift; my $val = shift; - + + # if it's already disabled, we're good. + return {1} if ($self->__Value('Disabled') == $val); my $err = $self->SUPER::SetDisabled($val); - unless ($err) { - $RT::Logger->error( "Couldn't SetDisabled CachedGroupMember " . $self->Id ); - return (undef); + my ($retval, $msg) = $err->as_array(); + unless ($retval) { + $RT::Logger->error( "Couldn't SetDisabled CachedGroupMember " . $self->Id .": $msg"); + return ($err); } my $member = $self->MemberObj(); @@ -236,7 +277,7 @@ sub SetDisabled { my $kid_err = $kid->SetDisabled($val ); unless ($kid_err) { $RT::Logger->error( "Couldn't SetDisabled CachedGroupMember " . $kid->Id ); - return (undef); + return ($kid_err); } } } diff --git a/rt/lib/RT/CachedGroupMembers.pm b/rt/lib/RT/CachedGroupMembers.pm index b520f7b9c..5ed35e676 100644 --- a/rt/lib/RT/CachedGroupMembers.pm +++ b/rt/lib/RT/CachedGroupMembers.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::CachedGroupMember item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/CachedGroupMembers_Overlay.pm b/rt/lib/RT/CachedGroupMembers_Overlay.pm index fd0fd9055..e83dab4d1 100644 --- a/rt/lib/RT/CachedGroupMembers_Overlay.pm +++ b/rt/lib/RT/CachedGroupMembers_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::CachedGroupMembers - a collection of RT::GroupMember objects @@ -43,6 +66,9 @@ ok (require RT::CachedGroupMembers); =cut + +package RT::CachedGroupMembers; + use strict; no warnings qw(redefine); @@ -51,7 +77,7 @@ no warnings qw(redefine); =head2 LimitToUsers Limits this search object to users who are members of this group -This is really useful when you want to haave your UI seperate out +This is really useful when you want to have your UI separate out groups from users for display purposes =cut @@ -78,7 +104,7 @@ sub LimitToUsers { =head2 LimitToGroups Limits this search object to Groups who are members of this group -This is really useful when you want to haave your UI seperate out +This is really useful when you want to have your UI separate out groups from users for display purposes =cut @@ -136,8 +162,10 @@ sub LimitToGroupsWithMember { my $self = shift; my $member = shift; + + return ($self->Limit( - VALUE => $member, + VALUE => $member || '0', FIELD => 'MemberId', ENTRYAGGREGATOR => 'OR', QUOTEVALUE => 0 diff --git a/rt/lib/RT/Condition/AnyTransaction.pm b/rt/lib/RT/Condition/AnyTransaction.pm index 4519fcf5a..6685e2779 100644 --- a/rt/lib/RT/Condition/AnyTransaction.pm +++ b/rt/lib/RT/Condition/AnyTransaction.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::Condition::AnyTransaction; diff --git a/rt/lib/RT/Condition/BeforeDue.pm b/rt/lib/RT/Condition/BeforeDue.pm index 7911fd80a..d5e371e9e 100644 --- a/rt/lib/RT/Condition/BeforeDue.pm +++ b/rt/lib/RT/Condition/BeforeDue.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::Condition::BeforeDue; require RT::Condition::Generic; diff --git a/rt/lib/RT/Condition/Generic.pm b/rt/lib/RT/Condition/Generic.pm index bd269315e..cdde9ee5b 100755 --- a/rt/lib/RT/Condition/Generic.pm +++ b/rt/lib/RT/Condition/Generic.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Condition::Generic - ; @@ -57,10 +80,8 @@ ok (require RT::Condition::Generic); package RT::Condition::Generic; -use RT::Base; use strict; -use vars qw/@ISA/; -@ISA = qw(RT::Base); +use base qw/RT::Base/; # {{{ sub new sub new { @@ -82,6 +103,7 @@ sub _Init { TemplateObj => undef, Argument => undef, ApplicableTransTypes => undef, + CurrentUser => undef, @_ ); $self->{'Argument'} = $args{'Argument'}; @@ -89,6 +111,7 @@ sub _Init { $self->{'TicketObj'} = $args{'TicketObj'}; $self->{'TransactionObj'} = $args{'TransactionObj'}; $self->{'ApplicableTransTypes'} = $args{'ApplicableTransTypes'}; + $self->CurrentUser($args{'CurrentUser'}); } # }}} diff --git a/rt/lib/RT/Condition/Overdue.pm b/rt/lib/RT/Condition/Overdue.pm index 3a4efe77f..877db40dc 100644 --- a/rt/lib/RT/Condition/Overdue.pm +++ b/rt/lib/RT/Condition/Overdue.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} diff --git a/rt/lib/RT/Condition/OwnerChange.pm b/rt/lib/RT/Condition/OwnerChange.pm index e17f589e4..5fbc6b2fb 100644 --- a/rt/lib/RT/Condition/OwnerChange.pm +++ b/rt/lib/RT/Condition/OwnerChange.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} @@ -50,9 +72,7 @@ my ($val, $msg) =$s1->Create( Queue => $q->Id, CustomIsApplicableCode => '', CustomPrepareCode => 'return 1', CustomCommitCode => ' - $RT::Logger->crit("Before, prio is ".$self->TicketObj->Priority); $self->TicketObj->SetPriority($self->TicketObj->Priority+1); - $RT::Logger->crit("After, prio is ".$self->TicketObj->Priority); return(1); ', Template => 'Blank' diff --git a/rt/lib/RT/Condition/PriorityChange.pm b/rt/lib/RT/Condition/PriorityChange.pm new file mode 100644 index 000000000..101c3887a --- /dev/null +++ b/rt/lib/RT/Condition/PriorityChange.pm @@ -0,0 +1,80 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + + + +package RT::Condition::PriorityChange; +require RT::Condition::Generic; + +use strict; +use vars qw/@ISA/; +@ISA = qw(RT::Condition::Generic); + + +=head2 IsApplicable + +If the argument passed in is equivalent to the new value of +the Priority Obj + +=cut + +sub IsApplicable { + my $self = shift; + if ($self->TransactionObj->Field eq 'Priority') { + return(1); + } + else { + return(undef); + } +} + +eval "require RT::Condition::PriorityChange_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityChange_Vendor.pm}); +eval "require RT::Condition::PriorityChange_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Condition/PriorityChange_Local.pm}); + +1; + diff --git a/rt/lib/RT/Condition/PriorityExceeds.pm b/rt/lib/RT/Condition/PriorityExceeds.pm index 7737ca5a9..b811c7243 100644 --- a/rt/lib/RT/Condition/PriorityExceeds.pm +++ b/rt/lib/RT/Condition/PriorityExceeds.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} diff --git a/rt/lib/RT/Condition/QueueChange.pm b/rt/lib/RT/Condition/QueueChange.pm index f3e646a00..7a3ede985 100644 --- a/rt/lib/RT/Condition/QueueChange.pm +++ b/rt/lib/RT/Condition/QueueChange.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} diff --git a/rt/lib/RT/Condition/StatusChange.pm b/rt/lib/RT/Condition/StatusChange.pm index 8afabcda0..902bf2aab 100644 --- a/rt/lib/RT/Condition/StatusChange.pm +++ b/rt/lib/RT/Condition/StatusChange.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} diff --git a/rt/lib/RT/Condition/UserDefined.pm b/rt/lib/RT/Condition/UserDefined.pm index eb829f0d1..f6d077d07 100644 --- a/rt/lib/RT/Condition/UserDefined.pm +++ b/rt/lib/RT/Condition/UserDefined.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::Condition::UserDefined; diff --git a/rt/lib/RT/CurrentUser.pm b/rt/lib/RT/CurrentUser.pm index 4ca2f9891..8e28801c1 100755 --- a/rt/lib/RT/CurrentUser.pm +++ b/rt/lib/RT/CurrentUser.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::CurrentUser - an RT object representing the current user @@ -51,8 +74,7 @@ use RT::Record; use RT::I18N; use strict; -use vars qw/@ISA/; -@ISA= qw(RT::Record); +use base qw/RT::Record/; # {{{ sub _Init @@ -60,17 +82,30 @@ use vars qw/@ISA/; # to be a CurrentUser object. but that's hard to do when we're trying to load # the CurrentUser object -sub _Init { - my $self = shift; - my $Name = shift; +sub _Init { + my $self = shift; + my $User = shift; - $self->{'table'} = "Users"; + $self->{'table'} = "Users"; - if (defined($Name)) { - $self->Load($Name); - } - - $self->CurrentUser($self); + if ( defined($User) ) { + + if ( UNIVERSAL::isa( $User, 'RT::User' ) + || UNIVERSAL::isa( $User, 'RT::CurrentUser' ) ) + { + $self->Load( $User->id ); + + } + elsif ( ref($User) ) { + $RT::Logger->crit( + "RT::CurrentUser->new() called with a bogus argument: $User"); + } + else { + $self->Load($User); + } + } + + $self->_BuildTableAttributes(); } # }}} @@ -104,15 +139,13 @@ sub Delete { sub UserObj { my $self = shift; - unless ($self->{'UserObj'}) { use RT::User; - $self->{'UserObj'} = RT::User->new($self); - unless ($self->{'UserObj'}->Load($self->Id)) { + my $user = RT::User->new($self); + + unless ($user->Load($self->Id)) { $RT::Logger->err($self->loc("Couldn't load [_1] from the users database.\n", $self->Id)); } - - } - return ($self->{'UserObj'}); + return ($user); } # }}} @@ -153,18 +186,18 @@ sub PrincipalId { # {{{ sub _Accessible -sub _Accessible { - my $self = shift; - my %Cols = ( - Name => 'read', - Gecos => 'read', - RealName => 'read', - Password => 'neither', - EmailAddress => 'read', - Privileged => 'read', - IsAdministrator => 'read' - ); - return($self->SUPER::_Accessible(@_, %Cols)); + + + sub _CoreAccessible { + { + Name => { 'read' => 1 }, + Gecos => { 'read' => 1 }, + RealName => { 'read' => 1 }, + Lang => { 'read' => 1 }, + Password => { 'read' => 0, 'write' => 0 }, + EmailAddress => { 'read' => 1, 'write' => 0 } + }; + } # }}} @@ -212,6 +245,7 @@ sub LoadByGecos { Loads a User into this CurrentUser object. Takes a Name. + =cut sub LoadByName { @@ -241,6 +275,11 @@ sub Load { if ($identifier !~ /\D/) { $self->SUPER::LoadById($identifier); } + + elsif (UNIVERSAL::isa($identifier,"RT::User")) { + # DWIM if they pass a user in + $self->SUPER::LoadById($identifier->Id); + } else { # This is a bit dangerous, we might get false authen if somebody # uses ambigous userids or real names: @@ -313,12 +352,12 @@ specification. but currently doesn't =begin testing ok (my $cu = RT::CurrentUser->new('root')); -ok (my $lh = $cu->LanguageHandle); +ok (my $lh = $cu->LanguageHandle('en-us')); ok ($lh != undef); ok ($lh->isa('Locale::Maketext')); -ok ($cu->loc('TEST_STRING') eq "Concrete Mixer", "Localized TEST_STRING into English"); +is ($cu->loc('TEST_STRING'), "Concrete Mixer", "Localized TEST_STRING into English"); ok ($lh = $cu->LanguageHandle('fr')); -ok ($cu->loc('Before') eq "Avant", "Localized TEST_STRING into Frenc"); +is ($cu->loc('Before'), "Avant", "Localized TEST_STRING into Frenc"); =end testing @@ -326,16 +365,24 @@ ok ($cu->loc('Before') eq "Avant", "Localized TEST_STRING into Frenc"); sub LanguageHandle { my $self = shift; - if ((!defined $self->{'LangHandle'}) || - (!UNIVERSAL::can($self->{'LangHandle'}, 'maketext')) || - (@_)) { + if ( ( !defined $self->{'LangHandle'} ) + || ( !UNIVERSAL::can( $self->{'LangHandle'}, 'maketext' ) ) + || (@_) ) { + if ( !$RT::SystemUser or ($self->id || 0) == $RT::SystemUser->id() ) { + @_ = qw(en-US); + } + + elsif ( $self->Lang ) { + push @_, $self->Lang; + } $self->{'LangHandle'} = RT::I18N->get_handle(@_); } + # Fall back to english. - unless ($self->{'LangHandle'}) { + unless ( $self->{'LangHandle'} ) { die "We couldn't get a dictionary. Nye mogu naidti slovar. No puedo encontrar dictionario."; } - return ($self->{'LangHandle'}); + return ( $self->{'LangHandle'} ); } sub loc { @@ -355,7 +402,7 @@ sub loc { sub loc_fuzzy { my $self = shift; - return '' if $_[0] eq ''; + return '' if (!$_[0] || $_[0] eq ''); # XXX: work around perl's deficiency when matching utf8 data return $_[0] if Encode::is_utf8($_[0]); @@ -365,6 +412,62 @@ sub loc_fuzzy { } # }}} + +=head2 CurrentUser + +Return the current currentuser object + +=cut + +sub CurrentUser { + my $self = shift; + return($self); + +} + +=head2 Authenticate + +Takes $password, $created and $nonce, and returns a boolean value +representing whether the authentication succeeded. + +If both $nonce and $created are specified, validate $password against: + + encode_base64(sha1( + $nonce . + $created . + sha1_hex( "$username:$realm:$server_pass" ) + )) + +where $server_pass is the md5_hex(password) digest stored in the +database, $created is in ISO time format, and $nonce is a random +string no longer than 32 bytes. + +=cut + +sub Authenticate { + my ($self, $password, $created, $nonce, $realm) = @_; + + require Digest::MD5; + require Digest::SHA1; + require MIME::Base64; + + my $username = $self->UserObj->Name or return; + my $server_pass = $self->UserObj->__Value('Password') or return; + my $auth_digest = MIME::Base64::encode_base64(Digest::SHA1::sha1( + $nonce . + $created . + Digest::MD5::md5_hex("$username:$realm:$server_pass") + )); + + chomp($password); + chomp($auth_digest); + + return ($password eq $auth_digest); +} + +# }}} + + eval "require RT::CurrentUser_Vendor"; die $@ if ($@ && $@ !~ qr{^Can't locate RT/CurrentUser_Vendor.pm}); eval "require RT::CurrentUser_Local"; diff --git a/rt/lib/RT/CustomField.pm b/rt/lib/RT/CustomField.pm index cd40a3a92..212e594cc 100644 --- a/rt/lib/RT/CustomField.pm +++ b/rt/lib/RT/CustomField.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -45,7 +67,6 @@ RT::CustomField package RT::CustomField; use RT::Record; -use RT::Queue; use vars qw( @ISA ); @@ -62,17 +83,23 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: varchar(200) 'Name'. varchar(200) 'Type'. - int(11) 'Queue'. + int(11) 'MaxValues'. + varchar(255) 'Pattern'. + smallint(6) 'Repeated'. varchar(255) 'Description'. int(11) 'SortOrder'. + varchar(255) 'LookupType'. smallint(6) 'Disabled'. + 'LookupType' is generally the result of either + RT::Ticket->CustomFieldLookupType or RT::Transaction->CustomFieldLookupType + =cut @@ -83,18 +110,24 @@ sub Create { my %args = ( Name => '', Type => '', - Queue => '0', + MaxValues => '', + Pattern => '', + Repeated => '0', Description => '', SortOrder => '0', + LookupType => '', Disabled => '0', @_); $self->SUPER::Create( Name => $args{'Name'}, Type => $args{'Type'}, - Queue => $args{'Queue'}, + MaxValues => $args{'MaxValues'}, + Pattern => $args{'Pattern'}, + Repeated => $args{'Repeated'}, Description => $args{'Description'}, SortOrder => $args{'SortOrder'}, + LookupType => $args{'LookupType'}, Disabled => $args{'Disabled'}, ); @@ -102,7 +135,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -111,14 +144,14 @@ Returns the current value of id. =cut -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -129,14 +162,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Type +=head2 Type Returns the current value of Type. (In the database, Type is stored as varchar(200).) -=item SetType VALUE +=head2 SetType VALUE Set Type to VALUE. @@ -147,46 +180,68 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Queue +=head2 MaxValues -Returns the current value of Queue. -(In the database, Queue is stored as int(11).) +Returns the current value of MaxValues. +(In the database, MaxValues is stored as int(11).) -=item SetQueue VALUE +=head2 SetMaxValues VALUE -Set Queue to VALUE. +Set MaxValues to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Queue will be stored as a int(11).) +(In the database, MaxValues will be stored as a int(11).) =cut -=item QueueObj +=head2 Pattern + +Returns the current value of Pattern. +(In the database, Pattern is stored as varchar(255).) + -Returns the Queue Object which has the id returned by Queue + +=head2 SetPattern VALUE + + +Set Pattern to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, Pattern will be stored as a varchar(255).) =cut -sub QueueObj { - my $self = shift; - my $Queue = RT::Queue->new($self->CurrentUser); - $Queue->Load($self->__Value('Queue')); - return($Queue); -} -=item Description +=head2 Repeated + +Returns the current value of Repeated. +(In the database, Repeated is stored as smallint(6).) + + + +=head2 SetRepeated VALUE + + +Set Repeated to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, Repeated will be stored as a smallint(6).) + + +=cut + + +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -197,14 +252,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item SortOrder +=head2 SortOrder Returns the current value of SortOrder. (In the database, SortOrder is stored as int(11).) -=item SetSortOrder VALUE +=head2 SetSortOrder VALUE Set SortOrder to VALUE. @@ -215,7 +270,25 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Creator +=head2 LookupType + +Returns the current value of LookupType. +(In the database, LookupType is stored as varchar(255).) + + + +=head2 SetLookupType VALUE + + +Set LookupType to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, LookupType will be stored as a varchar(255).) + + +=cut + + +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -224,7 +297,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -233,7 +306,7 @@ Returns the current value of Created. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -242,7 +315,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -251,14 +324,14 @@ Returns the current value of LastUpdated. =cut -=item Disabled +=head2 Disabled Returns the current value of Disabled. (In the database, Disabled is stored as smallint(6).) -=item SetDisabled VALUE +=head2 SetDisabled VALUE Set Disabled to VALUE. @@ -270,31 +343,37 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Type => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, - Queue => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, + MaxValues => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, + Pattern => + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, + Repeated => + {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, SortOrder => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + LookupType => + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Disabled => - {read => 1, write => 1, type => 'smallint(6)', default => '0'}, + {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, } }; @@ -326,7 +405,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/CustomFieldValue.pm b/rt/lib/RT/CustomFieldValue.pm index f434b44fb..105ac40c7 100644 --- a/rt/lib/RT/CustomFieldValue.pm +++ b/rt/lib/RT/CustomFieldValue.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -62,7 +84,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -96,7 +118,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -105,14 +127,14 @@ Returns the current value of id. =cut -=item CustomField +=head2 CustomField Returns the current value of CustomField. (In the database, CustomField is stored as int(11).) -=item SetCustomField VALUE +=head2 SetCustomField VALUE Set CustomField to VALUE. @@ -123,7 +145,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item CustomFieldObj +=head2 CustomFieldObj Returns the CustomField Object which has the id returned by CustomField @@ -137,14 +159,14 @@ sub CustomFieldObj { return($CustomField); } -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -155,14 +177,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Description +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -173,14 +195,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item SortOrder +=head2 SortOrder Returns the current value of SortOrder. (In the database, SortOrder is stored as int(11).) -=item SetSortOrder VALUE +=head2 SetSortOrder VALUE Set SortOrder to VALUE. @@ -191,7 +213,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -200,7 +222,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -209,7 +231,7 @@ Returns the current value of Created. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -218,7 +240,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -228,27 +250,27 @@ Returns the current value of LastUpdated. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, CustomField => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, SortOrder => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -280,7 +302,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/CustomFieldValue_Overlay.pm b/rt/lib/RT/CustomFieldValue_Overlay.pm new file mode 100644 index 000000000..322e58b1f --- /dev/null +++ b/rt/lib/RT/CustomFieldValue_Overlay.pm @@ -0,0 +1,19 @@ +use warnings; +use strict; + +package RT::CustomFieldValue; + +no warnings qw/redefine/; + + +=head2 ValidateName + +Override the default ValidateName method that stops custom field values +from being integers. + +=cut + + +sub ValidateName { 1 }; + +1; diff --git a/rt/lib/RT/CustomFieldValues.pm b/rt/lib/RT/CustomFieldValues.pm index 0e792b1a2..9a55af8bd 100644 --- a/rt/lib/RT/CustomFieldValues.pm +++ b/rt/lib/RT/CustomFieldValues.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,16 +83,21 @@ sub _Init { - # By default, order by name - $self->OrderBy( ALIAS => 'main', - FIELD => 'SortOrder', - ORDER => 'ASC'); + # By default, order by SortOrder + $self->OrderByCols( + { ALIAS => 'main', + FIELD => 'SortOrder', + ORDER => 'ASC' }, + { ALIAS => 'main', + FIELD => 'id', + ORDER => 'ASC' }, + ); return ( $self->SUPER::_Init(@_) ); } -=item NewItem +=head2 NewItem Returns an empty new RT::CustomFieldValue item @@ -107,7 +134,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/CustomFieldValues_Overlay.pm b/rt/lib/RT/CustomFieldValues_Overlay.pm index 0384db96c..3a9f5d530 100644 --- a/rt/lib/RT/CustomFieldValues_Overlay.pm +++ b/rt/lib/RT/CustomFieldValues_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,31 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::CustomFieldValues; + use strict; no warnings qw(redefine); diff --git a/rt/lib/RT/CustomField_Overlay.pm b/rt/lib/RT/CustomField_Overlay.pm index 89ef88987..9e0ce2460 100644 --- a/rt/lib/RT/CustomField_Overlay.pm +++ b/rt/lib/RT/CustomField_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,34 +20,100 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} +package RT::CustomField; + use strict; no warnings qw(redefine); -use vars qw(@TYPES %TYPES); +use vars qw(%FieldTypes $RIGHTS %FRIENDLY_OBJECT_TYPES); use RT::CustomFieldValues; -use RT::TicketCustomFieldValues; - -# Enumerate all valid types for this custom field -@TYPES = ( - 'SelectSingle', # loc - 'SelectMultiple', # loc - 'FreeformSingle', # loc - 'FreeformMultiple', # loc +use RT::ObjectCustomFieldValues; + + +%FieldTypes = ( + Select => [ + 'Select multiple values', # loc + 'Select one value', # loc + 'Select up to [_1] values', # loc + ], + Freeform => [ + 'Enter multiple values', # loc + 'Enter one value', # loc + 'Enter up to [_1] values', # loc + ], + Text => [ + 'Fill in multiple text areas', # loc + 'Fill in one text area', # loc + 'Fill in up to [_1] text areas',# loc + ], + Wikitext => [ + 'Fill in multiple wikitext areas', # loc + 'Fill in one wikitext area', # loc + 'Fill in up to [_1] wikitext areas',# loc + ], + Image => [ + 'Upload multiple images', # loc + 'Upload one image', # loc + 'Upload up to [_1] images', # loc + ], + Binary => [ + 'Upload multiple files', # loc + 'Upload one file', # loc + 'Upload up to [_1] files', # loc + ], ); -# Populate a hash of types of easier validation -for (@TYPES) { $TYPES{$_} = 1}; +%FRIENDLY_OBJECT_TYPES = (); + +RT::CustomField->_ForObjectType( 'RT::Queue-RT::Ticket' => "Tickets", ); #loc +RT::CustomField->_ForObjectType( + 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", ); #loc +RT::CustomField->_ForObjectType( 'RT::User' => "Users", ); #loc +RT::CustomField->_ForObjectType( 'RT::Group' => "Groups", ); #loc + +$RIGHTS = { + SeeCustomField => 'See custom fields', # loc_pair + AdminCustomField => 'Create, delete and modify custom fields', # loc_pair + ModifyCustomField => 'Add, delete and modify custom field values for objects' #loc_pair +}; +# Tell RT::ACE that this sort of object can get acls granted +$RT::ACE::OBJECT_TYPES{'RT::CustomField'} = 1; + +foreach my $right ( keys %{$RIGHTS} ) { + $RT::ACE::LOWERCASERIGHTNAMES{ lc $right } = $right; +} + +sub AvailableRights { + my $self = shift; + return($RIGHTS); +} =head1 NAME @@ -61,11 +133,17 @@ Create takes a hash of values and creates a row in the database: varchar(200) 'Name'. varchar(200) 'Type'. - int(11) 'Queue'. + int(11) 'MaxValues'. + varchar(255) 'Pattern'. + smallint(6) 'Repeated'. varchar(255) 'Description'. int(11) 'SortOrder'. + varchar(255) 'LookupType'. smallint(6) 'Disabled'. + 'LookupType' is generally the result of either + RT::Ticket->CustomFieldLookupType or RT::Transaction->CustomFieldLookupType + =cut @@ -76,19 +154,36 @@ sub Create { my %args = ( Name => '', Type => '', - Queue => '0', + MaxValues => '0', + Pattern => '', Description => '', - SortOrder => '0', Disabled => '0', + LookupType => '', + Repeated => '0', @_); - + unless ($self->CurrentUser->HasRight(Object => $RT::System, Right => 'AdminCustomField')) { + return (0, $self->loc('Permission Denied')); + } - if ( ! $args{'Queue'} ) { - unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'AdminCustomFields') ) { + + if ($args{TypeComposite}) { + @args{'Type', 'MaxValues'} = split(/-/, $args{TypeComposite}, 2); + } + elsif ($args{Type} =~ s/(?:(Single)|Multiple)$//) { + # old style Type string + $args{'MaxValues'} = $1 ? 1 : 0; + } + + if ( !exists $args{'Queue'}) { + # do nothing -- things below are strictly backward compat + } + elsif ( ! $args{'Queue'} ) { + unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'AssignCustomFields') ) { return ( 0, $self->loc('Permission Denied') ); } + $args{'LookupType'} = 'RT::Queue-RT::Ticket'; } else { my $queue = RT::Queue->new($self->CurrentUser); @@ -96,35 +191,75 @@ sub Create { unless ($queue->Id) { return (0, $self->loc("Queue not found")); } - unless ( $queue->CurrentUserHasRight('AdminCustomFields') ) { + unless ( $queue->CurrentUserHasRight('AssignCustomFields') ) { return ( 0, $self->loc('Permission Denied') ); } + $args{'LookupType'} = 'RT::Queue-RT::Ticket'; } - $self->SUPER::Create( + my $rv = $self->SUPER::Create( Name => $args{'Name'}, Type => $args{'Type'}, - Queue => $args{'Queue'}, + MaxValues => $args{'MaxValues'}, + Pattern => $args{'Pattern'}, Description => $args{'Description'}, - SortOrder => $args{'SortOrder'}, Disabled => $args{'Disabled'}, + LookupType => $args{'LookupType'}, + Repeated => $args{'Repeated'}, ); + return $rv unless exists $args{'Queue'}; + + # Compat code -- create a new ObjectCustomField mapping + my $OCF = RT::ObjectCustomField->new($self->CurrentUser); + $OCF->Create( + CustomField => $self->Id, + ObjectId => $args{'Queue'}, + ); + + return $rv; +} + +=head2 Load ID/NAME + +Load a custom field. If the value handed in is an integer, load by custom field ID. Otherwise, Load by name. + +=cut + + +sub Load { + my $self = shift; + my $id = shift; + + if ($id =~ /^\d+$/) { + return ($self->SUPER::Load($id)); + } else { + return($self->LoadByName(Name => $id)); + } } -# {{{ sub LoadByNameAndQueue +# {{{ sub LoadByName -=head2 LoadByNameAndQueue (Queue => QUEUEID, Name => NAME) +=head2 LoadByName (Queue => QUEUEID, Name => NAME) -Loads the Custom field named NAME for Queue QUEUE. If QUEUE is 0, -loads a global custom field +Loads the Custom field named NAME. + +If a Queue parameter is specified, only look for ticket custom fields tied to that Queue. + +If the Queue parameter is '0', look for global ticket custom fields. + +If no queue parameter is specified, look for any and all custom fields with this name. + +BUG/TODO, this won't let you specify that you only want user or group CFs. =cut # Compatibility for API change after 3.0 beta 1 -*LoadNameAndQueue = \&LoadByNameAndQueue; +*LoadNameAndQueue = \&LoadByName; +# Change after 3.4 beta. +*LoadByNameAndQueue = \&LoadByName; -sub LoadByNameAndQueue { +sub LoadByName { my $self = shift; my %args = ( Queue => undef, @@ -132,7 +267,33 @@ sub LoadByNameAndQueue { @_, ); - return ( $self->LoadByCols( Name => $args{'Name'}, Queue => $args{'Queue'} ) ); + # if we're looking for a queue by name, make it a number + if (defined $args{'Queue'} && $args{'Queue'} !~ /^\d+$/) { + my $QueueObj = RT::Queue->new($self->CurrentUser); + $QueueObj->Load($args{'Queue'}); + $args{'Queue'} = $QueueObj->Id; + } + + # XXX - really naive implementation. Slow. - not really. still just one query + + my $CFs = RT::CustomFields->new($self->CurrentUser); + + $CFs->Limit( FIELD => 'Name', VALUE => $args{'Name'} ); + # Don't limit to queue if queue is 0. Trying to do so breaks + # RT::Group type CFs. + if (defined $args{'Queue'}) { + $CFs->LimitToQueue( $args{'Queue'} ); + } + + # When loading by name, it's ok if they're disabled. That's not a big deal. + $CFs->{'find_disabled_rows'}=1; + + # We only want one entry. + $CFs->RowsPerPage(1); + unless ($CFs->First) { + return(0); + } + return($self->Load($CFs->First->id)); } @@ -141,6 +302,7 @@ sub LoadByNameAndQueue { # {{{ Dealing with custom field values =begin testing + use_ok(RT::CustomField); ok(my $cf = RT::CustomField->new($RT::SystemUser)); ok(my ($id, $msg)= $cf->Create( Name => 'TestingCF', @@ -150,10 +312,13 @@ ok(my ($id, $msg)= $cf->Create( Name => 'TestingCF', Type=> 'SelectSingle'), 'Created a global CustomField'); ok($id != 0, 'Global custom field correctly created'); ok ($cf->SingleValue); -ok($cf->Type eq 'SelectSingle'); +is($cf->Type, 'Select'); +is($cf->MaxValues, 1); -ok($cf->SetType('SelectMultiple')); -ok($cf->Type eq 'SelectMultiple'); +my ($val, $msg) = $cf->SetMaxValues('0'); +ok($val, $msg); +is($cf->Type, 'Select'); +is($cf->MaxValues, 0); ok(!$cf->SingleValue ); ok(my ($bogus_val, $bogus_msg) = $cf->SetType('BogusType') , "Trying to set a custom field's type to a bogus type"); ok($bogus_val == 0, "Unable to set a custom field's type to a bogus type"); @@ -184,7 +349,7 @@ ok($cf->Id == 1); ok(my ($val,$msg) = $cf->AddValue(Name => 'foo' , Description => 'TestCFValue', SortOrder => '6')); ok($val != 0); ok (my ($delval, $delmsg) = $cf->DeleteValue($val)); -ok ($delval != 0); +ok ($delval,"Deleting a cf value: $delmsg"); =end testing @@ -197,7 +362,7 @@ sub AddValue { SortOrder => undef, @_ ); - unless ($self->CurrentUserHasRight('AdminCustomFields')) { + unless ($self->CurrentUserHasRight('AdminCustomField')) { return (0, $self->loc('Permission Denied')); } @@ -229,7 +394,7 @@ Does not remove this value for any article which has had it selected sub DeleteValue { my $self = shift; my $id = shift; - unless ($self->CurrentUserHasRight('AdminCustomFields')) { + unless ($self->CurrentUserHasRight('AdminCustomField')) { return (0, $self->loc('Permission Denied')); } @@ -261,11 +426,14 @@ Return a CustomFieldeValues object of all acceptable values for this Custom Fiel =cut +*ValuesObj = \&Values; + sub Values { my $self = shift; my $cf_values = RT::CustomFieldValues->new($self->CurrentUser); - if ( $self->__Value('Queue') == 0 || $self->CurrentUserHasRight( 'SeeQueue') ) { + # if the user has no rights, return an empty object + if ($self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) { $cf_values->LimitToCustomField($self->Id); } return ($cf_values); @@ -281,21 +449,23 @@ sub Values { =head2 ValuesForTicket TICKET -Returns a RT::TicketCustomFieldValues object of this Field's values for TICKET. +Returns a RT::ObjectCustomFieldValues object of this Field's values for TICKET. TICKET is a ticket id. +This is deprecated -- use ValuesForObject instead. + =cut sub ValuesForTicket { my $self = shift; my $ticket_id = shift; + + $RT::Logger->debug( ref($self) . " -> ValuesForTicket deprecated in favor of ValuesForObject"); + my $ticket = RT::Ticket->new($self->CurrentUser); + $ticket->Load($ticket_id); - my $values = new RT::TicketCustomFieldValues($self->CurrentUser); - $values->LimitToCustomField($self->Id); - $values->LimitToTicket($ticket_id); - - return ($values); + return $self->ValuesForObject($ticket); } # }}} @@ -306,6 +476,8 @@ sub ValuesForTicket { Adds a custom field value for a ticket. Takes a param hash of Ticket and Content +This is deprecated -- use AddValueForObject instead. + =cut sub AddValueForTicket { @@ -313,13 +485,12 @@ sub AddValueForTicket { my %args = ( Ticket => undef, Content => undef, @_ ); + $RT::Logger->debug( ref($self) . " -> AddValueForTicket deprecated in favor of AddValueForObject"); - my $newval = RT::TicketCustomFieldValue->new($self->CurrentUser); - my $val = $newval->Create(Ticket => $args{'Ticket'}, - Content => $args{'Content'}, - CustomField => $self->Id); - return($val); + my $ticket = RT::Ticket->new($self->CurrentUser); + $ticket->Load($args{'Ticket'}); + return($self->AddValueForObject(Content => $args{'Content'}, Object => $ticket,@_)); } @@ -332,6 +503,8 @@ sub AddValueForTicket { Adds a custom field value for a ticket. Takes a param hash of Ticket and Content +This is deprecated -- use DeleteValueForObject instead. + =cut sub DeleteValueForTicket { @@ -340,23 +513,14 @@ sub DeleteValueForTicket { Content => undef, @_ ); - my $oldval = RT::TicketCustomFieldValue->new($self->CurrentUser); - $oldval->LoadByTicketContentAndCustomField (Ticket => $args{'Ticket'}, - Content => $args{'Content'}, - CustomField => $self->Id ); - # check ot make sure we found it - unless ($oldval->Id) { - return(0, $self->loc("Custom field value [_1] could not be found for custom field [_2]", $args{'Content'}, $self->Name)); - } - # delete it + $RT::Logger->debug( ref($self) . " -> DeleteValueForTicket deprecated in favor of DeleteValueForObject"); - my $ret = $oldval->Delete(); - unless ($ret) { - return(0, $self->loc("Custom field value could not be found")); - } - return(1, $self->loc("Custom field value deleted")); -} + my $ticket = RT::Ticket->new($self->CurrentUser); + $ticket->load($args{'Ticket'}); + return ($self->DeleteValueForObject(Object => $ticket, Content => $args{'Content'}, @_)); + +} # }}} # }}} @@ -396,13 +560,13 @@ Retuns an array of the types of CustomField that are supported =cut sub Types { - return (@TYPES); + return (keys %FieldTypes); } # }}} -=head2 FriendlyType [TYPE] +=head2 FriendlyType [TYPE, MAX_VALUES] Returns a localized human-readable version of the custom field type. If a custom field type is specified as the parameter, the friendly type for that type will be returned @@ -412,25 +576,23 @@ If a custom field type is specified as the parameter, the friendly type for that sub FriendlyType { my $self = shift; - my $type = shift || $self->Type; + my $type = @_ ? shift : $self->Type; + my $max = @_ ? shift : $self->MaxValues; - if ( $type eq 'SelectSingle' ) { - return ( $self->loc('Select one value') ); - } - elsif ( $type eq 'SelectMultiple' ) { - return ( $self->loc('Select multiple values') ); - } - elsif ( $type eq 'FreeformSingle' ) { - return ( $self->loc('Enter one value') ); - } - elsif ( $type eq 'FreeformMultiple' ) { - return ( $self->loc('Enter multiple values') ); + if (my $friendly_type = $FieldTypes{$type}[$max>2 ? 2 : $max]) { + return ( $self->loc( $friendly_type, $max ) ); } else { - return ( $self->loc( $self->Type ) ); + return ( $self->loc( $type ) ); } } +sub FriendlyTypeComposite { + my $self = shift; + my $composite = shift || $self->TypeComposite; + return $self->FriendlyType(split(/-/, $composite, 2)); +} + =head2 ValidateType TYPE @@ -452,7 +614,11 @@ sub ValidateType { my $self = shift; my $type = shift; - if( $TYPES{$type}) { + if ($type =~ s/(?:Single|Multiple)$//) { + $RT::Logger->warning( "Prefix 'Single' and 'Multiple' to Type deprecated, use MaxValues instead"); + } + + if( $FieldTypes{$type}) { return(1); } else { @@ -460,6 +626,17 @@ sub ValidateType { } } + +sub SetType { + my $self = shift; + my $type = shift; + if ($type =~ s/(?:(Single)|Multiple)$//) { + warn "'Single' and 'Multiple' on SetType deprecated, use SetMaxValues instead"; + $self->SetMaxValues($1 ? 1 : 0); + } + $self->SUPER::SetType($type); +} + # {{{ SingleValue =head2 SingleValue @@ -471,7 +648,17 @@ Returns false if it accepts multiple values sub SingleValue { my $self = shift; - if ($self->Type =~ /Single$/) { + if ($self->MaxValues == 1) { + return 1; + } + else { + return undef; + } +} + +sub UnlimitedValues { + my $self = shift; + if ($self->MaxValues == 0) { return 1; } else { @@ -490,14 +677,13 @@ Helper function to call the custom field's queue's CurrentUserHasRight with the =cut sub CurrentUserHasRight { - my $self = shift; + my $self = shift; my $right = shift; - # if there's no queue, we want to know about a global right - if ( ( !defined $self->__Value('Queue') ) || ( $self->__Value('Queue') == 0 ) ) { - return $self->CurrentUser->HasRight( Object => $RT::System, Right => $right); - } else { - return ( $self->QueueObj->CurrentUserHasRight($right) ); - } + + return $self->CurrentUser->HasRight( + Object => $self, + Right => $right, + ); } # }}} @@ -507,7 +693,7 @@ sub CurrentUserHasRight { sub _Set { my $self = shift; - unless ( $self->CurrentUserHasRight('AdminCustomFields') ) { + unless ( $self->CurrentUserHasRight('AdminCustomField') ) { return ( 0, $self->loc('Permission Denied') ); } return ( $self->SUPER::_Set(@_) ); @@ -530,16 +716,10 @@ sub _Value { my $self = shift; my $field = shift; - # We need to expose the queue so that we can do things like ACL checks - if ( $field eq 'Queue') { - return ( $self->SUPER::_Value($field) ); - } - - - #Anybody can see global custom fields, otherwise we need to do the rights check - unless ( $self->__Value('Queue') == 0 || $self->CurrentUserHasRight( 'SeeQueue') ) { - return (undef); - } + # we need to do the rights check + unless ( $self->id && $self->CurrentUserHasRight( 'SeeCustomField') ) { + return (undef); + } return ( $self->__Value($field) ); } @@ -557,4 +737,368 @@ Takes a boolean. # }}} +sub Queue { + $RT::Logger->debug( ref($_[0]) . " -> Queue deprecated"); + + return 0; +} + +sub SetQueue { + $RT::Logger->debug( ref($_[0]) . " -> SetQueue deprecated"); + + return 0; +} + +sub QueueObj { + $RT::Logger->debug( ref($_[0]) . " -> QueueObj deprecated"); + + return undef; +} + +=head2 SetTypeComposite + +Set this custom field's type and maximum values as a composite value + + +=cut + +sub SetTypeComposite { + my $self = shift; + my $composite = shift; + my ($type, $max_values) = split(/-/, $composite, 2); + $self->SetType($type); + $self->SetMaxValues($max_values); +} + +=head2 SetLookupType + +Autrijus: care to doc how LookupTypes work? + +=cut + +sub SetLookupType { + my $self = shift; + my $lookup = shift; + if ($lookup ne $self->LookupType) { + # Okay... We need to invalidate our existing relationships + my $ObjectCustomFields = RT::ObjectCustomFields->new($self->CurrentUser); + $ObjectCustomFields->LimitToCustomField($self->Id); + $_->Delete foreach @{$ObjectCustomFields->ItemsArrayRef}; + } + $self->SUPER::SetLookupType($lookup); +} + +=head2 TypeComposite + +Returns a composite value composed of this object's type and maximum values + +=cut + + +sub TypeComposite { + my $self = shift; + join('-', $self->Type, $self->MaxValues); +} + +=head2 TypeComposites + +Returns an array of all possible composite values for custom fields. + +=cut + +sub TypeComposites { + my $self = shift; + return grep !/Text-0/, map { ("$_-1", "$_-0") } $self->Types; +} + +=head2 LookupTypes + +Returns an array of LookupTypes available + +=cut + + +sub LookupTypes { + my $self = shift; + return keys %FRIENDLY_OBJECT_TYPES; +} + +my @FriendlyObjectTypes = ( + "[_1] objects", # loc + "[_1]'s [_2] objects", # loc + "[_1]'s [_2]'s [_3] objects", # loc +); + +=head2 FriendlyTypeLookup + +=cut + +sub FriendlyLookupType { + my $self = shift; + my $lookup = shift || $self->LookupType; + + return ($self->loc( $FRIENDLY_OBJECT_TYPES{$lookup} )) + if (defined $FRIENDLY_OBJECT_TYPES{$lookup} ); + + my @types = map { s/^RT::// ? $self->loc($_) : $_ } + grep { defined and length } + split( /-/, $lookup ) + or return; + return ( $self->loc( $FriendlyObjectTypes[$#types], @types ) ); +} + + +=head2 AddToObject OBJECT + +Add this custom field as a custom field for a single object, such as a queue or group. + +Takes an object + +=cut + + +sub AddToObject { + my $self = shift; + my $object = shift; + my $id = $object->Id || 0; + + unless (index($self->LookupType, ref($object)) == 0) { + return ( 0, $self->loc('Lookup type mismatch') ); + } + + unless ( $object->CurrentUserHasRight('AssignCustomFields') ) { + return ( 0, $self->loc('Permission Denied') ); + } + + my $ObjectCF = RT::ObjectCustomField->new( $self->CurrentUser ); + + $ObjectCF->LoadByCols( ObjectId => $id, CustomField => $self->Id ); + if ( $ObjectCF->Id ) { + return ( 0, $self->loc("That is already the current value") ); + } + my ( $id, $msg ) = + $ObjectCF->Create( ObjectId => $id, CustomField => $self->Id ); + + return ( $id, $msg ); +} + + +=head2 RemoveFromObject OBJECT + +Remove this custom field for a single object, such as a queue or group. + +Takes an object + +=cut + + +sub RemoveFromObject { + my $self = shift; + my $object = shift; + my $id = $object->Id || 0; + + unless (index($self->LookupType, ref($object)) == 0) { + return ( 0, $self->loc('Object type mismatch') ); + } + + unless ( $object->CurrentUserHasRight('AssignCustomFields') ) { + return ( 0, $self->loc('Permission Denied') ); + } + + my $ObjectCF = RT::ObjectCustomField->new( $self->CurrentUser ); + + $ObjectCF->LoadByCols( ObjectId => $id, CustomField => $self->Id ); + unless ( $ObjectCF->Id ) { + return ( 0, $self->loc("This custom field does not apply to that object") ); + } + my ( $id, $msg ) = $ObjectCF->Delete; + + return ( $id, $msg ); +} + +# {{{ AddValueForObject + +=head2 AddValueForObject HASH + +Adds a custom field value for a record object of some kind. +Takes a param hash of + +Required: + + Object + Content + +Optional: + + LargeContent + ContentType + +=cut + +sub AddValueForObject { + my $self = shift; + my %args = ( + Object => undef, + Content => undef, + LargeContent => undef, + ContentType => undef, + @_ + ); + my $obj = $args{'Object'} or return; + + unless ( $self->CurrentUserHasRight('ModifyCustomField') ) { + return ( 0, $self->loc('Permission Denied') ); + } + + $RT::Handle->BeginTransaction; + + my $current_values = $self->ValuesForObject($obj); + + if ( $self->MaxValues ) { + my $extra_values = ( $current_values->Count + 1 ) - $self->MaxValues; + + # (The +1 is for the new value we're adding) + + # If we have a set of current values and we've gone over the maximum + # allowed number of values, we'll need to delete some to make room. + # which former values are blown away is not guaranteed + + while ($extra_values) { + my $extra_item = $current_values->Next; + + unless ( $extra_item->id ) { + $RT::Logger->crit( +"We were just asked to delete a custom fieldvalue that doesn't exist!" + ); + $RT::Handle->Rollback(); + return (undef); + } + $extra_item->Delete; + $extra_values--; + + } + } + my $newval = RT::ObjectCustomFieldValue->new( $self->CurrentUser ); + my $val = $newval->Create( + ObjectType => ref($obj), + ObjectId => $obj->Id, + Content => $args{'Content'}, + LargeContent => $args{'LargeContent'}, + ContentType => $args{'ContentType'}, + CustomField => $self->Id + ); + + unless ($val) { + $RT::Handle->Rollback(); + return ($val); + } + + $RT::Handle->Commit(); + return ($val); + +} + +# }}} + +# {{{ DeleteValueForObject + +=head2 DeleteValueForObject HASH + +Deletes a custom field value for a ticket. Takes a param hash of Object and Content + +Returns a tuple of (STATUS, MESSAGE). If the call succeeded, the STATUS is true. otherwise it's false + +=cut + +sub DeleteValueForObject { + my $self = shift; + my %args = ( Object => undef, + Content => undef, + Id => undef, + @_ ); + + + unless ($self->CurrentUserHasRight('ModifyCustomField')) { + return (0, $self->loc('Permission Denied')); + } + + my $oldval = RT::ObjectCustomFieldValue->new($self->CurrentUser); + + if (my $id = $args{'Id'}) { + $oldval->Load($id); + } + unless ($oldval->id) { + $oldval->LoadByObjectContentAndCustomField( + Object => $args{'Object'}, + Content => $args{'Content'}, + CustomField => $self->Id, + ); + } + + + # check ot make sure we found it + unless ($oldval->Id) { + return(0, $self->loc("Custom field value [_1] could not be found for custom field [_2]", $args{'Content'}, $self->Name)); + } + # delete it + + my $ret = $oldval->Delete(); + unless ($ret) { + return(0, $self->loc("Custom field value could not be found")); + } + return($oldval->Id, $self->loc("Custom field value deleted")); +} + + +=head2 ValuesForObject OBJECT + +Return an RT::ObjectCustomFieldValues object containing all of this custom field's values for OBJECT + +=cut + +sub ValuesForObject { + my $self = shift; + my $object = shift; + + my $values = new RT::ObjectCustomFieldValues($self->CurrentUser); + unless ($self->CurrentUserHasRight('SeeCustomField')) { + # Return an empty object if they have no rights to see + return ($values); + } + + + $values->LimitToCustomField($self->Id); + $values->LimitToEnabled(); + $values->LimitToObject($object); + + return ($values); +} + + +=head2 _ForObjectType PATH FRIENDLYNAME + +Tell RT that a certain object accepts custom fields + +Examples: + + 'RT::Queue-RT::Ticket' => "Tickets", # loc + 'RT::Queue-RT::Ticket-RT::Transaction' => "Ticket Transactions", # loc + 'RT::User' => "Users", # loc + 'RT::Group' => "Groups", # loc + +This is a class method. + +=cut + +sub _ForObjectType { + my $self = shift; + my $path = shift; + my $friendly_name = shift; + + $FRIENDLY_OBJECT_TYPES{$path} = $friendly_name; + +} + +# }}} + 1; diff --git a/rt/lib/RT/CustomFields.pm b/rt/lib/RT/CustomFields.pm index 3e47765e6..aac2d4b59 100644 --- a/rt/lib/RT/CustomFields.pm +++ b/rt/lib/RT/CustomFields.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,16 +83,21 @@ sub _Init { - # By default, order by name - $self->OrderBy( ALIAS => 'main', - FIELD => 'SortOrder', - ORDER => 'ASC'); + # By default, order by SortOrder + $self->OrderByCols( + { ALIAS => 'main', + FIELD => 'SortOrder', + ORDER => 'ASC' }, + { ALIAS => 'main', + FIELD => 'id', + ORDER => 'ASC' }, + ); return ( $self->SUPER::_Init(@_) ); } -=item NewItem +=head2 NewItem Returns an empty new RT::CustomField item @@ -107,7 +134,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/CustomFields_Overlay.pm b/rt/lib/RT/CustomFields_Overlay.pm index 97c7cb8df..ca80fa2de 100644 --- a/rt/lib/RT/CustomFields_Overlay.pm +++ b/rt/lib/RT/CustomFields_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::CustomFields - a collection of RT CustomField objects @@ -42,13 +65,31 @@ ok (require RT::CustomFields); =cut + +package RT::CustomFields; + use strict; no warnings qw(redefine); +use DBIx::SearchBuilder::Unique; + + +sub _OCFAlias { + my $self = shift; + unless ($self->{_sql_ocfalias}) { + + $self->{'_sql_ocfalias'} = $self->NewAlias('ObjectCustomFields'); + $self->Join( ALIAS1 => 'main', + FIELD1 => 'id', + ALIAS2 => $self->_OCFAlias, + FIELD2 => 'CustomField' ); + } + return($self->{_sql_ocfalias}); +} # {{{ sub LimitToGlobalOrQueue -=item LimitToGlobalOrQueue QUEUEID +=head2 LimitToGlobalOrQueue QUEUEID Limits the set of custom fields found to global custom fields or those tied to the queue with ID QUEUEID @@ -57,8 +98,8 @@ Limits the set of custom fields found to global custom fields or those tied to t sub LimitToGlobalOrQueue { my $self = shift; my $queue = shift; - $self->LimitToQueue($queue); - $self->LimitToGlobal(); + $self->LimitToGlobalOrObjectId( $queue ); + $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); } # }}} @@ -77,11 +118,12 @@ sub LimitToQueue { my $self = shift; my $queue = shift; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Queue', + $self->Limit (ALIAS => $self->_OCFAlias, + ENTRYAGGREGATOR => 'OR', + FIELD => 'ObjectId', VALUE => "$queue") if defined $queue; - + $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); } # }}} @@ -99,10 +141,11 @@ another call to this method or LimitToQueue sub LimitToGlobal { my $self = shift; - $self->Limit (ENTRYAGGREGATOR => 'OR', - FIELD => 'Queue', + $self->Limit (ALIAS => $self->_OCFAlias, + ENTRYAGGREGATOR => 'OR', + FIELD => 'ObjectId', VALUE => 0); - + $self->LimitToLookupType( 'RT::Queue-RT::Ticket' ); } # }}} @@ -111,9 +154,9 @@ sub LimitToGlobal { =head2 _DoSearch - A subclass of DBIx::SearchBuilder::_DoSearch that makes sure that _Disabled ro -ws never get seen unless -we're explicitly trying to see them. +A subclass of DBIx::SearchBuilder::_DoSearch that makes sure that + _Disabled rows never get seen unless we're explicitly trying to see +them. =cut @@ -130,6 +173,91 @@ sub _DoSearch { } # }}} + +# {{{ sub Next + +=head2 Next + +Returns the next custom field that this user can see. + +=cut + +sub Next { + my $self = shift; + + + my $CF = $self->SUPER::Next(); + if ((defined($CF)) and (ref($CF))) { + + if ($CF->CurrentUserHasRight('SeeCustomField')) { + return($CF); + } + + #If the user doesn't have the right to show this queue + else { + return($self->Next()); + } + } + #if there never was any queue + else { + return(undef); + } + +} +# }}} + +sub LimitToLookupType { + my $self = shift; + my $lookup = shift; + + $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); +} + +sub LimitToChildType { + my $self = shift; + my $lookup = shift; + + $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); + $self->Limit( FIELD => 'LookupType', ENDSWITH => "$lookup" ); +} + +sub LimitToParentType { + my $self = shift; + my $lookup = shift; + + $self->Limit( FIELD => 'LookupType', VALUE => "$lookup" ); + $self->Limit( FIELD => 'LookupType', STARTSWITH => "$lookup" ); +} + +sub LimitToGlobalOrObjectId { + my $self = shift; + my $global_only = 1; + + + foreach my $id (@_) { + $self->Limit( ALIAS => $self->_OCFAlias, + FIELD => 'ObjectId', + OPERATOR => '=', + VALUE => $id || 0, + ENTRYAGGREGATOR => 'OR' ); + $global_only = 0 if $id; + } + + $self->Limit( ALIAS => $self->_OCFAlias, + FIELD => 'ObjectId', + OPERATOR => '=', + VALUE => 0, + ENTRYAGGREGATOR => 'OR' ) unless $global_only; + + $self->OrderByCols( + { ALIAS => $self->_OCFAlias, FIELD => 'ObjectId' }, + { ALIAS => $self->_OCFAlias, FIELD => 'SortOrder' }, + ); + + # This doesn't work on postgres. + #$self->OrderBy( ALIAS => $class_cfs , FIELD => "SortOrder", ORDER => 'ASC'); + +} 1; diff --git a/rt/lib/RT/Date.pm b/rt/lib/RT/Date.pm index 355370ada..620acc759 100644 --- a/rt/lib/RT/Date.pm +++ b/rt/lib/RT/Date.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Date - a simple Object Oriented date. @@ -330,7 +353,8 @@ sub DurationAsString { $s = int( $duration / $YEAR ); $time_unit = $self->loc("years"); } - if (0) { # For now, never display the "AGO" # $negative) { + + if ($negative) { return $self->loc( "[_1] [_2] ago", $s, $time_unit ); } else { @@ -375,6 +399,7 @@ sub AsString { # }}} # {{{ GetWeekday + =head2 GetWeekday DAY Takes an integer day of week and returns a localized string for that day of week @@ -397,6 +422,7 @@ sub GetWeekday { # }}} # {{{ GetMonth + =head2 GetMonth DAY Takes an integer month and returns a localized string for that month @@ -529,8 +555,27 @@ sub ISO { # }}} +# {{{ sub W3CDTF + +=head2 W3CDTF + +Takes nothing + +Returns the object's date in W3C DTF format + +=cut + +sub W3CDTF { + my $self = shift; + my $date = $self->ISO . 'Z'; + $date =~ s/ /T/; + return $date; +}; + +# }}} # {{{ sub LocalTimezone + =head2 LocalTimezone Returns the current timezone. For now, draws off a system timezone, RT::Timezone. Eventually, this may diff --git a/rt/lib/RT/EmailParser.pm b/rt/lib/RT/EmailParser.pm index 49f3d5518..3a99e5a5e 100644 --- a/rt/lib/RT/EmailParser.pm +++ b/rt/lib/RT/EmailParser.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::EmailParser; @@ -35,7 +57,8 @@ use File::Temp qw/tempdir/; =head1 NAME - RT::Interface::CLI - helper functions for creating a commandline RT interface + RT::EmailParser - helper functions for parsing parts from incoming + email messages =head1 SYNOPSIS @@ -54,6 +77,7 @@ ok(require RT::EmailParser); =head2 new +Returns a new RT::EmailParser object =cut @@ -66,123 +90,95 @@ sub new { } +# {{{ sub SmartParseMIMEEntityFromScalar -# {{{ sub debug +=head2 SmartParseMIMEEntityFromScalar { Message => SCALAR_REF, Decode => BOOL } -sub debug { - my $val = shift; - my ($debug); - if ($val) { - $RT::Logger->debug( $val . "\n" ); - if ($debug) { - print STDERR "$val\n"; - } - } - if ($debug) { - return (1); - } -} - -# }}} - -# {{{ sub CheckForLoops - -sub CheckForLoops { - my $self = shift; - - my $head = $self->Head; - - #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 =~ /^$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); -} - -# }}} +Parse a message stored in a scalar from scalar_ref -# {{{ sub CheckForSuspiciousSender +=cut -sub CheckForSuspiciousSender { +sub SmartParseMIMEEntityFromScalar { my $self = shift; + my %args = ( Message => undef, Decode => 1, @_ ); - #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 ( $fh, $temp_file ); + eval { - my ( $From, $junk ) = $self->ParseSenderAddressFromHead(); + for ( 1 .. 10 ) { - if ( ( $From =~ /^mailer-daemon/i ) or ( $From =~ /^postmaster/i ) ) { - return (1); + # on NFS and NTFS, it is possible that tempfile() conflicts + # with other processes, causing a race condition. we try to + # accommodate this by pausing and retrying. + last + if ( $fh, $temp_file ) = + eval { File::Temp::tempfile( undef, UNLINK => 0 ) }; + sleep 1; + } + if ($fh) { + + #thank you, windows + binmode $fh; + $fh->autoflush(1); + print $fh $args{'Message'}; + close($fh); + if ( -f $temp_file ) { + + # We have to trust the temp file's name -- untaint it + $temp_file =~ /(.*)/; + $self->ParseMIMEEntityFromFile( $1, $args{'Decode'} ); + unlink($1); + } + } + }; + #If for some reason we weren't able to parse the message using a temp file + # try it with a scalar + if ( $@ || !$self->Entity ) { + $self->ParseMIMEEntityFromScalar( $args{'Message'}, $args{'Decode'} ); } - return (undef); - } # }}} -# {{{ sub CheckForAutoGenerated -sub CheckForAutoGenerated { - my $self = shift; - my $head = $self->Head; +# {{{ sub ParseMIMEEntityFromSTDIN - my $Precedence = $head->get("Precedence") || ""; - if ( $Precedence =~ /^(bulk|junk)/i ) { - return (1); - } - else { - return (undef); - } -} +=head2 ParseMIMEEntityFromSTDIN -# }}} +Parse a message from standard input -# {{{ sub ParseMIMEEntityFromSTDIN +=cut sub ParseMIMEEntityFromSTDIN { my $self = shift; - return $self->ParseMIMEEntityFromFileHandle(\*STDIN); + my $postprocess = (@_ ? shift : 1); + return $self->ParseMIMEEntityFromFileHandle(\*STDIN, $postprocess); } # }}} +# {{{ ParseMIMEEntityFromScalar -sub ParseMIMEEntityFromScalar { - my $self = shift; - my $message = shift; +=head2 ParseMIMEEntityFromScalar $message - # Create a new parser object: +Takes either a scalar or a reference to a scalr which contains a stringified MIME message. +Parses it. - my $parser = MIME::Parser->new(); - $self->_SetupMIMEParser($parser); +Returns true if it wins. +Returns false if it loses. +=cut - # TODO: XXX 3.0 we really need to wrap this in an eval { } - unless ( $self->{'entity'} = $parser->parse_data($message) ) { - # Try again, this time without extracting nested messages - $parser->extract_nested_messages(0); - unless ( $self->{'entity'} = $parser->parse_data($message) ) { - $RT::Logger->crit("couldn't parse MIME stream"); - return ( undef); - } - } - $self->_PostProcessNewEntity(); - return (1); +sub ParseMIMEEntityFromScalar { + my $self = shift; + my $message = shift; + my $postprocess = (@_ ? shift : 1); + $self->_ParseMIMEEntity($message,'parse_data', $postprocess); } +# }}} + # {{{ ParseMIMEEntityFromFilehandle *FH =head2 ParseMIMEEntityFromFilehandle *FH @@ -194,7 +190,35 @@ Parses a mime entity from a filehandle passed in as an argument sub ParseMIMEEntityFromFileHandle { my $self = shift; my $filehandle = shift; + my $postprocess = (@_ ? shift : 1); + $self->_ParseMIMEEntity($filehandle,'parse', $postprocess); +} + +# }}} + +# {{{ ParseMIMEEntityFromFile + +=head2 ParseMIMEEntityFromFile +Parses a mime entity from a filename passed in as an argument + +=cut + +sub ParseMIMEEntityFromFile { + my $self = shift; + my $file = shift; + my $postprocess = (@_ ? shift : 1); + $self->_ParseMIMEEntity($file,'parse_open',$postprocess); +} + +# }}} + +# {{{ _ParseMIMEEntity +sub _ParseMIMEEntity { + my $self = shift; + my $message = shift; + my $method = shift; + my $postprocess = shift; # Create a new parser object: my $parser = MIME::Parser->new(); @@ -202,18 +226,19 @@ sub ParseMIMEEntityFromFileHandle { # TODO: XXX 3.0 we really need to wrap this in an eval { } - - unless ( $self->{'entity'} = $parser->parse($filehandle) ) { - + unless ( $self->{'entity'} = $parser->$method($message) ) { + $RT::Logger->crit("Couldn't parse MIME stream and extract the submessages"); # Try again, this time without extracting nested messages $parser->extract_nested_messages(0); - unless ( $self->{'entity'} = $parser->parse($filehandle) ) { + unless ( $self->{'entity'} = $parser->$method($message) ) { $RT::Logger->crit("couldn't parse MIME stream"); return ( undef); } } - $self->_PostProcessNewEntity(); - return (1); + if ($postprocess) { + $self->_PostProcessNewEntity() ; + } + } # }}} @@ -231,238 +256,37 @@ sub _PostProcessNewEntity { #Now we've got a parsed mime object. - # try to convert text parts into utf-8 charset - RT::I18N::SetMIMEEntityToEncoding($self->{'entity'}, 'utf-8'); - - # Unfold headers that are have embedded newlines + # Better do this before conversion or it will break + # with multiline encoded Subject (RFC2047) (fsck.com #5594) + $self->Head->unfold; -} - -# }}} + # try to convert text parts into utf-8 charset + RT::I18N::SetMIMEEntityToEncoding($self->{'entity'}, 'utf-8'); -# {{{ sub ParseTicketId -sub ParseTicketId { - my $self = shift; - my $Subject = shift; - if ( $Subject =~ s/\[$RT::rtname \#(\d+)\s*\]//i ) { - my $id = $1; - $RT::Logger->debug("Found a ticket ID. It's $id"); - return ($id); - } - else { - return (undef); - } } # }}} -# {{{ sub MailError - -=head2 MailError { } - - -# TODO this doesn't belong here. -# TODO doc this - - -=cut - +# {{{ sub ParseTicketId -sub MailError { +sub ParseTicketId { my $self = shift; + $RT::Logger->warnings("RT::EmailParser->ParseTicketId deprecated. You should be using RT::Interface::Email"); - my %args = ( - To => $RT::OwnerEmail, - Bcc => undef, - From => $RT::CorrespondAddress, - Subject => 'There has been an error', - Explanation => 'Unexplained error', - MIMEObj => 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'}, - 'X-RT-Loop-Prevention' => $RT::rtname, - ); - - $entity->attach( Data => $args{'Explanation'} . "\n" ); - - my $mimeobj = $args{'MIMEObj'}; - $mimeobj->sync_headers(); - $entity->add_part($mimeobj); - - if ( $RT::MailCommand eq 'sendmailpipe' ) { - open( MAIL, "|$RT::SendmailPath $RT::SendmailArguments" ) || return (0); - print MAIL $entity->as_string; - close(MAIL); - } - else { - $entity->send( $RT::MailCommand, $RT::MailParams ); - } + require RT::Interface::Email; + RT::Interface::Email::ParseTicketId(@_); } # }}} -# {{{ sub GetCurrentUser - -sub GetCurrentUser { - my $self = shift; - my $ErrorsTo = shift; - - my %UserInfo = (); - - #Suck the address of the sender out of the header - my ( $Address, $Name ) = $self->ParseSenderAddressFromHead(); - - my $tempuser = RT::User->new($RT::SystemUser); - - #This will apply local address canonicalization rules - $Address = $tempuser->CanonicalizeEmailAddress($Address); - - #If desired, synchronize with an external database - my $UserFoundInExternalDatabase = 0; - - # Username is the 'Name' attribute of the user that RT uses for things - # like authentication - my $Username = undef; - ( $UserFoundInExternalDatabase, %UserInfo ) = - $self->LookupExternalUserInfo( $Address, $Name ); - - $Address = $UserInfo{'EmailAddress'}; - $Username = $UserInfo{'Name'}; - - #Get us a currentuser object to work with. - my $CurrentUser = RT::CurrentUser->new(); - - # First try looking up by a username, if we got one from the external - # db lookup. Next, try looking up by email address. Failing that, - # try looking up by users who have this user's email address as their - # username. - - if ($Username) { - $CurrentUser->LoadByName($Username); - } - - unless ( $CurrentUser->Id ) { - $CurrentUser->LoadByEmail($Address); - } - - #If we can't get it by email address, try by name. - unless ( $CurrentUser->Id ) { - $CurrentUser->LoadByName($Address); - } - - unless ( $CurrentUser->Id ) { - - #If we couldn't load a user, determine whether to create a user - - # {{{ If we require an incoming address to be found in the external - # user database, reject the incoming message appropriately - if ( $RT::SenderMustExistInExternalDatabase - && !$UserFoundInExternalDatabase ) { - - my $Message = - "Sender's email address was not found in the user database."; - - # {{{ This code useful only if you've defined an AutoRejectRequest template - - require RT::Template; - my $template = new RT::Template($RT::Nobody); - $template->Load('AutoRejectRequest'); - $Message = $template->Content || $Message; - - # }}} - - MailError( - To => $ErrorsTo, - Subject => "Ticket Creation failed: user could not be created", - Explanation => $Message, - MIMEObj => $self->Entity, - LogLevel => 'notice' ); - - return ($CurrentUser); - - } - - # }}} - - else { - 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' - ); - - unless ($Val) { - - # Deal with the race condition of two account creations at once - # - if ($Username) { - $NewUser->LoadByName($Username); - } - - 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 => $self->Entity, - LogLevel => 'crit' ); - } - } - } - - #Load the new user object - $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 => $self->Entity, - LogLevel => 'crit' ); - - } - } - - return ($CurrentUser); - -} - -# }}} - - # {{{ ParseCcAddressesFromHead =head2 ParseCcAddressesFromHead HASHREF @@ -493,10 +317,10 @@ sub ParseCcAddressesFromHead { my $Address = $AddrObj->address; my $user = RT::User->new($RT::SystemUser); $Address = $user->CanonicalizeEmailAddress($Address); - next if ( $args{'CurrentUser'}->EmailAddress =~ /^$Address$/i ); - next if ( $args{'QueueObj'}->CorrespondAddress =~ /^$Address$/i ); - next if ( $args{'QueueObj'}->CommentAddress =~ /^$Address$/i ); - next if ( IsRTAddress($Address) ); + next if ( lc $args{'CurrentUser'}->EmailAddress eq lc $Address ); + next if ( lc $args{'QueueObj'}->CorrespondAddress eq lc $Address ); + next if ( lc $args{'QueueObj'}->CommentAddress eq lc $Address ); + next if ( $self->IsRTAddress($Address) ); push ( @Addresses, $Address ); } @@ -567,6 +391,8 @@ sub ParseAddressFromHeader { my $self = shift; 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]; @@ -587,7 +413,7 @@ sub ParseAddressFromHeader { # {{{ IsRTAddress -=item IsRTaddress ADDRESS +=head2 IsRTaddress ADDRESS Takes a single parameter, an email address. Returns true if that address matches the $RTAddressRegexp. @@ -621,7 +447,7 @@ sub IsRTAddress { # {{{ CullRTAddresses -=item CullRTAddresses ARRAY +=head2 CullRTAddresses ARRAY Takes a single argument, an array of email addresses. Returns the same array with any IsRTAddress()es weeded out. @@ -642,7 +468,10 @@ sub CullRTAddresses { my @addrlist; foreach my $addr( @addresses ) { - push (@addrlist, $addr) unless IsRTAddress("", $addr); + # We use the class instead of the instance + # because sloppy code calls this method + # without a $self + push (@addrlist, $addr) unless RT::EmailParser->IsRTAddress($addr); } return (@addrlist); } @@ -666,7 +495,7 @@ sub CullRTAddresses { # template for the rejection message. -=item LookupExternalUserInfo +=head2 LookupExternalUserInfo LookupExternalUserInfo is a site-definable method for synchronizing incoming users with an external data source. @@ -679,12 +508,12 @@ sub CullRTAddresses { It returns (FoundInExternalDatabase, ParamHash); - FoundInExternalDatabase must be set to 1 before return if the user was - found in the external database. + FoundInExternalDatabase must be set to 1 before return if the user + was found in the external database. - ParamHash is a Perl parameter hash which can contain at least the following - fields. These fields are used to populate RT's users database when the user - is created + ParamHash is a Perl parameter hash which can contain at least the + following fields. These fields are used to populate RT's users + database when the user is created. EmailAddress is the email address that RT should use for this user. Name is the 'Name' attribute RT should use for this user. @@ -739,6 +568,7 @@ sub Entity { } # }}} + # {{{ _SetupMIMEParser =head2 _SetupMIMEParser $parser @@ -756,26 +586,46 @@ A private instance method which sets up a mime parser to do its job ## Over max size and return them sub _SetupMIMEParser { - my $self = shift; + my $self = shift; my $parser = shift; - my $AttachmentDir = File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 ); - + # Set up output directory for files: - $parser->output_dir("$AttachmentDir"); - #If someone includes a message, don't extract it + my $tmpdir = File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 ); + push ( @{ $self->{'AttachmentDirs'} }, $tmpdir ); + $parser->output_dir($tmpdir); + $parser->filer->ignore_filename(1); + + #If someone includes a message, extract it $parser->extract_nested_messages(1); + $parser->extract_uuencode(1); ### default is false + # Set up the prefix for files with auto-generated names: $parser->output_prefix("part"); - # If content length is <= 50000 bytes, store each msg as in-core scalar; - # Else, write to a disk file (the default action): + # do _not_ store each msg as in-core scalar; + + $parser->output_to_core(0); + + # From the MIME::Parser docs: + # "Normally, tmpfiles are created when needed during parsing, and destroyed automatically when they go out of scope" + # Turns out that the default is to recycle tempfiles + # Temp files should never be recycled, especially when running under perl taint checking + + $parser->tmp_recycling(0); - $parser->output_to_core(50000); } + # }}} +sub DESTROY { + my $self = shift; + File::Path::rmtree([@{$self->{'AttachmentDirs'}}],0,1); +} + + + eval "require RT::EmailParser_Vendor"; die $@ if ($@ && $@ !~ qr{^Can't locate RT/EmailParser_Vendor.pm}); eval "require RT::EmailParser_Local"; diff --git a/rt/lib/RT/Group.pm b/rt/lib/RT/Group.pm index 4dcef3f07..04c307652 100755 --- a/rt/lib/RT/Group.pm +++ b/rt/lib/RT/Group.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -69,7 +91,7 @@ Create takes a hash of values and creates a row in the database: varchar(255) 'Description'. varchar(64) 'Domain'. varchar(64) 'Type'. - varchar(64) 'Instance'. + int(11) 'Instance'. =cut @@ -98,7 +120,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -107,14 +129,14 @@ Returns the current value of id. =cut -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -125,14 +147,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Description +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -143,14 +165,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Domain +=head2 Domain Returns the current value of Domain. (In the database, Domain is stored as varchar(64).) -=item SetDomain VALUE +=head2 SetDomain VALUE Set Domain to VALUE. @@ -161,14 +183,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Type +=head2 Type Returns the current value of Type. (In the database, Type is stored as varchar(64).) -=item SetType VALUE +=head2 SetType VALUE Set Type to VALUE. @@ -179,40 +201,40 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Instance +=head2 Instance Returns the current value of Instance. -(In the database, Instance is stored as varchar(64).) +(In the database, Instance is stored as int(11).) -=item SetInstance VALUE +=head2 SetInstance VALUE Set Instance to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Instance will be stored as a varchar(64).) +(In the database, Instance will be stored as a int(11).) =cut -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Domain => - {read => 1, write => 1, type => 'varchar(64)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''}, Type => - {read => 1, write => 1, type => 'varchar(64)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''}, Instance => - {read => 1, write => 1, type => 'varchar(64)', default => ''}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, } }; @@ -244,7 +266,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/GroupMember.pm b/rt/lib/RT/GroupMember.pm index 8de1a73fe..692303a8a 100755 --- a/rt/lib/RT/GroupMember.pm +++ b/rt/lib/RT/GroupMember.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -89,7 +111,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -98,14 +120,14 @@ Returns the current value of id. =cut -=item GroupId +=head2 GroupId Returns the current value of GroupId. (In the database, GroupId is stored as int(11).) -=item SetGroupId VALUE +=head2 SetGroupId VALUE Set GroupId to VALUE. @@ -116,14 +138,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item MemberId +=head2 MemberId Returns the current value of MemberId. (In the database, MemberId is stored as int(11).) -=item SetMemberId VALUE +=head2 SetMemberId VALUE Set MemberId to VALUE. @@ -135,15 +157,15 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, GroupId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, MemberId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, } }; @@ -175,7 +197,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/GroupMember_Overlay.pm b/rt/lib/RT/GroupMember_Overlay.pm index 20949f017..d824dc4b3 100644 --- a/rt/lib/RT/GroupMember_Overlay.pm +++ b/rt/lib/RT/GroupMember_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::GroupMember - a member of an RT Group @@ -50,6 +73,9 @@ ok (require RT::GroupMember); =cut + +package RT::GroupMember; + use strict; no warnings qw(redefine); use RT::CachedGroupMembers; @@ -98,7 +124,7 @@ sub Create { #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); + RT::Principal->InvalidateACLCache(); $RT::Handle->BeginTransaction() unless ($args{'InsideTransaction'}); @@ -207,7 +233,7 @@ sub _StashUser { #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); + RT::Principal->InvalidateACLCache(); # We really need to make sure we don't add any members to this group @@ -281,9 +307,6 @@ sub Delete { VALUE => $self->GroupObj->Id ); - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); @@ -297,12 +320,27 @@ sub Delete { } } - my $err = $self->SUPER::Delete(); + my ($err, $msg) = $self->SUPER::Delete(); unless ($err) { $RT::Logger->warning("Couldn't delete cached group submember ".$self->Id); $RT::Handle->Rollback(); return (undef); } + + # Since this deletion may have changed the former member's + # delegation rights, we need to ensure that no invalid delegations + # remain. + $err = $self->MemberObj->_CleanupInvalidDelegations(InsideTransaction => 1); + unless ($err) { + $RT::Logger->warning("Unable to revoke delegated rights for principal ".$self->Id); + $RT::Handle->Rollback(); + return (undef); + } + + #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. + # TODO what about the groups key cache? + RT::Principal->InvalidateACLCache(); + $RT::Handle->Commit(); return ($err); @@ -322,7 +360,7 @@ sub MemberObj { my $self = shift; unless ( defined( $self->{'Member_obj'} ) ) { $self->{'Member_obj'} = RT::Principal->new( $self->CurrentUser ); - $self->{'Member_obj'}->Load( $self->MemberId ); + $self->{'Member_obj'}->Load( $self->MemberId ) if ($self->MemberId); } return ( $self->{'Member_obj'} ); } diff --git a/rt/lib/RT/GroupMembers.pm b/rt/lib/RT/GroupMembers.pm index 31cb9536f..2cf2cd3f3 100755 --- a/rt/lib/RT/GroupMembers.pm +++ b/rt/lib/RT/GroupMembers.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::GroupMember item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/GroupMembers_Overlay.pm b/rt/lib/RT/GroupMembers_Overlay.pm index 1259fd61a..1b6f9312d 100644 --- a/rt/lib/RT/GroupMembers_Overlay.pm +++ b/rt/lib/RT/GroupMembers_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::GroupMembers - a collection of RT::GroupMember objects @@ -43,6 +66,9 @@ ok (require RT::GroupMembers); =cut + +package RT::GroupMembers; + use strict; no warnings qw(redefine); @@ -51,7 +77,7 @@ no warnings qw(redefine); =head2 LimitToUsers Limits this search object to users who are members of this group. -This is really useful when you want to haave your UI seperate out +This is really useful when you want to have your UI separate out groups from users for display purposes =cut @@ -78,7 +104,7 @@ sub LimitToUsers { =head2 LimitToGroups Limits this search object to Groups who are members of this group. -This is really useful when you want to haave your UI seperate out +This is really useful when you want to have your UI separate out groups from users for display purposes =cut diff --git a/rt/lib/RT/Group_Overlay.pm b/rt/lib/RT/Group_Overlay.pm index 92150255f..41cf49732 100644 --- a/rt/lib/RT/Group_Overlay.pm +++ b/rt/lib/RT/Group_Overlay.pm @@ -1,8 +1,15 @@ -# BEGIN LICENSE BLOCK + +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> +# +# (Except where explicitly superseded by other copyright notices) # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> # -# (Except where explictly superceded 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 @@ -14,13 +21,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} # Released under the terms of version 2 of the GNU Public License =head1 NAME @@ -29,21 +52,13 @@ =head1 SYNOPSIS - use RT::Group; +use RT::Group; my $group = new RT::Group($CurrentUser); =head1 DESCRIPTION An RT group object. -=head1 AUTHOR - -Jesse Vincent, jesse@bestpractical.com - -=head1 SEE ALSO - -RT - =head1 METHODS @@ -131,6 +146,9 @@ ok($group_3->HasMemberRecursively($principal_2) == undef, "group 3 has member 2 =cut + +package RT::Group; + use strict; no warnings qw(redefine); @@ -145,7 +163,10 @@ $RIGHTS = { AdminGroup => 'Modify group metadata or delete group', # loc_pair AdminGroupMembership => 'Modify membership roster for this group', # loc_pair - ModifyOwnMembership => 'Join or leave this group' # loc_pair + ModifyOwnMembership => 'Join or leave this group', # loc_pair + EditSavedSearches => 'Edit saved searches for this group', # loc_pair + ShowSavedSearches => 'Display saved searches for this group', # loc_pair + SeeGroup => 'Make this group visible to user', # loc_pair }; # Tell RT::ACE that this sort of object can get acls granted @@ -327,8 +348,6 @@ sub LoadSystemInternalGroup { my $identifier = shift; $self->LoadByCols( "Domain" => 'SystemInternal', - "Instance" => '', - "Name" => '', "Type" => $identifier ); } @@ -350,7 +369,7 @@ Takes a param hash with 2 parameters: sub LoadTicketRoleGroup { my $self = shift; - my %args = (Ticket => undef, + my %args = (Ticket => '0', Type => undef, @_); $self->LoadByCols( Domain => 'RT::Ticket-Role', @@ -412,6 +431,7 @@ sub LoadSystemRoleGroup { # }}} # {{{ sub Create + =head2 Create You need to specify what sort of group you're creating by calling one of the other @@ -444,8 +464,9 @@ sub _Create { Description => undef, Domain => undef, Type => undef, - Instance => undef, + Instance => '0', InsideTransaction => undef, + _RecordTransaction => 1, @_ ); @@ -466,7 +487,7 @@ sub _Create { Description => $args{'Description'}, Type => $args{'Type'}, Domain => $args{'Domain'}, - Instance => $args{'Instance'} + Instance => ($args{'Instance'} || '0') ); my $id = $self->Id; unless ($id) { @@ -491,8 +512,12 @@ sub _Create { $cgm->Create(Group =>$self->PrincipalObj, Member => $self->PrincipalObj, ImmediateParent => $self->PrincipalObj); + if ( $args{'_RecordTransaction'} ) { + $self->_NewTransaction( Type => "Create" ); + } $RT::Handle->Commit() unless ($args{'InsideTransaction'}); + return ( $id, $self->loc("Group created") ); } @@ -687,6 +712,7 @@ If passed a positive value, this group will be disabled. No rights it commutes o It will not appear in most group listings. This routine finds all the cached group members that are members of this group (recursively) and disables them. + =cut # }}} @@ -731,7 +757,7 @@ This routine finds all the cached group members that are members of this group #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); + RT::Principal->InvalidateACLCache(); @@ -763,7 +789,8 @@ sub Disabled { =head2 DeepMembersObj -Returns an RT::CachedGroupMembers object of this group's members. +Returns an RT::CachedGroupMembers object of this group's members, +including all members of subgroups. =cut @@ -798,22 +825,14 @@ sub UserMembersObj { #If we don't have rights, don't include any results # TODO XXX WHY IS THERE NO ACL CHECK HERE? - my $principals = $users->NewAlias('Principals'); - - $users->Join(ALIAS1 => 'main', FIELD1 => 'id', - ALIAS2 => $principals, FIELD2 => 'ObjectId'); - $users->Limit(ALIAS =>$principals, - FIELD => 'PrincipalType', OPERATOR => '=', VALUE => 'User'); - my $cached_members = $users->NewAlias('CachedGroupMembers'); $users->Join(ALIAS1 => $cached_members, FIELD1 => 'MemberId', - ALIAS2 => $principals, FIELD2 => 'id'); + ALIAS2 => $users->PrincipalsAlias, FIELD2 => 'id'); $users->Limit(ALIAS => $cached_members, FIELD => 'GroupId', OPERATOR => '=', VALUE => $self->PrincipalId); - return ( $users); } @@ -824,7 +843,7 @@ sub UserMembersObj { =head2 MembersObj -Returns an RT::CachedGroupMembers object of this group's members. +Returns an RT::GroupMembers object of this group's direct members. =cut @@ -1009,6 +1028,10 @@ sub HasMember { return(undef); } + unless ($principal->Id) { + return(undef); + } + my $member_obj = RT::GroupMember->new( $self->CurrentUser ); $member_obj->LoadByCols( MemberId => $principal->id, GroupId => $self->PrincipalId ); @@ -1146,11 +1169,70 @@ sub _DeleteMember { # }}} +# {{{ sub _CleanupInvalidDelegations + +=head2 _CleanupInvalidDelegations { InsideTransaction => undef } + +Revokes all ACE entries delegated by members of this group which are +inconsistent with their current delegation rights. Does not perform +permission checks. Should only ever be called from inside the RT +library. + +If called from inside a transaction, specify a true value for the +InsideTransaction parameter. + +Returns a true value if the deletion succeeded; returns a false value +and logs an internal error if the deletion fails (should not happen). + +=cut + +# XXX Currently there is a _CleanupInvalidDelegations method in both +# RT::User and RT::Group. If the recursive cleanup call for groups is +# ever unrolled and merged, this code will probably want to be +# factored out into RT::Principal. + +sub _CleanupInvalidDelegations { + my $self = shift; + my %args = ( InsideTransaction => undef, + @_ ); + + unless ( $self->Id ) { + $RT::Logger->warning("Group not loaded."); + return (undef); + } + + my $in_trans = $args{InsideTransaction}; + + # TODO: Can this be unrolled such that the number of DB queries is constant rather than linear in exploded group size? + my $members = $self->DeepMembersObj(); + $members->LimitToUsers(); + $RT::Handle->BeginTransaction() unless $in_trans; + while ( my $member = $members->Next()) { + my $ret = $member->MemberObj->_CleanupInvalidDelegations(InsideTransaction => 1, + Object => $args{Object}); + unless ($ret) { + $RT::Handle->Rollback() unless $in_trans; + return (undef); + } + } + $RT::Handle->Commit() unless $in_trans; + return(1); +} + +# }}} + # {{{ ACL Related routines # {{{ sub _Set sub _Set { my $self = shift; + my %args = ( + Field => undef, + Value => undef, + TransactionType => 'Set', + RecordTransaction => 1, + @_ + ); if ($self->Domain eq 'Personal') { if ($self->CurrentUser->PrincipalId == $self->Instance) { @@ -1168,7 +1250,30 @@ sub _Set { return ( 0, $self->loc('Permission Denied') ); } } - return ( $self->SUPER::_Set(@_) ); + + my $Old = $self->SUPER::_Value("$args{'Field'}"); + + my ($ret, $msg) = $self->SUPER::_Set( Field => $args{'Field'}, + Value => $args{'Value'} ); + + #If we can't actually set the field to the value, don't record + # a transaction. instead, get out of here. + if ( $ret == 0 ) { return ( 0, $msg ); } + + if ( $args{'RecordTransaction'} == 1 ) { + + my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( + Type => $args{'TransactionType'}, + Field => $args{'Field'}, + NewValue => $args{'Value'}, + OldValue => $Old, + TimeTaken => $args{'TimeTaken'}, + ); + return ( $Trans, scalar $TransObj->Description ); + } + else { + return ( $ret, $msg ); + } } # }}} @@ -1176,7 +1281,7 @@ sub _Set { -=item CurrentUserHasRight RIGHTNAME +=head2 CurrentUserHasRight RIGHTNAME Returns true if the current user has the specified right for this group. @@ -1256,5 +1361,21 @@ sub PrincipalId { } # }}} + +sub BasicColumns { + ( + [ Name => 'Name' ], + [ Description => 'Description' ], + ); +} + 1; +=head1 AUTHOR + +Jesse Vincent, jesse@bestpractical.com + +=head1 SEE ALSO + +RT + diff --git a/rt/lib/RT/Groups.pm b/rt/lib/RT/Groups.pm index 29f12a5a0..46337f7be 100755 --- a/rt/lib/RT/Groups.pm +++ b/rt/lib/RT/Groups.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Group item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Groups_Overlay.pm b/rt/lib/RT/Groups_Overlay.pm index 3d2c660fe..cf29114dc 100644 --- a/rt/lib/RT/Groups_Overlay.pm +++ b/rt/lib/RT/Groups_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Groups - a collection of RT::Group objects @@ -29,7 +52,7 @@ use RT::Groups; my $groups = $RT::Groups->new($CurrentUser); - $groups->LimitToReal(); + $groups->UnLimit(); while (my $group = $groups->Next()) { print $group->Id ." is a group id\n"; } @@ -48,6 +71,9 @@ ok (require RT::Groups); =cut + +package RT::Groups; + use strict; no warnings qw(redefine); @@ -80,7 +106,8 @@ Return only SystemInternal Groups, such as "privileged" "unprivileged" and "ever sub LimitToSystemInternalGroups { my $self = shift; $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'SystemInternal'); - $self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => ''); + # All system internal groups have the same instance. No reason to limit down further + #$self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => '0'); } @@ -98,7 +125,8 @@ Return only UserDefined Groups sub LimitToUserDefinedGroups { my $self = shift; $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined'); - $self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => ''); + # All user-defined groups have the same instance. No reason to limit down further + #$self->Limit(FIELD => 'Instance', OPERATOR => '=', VALUE => ''); } @@ -121,8 +149,7 @@ sub LimitToPersonalGroupsFor { $self->Limit(FIELD => 'Domain', OPERATOR => '=', VALUE => 'Personal'); $self->Limit( FIELD => 'Instance', OPERATOR => '=', - VALUE => $princ, - ENTRY_AGGREGATOR => 'OR'); + VALUE => $princ); } @@ -130,7 +157,7 @@ sub LimitToPersonalGroupsFor { # {{{ LimitToRolesForQueue -=item LimitToRolesForQueue QUEUE_ID +=head2 LimitToRolesForQueue QUEUE_ID Limits the set of groups found to role groups for queue QUEUE_ID @@ -147,7 +174,7 @@ sub LimitToRolesForQueue { # {{{ LimitToRolesForTicket -=item LimitToRolesForTicket Ticket_ID +=head2 LimitToRolesForTicket Ticket_ID Limits the set of groups found to role groups for Ticket Ticket_ID @@ -164,7 +191,7 @@ sub LimitToRolesForTicket { # {{{ LimitToRolesForSystem -=item LimitToRolesForSystem System_ID +=head2 LimitToRolesForSystem System_ID Limits the set of groups found to role groups for System System_ID @@ -227,25 +254,115 @@ sub WithMember { } +=head2 WithRight { Right => RIGHTNAME, Object => RT::Record, IncludeSystemRights => 1, IncludeSuperusers => 0, EquivObjects => [ ] } + + +Find all groups which have RIGHTNAME for RT::Record. Optionally include global rights and superusers. By default, include the global rights, but not the superusers. + +=begin testing + +my $q = RT::Queue->new($RT::SystemUser); +my ($id, $msg) =$q->Create( Name => 'GlobalACLTest'); +ok ($id, $msg); + +my $testuser = RT::User->new($RT::SystemUser); +($id,$msg) = $testuser->Create(Name => 'JustAnAdminCc'); +ok ($id,$msg); + +my $global_admin_cc = RT::Group->new($RT::SystemUser); +$global_admin_cc->LoadSystemRoleGroup('AdminCc'); +ok($global_admin_cc->id, "Found the global admincc group"); +my $groups = RT::Groups->new($RT::SystemUser); +$groups->WithRight(Right => 'OwnTicket', Object => $q); +is($groups->Count, 1); +($id, $msg) = $global_admin_cc->PrincipalObj->GrantRight(Right =>'OwnTicket', Object=> $RT::System); +ok ($id,$msg); +ok (!$testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does not have the right to own tickets in the test queue"); +($id, $msg) = $q->AddWatcher(Type => 'AdminCc', PrincipalId => $testuser->id); +ok($id,$msg); +ok ($testuser->HasRight(Object => $q, Right => 'OwnTicket') , "The test user does have the right to own tickets now. thank god."); + +$groups = RT::Groups->new($RT::SystemUser); +$groups->WithRight(Right => 'OwnTicket', Object => $q); +ok ($id,$msg); +is($groups->Count, 2); + +my $RTxGroup = RT::Group->new($RT::SystemUser); +($id, $msg) = $RTxGroup->CreateUserDefinedGroup( Name => 'RTxGroup', Description => "RTx extension group"); +ok ($id,$msg); + +my $RTxSysObj = {}; +bless $RTxSysObj, 'RTx::System'; +*RTx::System::Id = sub { 1; }; +*RTx::System::id = *RTx::System::Id; +my $ace = RT::Record->new($RT::SystemUser); +$ace->Table('ACL'); +$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); +($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System', ObjectId => 1); +ok ($id, "ACL for RTxSysObj created"); + +my $RTxObj = {}; +bless $RTxObj, 'RTx::System::Record'; +*RTx::System::Record::Id = sub { 4; }; +*RTx::System::Record::id = *RTx::System::Record::Id; + +$groups = RT::Groups->new($RT::SystemUser); +$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxSysObj); +is($groups->Count, 1, "RTxGroupRight found for RTxSysObj"); + +$groups = RT::Groups->new($RT::SystemUser); +$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj); +is($groups->Count, 0, "RTxGroupRight not found for RTxObj"); + +$groups = RT::Groups->new($RT::SystemUser); +$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]); +is($groups->Count, 1, "RTxGroupRight found for RTxObj using EquivObjects"); + +$ace = RT::Record->new($RT::SystemUser); +$ace->Table('ACL'); +$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); +($id, $msg) = $ace->Create( PrincipalId => $RTxGroup->id, PrincipalType => 'Group', RightName => 'RTxGroupRight', ObjectType => 'RTx::System::Record', ObjectId => 5 ); +ok ($id, "ACL for RTxObj created"); + +my $RTxObj2 = {}; +bless $RTxObj2, 'RTx::System::Record'; +*RTx::System::Record::Id = sub { 5; }; + +$groups = RT::Groups->new($RT::SystemUser); +$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2); +is($groups->Count, 1, "RTxGroupRight found for RTxObj2"); + +$groups = RT::Groups->new($RT::SystemUser); +$groups->WithRight(Right => 'RTxGroupRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]); +is($groups->Count, 1, "RTxGroupRight found for RTxObj2"); + + + +=end testing + + +=cut + + sub WithRight { my $self = shift; my %args = ( Right => undef, Object => => undef, - IncludeSystemRights => undef, + IncludeSystemRights => 1, IncludeSuperusers => undef, + EquivObjects => [ ], @_ ); - my $groupprinc = $self->NewAlias('Principals'); my $acl = $self->NewAlias('ACL'); # {{{ Find only rows where the right granted is the one we're looking up or _possibly_ superuser $self->Limit( ALIAS => $acl, FIELD => 'RightName', - OPERATOR => '=', - VALUE => $args{Right}, + OPERATOR => ($args{Right} ? '=' : 'IS NOT'), + VALUE => $args{Right} || 'NULL', ENTRYAGGREGATOR => 'OR' ); - if ( $args{'IncludeSuperusers'} ) { + if ( $args{'IncludeSuperusers'} and $args{'Right'} ) { $self->Limit( ALIAS => $acl, FIELD => 'RightName', OPERATOR => '=', @@ -254,7 +371,8 @@ sub WithRight { } # }}} - my ($or_check_ticket_roles, $or_check_roles, $or_look_at_object); + my ($or_check_ticket_roles, $or_check_roles); + my $which_object = "$acl.ObjectType = 'RT::System'"; if ( defined $args{'Object'} ) { if ( ref($args{'Object'}) eq 'RT::Ticket' ) { @@ -271,28 +389,125 @@ sub WithRight { $or_check_roles = " OR ( ( (main.Domain = 'RT::Queue-Role' AND main.Instance = " . $args{'Object'}->Id . ") $or_check_ticket_roles ) " . - " AND main.Type = $acl.PrincipalType AND main.id = $groupprinc.id) "; + " AND main.Type = $acl.PrincipalType) "; } - $or_look_at_object = - " OR ($acl.ObjectType = '" . ref($args{'Object'}) . "'" . + if ( $args{'IncludeSystemRights'} ) { + $which_object .= ' OR '; + } + else { + $which_object = ''; + } + foreach my $obj ( @{ $args{'EquivObjects'} } ) { + next unless ( UNIVERSAL::can( $obj, 'id' ) ); + $which_object .= "($acl.ObjectType = '" . ref( $obj ) . "' AND $acl.ObjectId = " . $obj->id . ") OR "; + } + $which_object .= + " ($acl.ObjectType = '" . ref($args{'Object'}) . "'" . " AND $acl.ObjectId = " . $args{'Object'}->Id . ") "; } - $self->_AddSubClause( "WhichObject", "($acl.ObjectType = 'RT::System' $or_look_at_object)" ); + $self->_AddSubClause( "WhichObject", "($which_object)" ); $self->_AddSubClause( "WhichGroup", qq{ - ( ( $acl.PrincipalId = $groupprinc.id + ( ( $acl.PrincipalId = main.id AND $acl.PrincipalType = 'Group' AND ( main.Domain = 'SystemInternal' OR main.Domain = 'UserDefined' - OR main.Domain = 'ACLEquivalence') - AND main.id = $groupprinc.id) + OR main.Domain = 'ACLEquivalence')) $or_check_roles) } ); } +# {{{ sub LimitToEnabled + +=head2 LimitToEnabled + +Only find items that haven\'t been disabled + +=cut + +sub LimitToEnabled { + my $self = shift; + + my $alias = $self->Join( + TYPE => 'left', + ALIAS1 => 'main', + FIELD1 => 'id', + TABLE2 => 'Principals', + FIELD2 => 'id' + ); + + $self->Limit( ALIAS => $alias, + FIELD => 'Disabled', + VALUE => '0', + OPERATOR => '=' ); +} +# }}} + +# {{{ sub LimitToDisabled + +=head2 LimitToDeleted + +Only find items that have been deleted. + +=cut + +sub LimitToDeleted { + my $self = shift; + + my $alias = $self->Join( + TYPE => 'left', + ALIAS1 => 'main', + FIELD1 => 'id', + TABLE2 => 'Principals', + FIELD2 => 'id' + ); + + $self->{'find_disabled_rows'} = 1; + $self->Limit( ALIAS => $alias, + FIELD => 'Disabled', + OPERATOR => '=', + VALUE => '1' + ); +} +# }}} + +# {{{ sub Next + +sub Next { + my $self = shift; + + # Don't show groups which the user isn't allowed to see. + + my $Group = $self->SUPER::Next(); + if ((defined($Group)) and (ref($Group))) { + unless ($Group->CurrentUserHasRight('SeeGroup')) { + return $self->Next(); + } + + return $Group; + } + else { + return undef; + } +} + + + +sub _DoSearch { + my $self = shift; + + #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. + unless($self->{'find_disabled_rows'}) { + $self->LimitToEnabled(); + } + + return($self->SUPER::_DoSearch(@_)); + +} + 1; diff --git a/rt/lib/RT/Handle.pm b/rt/lib/RT/Handle.pm index 5cdb65e5b..21ca1ace6 100644 --- a/rt/lib/RT/Handle.pm +++ b/rt/lib/RT/Handle.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Handle - RT's database handle @@ -48,7 +71,13 @@ use vars qw/@ISA/; eval "use DBIx::SearchBuilder::Handle::$RT::DatabaseType; \@ISA= qw(DBIx::SearchBuilder::Handle::$RT::DatabaseType);"; -#TODO check for errors here. + +if ($@) { + die "Unable to load DBIx::SearchBuilder database handle for '$RT::DatabaseType'.". + "\n". + "Perhaps you've picked an invalid database type or spelled it incorrectly.". + "\n". $@; +} =head2 Connect @@ -58,29 +87,41 @@ Takes nothing. Calls SUPER::Connect with the needed args =cut sub Connect { -my $self=shift; + my $self = shift; -# Unless the database port is a positive integer, we really don't want to pass it. + if ($RT::DatabaseType eq 'Oracle') { + $ENV{'NLS_LANG'} = "AMERICAN_AMERICA.AL32UTF8"; + $ENV{'NLS_NCHAR'} = "AL32UTF8"; + + } -$self->SUPER::Connect( + $self->SUPER::Connect( User => $RT::DatabaseUser, Password => $RT::DatabasePassword, ); + + $self->dbh->{LongReadLen} = $RT::MaxAttachmentSize; } -=item BuildDSN +=head2 BuildDSN Build the DSN for the RT database. doesn't take any parameters, draws all that from the config file. =cut +use File::Spec; sub BuildDSN { my $self = shift; +# Unless the database port is a positive integer, we really don't want to pass it. $RT::DatabasePort = undef unless (defined $RT::DatabasePort && $RT::DatabasePort =~ /^(\d+)$/); $RT::DatabaseHost = undef unless (defined $RT::DatabaseHost && $RT::DatabaseHost ne ''); +$RT::DatabaseName = File::Spec->catfile($RT::VarPath, $RT::DatabaseName) + if ($RT::DatabaseType eq 'SQLite') and + not File::Spec->file_name_is_absolute($RT::DatabaseName); + $self->SUPER::BuildDSN(Host => $RT::DatabaseHost, Database => $RT::DatabaseName, diff --git a/rt/lib/RT/I18N.pm b/rt/lib/RT/I18N.pm index c013c219e..affff981b 100644 --- a/rt/lib/RT/I18N.pm +++ b/rt/lib/RT/I18N.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::I18N - a base class for localization of RT @@ -76,9 +99,11 @@ ok(RT::I18N->Init); =cut sub Init { + require File::Glob; + # Load language-specific functions - foreach my $language ( glob(substr(__FILE__, 0, -3) . "/*.pm")) { - if ($language =~ /^([-\w.\/\\~:]+)$/) { + foreach my $language ( File::Glob::bsd_glob(substr(__FILE__, 0, -3) . "/*.pm")) { + if ($language =~ /^([-\w\s.\/\\~:]+)$/) { require $1; } else { @@ -95,6 +120,7 @@ sub Init { $_ => [ Gettext => (substr(__FILE__, 0, -3) . "/$_.po"), Gettext => "$RT::LocalLexiconPath/*/$_.po", + Gettext => "$RT::LocalLexiconPath/$_.po", ], } @lang }); @@ -164,10 +190,14 @@ sub SetMIMEEntityToEncoding { my $charset = _FindOrGuessCharset($entity) or return; # one and only normalization - $charset = 'utf-8' if $charset eq 'utf8'; - $enc = 'utf-8' if $enc eq 'utf8'; + $charset = 'utf-8' if $charset =~ /^utf-?8$/i; + $enc = 'utf-8' if $enc =~ /^utf-?8$/i; - SetMIMEHeadToEncoding($entity->head, $charset => $enc, $preserve_words); + SetMIMEHeadToEncoding( + $entity->head, + _FindOrGuessCharset($entity, 1) => $enc, + $preserve_words + ); my $head = $entity->head; @@ -292,6 +322,20 @@ sub DecodeMIMEWordsToEncoding { } } + # XXX TODO: RT doesn't currently do the right thing with mime-encoded headers + # We _should_ be preserving them encoded until after parsing is completed and + # THEN undo the mime-encoding. + # + # This routine should be translating the existing mimeencoding to utf8 but leaving + # things encoded. + # + # It's legal for headers to contain mime-encoded commas and semicolons which + # should not be treated as address separators. (Encoding == quoting here) + # + # until this is fixed, we must escape any string containing a comma or semicolon + # this is only a bandaid + + $enc_str = qq{"$enc_str"} if ($enc_str =~ /[,;]/); $str .= $prefix . $enc_str . $trailing; } @@ -302,24 +346,26 @@ sub DecodeMIMEWordsToEncoding { # {{{ _FindOrGuessCharset -=head2 _FindOrGuessCharset MIME::Entity +=head2 _FindOrGuessCharset MIME::Entity, $head_only -When handed a MIME::Entity will first attempt to read what charset the message is encoded in. Failing that, -will use Encode::Guess to try to figure it out +When handed a MIME::Entity will first attempt to read what charset the message is encoded in. Failing that, will use Encode::Guess to try to figure it out + +If $head_only is true, only guesses charset for head parts. This is because header's encoding (e.g. filename="...") may be different from that of body's. =cut sub _FindOrGuessCharset { my $entity = shift; + my $head_only = shift; my $head = $entity->head; if ($head->mime_attr("content-type.charset")) { return $head->mime_attr("content-type.charset"); } - if ( $head->mime_type =~ m{^text/}) { + if ( !$head_only and $head->mime_type =~ m{^text/}) { my $body = $entity->bodyhandle or return; - return _GuessCharset( $head->as_string . $body->as_string ); + return _GuessCharset( $body->as_string ); } else { # potentially binary data -- don't guess the body @@ -329,7 +375,6 @@ sub _FindOrGuessCharset { # }}} - # {{{ _GuessCharset =head2 _GuessCharset STRING @@ -395,6 +440,7 @@ sub SetMIMEHeadToEncoding { return if $charset eq $enc and $preserve_words; foreach my $tag ( $head->tags ) { + next unless $tag; # seen in wild: headers with no name my @values = $head->get_all($tag); $head->delete($tag); foreach my $value (@values) { diff --git a/rt/lib/RT/I18N/cs.pm b/rt/lib/RT/I18N/cs.pm index 36e2bc6af..10ece3277 100644 --- a/rt/lib/RT/I18N/cs.pm +++ b/rt/lib/RT/I18N/cs.pm @@ -1,3 +1,48 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::I18N::cs; # # CZECH TRANSLATORS COMMENTS see Locale::Maketext::TPJ13 diff --git a/rt/lib/RT/I18N/cs.po b/rt/lib/RT/I18N/cs.po index 75f349595..224a316eb 100644 --- a/rt/lib/RT/I18N/cs.po +++ b/rt/lib/RT/I18N/cs.po @@ -1,71 +1,81 @@ # msgid "" msgstr "" -"Project-Id-Version: RT 3.0.0\n" +"Project-Id-Version: RT 3.2.2\n" "POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2003-03-24 03:00+0800\n" +"PO-Revision-Date: 2005-01-21 00:00+0100\n" "Last-Translator: Jan Okrouhly <okrouhly@civ.zcu.cz>\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-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) +#: NOT FOUND IN SOURCE msgid "#%1" msgstr "#%1" -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->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 +#. ($Ticket->id, $Ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "#%1: %2" -#: lib/RT/Date.pm:337 +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) +#: NOT FOUND IN SOURCE msgid "%1 %2 %3" msgstr "%1 %2 %3" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %3.%2.%7 %4:%5:%6" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" msgstr "%1 %2 pÅ™idáno" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "- %1 %2" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 zmÄ›nÄ›no na %3" -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" msgstr "%1 %2 smazáno" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" msgstr "%1 %2 se vzorem %3" @@ -74,44 +84,79 @@ msgstr "%1 %2 se vzorem %3" msgid "%1 (%2) %3 this ticket\\n" msgstr "%1 (%2) %3 tento požadavek\\n" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr ""%1 (%2) vytvoÅ™il %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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (NezmÄ›nÄ›n)" + +#: NOT FOUND IN SOURCE msgid "%1 - %2 shown" msgstr "%1. až %2. zobrazený" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - argument k pÅ™edánà %2" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - Výstupnà stav jde do STDOUT" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "%1 - Jaký akÄnà modul chcete použÃt" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "%1 - Jaký podmÃnkový modul chcete použÃt" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "%1 - Jaký vyhledávacà modul chcete použÃt" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "ScripAction %1 nahrána" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 pÅ™idáno jako hodnota pro %2" @@ -124,27 +169,31 @@ msgstr "%1 aliasy vyžadujà k Äinnosti TicketId" msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "%1 aliasy vyžadujà k Äinnosti TicketId (odesÃlatel %2) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "%1 vypadá jako lokálnà objekt, ale nenà v databázi" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 uživatelem %2" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 zmÄ›nÄ›no z %2 na %3" -#: lib/RT/Interface/Web.pm:857 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "kopie %1" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "%1 nemůže být nastaveno na %2." @@ -152,38 +201,45 @@ msgstr "%1 nemůže být nastaveno na %2." msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1 nemůže zaÄÃt transakci (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 nemůže nastavit stav na vyÅ™eÅ¡en. RT databáze může být nekonzistentnÃ." -#: html/Elements/MyTickets:25 -#. ($rows) -msgid "%1 highest priority tickets I own..." -msgstr "%1 nejdůležitÄ›jÅ¡Ãch požadavků, které vlastnÃm..." +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "" -#: html/Elements/MyRequests:25 +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "%1 nejdůležitÄ›jÅ¡Ãch požadavků, které vlastnÃm" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." msgstr "%1 nejdůležitÄ›jÅ¡Ãch požadavků, které žádám..." -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "%1 je nástroj zpracujÃcà požadavky z vnÄ›jÅ¡Ãho plánovacÃho nástroje jako je cron" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 již nenà %2 této fronty." -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1 již nenà %2 tohoto požadavku." -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 již nenà hodnotou uživatelské položky %2" @@ -191,16 +247,29 @@ msgstr "%1 již nenà hodnotou uživatelské položky %2" msgid "%1 isn't a valid Queue id." msgstr "%1 nenà platným identifikátorem fronty." -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 %quant(%1,minuta,minuty,minut,minut)" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "%1 nejnovÄ›jÅ¡Ãch nevlastnÄ›ných požadavků" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1 nezobrazeno" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "práva %1" @@ -217,7 +286,7 @@ msgstr "typ %1 neznámý pro $MessageId" msgid "%1 type unknown for %2" msgstr "typ %1 neznámý pro %2" -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 vyÅ™ešà vÅ¡echny Äleny skupiny vyÅ™eÅ¡eného požadavku." @@ -226,22 +295,36 @@ msgstr "%1 vyÅ™ešà vÅ¡echny Äleny skupiny vyÅ™eÅ¡eného požadavku." msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." msgstr "%1 odložà [mÃstnÃ] BÃZI, je-li závislá [Äi Älenem] na spjatém požadavku." -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "uložené dotazy %1" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: neudána pÅ™Ãloha" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1 B" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1 kB" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "%1 je neplatnou hodnotou pro stav" @@ -254,174 +337,226 @@ msgstr "%1 je neznámá akce." msgid "(Check box to delete scrip)" msgstr "(ZatrhnÄ›te pro smazánà scripu)" -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(ZatrhnÄ›te pro smazánÃ)" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(ZatrhnÄ›te pro zakázánà upozorňovánà uvedených pÅ™Ãjemců)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(ZatrhnÄ›te pro povolenà upozorňovánà uvedených pÅ™Ãjemců)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" msgstr "(Zadejte identifikátory Äi URL požadavku, oddÄ›lené mezerami)" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" +msgid "(If left blank, will default to %1)" msgstr "(Pro prázdné pole se použije %1)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "(Žádné uživatelské položky)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Žádnà Älenové)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "Žádné scripy" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "(Žádné vzory)" -#: html/Ticket/Update.html:85 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "" + +#: 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 "(ZaÅ¡le skrytou kopii této aktualizace mezerami oddÄ›lenému seznamu e-mail adres. <b>Neovlivňuje</b> pÅ™Ãjemce budoucÃch aktualizacÃ.)" +msgstr "(ZaÅ¡le skrytou kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. <b>Neovlivňuje</b> pÅ™Ãjemce budoucÃch aktualizacÃ.)" #: NOT FOUND IN SOURCE msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" -msgstr "(ZaÅ¡le skrytou kopii této aktualizace mezerami oddÄ›lenému seznamu e-mail adres. <b>Neovlivňuje</b> pÅ™Ãjemce budoucÃch aktualizacÃ.)" +msgstr "(ZaÅ¡le skrytou kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. <b>Neovlivňuje</b> pÅ™Ãjemce budoucÃch aktualizacÃ.)" -#: html/Ticket/Create.html:79 +#: 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 "(ZaÅ¡le kopii této aktualizace mezerami oddÄ›lenému seznamu e-mail adres. Tito lidé <b>budou</b> dostávat budoucà aktualizace.)" +msgstr "(ZaÅ¡le kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. Tito lidé <b>budou</b> dostávat budoucà aktualizace.)" -#: html/Ticket/Update.html:81 +#: 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 "(ZaÅ¡le kopii této aktualizace mezerami oddÄ›lenému seznamu e-mail adres. <b>NemÄ›nÃ</b> pÅ™Ãjemce budoucÃch aktualizacÃ" +msgstr "(ZaÅ¡le kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. <b>NemÄ›nÃ</b> pÅ™Ãjemce budoucÃch aktualizacÃ" #: NOT FOUND IN SOURCE msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" -msgstr "(ZaÅ¡le kopii této aktualizace mezerami oddÄ›lenému seznamu e-mail adres. <b>Neovlivňuje</b> pÅ™Ãjemce budoucÃch aktualizacÃ.)" +msgstr "(ZaÅ¡le kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. <b>Neovlivňuje</b> pÅ™Ãjemce budoucÃch aktualizacÃ.)" -#: html/Ticket/Create.html:69 +#: 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 "(ZaÅ¡le kopii této aktualizace mezerami oddÄ›lenému seznamu e-mail adres. Tito lidé <b>budou</b> dostávat budoucà aktualizace.)" +msgstr "(ZaÅ¡le kopii této aktualizace Äárkami oddÄ›lenému seznamu e-mail adres. Tito lidé <b>budou</b> dostávat budoucà aktualizace.)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(Použijte tyto formuláře v pÅ™ÃpadÄ› výbÄ›ru Uživatelen definované podmÃnky Äi akce)" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(prázdná)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "žádné jméno nebylo vypsáno" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(bez pÅ™edmÄ›tu)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(bez hodnoty)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(jen jeden požadavek)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(oÄekávájÃcà schválenÃ)" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(probÃhá jiná SbÃrka)" + +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" msgstr "(jiné oÄekávajÃcà požadavky)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(povinné)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(nepojmenováno)" -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I own..." -msgstr "25 mnou vlastnÄ›ných nejdůležitÄ›jÅ¡Ãch požadavků..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "25 mnou žádaných nejdůležitÄ›jÅ¡Ãch požadavků..." - -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" -msgstr "<% $_ %>" +msgstr "" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"Nový požadavek v\"> %1" -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "Prázdný vzor" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE nenalezeno" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACE mohou být jen vytvářeny nebo ruÅ¡eny." -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" msgstr "PÅ™eruÅ¡eno k zamezenà nežádoucÃch zmÄ›n požadavku.\\n" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "O mnÄ›" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "ŘÃzenà pÅ™Ãstupu" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Akce" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Akce %1 nenalezena" -#: bin/rt-crontool:123 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "Akce provedena." -#: bin/rt-crontool:119 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "Akce pÅ™ipravena..." -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "PÅ™idat" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "PÅ™idat AdminCc" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "PÅ™idat Cc" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "PÅ™idat podmÃnku" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" msgstr "PÅ™idat dalšà soubory" -#: html/Search/Bulk.html:88 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "PÅ™idat Žadatele" +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "PÅ™idat hodnotu" + #: NOT FOUND IN SOURCE msgid "Add a new a global scrip" msgstr "PÅ™idat nový globálnà scrip" @@ -430,57 +565,65 @@ msgstr "PÅ™idat nový globálnà scrip" msgid "Add a scrip to this queue" msgstr "PÅ™idat scrip k této frontÄ›" -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" msgstr "PÅ™idat scrip do vÅ¡ech front" -#: html/Search/Bulk.html:118 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "PÅ™idat dodateÄnou podmÃnku" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "PÅ™idat komentáře Äi odpovÄ›di k vybraným požadavkům" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "PÅ™idat Äleny" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "PÅ™idat nové pozorovatele" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "AddNextState" msgstr "PÅ™idatDalÅ¡ÃStav" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "Uživatel pÅ™idán do této fronty jako %1" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "Uživatel pÅ™idán k tomuto požadavku jako %1" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Adresa1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Adresa2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Admin Cc" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "Administrativnà komentář" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "Administrativnà korespondence" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "Správa/Front" @@ -488,7 +631,7 @@ msgstr "Správa/Front" msgid "Admin users" msgstr "Správa/Uživatelů" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "Správa/Globálnà konfigurace" @@ -496,7 +639,7 @@ msgstr "Správa/Globálnà konfigurace" msgid "Admin/Groups" msgstr "Správa/Skupin" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "Správa/Front/ZákladnÃch údajů" @@ -504,7 +647,7 @@ msgstr "Správa/Front/ZákladnÃch údajů" msgid "AdminAllPersonalGroups" msgstr "Spravovat vÅ¡echny osobnà skupiny" -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "AdminCc" @@ -516,39 +659,47 @@ msgstr "AdminComment" msgid "AdminCorrespondence" msgstr "AdminCorrespondence" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" msgstr "Spravovat uživatelem definované položky" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "Spravovat skupinu" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "Spravovat Älenstvà ve skupinách" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "Spravovat vlastnà osobnà skupiny" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "Spravovat frontu" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "Spravovat uživatele" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Administrativnà Cc" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "PokroÄilé" + #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "PokroÄilé VyhledávánÃ" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "Po" @@ -556,11 +707,19 @@ msgstr "Po" msgid "Age" msgstr "StářÃ" -#: html/Admin/Elements/EditCustomFields:96 +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "" + +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "VÅ¡echna schvalovánà proÅ¡la" + +#: NOT FOUND IN SOURCE msgid "All Custom Fields" msgstr "VÅ¡echny uživatelské položky" -#: html/Admin/Queues/index.html:53 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "VÅ¡echny Fronty" @@ -568,24 +727,39 @@ msgstr "VÅ¡echny Fronty" msgid "Always sends a message to the requestors independent of message sender" msgstr "Vždy posÃlá zprávu žadatelům nezávisle na odesÃlateli" -#: html/Elements/Tabs:58 +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Provést" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Provést zmÄ›ny" + +#: html/Elements/Tabs:74 msgid "Approval" msgstr "SchvalovánÃ" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" msgstr "Schválenà #%1: $2" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "Schválenà #$1: Poznámky neuloženy kvůli systémové chybÄ›" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "Schválenà #%1: Poznámky uloženy" @@ -594,63 +768,84 @@ msgstr "Schválenà #%1: Poznámky uloženy" msgid "Approval Details" msgstr "Detaily schválenÃ" +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Schvalovánà proÅ¡lo" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Schvalovánà odmÃtnuto" + #: NOT FOUND IN SOURCE msgid "Approval diagram" msgstr "Schvalovacà diagram" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "Schválit" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "Poznámky schvalovatele: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "dub" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "VzestupnÄ›" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "PÅ™iložit" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "PÅ™ipojit soubor" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "PÅ™ipojený soubor" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "PÅ™Ãloha '%1' nemůže být nahrána" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "PÅ™Ãloha vytvoÅ™ena" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "Jméno souboru pÅ™Ãlohy" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "PÅ™Ãlohy" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Atribut smazán" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "srp" -#: html/Admin/Elements/ModifyUser:66 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "AuthSystem" -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "Automatická odpovÄ›Ä" @@ -663,36 +858,38 @@ msgid "AutoreplyToRequestors" msgstr "Automatická odpovÄ›Ä Å¾adatelům" #: NOT FOUND IN SOURCE +msgid "Available Columns" +msgstr "Dostupné položky" + +#: NOT FOUND IN SOURCE msgid "Bad PGP Signature: %1\\n" msgstr "Chybná PGP signatura: %1\\n" -#: html/SelfService/Attachment/dhandler:40 +#: NOT FOUND IN SOURCE msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "Chybný identifikátor pÅ™Ãlohy. Nelze nalézt pÅ™Ãlohu'%1'\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "Chybná data v %1" -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) +#: NOT FOUND IN SOURCE msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "Chybné ÄÃslo transakce u pÅ™Ãlohy. %1 má být %2\\n" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "Základnà údaje" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Bcc" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Neopomeňte uložit vaÅ¡e zmÄ›ny" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "PÅ™ed" @@ -700,92 +897,125 @@ msgstr "PÅ™ed" msgid "Begin Approval" msgstr "ZaÄátek schvalovánÃ" -#: etc/initialdata:202 +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: etc/initialdata:217 msgid "Blank" msgstr "Prázdný" -#: html/Search/Listing.html:79 -msgid "Bookmarkable URL for this search" -msgstr "Uložitelné URL pro toto hledánÃ" +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "Uložitelný odkaz" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "Zkrácené hlaviÄky" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "Hromadná úprava požadavků" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "Nelze mÄ›nit systémové uživatele" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "Může tento uživatel vidÄ›t tuto frontu" -#: lib/RT/CustomField_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "Uživatelské položce nelze pÅ™idat hodnotu beze jména" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Nelze nalézt uložený dotaz ke zpracovánÃ" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "Požadavek nelze svázat se sebou samým" -#: lib/RT/Ticket_Overlay.pm:2787 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "Nelze slouÄit do slouÄeného požadavku. To by se vám nemÄ›lo nikdy stát." -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Tento dotaz nelze uložit" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "Nelze zadat zároveň zdroj i cÃl" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "Nelze vytvoÅ™it uživatele: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "Cc" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "ZmÄ›na hesla" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "ZaÅ¡rtnutÃm odstranÃte" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "ZatrhnÄ›te k odebránà práva" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Potomci" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "MÄ›sto" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "VyÅ™eÅ¡eno" -#: html/SelfService/Elements/Tabs:60 -msgid "Closed requests" +#: NOT FOUND IN SOURCE +msgid "Closed Tickets" +msgstr "UzavÅ™ené požadavky" + +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" msgstr "UzavÅ™ené požadavky" #: NOT FOUND IN SOURCE msgid "Command not understood!\\n" msgstr "Neznámý pÅ™Ãkaz!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Komentovat" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Adresa pro komentáře" @@ -793,40 +1023,39 @@ msgstr "Adresa pro komentáře" msgid "Comment not recorded" msgstr "Komentář nezaznamenán" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "Komentovat požadavky" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "Komentovat požadavky" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "Poznámky" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "Komentář (NeposÃlá se žadatelům)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "Komentář (nepoÅ¡le se žadatelům)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "Poznámky o %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "Poznámky o tomto uživateli" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "Komentáře pÅ™idány" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "Commit v zárodku" @@ -834,27 +1063,27 @@ msgstr "Commit v zárodku" msgid "Compile Restrictions" msgstr "Omezenà pÅ™ekladu" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "PodmÃnka" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "PodmÃnky splnÄ›ny..." -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "PodmÃnka nenalezena" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Správa" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "PotvrzenÃ" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "Kontaktnà informaÄnà systém" @@ -862,19 +1091,27 @@ msgstr "Kontaktnà informaÄnà systém" msgid "Contacted date '%1' could not be parsed" msgstr "Datum kontaktu '%1' nemůže být rozpoznáno" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Obsah" -#: etc/initialdata:266 +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "KopÃrovat" + +#: etc/initialdata:286 msgid "Correspondence" msgstr "Korespondence" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "Adresa pro korespondenci" -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Korespondence zaznamenána" @@ -882,33 +1119,47 @@ msgstr "Korespondence zaznamenána" msgid "Correspondence not recorded" msgstr "Korespondence nebyla zaznamenána" -#: lib/RT/Ticket_Overlay.pm:3458 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "Nelze pÅ™idat novou hodnotu uživatelské položky požadavku. " -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "Nelze zmÄ›nit vlastnÃka. " -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "Nelze vytvoÅ™it Uživatelskou položku" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "Nelze vytvoÅ™it skupinu" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "Nelze vytvoÅ™it vzor: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "Nelze vytvoÅ™it požadavek. Nenastavena fronta" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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 "Nelze vytvoÅ™it uživatele" @@ -920,11 +1171,11 @@ msgstr "Nelze nalézt požadavek s identifikátorem %1" msgid "Could not find group %1." msgstr "Nelze nalézt skupinu %1." -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "Tohoto uživatele nelze nalézt nebo vytvoÅ™it" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "Nelze naléze tohoto uživatele" @@ -932,35 +1183,51 @@ msgstr "Nelze naléze tohoto uživatele" msgid "Could not find user %1." msgstr "Nelze nalézt uživatele %1." -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "Nelze naÄÃst skupinu" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "Tento uživatel nemůže být %1 této fronty" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "Tento uživatel nemůže být %1 tohoto požadavku" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "Tento uživatel nemůže být odstranÄ›n jako %1 této fronty" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "Tento uživatel nemůže být odstranÄ›n jako %1 tohoto požadavku" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Nelze nastavit uživatelské informace" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "Do skupiny nelze pÅ™idat Älena" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "Nelze vytvoÅ™it transakci: %1" @@ -973,15 +1240,15 @@ msgstr "Nelze zjistit co dÄ›lat s gpg odpovÄ›dÃ\\n" msgid "Couldn't find group\\n" msgstr "Skupinu nelze nalézt\\n" -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "Nemohu nalézt sloupec" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "Tohoto uživatele nelze nalézt" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "Tuto hodnotu nelze nalézt" @@ -989,11 +1256,21 @@ msgstr "Tuto hodnotu nelze nalézt" msgid "Couldn't find user\\n" msgstr "Uživatele nelze nalézt\\n" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "Z uživatelské databáze nelze naÄÃst %1.\\n" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Couldn't load RT config file '%1' %2" msgstr "KonfiguraÄnà soubor RT '%1'nelze naÄÃst %2" @@ -1002,21 +1279,26 @@ msgstr "KonfiguraÄnà soubor RT '%1'nelze naÄÃst %2" msgid "Couldn't load Scrips." msgstr "Scripy nelze naÄÃst." -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "Skupinu %1 nelze naÄÃst" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "Vazbu nelze naÄÃst" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "Frontu nelze naÄÃst" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "Frontu %1 nelze naÄÃst" @@ -1029,38 +1311,47 @@ msgstr "Scrip nelze naÄÃst" msgid "Couldn't load template" msgstr "Vzor nelze naÄÃst" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "Uživatele (%1) nelze naÄÃst" -#: html/SelfService/Display.html:166 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "Požadavek '%1' nelze naÄÃst" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "ZemÄ›" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "VytvoÅ™it" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "VytvoÅ™it požadavky" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "VytvoÅ™it uživatelskou položku" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "VytvoÅ™enà uživatelské položky pro frontu %1" -#: html/Admin/Global/CustomField.html:48 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" msgstr "VytvoÅ™enà uživatelské položky pro vÅ¡echny front" @@ -1072,11 +1363,11 @@ msgstr "VytvoÅ™it novou uživatelskou položku" msgid "Create a new global scrip" msgstr "VytvoÅ™it nový globálnà scrip" -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "VytvoÅ™it novou skupinu" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "VytvoÅ™it novou vlastnà skupinu" @@ -1092,15 +1383,15 @@ msgstr "VytvoÅ™it nový scrip" msgid "Create a new template" msgstr "VytvoÅ™it nový vzor" -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "VytvoÅ™enà nového požadavku" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "VytvoÅ™it nového uživatele" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "VytvoÅ™it frontu" @@ -1108,36 +1399,40 @@ msgstr "VytvoÅ™it frontu" msgid "Create a queue called" msgstr "VytvoÅ™it frontu nazvanou" -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 +#: NOT FOUND IN SOURCE msgid "Create a request" msgstr "VytvoÅ™it požadavek" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "VytvoÅ™it scrips pro frontu %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "VytvoÅ™it vzor" -#: etc/initialdata:130 +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "VytvoÅ™it požadavek" + +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "Vytvářet požadavky podle toho vzoru scripu" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "VytvoÅ™it požadavek" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "Vytvářet požadavky v této frontÄ›" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "Vytvářet, mazat a mÄ›nit uživatelen definované položky" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "Vytvářet, mazat a mÄ›nit fronty" @@ -1145,23 +1440,27 @@ msgstr "Vytvářet, mazat a mÄ›nit fronty" msgid "Create, delete and modify the members of any user's personal groups" msgstr "Vytvářet, mazat a mÄ›nit Äleny uživatelských osobnÃch skupin" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "Vytvářet, mazat a mÄ›nit Äleny osobnÃch skupin" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "Vytvářen, mazat a mÄ›nit uživatele" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "VytvoÅ™it požadavek" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "VytvoÅ™eno" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "Uživatelská položka %1 vytvoÅ™ena" @@ -1170,80 +1469,87 @@ msgstr "Uživatelská položka %1 vytvoÅ™ena" msgid "Created template %1" msgstr "Vzor %1 vytvoÅ™en" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Tvůrce" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Aktuálnà relace" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "Aktuálnà scripy" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Aktuálnà Älenové" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Aktuálnà práva" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" msgstr "Aktuálnà vyhledávacà podmÃnky" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Aktuálnà pozorovatelé" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) +#: NOT FOUND IN SOURCE msgid "Custom Field #%1" msgstr "Uživatelská položka #%1" -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "Uživatelské položky" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "ÄŒistÃcà kód uživatelské akce" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "PÅ™Ãpravný kód uživatelské akce" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "Uživatelská podmÃnka" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "Užitavelská položka %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "Uživatelská položka %1 má hodnotu." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "Uživatelská položka %1 nemá hodnotu." -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Uživatelská položka %1 nenalezena" -#: html/Admin/Elements/EditCustomFields:197 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" msgstr "Uživatelská položka smazána" -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "Uživatelská položka nenalezena" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "Hodnota %1 nemůže být nalezena v uživatelské položce %2" @@ -1252,104 +1558,124 @@ msgstr "Hodnota %1 nemůže být nalezena v uživatelské položce %2" msgid "Custom field value changed from %1 to %2" msgstr "Hodnota uživatelské položky zmÄ›nÄ›na z %1 na %2" -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "Hodnota uživatelské položky nemůže být smazána" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "Hodnota uživatelské položky nemůže být nalezena" -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "Hodnota uživatelské položky smazána" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "Uživatelská položka" -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Datumy" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "pro" -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Implicitnà vzor automatické odpovÄ›di" - -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "Implicitnà vzor automatické odpovÄ›di" -#: etc/initialdata:275 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "Implicitnà fronta" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Implicitnà žadatel" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "Implicitnà vzor administrativnÃho komentáře" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "Implicitnà vzor administrativnà korespondence" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "Implicitnà korespondenÄnà vzor" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "Implicitnà transakÄnà vzor" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" msgstr "DefaulnÃ: %1/%2 zmÄ›nÄ›no z %3 na %4" -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Delegovat práva" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "Delegovat specifická práva, která vám byla poskytnuta." -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "Delegovat práva" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "PověřenÃ" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "Smazat" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Smazat vzor" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Smazat vybrané scripy" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "Mazat požadavky" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "Smazat požadavek" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "Smazánà tohoto objektu mohlo poruÅ¡it referenÄnà integritu" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "Smazánà tohoto objektu by mohlo poruÅ¡it referenÄnà integritu" -#: lib/RT/User_Overlay.pm:430 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Smazánà tohoto objektu by mohlo naruÅ¡it referenÄnà integritu" -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "ZamÃtnout" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" msgstr "Je rekvizitou pro" @@ -1357,68 +1683,99 @@ msgstr "Je rekvizitou pro" msgid "Dependencies: \\n" msgstr "Závistlosti: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "PÅ™idána závislost %1" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "Závislost %1 smazána" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "PÅ™idána závislost na %1" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "Závislost na %1 smazána" + +#: 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 msgid "Depends on" msgstr "ZávisejÃcà na" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "SestupnÄ›" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "PopiÅ¡te pÅ™Ãpad nÞe" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "Popis" -#: html/SelfService/Elements/MyRequests:44 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "Podrobnosti" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Zobrazit" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "Zobrazit pÅ™Ãstupová práva" -#: lib/RT/Queue_Overlay.pm:75 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Zobrazované položky" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "Zobrazovat scrips vzory pro tuto frontu" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "Zobrazovat scripy pro tuto frontu" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Režim zobrazenÃ" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) -msgid "Display ticket #%1" -msgstr "Zobraz požadavek #%1" +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "Zobraz uložené dotazy pro tuto skupinu" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "Å ÃÅ™eno pod verzà 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> GNU GPL.</a>" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "DÄ›lat cokoli a vÅ¡echno" -#: html/Elements/Refresh:30 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "NeobÄerstvovat tuto stránku." -#: html/Search/Elements/PickRestriction:114 -msgid "Don't show search results" -msgstr "Nezobrazit výsledky hledánÃ" - -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "Stáhnout" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 msgid "Due" msgstr "TermÃn dokonÄenÃ" @@ -1426,8 +1783,7 @@ msgstr "TermÃn dokonÄenÃ" msgid "Due date '%1' could not be parsed" msgstr "Datum termÃnu dokonÄenà '%1' nemůže být rozpoznán" -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "CHYBA: Nelze naÄÃst požadavek '%1': %2.\\n" @@ -1435,25 +1791,41 @@ msgstr "CHYBA: Nelze naÄÃst požadavek '%1': %2.\\n" msgid "Edit" msgstr "Upravit" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "Upravit uživatelské položky pro %1" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "Upravit relace" -#: html/Admin/Queues/Templates.html:41 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Upravit dotaz" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "Upravit vzory pro frontu %1" -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "Upravit scprips" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "Úprava systémových vzorů" @@ -1461,28 +1833,30 @@ msgstr "Úprava systémových vzorů" msgid "Edit templates for %1" msgstr "Upravit vzory pro %1" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "Upravit Uložené Dotazy" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "Úprava konfigurace pro frontu %1" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "Úprava konfigurace pro uživatele %1" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "Úprava uživatelské položky %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "Úprava Älenstvà ve skupinÄ› %1" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "Úprava Älenstvà ve vlastnà skupinÄ› %1" @@ -1491,145 +1865,215 @@ msgstr "Úprava Älenstvà ve vlastnà skupinÄ› %1" msgid "Editing template %1" msgstr "Úprava vzoru %1" -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "Zdroj Äi cÃl musà být zadány" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Email" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "Email adresa je použita" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "Email adresa" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "Kódovánà emailu" -#: html/Admin/Elements/EditCustomField:36 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "Povolena (zruÅ¡enÃm zatrhnutà zablokujete tuto uživatelskou položky)" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "Povolena (zruÅ¡enÃm zatrhnutà zablokujete tuto skupinu)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "Povoleno (zruÅ¡enà zatrhnutà zablokuje tuto frontu)" -#: html/Admin/Elements/EditCustomFields:99 +#: NOT FOUND IN SOURCE msgid "Enabled Custom Fields" msgstr "Povolené uživatelské položky" -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "Povolené fronty" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "Povolen stav %1" -#: lib/RT/CustomField_Overlay.pm:361 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "Vyplnit vÃce hodnot" -#: lib/RT/CustomField_Overlay.pm:358 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Zadejte objekty Äi URI k provázánÃ. VÃce položek oddÄ›lujte mezerami." + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "Vyplnit jednu hodnotu" -#: html/Ticket/Elements/EditLinks:112 +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Zadejte fronty Äi URI k provázánÃ. VÃce položek oddÄ›lujte mezerami." + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Zadejte požadavky Äi URI k provázánÃ. VÃce položek oddÄ›lujte mezerami." + +#: NOT FOUND IN SOURCE msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." msgstr "Zadejte požadavky Äi URI se nimiž požadavky svázat. OddÄ›lte vÃce položek mezerami." -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Chyba" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "Chyba v parametrech do Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Chyba v parametrech do Queue->DelWatcher" +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Chyba v parametrech do Queue->DeleteWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Chyba v parametrech do Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Chyba v parametrech do Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Chyba v parametrech do Ticket->DeleteWatcher" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "Eskalovat požadavky" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Odhadovaný" #: etc/initialdata:20 msgid "Everyone" msgstr "Kdokoli" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "PÅ™Ãklad:" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "Identifikátor externà autentizace" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "Identifikátor externÃho kontaktu" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "Doplňkové údaje" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "Nepovedlo se nalézt uživatele 'Privilegované' pseudoskupiny." -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "Nepovedlo se nalézt uživatele 'Neprivilegované' pseudoskupiny" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "Nepovedlo se nahrát modul %1. (%2)" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "úno" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Název souboru" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Fin" msgstr "Kon" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Koncová priorita" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "Koncová priorita" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 +#: NOT FOUND IN SOURCE msgid "Find group whose" msgstr "NajÃt skupiny které" -#: html/Elements/Quicksearch:25 +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Find new/open tickets" msgstr "NajÃt nové/otevÅ™ené požadavky" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "NajÃt ty, jejichž" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "Nalézt požadavky" @@ -1637,78 +2081,90 @@ msgstr "Nalézt požadavky" msgid "Finish Approval" msgstr "ZávereÄné schválenÃ" -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "PrvnÃ" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "Prvnà stránka" -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "Foo!" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "Vynutit zmÄ›nu" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "Nalezen%quant(%1,,y,o) %numf(%1) %quant(%1,požadavek,požadavky,požadavků)" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "Nalezen objekt" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "Kontaktnà údaje ve volné podobÄ›" -#: lib/RT/CustomField_Overlay.pm:38 +#: NOT FOUND IN SOURCE msgid "FreeformMultiple" msgstr "Volná forma vÃcenásobnÄ›" -#: lib/RT/CustomField_Overlay.pm:37 +#: NOT FOUND IN SOURCE msgid "FreeformSingle" msgstr "Volná formu jedinkrát" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "pá" -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "Celé hlaviÄky" -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "Aktuálnà uživatel se zÃskává z PGP podpisu\\n" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "VzÃt vzor ze souboru" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "Dán %1" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "GlobálnÃ" -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Globálnà Scrips" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "Globálnà vzor: %1" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Provést" + +#: 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 msgid "Go!" msgstr "SpusÅ¥!" @@ -1716,15 +2172,15 @@ msgstr "SpusÅ¥!" msgid "Good pgp sig from %1\\n" msgstr "Správný PGP podpis od %1\\n" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "PÅ™ejÃt na stránku" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "PÅ™ejÃt na požadavek" -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "Skupina" @@ -1732,28 +2188,28 @@ msgstr "Skupina" msgid "Group %1 %2: %3" msgstr "Skupina %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "Práva skupiny" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "Skupina již má Älena" -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "Skupina nemůže být založena: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "Skupina vytvoÅ™ena" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "Skupina nemá takového Älena" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Skupina nenalezena" @@ -1765,36 +2221,54 @@ msgstr "Skupina nenalezena.\\n" msgid "Group not specified.\\n" msgstr "Skupina neudána.\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Skupiny" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "Skupiny nemohou být svými Äleny" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "Ahoj!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Ahoj, %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "Historie" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "Telefon domů" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Domovská stránka" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "Mám %quant(%1,mÃchaÄka,mÃchaÄky,mÃchaÄek)" @@ -1803,138 +2277,166 @@ msgstr "Mám %quant(%1,mÃchaÄka,mÃchaÄky,mÃchaÄek)" msgid "I have [quant,_1,concrete mixer]." msgstr "I have [quant,_1,concrete mixer]." +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + #msgstr "Mám [quant,_1,MÃchaÄku na beton,MÃchaÄky na beton,MÃchaÄek na beton]." -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "Identifikátor" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identita" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "OdmÃtni původce a zruÅ¡ stávajÃcà schválenÃ, bylo-li zamÃtnuto schválenÃ" -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "Nebyl-li zadán Žadatel, vytvářej požadavky jako tento žadatel" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "Nebyla-li zadána fronta, vytvářej požadavky v této frontÄ›" + +#: 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 "Byl-li tento nástroj setgid, mÃstnà uživatel jej mohl použit k zÃskanà administrativnÃho pÅ™Ãstupu k RT" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "Pokud jste zmÄ›nili cokoli nahoÅ™e, nezapomeňte" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "Neplatná hodnota pro %1" -#: lib/RT/Interface/Web.pm:863 +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "NemÄ›nitelná položka" -#: html/Admin/Elements/EditCustomFields:74 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." msgstr "Zahrnout do výpisu blokované uživatelské položky" -#: html/Admin/Queues/index.html:43 +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Zahrnout blokované skupiny ve výpisu." + +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "Zahrnout blokované fronty do výpisu." -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "Zahrnout blokované uživatele do vyhledávánÃ." -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "PoÄáteÄnà priorita" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "PoÄáteÄnà priorita" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Chyba na vstupu" -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "VnitÅ™nà chyba" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "VnitÅ™nà chyba: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "Neplatný typ skupiny" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "Neplatné právo" -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "Neplatná data" -#: lib/RT/Ticket_Overlay.pm:438 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." msgstr "Neplatný vlastnÃk. Použije se 'nobody'." -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "Neplatná fronta" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "Neplatné právo" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "Neplatná hodnota pro %1" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "Neplatná hodnota pro uživatelskou položku" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Neplatná hodnota pro stav" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "Je velmi důležité, aby neprivilegovanà uživatelé nemohli spustit tento nástroj." -#: bin/rt-crontool:192 +#: 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 "Pro spuÅ¡tÄ›nà tohoto nástroje se doporuÄuje založenà neprivilegovaného UNIX uživatele se správným skupinovým ÄlenstvÃm a pÅ™Ãstupem do RT." -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "PoužÃvá nÄ›kolik parametrů:" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Items pending my approval" msgstr "VÄ›ci oÄekávajÃcà mé schválenÃ" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "led" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "PÅ™idat se Äi odebrat z této skupiny" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Äec" -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "Maxi" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "Äen" @@ -1942,39 +2444,51 @@ msgstr "Äen" msgid "Keyword" msgstr "KlÃÄové slovo" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "Jazyk" -#: html/Ticket/Elements/Tabs:73 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "Jazyk" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "PoslednÃ" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Poslednà kontakt" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Naposled kontaktován" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" msgstr "Naposled upozornÄ›n" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Naposled aktualizován" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "NaposledAktualizoval(a)" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "Zbývá" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "Umožnit tomuto uživateli pÅ™Ãstup k RT" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "Umožnit dávat tomuto uživateli práva" @@ -1986,172 +2500,263 @@ msgstr "VlastnÃk omezen na %1 %2" msgid "Limiting queue to %1 %2" msgstr "Fronta omezena na %1 %2" -#: lib/RT/Ticket_Overlay.pm:2697 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "Vazba již existuje" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "Vazba nemůže být vytvoÅ™ena" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "Vazba vytvoÅ™ena (%1)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "Vazba zruÅ¡ena (%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "Vazba nenalezena" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "Svázat požadavek #%1" -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Vazby" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "NaÄÃst" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "NaÄÃst uložený dotaz:" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "NaÄtené perlovské moduly" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "UmÃstÄ›nÃ" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "Záznamový adresář %1 nenalezen nebo doň nemůže být zapisováno.\\ RT nemůže běžet." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "PÅ™ihlášen jako %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" msgstr "PÅ™ihlásit" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Odhlásit" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "Nastavit vlastnÃka" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "Nastavit stav" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "Nastavit datum termÃnu dokonÄenÃ" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "Nastavit datum vyÅ™eÅ¡enÃ" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "Nastavit datum, kdy zaÄal" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "Nastavit datum, kdy zaÄne" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "Nastavit datum poslednÃho kontaktu" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "Nastavit prioritu" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "Nastavit frontu" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "Nastavit pÅ™edmÄ›t" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "Správa skupin a Älenstvà v nich" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "Správa vlastnostà a konfiguracà platných ve vÅ¡ech frontách" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "Správa front a jim pÅ™ÃsluÅ¡ných vlastnostÃ" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "Správa uživatelů a hesel" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "bÅ™e" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "kvÄ›" -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "ÄŒlen %1 pÅ™idán" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "ÄŒlen %1 odebrán" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "ÄŒlen pÅ™idán" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "ÄŒlen odebrán" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "ÄŒlen neodebrán" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "ÄŒlen" -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "ÄŒlenové" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "ÄŒlenstvà v %1 pÅ™idáno" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "ÄŒlenstvà v %1 zruÅ¡eno" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "SlouÄenà úspěšné" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "SlouÄenà se nepodaÅ™ilo. Nelze nastavit EffectiveId" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "SlouÄit do" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "SlouÄen do %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "Zpráva" -#: lib/RT/Interface/Web.pm:867 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "Zpráva nemůže být zaznamenána" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Zpráva zaznamenána" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "Zprávy o tomto požadavku NEBUDOU zaslány na..." + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "Chybà primárnà klÃÄ?: %1" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "Mobilnà telefon" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "Mobilnà telefon" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "Upravovat seznam pÅ™Ãstupových práv" @@ -2159,15 +2764,37 @@ msgstr "Upravovat seznam pÅ™Ãstupových práv" msgid "Modify Custom Field %1" msgstr "Upravit uživatelskou položku %1" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Modify Custom Fields which apply to all queues" msgstr "Úprava uživatelských položek pro vÅ¡echny fronty" -#: lib/RT/Queue_Overlay.pm:73 +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Úprava skupinových práv" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Upravit Äleny" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Upravit práva" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" msgstr "Upravovat vzory scripů této fronty" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" msgstr "Upravovat scripů této fronty" @@ -2175,39 +2802,52 @@ msgstr "Upravovat scripů této fronty" msgid "Modify Template %1" msgstr "Upravovat vzor %1" -#: html/Admin/Queues/CustomField.html:45 +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Upravit práva uživatelů" + +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" msgstr "Upravovat uživatelskou položku pro frontu %1" -#: html/Admin/Global/CustomField.html:53 +#: NOT FOUND IN SOURCE msgid "Modify a CustomField which applies to all queues" msgstr "Upravovat uživatelskou položku pro vÅ¡echny fronty" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "Upravovat scrip pro frontu %1" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "Upravovat scrip platný ve vÅ¡ech frontách" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "" + +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "Upravit datumy pro #%1" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "Úprav datumů pro požadavek # %1" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Úprava globálnÃch skupinových práv" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "Úprava globálnÃch skupinových práv." @@ -2215,100 +2855,110 @@ msgstr "Úprava globálnÃch skupinových práv." msgid "Modify global scrips" msgstr "Úprava globálnÃch scrips" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "Úprava globálnÃch uživatelských práv" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "Úprava globálnÃch uživatelských práv." -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "Upravovat metadata skupiny nebo smazat skupinu" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "Úprava skupinových práv pro %1" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "Úprava skupinových práv pro frontu %1" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "Upravovat seznam Älenů pro tuto skupinu" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "Upravovat vlastnà RT úÄet" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "Úprava uživatelů fronty %1" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "Úprava uživatelů souvisejÃcÃch s požadavkem #%1" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "Úprava scrips pro frontu %1" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "Upravovat scripy platné ve vÅ¡ech frontách" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "Úprava vzoru %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "Upravit vzory pro vÅ¡echny fronty" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "Úprava skupiny %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "Upravovat pozorovatele fronty" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Úprava uživatele %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "Úprava požadavku # %1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "Úprava požadavku #%1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "Upravovat požadavky" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Úprava uživatelských práv pro skupinu %1" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "Úprava skupinových práv pro frontu %1" @@ -2317,72 +2967,85 @@ msgstr "Úprava skupinových práv pro frontu %1" msgid "Modify watchers for queue '%1'" msgstr "Úprava pozorovatelů fronty '%1'" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "Upravovat seznam pÅ™Ãstupových práv" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "Upravovat Älenstvà ve skupinÄ›" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "Upravovat pozorovale fronty" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "Upravovat scripy" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "Upravovat sebe" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "Upravovat vzor" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "Upravovat požadavek" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "po" -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "VÃce o %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "Dát nÞe" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "Dát výše" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "VÃcenásobná" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "Nutno zadat atribut 'Jméno'" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "Mé požadavky ve stavu %1" + #: NOT FOUND IN SOURCE msgid "My Approvals" msgstr "Mnou schválené" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "Mnou schválené" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Mé uložené dotazy" + +#: 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 msgid "Name" msgstr "Jméno" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Jméno je použito" @@ -2390,59 +3053,63 @@ msgstr "Jméno je použito" msgid "Need approval from system administrator" msgstr "Je tÅ™eba schválenà systémového správce" -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "Nikdy" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Nové" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nové relace" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Nové heslo" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "Nová probÃhajÃcà schválenÃ" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "Nové relace" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Nový dotaz" -#: html/Ticket/Elements/Tabs:36 +#: NOT FOUND IN SOURCE msgid "New Search" msgstr "Nové vyhledávánÃ" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "VytvoÅ™it uživatelskou položku" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "Založit skupinu" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Nové heslo" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Oznámenà nového hesla zasláno" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "VytvoÅ™enà fronty" -#: html/SelfService/Elements/Tabs:63 +#: NOT FOUND IN SOURCE msgid "New request" msgstr "Nový požadavek" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Nová práva" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "VytovÅ™enà scripu" @@ -2450,67 +3117,87 @@ msgstr "VytovÅ™enà scripu" msgid "New search" msgstr "Nové vyhledánÃ" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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 "VytvoÅ™it vzor" -#: lib/RT/Ticket_Overlay.pm:2771 +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Nový požadavek" + +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "Nový požadavek neexistuje" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "VytvoÅ™it uživatele" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Nový uživatel jména" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Nový pozorovatel" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "Nové nastavenà okna" -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "DalÅ¡Ã" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "Dalšà stránka" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "Dalšà stránka" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "PÅ™ezdÃvka" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "PÅ™ezdÃvka" -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "Žádná uživatelská položka" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "Nedefinována žádná skupina" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Prázdný dotaz" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" msgstr "Nedefinována žádná fronta" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "Žádný uživatel RT nenalezen. ProsÃm poraÄte se se správcem RT.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "Žádný vzor" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "Neudán požadavek. PÅ™eruÅ¡uje se požadavek " @@ -2518,11 +3205,11 @@ msgstr "Neudán požadavek. PÅ™eruÅ¡uje se požadavek " msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "Neudán požadavek. PÅ™eruÅ¡ujà se úpravy požadavku\\n\\n" -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "bez akce" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "Neudán sloupec" @@ -2530,367 +3217,494 @@ msgstr "Neudán sloupec" msgid "No command found\\n" msgstr "PÅ™Ãkaz nenalezen\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "Poznámky k tomuto uživateli neudány" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "Žádná pÅ™ipojená korespondence" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "Pro %1 nenà popis" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Neudána skupina" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "Zpráva nepÅ™ipojena" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "Heslo nenastaveno" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "Nedostatek práv k vytvářenà front" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "Nedostatek práv k vytvářenà požadavků ve frontÄ› '%1'" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "Nedostatek práv k vytvářenà uživatelů" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "Nedostatek práv k zobrazenà tohoto požadavku" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "Nedostatek práv k zobrazenà aktualizace požadavku" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "Nezadán uživatel" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "Nevybráni uživatelé." -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "Nenalezeny žádné fronty odpovÃdajÃcà vyhledávacà podmÃnce." -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "Práva nenalezena" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "NepÅ™idÄ›lena žádná práva." -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "Bez vyhledánà nelze pracovat." +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Žádný pÅ™edmÄ›t" + #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "Neudán identifikátor požadavku" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "Neudán typ transakce" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "Nenalezeni uživatelé odpovÃdajÃcà vyhledávacà podmÃnce" -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "Nenalezen platný uživatel RT. OvladaÄ RT CVS uvolnÄ›n. ProsÃm poraÄte se se svým správcem RT.\\n" -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "Žádná z hodnot nanastavena na _Set!\\n" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "Nikdo" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "NeexistujÃcà položka" -#: html/Elements/Login:99 +#: NOT FOUND IN SOURCE msgid "Not logged in" msgstr "NepÅ™ihlášen" -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "NepÅ™ihlášen." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Nenastaven" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "ZatÃm neimplementováno." -#: html/Admin/Groups/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Not yet implemented...." msgstr "ZatÃm neimplementováno..." -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "Poznámky" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "UpozornÄ›nà nemůže být zasláno" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "Zaslat vÅ¡em AdminCc" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "Zaslat vÅ¡em AdminCc jako komentář" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "Upozornit Ccs" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "Upozornit Ccs jako komentář" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "Zaslat ostatnÃm pÅ™Ãjemcům" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "Zaslat ostatnÃm pÅ™Ãjemcům jako komentář" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "Zaslat vlastnÃkovi" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "Zaslat vlastnÃkovi jako komentář" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "/" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "Zaslat vlastnÃkům a vÅ¡em AdminCc nové pÅ™Ãpady oÄekávajÃcà jejich schválenÃ" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "Zaslat žadatelům" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "Zaslat žadatelům a vÅ¡em Cc" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "Zaslat žadatelům a vÅ¡em Cc jako komentář" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "Zaslat žadatelům, vÅ¡em Cc a vÅ¡em AdminCc" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "Zaslat žadatelům, vÄem Cc a vÄem AdminCc jako komentář" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "lis" -#: lib/RT/Record.pm:157 +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "Objekt nemůže být vytvoÅ™en" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "Objekt vytvoÅ™en" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Å™Ãj" -#: html/Elements/SelectDateRelation:35 +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Off-line" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Úpravy off-line" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "Off-line naÄtenÃ" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "Dne" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "PÅ™i komentáři" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "PÅ™i korespondenci" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "PÅ™i založenÃ" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "PÅ™i zmÄ›nÄ› vlastnÃka" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "PÅ™i zmÄ›nÄ› priority" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "PÅ™i zmÄ›nÄ› fronty" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "PÅ™i vyÅ™eÅ¡enÃ" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "PÅ™i zmÄ›nÄ› stavu" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "PÅ™i transakci" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "Zobrazit jen schvalovánà pro požadavky založené po %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "Zobrazit jen schvalovánà pro požadavky založenà pÅ™ed %quant(%1)" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "OtevÅ™ené" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "OtevÅ™Ãt" -#: html/SelfService/Elements/Tabs:57 +#: NOT FOUND IN SOURCE msgid "Open requests" msgstr "OtevÅ™ené požadavky" -#: html/Admin/Users/Prefs.html:41 +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "OtevÅ™ené požadavky" + +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "OtevÅ™Ãt požadavky (ze seznamu) v novém oknÄ›" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "OtevÅ™Ãt požadavky (ze seznamu) v jiném oknÄ›" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "OtevÅ™Ãt požadavky pÅ™i korespondenci" -#: html/Search/Elements/PickRestriction:101 +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Řadit podle" + +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "Řazenà a tÅ™ÃdÄ›nÃ" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "Organizace" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "Původnà požadavek: #%1" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "Odchozà zpráva o komentáři zaznamenána" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "Odchozà zpráva zaznamenána" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "ÄŒasem se priorita posouvá k" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "Vlastnit požadavky" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "Vlastnit požadavek" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "VlastnÃk" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) +#: NOT FOUND IN SOURCE msgid "Owner changed from %1 to %2" msgstr "VlastnÃk zmÄ›nÄ›n z %1 na %2" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "VlastnÃk nemůže být nastaven." + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "VlastnÃk nucenÄ› zmÄ›nÄ›n z %1 na %2" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "VlastnÃk" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Stránka %1 z %2" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Pager" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "ÄŒÃslo pageru" -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "RodiÄe" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Heslo" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "PÅ™ipomÃnaÄ hesel" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "Heslo pÅ™ÃliÅ¡ krátké" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Heslo: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "Hesla nesouhlasÃ." + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "Hesla nesouhlasÃ. VaÅ¡e heslo nebylo zmÄ›nÄ›no" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "Uživatelé" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "Provedenà uživatelem definované akce" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Konfigurace Perlu" + +#: 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 msgid "Permission Denied" msgstr "PÅ™Ãstup nepovolen" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "Osobnà skupiny" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Vlastnà skupiny" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Vlastnà skupiny:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "ÄŒÃsla telefonů" -#: html/Admin/Users/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Placeholder" msgstr "Zábor mÃsta" -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "NastavenÃ" @@ -2898,15 +3712,19 @@ msgstr "NastavenÃ" msgid "Prefs" msgstr "NastavenÃ" -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Prepare v zárodku" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "PÅ™edchozÃ" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "PÅ™edchozà stránka" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "PÅ™edchozà stránka" @@ -2914,29 +3732,33 @@ msgstr "PÅ™edchozà stránka" msgid "Pri" msgstr "Pri" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "Uživatel %1 nenalezen." -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Priorita" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "Priorita zaÄÃná na" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "VlastnÃ:" + #: etc/initialdata:25 msgid "Privileged" msgstr "Privilegovaný" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "Privilegovaný stav: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "Privilegovanà uživatelé" @@ -2944,11 +3766,19 @@ msgstr "Privilegovanà uživatelé" msgid "Pseudogroup for internal use" msgstr "Pseudo skupina pro vnitÅ™nà použitÃ" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Dotaz" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "Tvůrce dotazu" + +#: 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 msgid "Queue" msgstr "Fronta" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" @@ -2958,7 +3788,7 @@ msgstr "Fronta %1 nenalezena" msgid "Queue '%1' not found\\n" msgstr "Fronta '%1' nenalezena\\n" -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "Název fronty" @@ -2966,19 +3796,19 @@ msgstr "Název fronty" msgid "Queue Scrips" msgstr "Scripy fronty" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "Fronta již existuje" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "Fronta nemůže být vytvoÅ™ena" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "Fronta nemůže být naÄtena." -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "Fronta vytvoÅ™ena" @@ -2986,26 +3816,37 @@ msgstr "Fronta vytvoÅ™ena" msgid "Queue is not specified." msgstr "Nenà zadána fronta." -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "Fronta nenalezena" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "Fronty" -#: html/Elements/Login:34 +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "Rychlé hledánÃ" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Rychlé založenà požadavku" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 pro %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "RT %1 od <a href=\"http://bestpractical.com\">Best Practival Solutions, LLC</a>." @@ -3013,7 +3854,7 @@ msgstr "RT %1 od <a href=\"http://bestpractical.com\">Best Practival Solutions, msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "Správa RT" @@ -3033,7 +3874,7 @@ msgstr "KonfiguraÄnà chyba RT" msgid "RT Critical error. Message not recorded!" msgstr "Kritická chyba RT. Zpráva nezaznamenána!" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "Chyba RT" @@ -3041,11 +3882,15 @@ msgstr "Chyba RT" msgid "RT Received mail (%1) from itself." msgstr "RT pÅ™ijal poÅ¡tu (%1) od sebe samého." -#: html/SelfService/Closed.html:25 +#: NOT FOUND IN SOURCE msgid "RT Self Service / Closed Tickets" msgstr "RT Samoobsluha / UzavÅ™ené požadavky" -#: html/index.html:25 html/index.html:28 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "PromÄ›nné RT" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT v celé své záři" @@ -3061,11 +3906,15 @@ msgstr "RT nemůže nalézt žadatele pÅ™es hledánà v externà databázi" msgid "RT couldn't find the queue: %1" msgstr "RT nemůže nalézt frontu: %1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "RT nemůže ověřit tento PGP podpis. \\n" -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT pro %1" @@ -3078,8 +3927,7 @@ msgstr "RT pro %1: %2" msgid "RT has proccessed your commands" msgstr "RT zpracoval vaÅ¡e pÅ™Ãkazy" -#: html/Elements/Login:83 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RT je © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Å ÃÅ™eno pod <a href=\"http://www.gnu.org/copyleft/gpl.html\">verzà 2 GNU General Public License.</a>" @@ -3095,19 +3943,39 @@ msgstr "RT zpracuje tuto zprávu tak, jako by byla nepodepsaná.\\n" msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." msgstr "Emailový pÅ™Ãkazový režim RT vyžaduje PGP autentizaci. Nepodepsal jste vaÅ¡i zprávu nebo váš podpis nemůže být ověřen." -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "SkuteÄné jméno" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "SkuteÄné jméno" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "PÅ™idán odkaz z %1" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "Smazán odkaz z %1" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "PÅ™idán odkaz na %1" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "Smazán odkaz na %1" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "Je odkazem z" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "Odkazuje na" @@ -3115,49 +3983,52 @@ msgstr "Odkazuje na" msgid "Refine" msgstr "Zjemnit" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "Zjemnit vyhledánÃ" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "Obnovit tuto stránku %quant(%1,každou,každé,každých) %numf(%1) %quant(%1,minutu,minuty,minut)." -#??? quant -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "Vztahy" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Odstranit AdminCc" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Odstranit Cc" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Odstranit žadatele" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "OdpovÄ›dÄ›t" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Adresa pro odpovÄ›Ä" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "OdpovÄ›Ä Å¾adatelům" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "OdpovÄ›dÄ›t na požadavky" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "OdpovÃdat na požadavky" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Žadatel" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "Emailová adresa žadatele" @@ -3165,98 +4036,107 @@ msgstr "Emailová adresa žadatele" msgid "Requestor(s)" msgstr "Žadatel(é)" -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Žadatelé" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "Požadavky majà být vyÅ™eÅ¡eny do" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Povinný parametr '%1' neudán" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Vynulovat" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "BydliÅ¡tÄ›" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "VyÅ™eÅ¡it" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "VyÅ™eÅ¡enà požadavku #%1 (%2)" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "VyÅ™eÅ¡en" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "OdpovÄ›Ä Å¾adatelům" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Výsledky" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "Výsledků na stránku" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "Zopakujte heslo" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Vrátit" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "Nenalezeno právo %1 pro %2 %3 v mezÃch %4 (%5)" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Právo delegováno" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Práva pÅ™idána" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Právo naÄteno" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "Právo nemůže být odebráno" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Právo nenalezeno" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "Právo nenaÄteno." -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "Právo odebráno" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Práva" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "Práva pro %1 nemohou být pÅ™idÄ›lena" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "Práva nemohou být %1 odebrána" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Pravidla" @@ -3264,32 +4144,59 @@ msgstr "Pravidla" msgid "RootApproval" msgstr "KoÅ™enový schvalovatel" -#: lib/RT/Date.pm:393 +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Řádek na stránku" + +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "so" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Uložit" + +#: 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 msgid "Save Changes" msgstr "Uložit zmÄ›ny" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Uložit nastavenÃ" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Nezapomeňte uložit zmÄ›ny - " -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Uložené dotazy" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "Scrip #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "Scrip vytvoÅ™en" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Položky scripu" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "Scrip smazán" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "Scripy" @@ -3297,219 +4204,335 @@ msgstr "Scripy" msgid "Scrips for %1\\n" msgstr "Scripy fro %1\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "Scripy platné ve vÅ¡ech frontách" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" -msgstr "VyhledávánÃ" +msgstr "Vyhledat" #: NOT FOUND IN SOURCE msgid "Search Criteria" msgstr "PodmÃnky vyhledávánÃ" -#: html/Approvals/Elements/PendingMyApproval:39 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "Vyhledávánà schvalovánÃ" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "ZabezpeÄnÃ:" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "VidÄ›t pÅ™esnou odchozà zprávu a jejà pÅ™Ãjemce" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "VidÄ›t soukromé komentáře požadavku" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "VidÄ›t sumárnÄ› požadavek" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "VidÄ›t frontu" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "VýbÄ›r skupiny" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "VýbÄ›r fronty" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "VýbÄ›r uživatele" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "Vybrat uživatelskou položku" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "Vybrat skupinu" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "Vybrat vÃce hodnot" -#: lib/RT/CustomField_Overlay.pm:352 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "Vybrat jednu hodnotu" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "VýbÄ›r fronty" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "VýbÄ›r scripu" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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 "Vybrat vzor" -#: html/Admin/Elements/UserTabs:49 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "VýbÄ›r uživatele" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" msgstr "VýbÄ›r vÃcenásobný" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectSingle" msgstr "VýbÄ›t jedineÄný" -#: html/SelfService/index.html:25 +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Self Service" msgstr "Samoobsluha" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "Zaslat e-mail vÅ¡em pozorovatelům" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "Zaslat e-mail vÅ¡em pozorovatelům jako \"komentář\"" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "Zaslat e-mail žadatelům a vÅ¡em Cc" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "Zaslat e-mail žadatelům a vÅ¡em Ccs jako komentář" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "PosÃlá zprávu vÅ¡em žadatelům" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "PosÃlá e-mail vÅ¡em pÅ™esnÄ› vyjmenovaným Cc a Bcc" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "PosÃlá e-mail Ccs" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "PosÃlá e-mail Ccs jako komentář" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "PosÃlá e-mail vÅ¡em administrativnÃm Cc" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "PosÃlá e-mail vÅ¡em administrativnÃm Cc jako komentář" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "PosÃlá e-mail vlastnÃkovi" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "zář" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Zobrazit" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Zobrazit sloupce" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "Zobrazit výsledky" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "Zobrazit schválené požadavky" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Zobrazit základnà údaje" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "Zobrazit odepÅ™ené požadavky" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Zobrazit podrobnosti" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "Zobrazit trvajÃcà požadavky" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "Zobrazit požadavky ÄekajÃcà na jejich schválenÃ" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" msgstr "Zobrazovat privátnà komentáře požadavku" -#: lib/RT/Queue_Overlay.pm:79 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" msgstr "Zobrazovat výsledky požadavku" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "Zobrazovat seznam pÅ™Ãstupových práv" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "Zobrazit odchotà e-mail" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "Zobrazit uložené dotazy" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "Zobrazit scripy" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "Zobrazit vzor" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "Zobrazit požadavek" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "Zobrazit komentáře požadavku" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "Být žadatelem Äi Cc požadavku Äi fronty" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "Být AdminCc požadavku nebo fronty" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "Podpis" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) +#: NOT FOUND IN SOURCE msgid "Signed in as %1" msgstr "PÅ™Ãhlášen jako %1" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Jednoduchá" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "PÅ™eskoÄit menu" -#: html/Admin/Elements/EditCustomFieldValues:31 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Sort key" msgstr "TÅ™ÃdÃcà klÃÄ" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "TÅ™Ãdit výsledky dle" -#: html/Admin/Elements/AddCustomFieldValue:25 +#: NOT FOUND IN SOURCE msgid "SortOrder" msgstr "TÅ™ÃdÃcà poÅ™adÃ" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "Fáze" + #: NOT FOUND IN SOURCE msgid "Stalled" msgstr "Odložené" @@ -3518,7 +4541,7 @@ msgstr "Odložené" msgid "Start page" msgstr "Úvodnà stránka" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "ZapoÄato" @@ -3526,7 +4549,7 @@ msgstr "ZapoÄato" msgid "Started date '%1' could not be parsed" msgstr "Datum zapoÄetà '%1' nemůže být rozpoznáno" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "ZaÄÃná" @@ -3538,20 +4561,19 @@ msgstr "ZaÄÃná" msgid "Starts date '%1' could not be parsed" msgstr "Datum zaÄÃnánà '%1' nemůže být rozpoznáno" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Stát" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "Stav" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" msgstr "ZmÄ›na Stavu" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Stav zmÄ›nÄ›n z %1 na %2" @@ -3559,25 +4581,37 @@ msgstr "Stav zmÄ›nÄ›n z %1 na %2" msgid "StatusChange" msgstr "ZmÄ›na stavu" -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "VzÃt" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "VzÃt požadavky" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "VzÃt požadavek" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " -msgstr "Vzato %1 " +msgid "Stolen from %1" +msgstr "Vzato %1" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "PÅ™edmÄ›t" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "PÅ™edmÄ›t zmÄ›nÄ›n na %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Odeslat" @@ -3585,35 +4619,48 @@ msgstr "Odeslat" msgid "Submit Workflow" msgstr "Potvrdit model zpracovánÃ" -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "Úspěšné" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "ne" -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "Super uživatel" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "Systém" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "Systémová konfigurace" + +#: 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 "Systémová chyba" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "Systémové nástroje" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "Systémová chyba. Právo nedelegováno." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "Systémová chyba. Právo nepÅ™idÄ›leno." -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "Systémové skupiny" @@ -3621,32 +4668,40 @@ msgstr "Systémové skupiny" msgid "SystemRolegroup for internal use" msgstr "Skupina systémovýh pravidel pro vnitÅ™nà použitÃ" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "MÃchaÄka na beton" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "VzÃt" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "VzÃt požadavky" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "VzÃt požadavek" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Vzatý" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Vzor" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "Vzor #%!" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "Vzor smazán" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Vzor nenalezen" @@ -3654,11 +4709,11 @@ msgstr "Vzor nenalezen" msgid "Template not found\\n" msgstr "Vzor nenalezen\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Vzor rozpoznán" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Vzory" @@ -3666,135 +4721,150 @@ msgstr "Vzory" msgid "Templates for %1\\n" msgstr "Vzory pro %1\\n" -#: lib/RT/Interface/Web.pm:858 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "Toto je již aktuálnà hodnota" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Toto nenà hodnota pro tuto uživatelskou položku" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Toto je shodná hodnota" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "Tento uživatel již toto práva má" + +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "Tento uživatel je již v této frontÄ› %1" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "Tento uživatel je již u tohoto požadavku %1" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "Tento uživatel nenà v této frontÄ› %1" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "Tento uživatel nenà u tohoto požadavku %1" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "Tata fronta neexistuje" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "Tento požadavek má nevyÅ™eÅ¡ené závislosti" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: NOT FOUND IN SOURCE msgid "That user already has that right" msgstr "Tento uživatel již má toto právo" -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "Tento uživatel již tento požadavek vlastnÃ" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Tento uživatel neexistuje" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "Tento uživatel je již privilegován" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "Tento uživatel je již neprivilegován" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "Uživatel je nynà privilegován" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "Uživatel je nynà neprivilegován" -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "V této frontÄ› nemůže tento uživatel vlastnit požadavky" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "Toto nenà ÄÃselný identifikátor" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "Základnà údaje" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "Cc požadavku" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "Administrativnà Cc požadavku" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "Komentář byl zaznamenán" -#: bin/rt-crontool:198 +#: 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 "NásledujÃcà pÅ™Ãkaz najde vÅ¡echny aktivnà požadavky ve frontÄ› 'general' a nastavà jejich priority na 99, pokud nebyly tknuty poslednà 4 hodiny:" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "NásledujÃcà pÅ™Ãkazy nebyly zpracovány\\n\\n" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "Nová hodnota nastavena." -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "VlastnÃk požadavku" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "Žadatel požadavku" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Tyto komentáře nejsou běžnÄ› viditelné uživateli" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Tato funkce je dostupná jen správcům systému" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Tato zpráva BUDE poslána na..." + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "Tento požadavek %1 %2 (%3)\\n" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "Tento nástroj umožňuje uživateli spustit libovolné perl moduly z RT." -#: lib/RT/Transaction_Overlay.pm:253 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "Tato transakce vypadá, že nemá obsah" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "nejdůležitÄ›jÅ¡Ã%quant(%1, požadavek,požadavky,ch požadavků) tohoto uživatele" @@ -3803,7 +4873,7 @@ msgstr "nejdůležitÄ›jÅ¡Ã%quant(%1, požadavek,požadavky,ch požadavků) toho msgid "This user's 25 highest priority tickets" msgstr "25 nejdůležitÄ›jÅ¡Ãch požadavků tohoto uživatele" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Ät" @@ -3811,61 +4881,75 @@ msgstr "Ät" msgid "Ticket # %1 %2" msgstr "Požadavek # %1 %2" -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "Maxi aktualizace požadavku #%1: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "Požadavek #%1: %2" -#: lib/RT/Ticket_Overlay.pm:608 +#: 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) +msgid "Ticket %1" +msgstr "Požadavek %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "Požadavek %1 vytvoÅ™en ve frontÄ› '%2'" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "Požadavek %1 naÄten\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "Požadavek %1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "Historie požadavku # %1 %2" -#: html/SelfService/Display.html:34 +#: NOT FOUND IN SOURCE msgid "Ticket Id" msgstr "Identifikátor požadavku" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "Požadavek vyÅ™eÅ¡en" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "PÅ™Ãloha požadavku" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "Obsah požadavku" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "Typ obsahu požadavku" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "Požadaven nemůže být vytvoÅ™en pro vnitÅ™nà chybu" -#: lib/RT/Transaction_Overlay.pm:522 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "Požadavek vytvoÅ™en" @@ -3873,103 +4957,134 @@ msgstr "Požadavek vytvoÅ™en" msgid "Ticket creation failed" msgstr "NezdaÅ™ilo se vytvoÅ™enà požadavku" -#: lib/RT/Transaction_Overlay.pm:527 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "Požadavek smazán" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" msgstr "Id požadavku nenalezeno" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Metadata požadavku" + +#: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "Požadavek nenalezen" -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "Stav požadavku zmÄ›nÄ›n" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "Pozorovatelé požadavku" -#: html/Elements/Tabs:49 +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" msgstr "Požadavky" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" msgstr "Požadavky %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" msgstr "Požadavky %1 dle %2" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "Požadavky z %1" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "Požadavky, které záležà na tomto schválenÃ:" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "PÅ™edpokládaný Äas" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "ZbývajÃcà Äas" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "ÄŒas práce" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "ZbývajÃcà Äas" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "ÄŒas k zobrazenÃ" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "ÄŒas práce" -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "ÄŒas práce" -#: bin/rt-commit-handler:402 +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "VytvoÅ™it diff tohoto commitu:" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "VytvoÅ™it diff tohoto commitu:\\n" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "K zÃskánà informacà o podpoÅ™e, tréninku, zákaznických úpravách Äi licencovánà kontaktujte prosÃm %1." + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Poslednà kontakt" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Nástroje" + +#: etc/initialdata:252 msgid "Transaction" msgstr "Transakce" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "Transakce %1 vymazána" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "Transakce vytvoÅ™ena" -#: lib/RT/Transaction_Overlay.pm:89 +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" msgstr "Bez udánà id požadavku nelze volat Transaction->Create" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "Transakce jsou nemÄ›nné" @@ -3977,106 +5092,170 @@ msgstr "Transakce jsou nemÄ›nné" msgid "Trying to delete a right: %1" msgstr "Pokus o smazánà práva: %1" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "út" -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "typ" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Neimplementováno" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Unixový login" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "Unixové uživatelské jméno" -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "Neznámé kódovánà obsahu %1" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "NeomezenÄ›" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Nepojmenovaný dotaz" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "Neprivilegovaný" -#: lib/RT/Transaction_Overlay.pm:571 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "Vrácen" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Aktualizace" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Aktualizovat vÅ¡echny" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "Identifikátor aktualizace" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Aktualizovat požadavek" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Typ aktualizace" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "Aktualizovat spoleÄnÄ› vÅ¡echny tyty požadavky" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "Aktualizovat email" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Aktualizovat hromadnÄ› požadavky" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "Aktualizovat jméno" -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "Aktualizace nezaznamenána" -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "Aktualizovat vybrané požadavky" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "Aktualizace podpisu" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "Aktualizace požadavku" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) +#: NOT FOUND IN SOURCE msgid "Update ticket # %1" msgstr "Aktualizace požadavku # %1" -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "Aktualizace požadavku #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "Aktualizace požadavku #%1 (%2)" -#: lib/RT/Interface/Web.pm:373 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "Typ aktualizace nebyl ani korespondence ani komentář." -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Aktualizováno" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "NaÄÃst" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "NaÄÃst vaÅ¡e zmÄ›ny" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" msgstr "Uživatel %1 %2: %3\\n" @@ -4085,160 +5264,190 @@ msgstr "Uživatel %1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "Heslo uživatele %1: %2\\n" -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "Uživatel '%1' nenalezen" - -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Uživatel '%1' nenalezen\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "Uživatel '%1' nemůže být nalezen" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "Uživatelem definované" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Uživatelem definované podmÃnky a akce" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "Identifikátor uživatele" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "Identifikátor uživatele" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "Práva uživatele" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "Uživatel nemůže být vytvoÅ™en: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Uživatel vytvoÅ™en" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "Uživatelem definované skupiny" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Uživatel naÄten" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "Uživatel upozornÄ›n" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "Uživatelský pohled" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Uživatelské jméno" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Uživatelé" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "Uživatelé odpovÃdajÃcà podmÃnce vyhledánÃ" -#: html/Search/Elements/PickRestriction:51 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Platný dotaz" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "Hodnota fronty" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Hodnoty" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "Být pozorovatelem" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "Být AdminCc pozorovatelem" -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Pozorovatelé" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "Kódovánà WWW" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "st" -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "PÅ™idat korespondenci k původnÃmu požadavku, pokud byl požadavek schválen vÅ¡emi" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "PÅ™idat korespondenci k původnÃmu požadavku, pokud byl požadavek kýmkoli schválen" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "Když je požadavek vytvoÅ™en" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "Upozornit vlastnÃka a vÅ¡echny AdminCc, jejichž schválenà se oÄekává, pÅ™i vytvoÅ™enà schvalovaného požadavku" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "Stane-li se cokoli" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "Je-li vyÅ™eÅ¡en požadavek" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "ZmÄ›nÃ-li se vlastnÃk požadavku" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "PÅ™i zmÄ›nÄ› priority požadavku" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "ZmÄ›nÃ-li se fronta požadavku" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "ZmÄ›nÃ-li se stav požadavku" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "SplnÃ-li se uživatelská podmÃnka" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "PÅ™ijde-li komentář" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "PÅ™ijde-li korespondence" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "ZamÄ›stnánÃ" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Pracovat off-line" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "Telefon do zamÄ›stnánÃ" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Odpracováno" -#: lib/RT/Ticket_Overlay.pm:3056 +#: NOT FOUND IN SOURCE +msgid "XXX CHANGEME You are not an authorized user" +msgstr "XXX ZMÄšNIT Nejste autorizovaný uživatel" + +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "Požadavek již vlastnÃte" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "Nejste autorizovaný uživatel" -#: lib/RT/Ticket_Overlay.pm:2930 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "Můžete pÅ™idÄ›lit pouze požadavky, které jsou vaÅ¡e nebo nejsou vlastnÄ›ny" @@ -4246,30 +5455,29 @@ msgstr "Můžete pÅ™idÄ›lit pouze požadavky, které jsou vaÅ¡e nebo nejsou vlas msgid "You don't have permission to view that ticket.\\n" msgstr "Nemáte právo k zobrazenà tohoto požadavku.\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "Nalezl jste %1 požadavků ve frontÄ› %2" #??? quant -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "Byl jste odhlášen od RT." -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "V této frontÄ› nemáte práva vytvářet požadavky." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "V této frontÄ› nemůžete vytvářet požadavky." -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "Jste vÃtáni k dalÅ¡Ãmu pÅ™ihlášenÃ" -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) +#: NOT FOUND IN SOURCE msgid "Your %1 requests" msgstr "VaÅ¡ich %1 požadavků" @@ -4277,11 +5485,11 @@ msgstr "VaÅ¡ich %1 požadavků" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "Váš správce RT chybnÄ› nastavil poÅ¡tovnà aliasy, které volajà RT" -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "Váš požadavek byl schválen uživatelem %1. Dalšà schválenà mohou být jeÅ¡tÄ› oÄekávána." -#: etc/initialdata:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "Váš požadavek byl schválen." @@ -4289,186 +5497,242 @@ msgstr "Váš požadavek byl schválen." msgid "Your request was rejected" msgstr "Váš požadavek byl odmÃtnut" -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "Váš požadavek byl odmÃtnut." -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "VaÅ¡e uživatelské jméno Äi heslo je nesprávné" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "PSÄŒ" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "jak je dovoleno %1" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "uzavÅ™en" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "obsahuje" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" msgstr "obsah" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "typ obsahu" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "korespondence (zÅ™ejmÄ›) neposlána" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "korespondence poslána" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "dnů" -#: html/Search/Listing.html:75 +#: NOT FOUND IN SOURCE msgid "delete" msgstr "smazat" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "smazán" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "neodpovÃdá" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "neobsahuje" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "je rovno" -#: html/Elements/SelectAttachmentField:28 +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "filename" msgstr "název souboru" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "vÄ›tšà než" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "skupina '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "hodin" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "Identifikátor" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "je" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "nenÃ" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "menšà než" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "odpovÃdá" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "min" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "minut" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "úpravy\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "mÄ›sÃců" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "nový" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "bez jména" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "znehodnotit" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "žádný" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "nenà rovno" -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "otevÅ™ený" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "vlastnà skupina '%1' pro uživatele '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "fronta %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "zamÃtnutý" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "vyÅ™eÅ¡ený" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "sek" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "odložený" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "systém %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "systémová skupina '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "volajÃcà komponenta neudala důvod" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "požadavek #%1 %2" -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "nepopsaná skupina %1" @@ -4477,12 +5741,12 @@ msgstr "nepopsaná skupina %1" msgid "undescripbed group %1" msgstr "nepopsaná skupina %1" -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "uživatel %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "týdnů" @@ -4490,7 +5754,7 @@ msgstr "týdnů" msgid "with template %1" msgstr "se vzorem %1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "roků" diff --git a/rt/lib/RT/I18N/da.po b/rt/lib/RT/I18N/da.po new file mode 100644 index 000000000..76e97f5eb --- /dev/null +++ b/rt/lib/RT/I18N/da.po @@ -0,0 +1,5840 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: NOT FOUND IN SOURCE +msgid "#" +msgstr "#" + +#: NOT FOUND IN SOURCE +msgid "#%1" +msgstr "#%1" + +#: 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) +msgid "#%1: %2" +msgstr "#%1: %2" + +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "$prefix %1" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 #%2" + +#: lib/RT/Date.pm:361 +#. ($s, $time_unit) +msgid "%1 %2" +msgstr "%1 %2" + +#: NOT FOUND IN SOURCE +msgid "%1 %2 %3" +msgstr "%1 %2 %3" + +#: lib/RT/Date.pm:397 +#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) +msgid "%1 %2 %3 %4:%5:%6 %7" +msgstr "%2 %1 %3 %4:%5:%6 %7" + +#: 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) +msgid "%1 %2 added" +msgstr "%1 %2 tilføjet" + +#: lib/RT/Date.pm:358 +#. ($s, $time_unit) +msgid "%1 %2 ago" +msgstr "%1 %2 siden" + +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) +#. ($field, $self->OldValue, $self->NewValue) +msgid "%1 %2 changed to %3" +msgstr "%1 %2 ændret til %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) +msgid "%1 %2 deleted" +msgstr "%1 %2 slettet" + +#: 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)) +msgid "%1 %2 with template %3" +msgstr "%1 %2 med skabelon %3" + +#: NOT FOUND IN SOURCE +msgid "%1 (%2) %3 this ticket\\n" +msgstr "%1 (%2) %3 denne ticket\\n" + +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) af %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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (Uændret)" + +#: NOT FOUND IN SOURCE +msgid "%1 - %2 shown" +msgstr "%1 - %2 vist" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 +#. ("--search-argument", "--search") +#. ("--condition-argument", "--condition") +#. ("--action-argument", "--action") +msgid "%1 - An argument to pass to %2" +msgstr "%1 - Et argument til afsendelse til %2" + +#: bin/rt-crontool:210 +#. ("--verbose") +msgid "%1 - Output status updates to STDOUT" +msgstr "%1 - Send status opdateringer til STDOUT" + +#: bin/rt-crontool:204 +#. ("--action") +msgid "%1 - Specify the action module you want to use" +msgstr "%1 - Specificér den aktion du ønsker at benytte" + +#: bin/rt-crontool:198 +#. ("--condition") +msgid "%1 - Specify the condition module you want to use" +msgstr "%1 - Specificer det betingelses modul du ønsker at benytte" + +#: bin/rt-crontool:191 +#. ("--search") +msgid "%1 - Specify the search module you want to use" +msgstr "%1 - Specificer det søge modul du ønsker at benytte" + + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "%1 RT %2 Copyright 1996-%3 %4." + +#: lib/RT/ScripAction_Overlay.pm:151 +#. ($self->Id) +msgid "%1 ScripAction loaded" +msgstr "%1 ScripAktion indlæst" + +#: lib/RT/Record.pm:1708 +#. ($args{'Value'}, $cf->Name) +msgid "%1 added as a value for %2" +msgstr "%1 tilføjet som en værdi for %2" + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on" +msgstr "%1 aliaser kræver en TicketID at arbejde pÃ¥" + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on (from %2) %3" +msgstr "%1 aliaser kræver en TicketID at arbejde pÃ¥ (fra %2) %3" + +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 +#. ($args{'Base'}) +#. ($args{'Target'}) +msgid "%1 appears to be a local object, but can't be found in the database" +msgstr "%1 synes at være et lokalt object, men kan ikke findes i databasen" + +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 +#. ($self->BriefDescription , $self->CreatorObj->Name) +#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) +msgid "%1 by %2" +msgstr "%1 af %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."'") +msgid "%1 changed from %2 to %3" +msgstr "%1 ændret fra %2 til %3" + +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "%1 kopier" + +#: lib/RT/Record.pm:930 +msgid "%1 could not be set to %2." +msgstr "%1 kunne ikke sættes til %2" + +#: NOT FOUND IN SOURCE +msgid "%1 couldn't init a transaction (%2)\\n" +msgstr "%1 kun ikke initiere en transaktion (%2)\\n" + +#: lib/RT/Ticket_Overlay.pm:2743 +#. ($self) +msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." +msgstr "%1 kunne ikke sætte status til løst. RT's Database er muligvis inkonsistent" + +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "%1 oprettet" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "%1 slettet" + +#: html/Elements/MyTickets:47 +#. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "%1 højest prioriterede tickets jeg ejer" + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I own..." +msgstr "%1 højest prioriterede tickets jeg ejer..." + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I requested..." +msgstr "%1 højest prioriterede tickets jeg har anmodet om" + +#: bin/rt-crontool:186 +#. ($0) +msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." +msgstr "%1 er et værktøj som reagerer pÃ¥ tickets fra et eksternt skedulerings værktøj sÃ¥som cron." + +#: lib/RT/Queue_Overlay.pm:860 +#. ($principal->Object->Name, $args{'Type'}) +msgid "%1 is no longer a %2 for this queue." +msgstr "%1 er ikke længere en %2 for denne kø" + +#: NOT FOUND IN SOURCE +msgid "%1 is no longer a %2 for this ticket." +msgstr "%1 er ikke længere en %2 for denne ticket." + +#: NOT FOUND IN SOURCE +msgid "%1 is no longer a value for custom field %2" +msgstr "%1 er ikke længere en værdi for special felt %2" + +#: NOT FOUND IN SOURCE +msgid "%1 isn't a valid Queue id." +msgstr "%1 er ikke en lovlig kø ID" + +#: 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) +msgid "%1 min" +msgstr "%1 min." + +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "%1 nyeste ikke ejede tickets" + +#: NOT FOUND IN SOURCE +msgid "%1 not shown" +msgstr "%1 ikke vist" + +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 objekter" + +#: html/User/Elements/DelegateRights:97 +#. (loc($ObjectType =~ /^RT::(.*)$/)) +msgid "%1 rights" +msgstr "%1 rettigheder" + +#: NOT FOUND IN SOURCE +msgid "%1 succeeded\\n" +msgstr "%1 lykkedes" + +#: NOT FOUND IN SOURCE +msgid "%1 type unknown for $MessageId" +msgstr "%1 type er ukendt for $MessageId" + +#: NOT FOUND IN SOURCE +msgid "%1 type unknown for %2" +msgstr "%1 type ukendt for %2" + +#: lib/RT/Action/ResolveMembers.pm:63 +#. (ref $self) +msgid "%1 will resolve all members of a resolved group ticket." +msgstr "%1 vil løse samtlige alle medlemmer af en løst gruppe ticket." + +#MANGLER +#: NOT FOUND IN SOURCE +msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." +msgstr "%1 vil " + +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%1's %2 objekter" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "%1's %2's %3 objekter" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "%1's gemte søgninger" + +#: lib/RT/Transaction_Overlay.pm:470 +#. ($self) +msgid "%1: no attachment specified" +msgstr "%1: ingen vedhæftet fil angivet" + +#: html/Ticket/Elements/ShowTransactionAttachments:78 +#. ($size) +msgid "%1b" +msgstr "%1b" + +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) +msgid "%1k" +msgstr "%1k" + +#: lib/RT/Ticket_Overlay.pm:1118 +#. ($args{'Status'}) +msgid "'%1' is an invalid value for status" +msgstr "'%1' er ikke en valid status værdi" + +#: NOT FOUND IN SOURCE +msgid "'%1' not a recognized action. " +msgstr "'%1' er ikke en genkendt aktion. " + +#: NOT FOUND IN SOURCE +msgid "(Check box to delete scrip)" +msgstr "(Check box til sletning af scrip)" + +#: 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 "(Check box til sletning)" + +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(Check bokse for fravalg af notificering af de listede modtagere)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(Check bokse for tilvalg af notificering af de listede modtagere)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(Indtast ticket ids eller URLSs, separeret af mellemrum)" + +#MANGLER +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 +#. ($RT::CorrespondAddress) +#. ($RT::CommentAddress) +msgid "(If left blank, will default to %1)" +msgstr "(Hvis ikke angivet vil defaulte til %1)" + +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 +msgid "(No custom fields)" +msgstr "(Ingen custom felter)" + +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 +msgid "(No members)" +msgstr "(Ingen medlemmer)" + +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 +msgid "(No scrips)" +msgstr "(Ingen scrips)" + +#: html/Admin/Elements/EditTemplates:52 +msgid "(No templates)" +msgstr "(Ingen templates)" + +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(Ingen)" + +#: 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 "(Sender en blind karbon-kopi af denne opdatering til en komma separeret liste af e-mail adresser. Ændrer <b>IKKE</b> hvem som vil modtage fremtidige opdateringer.)" + +#: NOT FOUND IN SOURCE +msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +msgstr "(Sender en blind karbon-kopi af denne opdatering til en komma separeret liste af e-mail adresser. Ændrer <b>IKKE</b> hvem som vil modtage fremtidige opdateringer.)" + +#: 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 "(Sender en karbon-kopi af denne opdatering til en komma separeret liste af e-mail adresser. Disse <b>vil</b> modtage fremtidige opdateringer.)" + +#: 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 "(Sender en karbon-kopi af denne opdatering til en komma separeret liste af e-mail adresser. Ændrer <b>IKKE</b> hvem som vil modtage fremtidige opdateringer.)" + +#: NOT FOUND IN SOURCE +msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +msgstr "(Sender en karbon-kopi af denne opdatering til en komma separeret liste af e-mail adresser. Disse <b>vil</b> modtage fremtidige opdateringer.)" + +#: 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 "(Sender en karbon-kopi af denne opdatering til en komma separeret liste af e-mail adresser. Disse <b>vil</b> modtage fremtidige opdateringer.)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(Benyt disse felter nÃ¥r du vælger 'Bruger Defineret' for en betingelse eller aktion" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 +msgid "(empty)" +msgstr "(tom)" + +#: html/Admin/Users/index.html:60 +msgid "(no name listed)" +msgstr "(intet navn listet)" + +#: NOT FOUND IN SOURCE +msgid "(no subject)" +msgstr "(intet emne)" + +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 +msgid "(no value)" +msgstr "(ingen værdi)" + +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(ingen værdier)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 +msgid "(only one ticket)" +msgstr "(kun en ticket)" + +#: html/Elements/RT__Ticket/ColumnMap:146 +msgid "(pending approval)" +msgstr "(afventer godkendelse)" + +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(afventer anden Samling)" + +#: NOT FOUND IN SOURCE +msgid "(pending other tickets)" +msgstr "(afventer andre tickets)" + +#: html/Admin/Users/Modify.html:71 +msgid "(required)" +msgstr "(obligatorisk)" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "(untitled)" +msgstr "(unavngiven)" + +#: NOT FOUND IN SOURCE +msgid "25 highest priority tickets I own..." +msgstr "25 højest prioriterede tickets jeg ejer..." + +#: NOT FOUND IN SOURCE +msgid "25 highest priority tickets I requested..." +msgstr "25 højest prioriterede tickets jeg har anmodet..." + +#: html/Ticket/Elements/ShowBasics:53 +msgid "<% $Ticket->Status%>" +msgstr "<% $Ticket->Status%>" + +#: html/Elements/SelectTicketTypes:48 +msgid "<% $_ %>" +msgstr "<% $_ %>" + +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "<%$_%>" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#MANGLER +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<input type=\"submit\" value=\"Ny ticket i\"> %1" + +#: etc/initialdata:218 +msgid "A blank template" +msgstr "En blank template" + +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 +msgid "ACE not found" +msgstr "ACE ikke fundet" + +#: lib/RT/ACE_Overlay.pm:854 +msgid "ACEs can only be created and deleted." +msgstr "ACEs kan kun blive oprettet og slettet" + +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "OG" + +#: NOT FOUND IN SOURCE +msgid "Aborting to avoid unintended ticket modifications.\\n" +msgstr "Afbryder for a undgÃ¥ utilsigtede ticket ændringer" + +#: html/User/Elements/Tabs:53 +msgid "About me" +msgstr "Om mig" + +#: html/Admin/Users/Modify.html:106 +msgid "Access control" +msgstr "Adgangskontrol" + +#: html/Admin/Elements/EditScrip:71 +msgid "Action" +msgstr "Aktion" + +#: lib/RT/Scrip_Overlay.pm:173 +#. ($args{'ScripAction'}) +msgid "Action %1 not found" +msgstr "Aktion %1 ikke fundet" + +#MANGLER +#: NOT FOUND IN SOURCE +msgid "Action committed." +msgstr "Aktion " + +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "Aktion committet.\\n" + +#: bin/rt-crontool:144 +msgid "Action prepared..." +msgstr "Aktion forberedt" + +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Tilføj" + +#: html/Search/Bulk.html:114 +msgid "Add AdminCc" +msgstr "Tilføj AdminCc" + +#: html/Search/Bulk.html:110 +msgid "Add Cc" +msgstr "Tilføj Cc" + +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "Tilføj kolonner" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "Tilføj Kriterie" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "Tilføj flere filer" + +#: html/Search/Bulk.html:106 +msgid "Add Requestor" +msgstr "Tilføj Anmoder" + +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "Tilføj værdi" + +#: NOT FOUND IN SOURCE +msgid "Add a new a global scrip" +msgstr "Tilføj en ny global scrip" + +#: NOT FOUND IN SOURCE +msgid "Add a scrip to this queue" +msgstr "Tilføj en scrip til denne kø" + +#: html/Admin/Global/Scrip.html:76 +msgid "Add a scrip which will apply to all queues" +msgstr "Tilføj en scrip som vil virke for alle køer" + +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "Tilføj yderligere kriterier" + +#: html/Search/Bulk.html:146 +msgid "Add comments or replies to selected tickets" +msgstr "Tilføj kommentarer eller svar til valgte tickets" + +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 +msgid "Add members" +msgstr "Tilføj medlemmer" + +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 +msgid "Add new watchers" +msgstr "Tilføj nye watchers" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "Tilføj, slet og editer custom felt værdier for objekter" + +HERTIL +#: NOT FOUND IN SOURCE +msgid "AddNextState" +msgstr "TilføjNæsteStatus" + +#: lib/RT/Queue_Overlay.pm:760 +#. ($args{'Type'}) +msgid "Added principal as a %1 for this queue" +msgstr "Tilføjede principal som %1 for denne kø" + +#: lib/RT/Ticket_Overlay.pm:1416 +#. ($self->loc($args{'Type'})) +msgid "Added principal as a %1 for this ticket" +msgstr "Tilføjede principal som %1 for denne ticket" + +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 +msgid "Address1" +msgstr "Adresse1" + +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 +msgid "Address2" +msgstr "Adresse2" + +#: html/Ticket/Create.html:95 +msgid "Admin Cc" +msgstr "Admin Cc" + +#: etc/initialdata:295 +msgid "Admin Comment" +msgstr "Admin Kommentar" + +#: etc/initialdata:274 +msgid "Admin Correspondence" +msgstr "Admin Korrespondance" + +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 +msgid "Admin queues" +msgstr "Admin Køer" + +#: NOT FOUND IN SOURCE +msgid "Admin users" +msgstr "Admin brugere" + +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 +msgid "Admin/Global configuration" +msgstr "Amin/Global konfiguration" + +#: NOT FOUND IN SOURCE +msgid "Admin/Groups" +msgstr "Admin/Grupper" + +#Mangler +#: NOT FOUND IN SOURCE +msgid "Admin/Queue/Basics" +msgstr "Admin/Køer/Basics" + +#: NOT FOUND IN SOURCE +msgid "AdminAllPersonalGroups" +msgstr "AdminAllPersonligeGrupper" + +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 +msgid "AdminCc" +msgstr "AdminCc" + +#: NOT FOUND IN SOURCE +msgid "AdminComment" +msgstr "AdminKommentar" + +#: NOT FOUND IN SOURCE +msgid "AdminCorrespondence" +msgstr "AdminKorrespondance" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "AdminCustomerField" + +#: NOT FOUND IN SOURCE +msgid "AdminCustomFields" +msgstr "AdminCustomFelter" + +#: lib/RT/Group_Overlay.pm:171 +msgid "AdminGroup" +msgstr "AdminGruppe" + +#: lib/RT/Group_Overlay.pm:173 +msgid "AdminGroupMembership" +msgstr "AdminGruppeMedlemskab" + +#: lib/RT/System.pm:81 +msgid "AdminOwnPersonalGroups" +msgstr "AdminEgnePersonligeGrupper" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "AdminQueue" +msgstr "AdminKø" + +#: lib/RT/System.pm:82 +msgid "AdminUsers" +msgstr "AdminBrugere" + +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 +msgid "Administrative Cc" +msgstr "Administrativ Cc" + +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Avanceret" + +#: NOT FOUND IN SOURCE +msgid "Advanced Search" +msgstr "Avanceret Søgning" + +#: html/Elements/SelectDateRelation:57 +msgid "After" +msgstr "Efter" + +#: NOT FOUND IN SOURCE +msgid "Age" +msgstr "Alder" + +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "Aggregator" + +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "All godkendelser godtaget" + +#: NOT FOUND IN SOURCE +msgid "All Custom Fields" +msgstr "Alle custom felter" + +#: html/Admin/Queues/index.html:75 +msgid "All Queues" +msgstr "Alle Køer" + +#: NOT FOUND IN SOURCE +msgid "Always sends a message to the requestors independent of message sender" +msgstr "Sender altid en besked til requestoren uafhængigt af besked afsenderen" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "Og/Eller" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "Gælder for" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Foretag" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Foretag dine ændringer" + +#: html/Elements/Tabs:74 +msgid "Approval" +msgstr "Godkendelse" + +#: 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) +msgid "Approval #%1: %2" +msgstr "Godkendelse #%1: %2" + +#: html/Approvals/index.html:75 +#. ($ticket->Id) +msgid "Approval #%1: Notes not recorded due to a system error" +msgstr "Godkendelse #%1: Noter ikke gemt grundet en system fejl" + +#: html/Approvals/index.html:73 +#. ($ticket->Id) +msgid "Approval #%1: Notes recorded" +msgstr "Godkendelse #%1: Noter gemt" + +#: NOT FOUND IN SOURCE +msgid "Approval Details" +msgstr "Godkendelses detaljer" + +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Godkendelse godtaget" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Godkendelse afvist" + +#: NOT FOUND IN SOURCE +msgid "Approval diagram" +msgstr "Godkendelses diagram" + +#: html/Approvals/Elements/Approve:65 +msgid "Approve" +msgstr "Godkend" + +#: etc/initialdata:504 +msgid "Approver's notes: %1" +msgstr "Apprtover's noter: %1" + +#: lib/RT/Date.pm:440 +msgid "Apr." +msgstr "Apr." + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 +msgid "Ascending" +msgstr "Stigende" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Tilføj og slet custom felter" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "TilknytCustomFelter" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 +msgid "Attach" +msgstr "Vedhæft" + +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 +msgid "Attach file" +msgstr "Vedhæft fil" + +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 +msgid "Attached file" +msgstr "Vedhæftet fil" + +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) +msgid "Attachment '%1' could not be loaded" +msgstr "Vedhæftede fil '%1' kunne ikke indlæses" + +#: lib/RT/Transaction_Overlay.pm:478 +msgid "Attachment created" +msgstr "Vedhæftet fil oprettet" + +#: lib/RT/Tickets_Overlay.pm:1673 +msgid "Attachment filename" +msgstr "Vedhæftetfilnavn" + +#: html/Ticket/Elements/ShowAttachments:47 +msgid "Attachments" +msgstr "Vedhæftede filer" + +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Attribut Slet" + +#: lib/RT/Date.pm:444 +msgid "Aug." +msgstr "Aug." + +#: NOT FOUND IN SOURCE +msgid "AuthSystem" +msgstr "AuthSystem" + +#: etc/initialdata:221 +msgid "Autoreply" +msgstr "Autosvar" + +#: etc/initialdata:72 +msgid "Autoreply To Requestors" +msgstr "Autosvar til Requestere" + +#: NOT FOUND IN SOURCE +msgid "AutoreplyToRequestors" +msgstr "AutoSvarTilRequestere" + +#: NOT FOUND IN SOURCE +msgid "Bad PGP Signature: %1\\n" +msgstr "Ubrugelig PGP Signatur: %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Bad attachment id. Couldn't find attachment '%1'\\n" +msgstr "Ubrugelig vedhæftelses id. Kunne ikke lokaliserer vedhæftet fil '%1'\\n" + +#: NOT FOUND IN SOURCE +msgid "Bad data in %1" +msgstr "DÃ¥rlige data i %1" + +#: NOT FOUND IN SOURCE +msgid "Bad transaction number for attachment. %1 should be %2\\n" +msgstr "Ubrugeligt transaktionsnummer for vedhæftet fil. %1 skulle være %2\\n" + +#: 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 "Basics" + +#: html/Ticket/Update.html:86 +msgid "Bcc" +msgstr "Bcc" + +#: 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 "Vær sikker pÃ¥ at gemme dine ændringer" + +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 +msgid "Before" +msgstr "Før" + +#: NOT FOUND IN SOURCE +msgid "Begin Approval" +msgstr "PÃ¥begynd godkendelse" + +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "Binær" + +#: etc/initialdata:217 +msgid "Blank" +msgstr "Tom" + +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "Fed" + +#: NOT FOUND IN SOURCE +msgid "Bookmarkable URL for this search" +msgstr "URl for denne søgning som kan gemmes som bookmark" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "Bogmærkbart link" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 +msgid "Brief headers" +msgstr "Korte headers" + +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 +msgid "Bulk ticket update" +msgstr "Masse-ticket opdatering" + +#: lib/RT/User_Overlay.pm:1722 +msgid "Can not modify system users" +msgstr "Kan ikke modificere system brugere" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "Can this principal see this queue" +msgstr "Kan denne principal se denne kø" + +#: lib/RT/CustomField_Overlay.pm:370 +msgid "Can't add a custom field value without a name" +msgstr "Kan ikke tilføje custom felt værdi uden et navn" + +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Kan ikke finde en gemt søgning til at arbejde med" + +#: lib/RT/Link_Overlay.pm:160 +msgid "Can't link a ticket to itself" +msgstr "Kan ikke linke en ticket til den selv" + +#: NOT FOUND IN SOURCE +msgid "Can't merge into a merged ticket. You should never get this error" +msgstr "Kan ikke sammensætte ind i en sammensat ticket. Du skulle aldrig fÃ¥ denne fejl" + +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Kan ikke gemme denne søgning" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 +msgid "Can't specifiy both base and target" +msgstr "Kan ikke specificere bÃ¥de base og mÃ¥l" + +#: html/autohandler:148 +#. ($msg) +msgid "Cannot create user: %1" +msgstr "Kan ikke oprette bruger: %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 +msgid "Cc" +msgstr "Cc" + +#: html/SelfService/Prefs.html:52 +msgid "Change password" +msgstr "Skift adgangskode" + +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Vælg Alle" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 +msgid "Check box to delete" +msgstr "Vælg boks for at slette" + +#: html/Admin/Elements/SelectRights:55 +msgid "Check box to revoke right" +msgstr "Vælg boks for a indrage rettighed" + +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 +msgid "Children" +msgstr "Børn" + +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 +msgid "City" +msgstr "By" + +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "Fravælg Alle" + +#: html/Ticket/Elements/ShowDates:68 +msgid "Closed" +msgstr "Lukket" + +#: NOT FOUND IN SOURCE +msgid "Closed Tickets" +msgstr "Lukkede Tickets" + +#: NOT FOUND IN SOURCE +msgid "Closed requests" +msgstr "Lukkede requests" + +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "Lukkede requests" + +#: NOT FOUND IN SOURCE +msgid "Command not understood!\\n" +msgstr "Kommando ikke forstÃ¥et!\\n" + +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 +msgid "Comment" +msgstr "Kommentar" + +#: html/Admin/Queues/Modify.html:79 +msgid "Comment Address" +msgstr "Kommentar adresse" + +#: NOT FOUND IN SOURCE +msgid "Comment not recorded" +msgstr "Kommentar ikke skrevet" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "Comment on tickets" +msgstr "Kommentér pÃ¥ tickets" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "CommentOnTicket" +msgstr "KommenterPÃ¥Ticket" + +#: NOT FOUND IN SOURCE +msgid "Comments" +msgstr "Kommentarer" + +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 +msgid "Comments (Not sent to requestors)" +msgstr "Kommentarer (ikke sendt til requestere)" + +#: html/Search/Bulk.html:150 +msgid "Comments (not sent to requestors)" +msgstr "Kommentarer (ikke sendt til requestere)" + +#: NOT FOUND IN SOURCE +msgid "Comments about %1" +msgstr "Kommentarer pÃ¥ %1" + +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 +msgid "Comments about this user" +msgstr "Kommentarer om denne bruger" + +#: lib/RT/Transaction_Overlay.pm:623 +msgid "Comments added" +msgstr "Kommentarer tilføjet" + +#: lib/RT/Action/Generic.pm:176 +msgid "Commit Stubbed" +msgstr "Commit Ryddet" + +#: NOT FOUND IN SOURCE +msgid "Compile Restrictions" +msgstr "Oversættelses Restriktioner" + +#: html/Admin/Elements/EditScrip:63 +msgid "Condition" +msgstr "Betingelse" + +#: bin/rt-crontool:131 +msgid "Condition matches..." +msgstr "Betingelser matcher..." + +#: lib/RT/Scrip_Overlay.pm:189 +msgid "Condition not found" +msgstr "Betingelse ikke fundet" + +#: html/Elements/Tabs:81 +msgid "Configuration" +msgstr "Konfiguration" + +#: html/SelfService/Prefs.html:54 +msgid "Confirm" +msgstr "Bekræft" + +#: NOT FOUND IN SOURCE +msgid "ContactInfoSystem" +msgstr "KontaktInfomationsSystem" + +#: NOT FOUND IN SOURCE +msgid "Contacted date '%1' could not be parsed" +msgstr "Dato kontaktet: '%1' kunne ikke parses" + +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 +msgid "Content" +msgstr "Indhold" + +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "Content-Type" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "Kopier" + +#: etc/initialdata:286 +msgid "Correspondence" +msgstr "Korrespondance" + +#: NOT FOUND IN SOURCE +msgid "Correspondence Address" +msgstr "Korrespondance adresse" + +#: lib/RT/Transaction_Overlay.pm:619 +msgid "Correspondence added" +msgstr "Korrenspondance tilføjet" + +#: NOT FOUND IN SOURCE +msgid "Correspondence not recorded" +msgstr "Korrespondance ikke gemt" + +#: NOT FOUND IN SOURCE +msgid "Could not add new custom field value for ticket. " +msgstr "Ikke muligt at tilføje ny custom felt værdi for ticket. " + +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "Kunne ikke tilføje ny custom felt værdi" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "Kunne ikke tilføje ny custom felt værdi. %1" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 +msgid "Could not change owner. " +msgstr "Ikke muligt at skifte ejer" + +#: html/Admin/CustomFields/Modify.html:119 +#. ($msg) +msgid "Could not create CustomField" +msgstr "Ikke muligt at oprette Custom felt" + +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "Kunne ikke oprette CustomField: %1" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 +msgid "Could not create group" +msgstr "Ikke muligt at oprette gruppe" + +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 +#. ($msg) +msgid "Could not create template: %1" +msgstr "Ikke muligt at oprette template: %1" + +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 +msgid "Could not create ticket. Queue not set" +msgstr "Ikke muligt at oprette ticket. Kø ikke sat" + +#: 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 "Ikke muligt at oprette bruger" + +#: NOT FOUND IN SOURCE +msgid "Could not find a ticket with id %1" +msgstr "Ikke muligt at finde ticket med id %1" + +#: NOT FOUND IN SOURCE +msgid "Could not find group %1." +msgstr "Ikke muligt at finde gruppe %1" + +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 +msgid "Could not find or create that user" +msgstr "Ikke muligt at finde eller oprette den bruger" + +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 +msgid "Could not find that principal" +msgstr "Ikke muligt at finde principal" + +#: NOT FOUND IN SOURCE +msgid "Could not find user %1." +msgstr "Ikke muligt at finde bruger %1" + +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Kunne ikke indlæse CustomFelt %1" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 +msgid "Could not load group" +msgstr "Ikke muligt at indlæse gruppe" + +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 +#. ($args{'Type'}) +msgid "Could not make that principal a %1 for this queue" +msgstr "Kunne ikke g¯re den principal %1 for denne k¯" + +#: lib/RT/Ticket_Overlay.pm:1405 +#. ($self->loc($args{'Type'})) +msgid "Could not make that principal a %1 for this ticket" +msgstr "Kunne ikke g¯re den prinicipal %1 for denne ticket" + +#: lib/RT/Queue_Overlay.pm:857 +#. ($args{'Type'}) +msgid "Could not remove that principal as a %1 for this queue" +msgstr "Kunne ikke fjerne den principal %1 for denne k¯" + +#: NOT FOUND IN SOURCE +msgid "Could not remove that principal as a %1 for this ticket" +msgstr "msgstr "Kunne ikke fjerne den principal %1 for denne ticket" " + +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Kunne ikke sætte bruger info" + +#: lib/RT/Group_Overlay.pm:1011 +msgid "Couldn't add member to group" +msgstr "Kunne ikke tilf¯je medlem til gruppe" + +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 +#. ($Msg) +msgid "Couldn't create a transaction: %1" +msgstr "Kunne ikke oprette en lave transaktion: %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't figure out what to do from gpg's reply\\n" +msgstr "Kunne ikke afg¯re hvad som skulle foretages ud fra GPG's svar\\n" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find group\\n" +msgstr "Kunne ikke finde gruppe\\n" + +#: lib/RT/Record.pm:939 +msgid "Couldn't find row" +msgstr "Kunne ikke finde row" + +#: lib/RT/Group_Overlay.pm:985 +msgid "Couldn't find that principal" +msgstr "Kunne ikke finde den principal" + +#: lib/RT/CustomField_Overlay.pm:404 +msgid "Couldn't find that value" +msgstr "Kunne ikke finde den værdi" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find user\\n" +msgstr "Kunne ikke finde bruger\\n" + +#: lib/RT/CurrentUser.pm:146 +#. ($self->Id) +msgid "Couldn't load %1 from the users database.\\n" +msgstr "Kunne ikke indlæse %1 fra bruger database.\\n" + +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "Kunne ikke indlæse klasse %1" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "Kunne ikke indlæse CustomField %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load RT config file '%1' %2" +msgstr "Kunne ikke indlæse RT konfigurations fil '%1' %2" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load Scrips." +msgstr "Kunne ikke indlæse Scrips." + +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 +#. ($id) +msgid "Couldn't load group %1" +msgstr "Kunne ikke indlæse gruppe %1" + +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 +msgid "Couldn't load link" +msgstr "Kunne ikke indlæse link" + +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "Kunne ikke indlæse object %1" + +#: html/Admin/Queues/People.html:142 +#. ($id) +msgid "Couldn't load queue" +msgstr "Kunne ikke indlæse k¯" + +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 +#. ($id) +msgid "Couldn't load queue %1" +msgstr "Kunne ikke indlÊse k¯ %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load scrip" +msgstr "Kunne ikke indlÊse scrip" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load template" +msgstr "Kunne ikke indlÊse template" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load that user (%1)" +msgstr "Kunne ikke indlÊse den bruger (%1)" + +#: html/SelfService/Display.html:156 +#. ($id) +msgid "Couldn't load ticket '%1'" +msgstr "Kunne ikke indlÊse ticket '%1'" + +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: 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 +msgid "Create" +msgstr "opret" + +#: etc/initialdata:135 +msgid "Create Tickets" +msgstr "opret Tickets" + +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 +msgid "Create a CustomField" +msgstr "opret et Custom felt" + +#: html/Admin/Queues/CustomField.html:69 +#. ($QueueObj->Name()) +msgid "Create a CustomField for queue %1" +msgstr "opret et Custom felt for k¯ %1" + +#: NOT FOUND IN SOURCE +msgid "Create a CustomField which applies to all queues" +msgstr "opret et Custom felt som gÊlder for alle k¯er" + +#: NOT FOUND IN SOURCE +msgid "Create a new Custom Field" +msgstr "opret et nyt Custom felt" + +#: NOT FOUND IN SOURCE +msgid "Create a new global scrip" +msgstr "opret en ny global scrip" + +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 +msgid "Create a new group" +msgstr "opret en ny gruppe" + +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 +msgid "Create a new personal group" +msgstr "opret en ny personlig gruppe" + +#: NOT FOUND IN SOURCE +msgid "Create a new queue" +msgstr "opret en ny gruppe" + +#: NOT FOUND IN SOURCE +msgid "Create a new scrip" +msgstr "opret en ny scrip" + +#: NOT FOUND IN SOURCE +msgid "Create a new template" +msgstr "opret en ny template" + +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 +msgid "Create a new ticket" +msgstr "opret en ny ticket" + +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 +msgid "Create a new user" +msgstr "opret en ny bruger" + +#: html/Admin/Queues/Modify.html:125 +msgid "Create a queue" +msgstr "opret en ny k¯" + +#: NOT FOUND IN SOURCE +msgid "Create a queue called" +msgstr "opret en k¯ med navnet" + +#: NOT FOUND IN SOURCE +msgid "Create a request" +msgstr "opret en request" + +#: html/Admin/Queues/Scrip.html:80 +#. ($QueueObj->Name) +msgid "Create a scrip for queue %1" +msgstr "opret en scrip for k¯ %1" + +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 +msgid "Create a template" +msgstr "opret en template" + +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "opret en ticket" + +#: etc/initialdata:137 +msgid "Create new tickets based on this scrip's template" +msgstr "opret en ny ticket baseret p denne scrip's template" + +#: html/SelfService/Create.html:105 +msgid "Create ticket" +msgstr "opret ticket" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "Create tickets in this queue" +msgstr "opret tickets i denne k¯" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "Create, delete and modify custom fields" +msgstr "opret, slet og rediger custom felter" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "Create, delete and modify queues" +msgstr "opret, slet og rediger k¯er" + +#: NOT FOUND IN SOURCE +msgid "Create, delete and modify the members of any user's personal groups" +msgstr "opret, slet og rediger medlemmerne af vilkÂrlig brugers personlige grupper" + +#: lib/RT/System.pm:81 +msgid "Create, delete and modify the members of personal groups" +msgstr "opret, slet og rediger medlemmernes personlie grupper" + +#: lib/RT/System.pm:82 +msgid "Create, delete and modify users" +msgstr "opret, slet og rediger brugere" + +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "OpretGemtSøgning" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "CreateTicket" +msgstr "OpretTicket" + +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 +msgid "Created" +msgstr "Oprettet" + +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 +#. ($CustomFieldObj->Name()) +msgid "Created CustomField %1" +msgstr "Oprettede Customer felt %1" + +#: NOT FOUND IN SOURCE +msgid "Created template %1" +msgstr "Oprettede template %1" + +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Opretter" + +#: html/Elements/EditLinks:49 +msgid "Current Links" +msgstr "Nuværende relationer" + +#: html/Admin/Elements/EditScrips:51 +msgid "Current Scrips" +msgstr "Nuværende Scrips" + +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 +msgid "Current members" +msgstr "Nuværende medlemmer" + +#: html/Admin/Elements/SelectRights:51 +msgid "Current rights" +msgstr "Nuværende rettigheder" + +#: NOT FOUND IN SOURCE +msgid "Current search criteria" +msgstr "Nuværende søgekriterier" + +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 +msgid "Current watchers" +msgstr "Nuværende watchere" + +#: NOT FOUND IN SOURCE +msgid "Custom Field #%1" +msgstr "Custom Felt #%1" + +#: 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 +msgid "Custom Fields" +msgstr "Custom Felter" + +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Custom Felter for %1" + +#: html/Admin/Elements/EditScrip:123 +msgid "Custom action cleanup code" +msgstr "Custom aktion oprydnings kode" + +#: html/Admin/Elements/EditScrip:115 +msgid "Custom action preparation code" +msgstr "Custom aktion forberedelses kode" + +#: html/Admin/Elements/EditScrip:107 +msgid "Custom condition" +msgstr "Custom betingelse" + +#: NOT FOUND IN SOURCE +msgid "Custom field %1 %2 %3" +msgstr "Custom felt %1 %2 %3" + +#: lib/RT/Tickets_Overlay.pm:2147 +#. ($CF->Name) +msgid "Custom field %1 has a value." +msgstr "Custom felt %1 har vÊrdi." + +#: lib/RT/Tickets_Overlay.pm:2143 +#. ($CF->Name) +msgid "Custom field %1 has no value." +msgstr "Custom felt %1 har ingen vÊrdi." + +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 +#. ($args{'Field'}) +msgid "Custom field %1 not found" +msgstr "Custom felt %1 ikke fundet" + +#: NOT FOUND IN SOURCE +msgid "Custom field deleted" +msgstr "Custom felt slettet" + +#: NOT FOUND IN SOURCE +msgid "Custom field not found" +msgstr "Custom felt ikke fundet" + +#: lib/RT/CustomField_Overlay.pm:1041 +#. ($args{'Content'}, $self->Name) +msgid "Custom field value %1 could not be found for custom field %2" +msgstr "Custom felt vÊrdi %1 kunne ikke blive fundet for custom felt %2" + +#: NOT FOUND IN SOURCE +msgid "Custom field value changed from %1 to %2" +msgstr "Custom felt vÊrdi Êndret fra %1 to %2" + +#: lib/RT/CustomField_Overlay.pm:414 +msgid "Custom field value could not be deleted" +msgstr "Custom felt vÊrdi kunne ikke slettes" + +#: lib/RT/CustomField_Overlay.pm:1047 +msgid "Custom field value could not be found" +msgstr "Custom felt vÊrdi kunne ikke findes" + +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 +msgid "Custom field value deleted" +msgstr "Custom felt vÊrdi slettet" + +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 +msgid "CustomField" +msgstr "CustomFelt" + +#: 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 +msgid "Dates" +msgstr "Datoer" + +#: lib/RT/Date.pm:448 +msgid "Dec." +msgstr "Dec." + +#: NOT FOUND IN SOURCE +msgid "Default Autoresponse Template" +msgstr "Default Autosvars Template" + +#: etc/initialdata:222 +msgid "Default Autoresponse template" +msgstr "Default autosvars template" + +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "Default Kø" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Default Requestor" + +#: etc/initialdata:296 +msgid "Default admin comment template" +msgstr "Default administrator kommentar template" + +#: etc/initialdata:275 +msgid "Default admin correspondence template" +msgstr "Default administrator korrespondance template" + +#: etc/initialdata:287 +msgid "Default correspondence template" +msgstr "Default korrespondance template" + +#: etc/initialdata:253 +msgid "Default transaction template" +msgstr "Default transaktions template" + +#: NOT FOUND IN SOURCE +msgid "Default: %1/%2 changed from %3 to %4" +msgstr "Default: %1/%2 Êndret til %3 to %4" + +#: html/User/Delegation.html:46 html/User/Delegation.html:49 +msgid "Delegate rights" +msgstr "Overdrag rettigheder" + +#: lib/RT/System.pm:85 +msgid "Delegate specific rights which have been granted to you." +msgstr "Overdrag specifikke rettigeder som er blevet tildelt til dig." + +#: lib/RT/System.pm:85 +msgid "DelegateRights" +msgstr "OverdragRettigheder" + +#: html/User/Elements/Tabs:59 +msgid "Delegation" +msgstr "Overdragelse" + +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 +msgid "Delete" +msgstr "Slet" + +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Slet Template" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Slet valgte scrips" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "Delete tickets" +msgstr "Slet tickets" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "DeleteTicket" +msgstr "SletTicket" + +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object could break referential integrity" +msgstr "Sletning af dette objekt kan ¯delÊgge referentiel integritet" + +#: lib/RT/Queue_Overlay.pm:391 +msgid "Deleting this object would break referential integrity" +msgstr "Sletning af dette objekt vil ¯delÊgge referentiel integritet" + +#: lib/RT/User_Overlay.pm:513 +msgid "Deleting this object would violate referential integrity" +msgstr "Sletning af dette objekt vil stride mod referentiel integritet" + +#: html/Approvals/Elements/Approve:66 +msgid "Deny" +msgstr "Afvis" + +#: 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 +msgid "Depended on by" +msgstr "Afhængighed til" + +#: NOT FOUND IN SOURCE +msgid "Dependencies: \\n" +msgstr "Afhængigheder: \\n" + +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "Afhængighed til %1 tilf¯jet" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "Afhængighed til %1 slettet" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "Afhængighed af %1 tilf¯jet" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "Afhængighed af %1 slettet" + +#: 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 +msgid "Depends on" +msgstr "Afhængig af" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 +msgid "Descending" +msgstr "Faldende" + +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 +msgid "Describe the issue below" +msgstr "Beskriv problemet nedenfor" + +#: 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 "Beskrivelse" + +#: NOT FOUND IN SOURCE +msgid "Details" +msgstr "Detaljer" + +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 +msgid "Display" +msgstr "Vis" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "Display Access Control List" +msgstr "Vis Adgangs Kontrol Liste" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Vis Kolonner" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "Display Scrip templates for this queue" +msgstr "Vis Scrip templates for denne kø" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "Display Scrips for this queue" +msgstr "Vis scrips for denne kø" + +#: html/Ticket/Elements/ShowHistory:56 +msgid "Display mode" +msgstr "Visnings modus" + +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "Vis gemte søgninger fir denne gruppe" + +#: NOT FOUND IN SOURCE +msgid "Display ticket #%1" +msgstr "Vis ticket #%1" + +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "Distribueret under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> af GNU GPL'en.</a>" + +#: lib/RT/System.pm:76 +msgid "Do anything and everything" +msgstr "Gør noget og alting" + +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "Foretag Søgningen" + +#: html/Elements/Refresh:51 +msgid "Don't refresh this page." +msgstr "Genindlæs ikke denne side-" + +#: NOT FOUND IN SOURCE +msgid "Don't show search results" +msgstr "Vis ikke søge resultater" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "Download" +msgstr "Download" + +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "Download som en tab-opdelt fil" + +#: 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 +msgid "Due" +msgstr "Forfaldende" + +#: NOT FOUND IN SOURCE +msgid "Due date '%1' could not be parsed" +msgstr "Forfaldsdato '%1' kunne ikke parses" + +#: NOT FOUND IN SOURCE +msgid "ERROR: Couldn't load ticket '%1': %2.\\n" +msgstr "FEJL: Kunne ikke indlæse ticket '%1': %2.\\n" + +#: NOT FOUND IN SOURCE +msgid "Edit" +msgstr "Editér" + +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" +msgstr "Editér customer felter for %1" + +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" +msgstr "Editér forhold" + +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Editér Søgning" + +#: html/Admin/Queues/Templates.html:63 +#. ($QueueObj->Name) +msgid "Edit Templates for queue %1" +msgstr "Editér Templates for kø %1" + +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "Editér gemte søgniner for denne gruppe" + +#: NOT FOUND IN SOURCE +msgid "Edit scrips" +msgstr "Editér scrips" + +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 +msgid "Edit system templates" +msgstr "Editér system templates" + +#: NOT FOUND IN SOURCE +msgid "Edit templates for %1" +msgstr "Editér templates for %1" + +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "EditerGemteSøgninger" + +#: html/Admin/Queues/Modify.html:140 +#. ($QueueObj->Name) +msgid "Editing Configuration for queue %1" +msgstr "Editér Konfiguration for kø %1" + +#: NOT FOUND IN SOURCE +msgid "Editing Configuration for user %1" +msgstr "Editerer Konfiguration for bruger %1" + +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 +#. ($CustomFieldObj->Name()) +msgid "Editing CustomField %1" +msgstr "Editerer Custom felt %1" + +#: html/Admin/Groups/Members.html:53 +#. ($Group->Name) +msgid "Editing membership for group %1" +msgstr "Editerer medlemskab for gruppe %1" + +#: html/User/Groups/Members.html:150 +#. ($Group->Name) +msgid "Editing membership for personal group %1" +msgstr "Editerer medlemskab for personlig gruppe %1" + +#: NOT FOUND IN SOURCE +msgid "Editing template %1" +msgstr "Editerer template %1" + +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 +msgid "Either base or target must be specified" +msgstr "Enten base eller mÃ¥l skal være specificeret" + +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 +msgid "Email" +msgstr "E-mail" + +#: lib/RT/User_Overlay.pm:236 +msgid "Email address in use" +msgstr "E-mail adresse i brug" + +#: NOT FOUND IN SOURCE +msgid "EmailAddress" +msgstr "E-mailAdresse" + +#: NOT FOUND IN SOURCE +msgid "EmailEncoding" +msgstr "E-mail encoding" + +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 +msgid "Enabled (Unchecking this box disables this custom field)" +msgstr "Aktiveret (Fravalg af denne boks deaktiverer dette custom felt)" + +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 +msgid "Enabled (Unchecking this box disables this group)" +msgstr "Aktiveret (Fravalg af denne boks deaktiverer denne gruppe)" + +#: html/Admin/Queues/Modify.html:105 +msgid "Enabled (Unchecking this box disables this queue)" +msgstr "Aktiveret (Fravalg af denne boks deaktiverer denne kø)" + +#: NOT FOUND IN SOURCE +msgid "Enabled Custom Fields" +msgstr "Aktiverede Custom felter" + +#: html/Admin/Queues/index.html:78 +msgid "Enabled Queues" +msgstr "Aktiverede Køer" + +#: 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)) +msgid "Enabled status %1" +msgstr "Aktiverede status %1" + +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "Tilvalgt status: %1" + +#: lib/RT/CustomField_Overlay.pm:64 +msgid "Enter multiple values" +msgstr "Indtast flere værdier" + +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Angiv objecter eller URIs for linkning af objekter. Separér flere med mellemrum" + +#: lib/RT/CustomField_Overlay.pm:65 +msgid "Enter one value" +msgstr "Indtast en værdi" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Angiv køer eller URIs til linkning køer til. Separér flere med mellemrum" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Indtast tickets eller URIs for linkning af tickets. Separer flere værdier med mellemrum." + +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "Skriv op til %1 værdier" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 +msgid "Error" +msgstr "Fejl" + +#: lib/RT/Queue_Overlay.pm:669 +msgid "Error in parameters to Queue->AddWatcher" +msgstr "Fejl i parametre til Queue->AddWatcher" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Queue->DelWatcher" +msgstr "Fejl i parametre til Queue->DelWatcher" + +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Fejl i parametre til Queue->DeleteWatcher" + +#: lib/RT/Ticket_Overlay.pm:1333 +msgid "Error in parameters to Ticket->AddWatcher" +msgstr "Fejl i parametre til Ticket->AddWatcher" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Ticket->DelWatcher" +msgstr "Fejl i parametre til Ticket->DelWatcher" + +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Fejl i parametre til Ticket->DeleteWatcher" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "Eskalér tickets" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Estimeret" + +#: etc/initialdata:20 +msgid "Everyone" +msgstr "Alle" + +#: bin/rt-crontool:219 +msgid "Example:" +msgstr "Eksempel:" + +#: NOT FOUND IN SOURCE +msgid "ExternalAuthId" +msgstr "ExternalAuthId" + +#: NOT FOUND IN SOURCE +msgid "ExternalContactInfoId" +msgstr "ExternalContactInfoId" + +#: html/Admin/Users/Modify.html:99 +msgid "Extra info" +msgstr "Ekstra information" + +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 +msgid "Failed to find 'Privileged' users pseudogroup." +msgstr "Fejlede i lokalisering 'Priviledged' brugere pseudogruppe." + +#: lib/RT/User_Overlay.pm:384 +msgid "Failed to find 'Unprivileged' users pseudogroup" +msgstr "Fejlede i lokalisering af 'Unproviledged' brugere pseudogruppe" + +#: bin/rt-crontool:163 +#. ($modname, $@) +msgid "Failed to load module %1. (%2)" +msgstr "Fejlede i indlæsningen af modul %1. (%2)" + +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 +msgid "Feb." +msgstr "Feb." + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Filnavn" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "Udfyld flere tekst omrÃ¥der" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "Udfyld i et tekst omrÃ¥de" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "Udfyld op til %1 tekst omrÃ¥der" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Fin" +msgstr "Slut" + +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 +msgid "Final Priority" +msgstr "Endelig Prioritet" + +#: lib/RT/Ticket_Overlay.pm:1140 +msgid "FinalPriority" +msgstr "EndeligPrioritet" + +#: NOT FOUND IN SOURCE +msgid "Find group whose" +msgstr "Find gruppe hvis" + +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "Find grupper hvis" + +#: NOT FOUND IN SOURCE +msgid "Find new/open tickets" +msgstr "Find nye/Ã¥bne tickets" + +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 +msgid "Find people whose" +msgstr "Find folk hvis" + +#: html/Search/Results.html:109 +msgid "Find tickets" +msgstr "Find tickets" + +#: NOT FOUND IN SOURCE +msgid "Finish Approval" +msgstr "Afslut godkendelse" + +#: html/Ticket/Elements/Tabs:81 +msgid "First" +msgstr "Første" + +#: NOT FOUND IN SOURCE +msgid "First page" +msgstr "Første side" + +#: 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 +msgid "Foo!" +msgstr "Foo!" + +#: html/Search/Bulk.html:105 +msgid "Force change" +msgstr "gennemtving ændring" + +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 +#. ($ticketcount) +msgid "Found %quant(%1,ticket)" +msgstr "Fandt %quant(%1,ticket)" + +#: lib/RT/Record.pm:942 +msgid "Found Object" +msgstr "Fandt Objekt" + +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "Freeform" + +#: NOT FOUND IN SOURCE +msgid "FreeformContactInfo" +msgstr "FreeformContactInfo" + +#: NOT FOUND IN SOURCE +msgid "FreeformMultiple" +msgstr "FreeformMultiple" + +#: NOT FOUND IN SOURCE +msgid "FreeformSingle" +msgstr "FreeformSingle" + +#: lib/RT/Date.pm:417 +msgid "Fri." +msgstr "Fre." + +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 +msgid "Full headers" +msgstr "Fulde headers" + +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "Hent template fra fil" + +#: NOT FOUND IN SOURCE +msgid "Getting the current user from a pgp sig\\n" +msgstr "Henter the nuværende bruger fra en PGP signatur\\n" + +#: lib/RT/Transaction_Overlay.pm:673 +#. ($New->Name) +msgid "Given to %1" +msgstr "Givet til %1" + +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 +msgid "Global" +msgstr "Global" + +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Globale custom felter" + +#: NOT FOUND IN SOURCE +msgid "Global Scrips" +msgstr "Globale Scrips" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "Global custom felt configuration" + +#: html/Admin/Elements/SelectTemplate:59 +#. (loc($Template->Name)) +msgid "Global template: %1" +msgstr "Global template: %1" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Go" + +#: html/Admin/Groups/index.html:67 html/Admin/Groups/index.html:73 html/Admin/Queues/People.html:80 html/Admin/Queues/People.html:84 html/Admin/Queues/index.html:66 html/Admin/Users/index.html:73 html/Search/Results.html:76 html/Ticket/Elements/EditPeople:53 html/Ticket/Elements/EditPeople:57 html/index.html:91 +msgid "Go!" +msgstr "Start!" + +#: NOT FOUND IN SOURCE +msgid "Good pgp sig from %1\\n" +msgstr "God PGP signatur fra %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Goto page" +msgstr "GÃ¥ til side" + +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 +msgid "Goto ticket" +msgstr "GÃ¥ til ticket" + +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 +msgid "Group" +msgstr "Gruppe" + +#: NOT FOUND IN SOURCE +msgid "Group %1 %2: %3" +msgstr "Gruppe %1 %2: %3" + +#: 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 "Gruppe Rettigheder" + +#: lib/RT/Group_Overlay.pm:991 +msgid "Group already has member" +msgstr "Gruppe har allerede medlem" + +#: html/Admin/Groups/Modify.html:109 +#. ($create_msg) +msgid "Group could not be created: %1" +msgstr "Gruppe kunne ikke blive oprettet: %1" + +#: lib/RT/Group_Overlay.pm:529 +msgid "Group created" +msgstr "Gruppe oprettet" + +#: lib/RT/Group_Overlay.pm:1163 +msgid "Group has no such member" +msgstr "Gruppen har sÃ¥dan et medlem" + +#: 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 +msgid "Group not found" +msgstr "Gruppe ikke fundet" + +#: NOT FOUND IN SOURCE +msgid "Group not found.\\n" +msgstr "Gruppe ikke fundet.\\n" + +#: NOT FOUND IN SOURCE +msgid "Group not specified.\\n" +msgstr "Gruppe ikke angivet.\\n" + +#: 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 +msgid "Groups" +msgstr "Grupper" + +#: lib/RT/Group_Overlay.pm:997 +msgid "Groups can't be members of their members" +msgstr "Grupper kan ikke være medlemmer af deres medlemmer" + +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "Grupper som matcher søge kriterier" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "Grupper denne bruger hører til" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 +msgid "Hello!" +msgstr "Hej!" + +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 +#. ($name) +msgid "Hello, %1" +msgstr "Hej, %1" + +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 +msgid "History" +msgstr "Historie" + +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "Historie for gruppen %1" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "Historie for brugeren %1" + +#: NOT FOUND IN SOURCE +msgid "HomePhone" +msgstr "HjemmeTelefon" + +#: html/Elements/Tabs:65 +msgid "Homepage" +msgstr "Homepage" + +#: lib/RT/Base.pm:110 +#. (6) +msgid "I have %quant(%1,concrete mixer)." +msgstr "Jeg har %quant(%1,concrete mixer)." + +#: NOT FOUND IN SOURCE +msgid "I have [quant,_1,concrete mixer]." +msgstr "Jeg har [quant,_1,concrete mixer]." + +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "jeg er fortabt" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 +msgid "Id" +msgstr "Id" + +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 +msgid "Identity" +msgstr "Identitet" + +#: etc/initialdata:429 +msgid "If an approval is rejected, reject the original and delete pending approvals" +msgstr "Hvis en godkendelse bliver afvist, afvis den originale og slet ventede godkendelser" + +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "Hvis ingen Requestor er specificeret, opret da tickets med denne requestor" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "Hvis ingen kø er oprettet, opret tickets i denne kø" + +#: 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 "Hvis dette værktøj var setgid, kunne en fjendtlig bruger benytte dette værktøj til at opnÃ¥ administrat adgang til RT." + +#: 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 "Hvis du har opdateret noget ovenfor, vær da sikker pÃ¥ at" + +#: lib/RT/Record.pm:933 +msgid "Illegal value for %1" +msgstr "Ulovlig værdi for %1" + +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Billede" + +#: lib/RT/Record.pm:936 +msgid "Immutable field" +msgstr "Uforanderligt felt" + +#: NOT FOUND IN SOURCE +msgid "Include disabled custom fields in listing." +msgstr "Medtag deaktiverede custom felter i liste." + +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Inkludér ikke tilvalgte grupper i denne liste." + +#: html/Admin/Queues/index.html:65 +msgid "Include disabled queues in listing." +msgstr "Medtag deaktiverede køer i liste." + +#: html/Admin/Users/index.html:71 +msgid "Include disabled users in search." +msgstr "Medtag deaktiverede brugere i liste." + +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "Ukomplet Søgning" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "Ukomplet søgning" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 +msgid "Initial Priority" +msgstr "Initiel Prioritet" + +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 +msgid "InitialPriority" +msgstr "InitielPrioritet" + +#: lib/RT/ScripAction_Overlay.pm:134 +msgid "Input error" +msgstr "Input fejl" + +#: lib/RT/Ticket_Overlay.pm:3454 +msgid "Internal Error" +msgstr "Intern Fejl" + +#: lib/RT/Record.pm:305 +#. ($id->{error_message}) +msgid "Internal Error: %1" +msgstr "Intern Fejl: %1" + +#: lib/RT/Group_Overlay.pm:676 +msgid "Invalid Group Type" +msgstr "Ikke valid Gruppe Type" + +#: lib/RT/Principal_Overlay.pm:161 +msgid "Invalid Right" +msgstr "Ikke valid Rettighed" + +#: lib/RT/Record.pm:938 +msgid "Invalid data" +msgstr "Ikke valide data" + +#: NOT FOUND IN SOURCE +msgid "Invalid owner. Defaulting to 'nobody'." +msgstr "Ikke valid ejer, Default'er til 'nobody'" + +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 +msgid "Invalid queue" +msgstr "Ikke valid kø" + +#: 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 "Ikke valid rettighed" + +#: lib/RT/Record.pm:280 +#. ($key) +msgid "Invalid value for %1" +msgstr "Ikke valid værdi for %1" + +#: lib/RT/Record.pm:1597 +msgid "Invalid value for custom field" +msgstr "Ikke valid værdi for custom felt" + +#: lib/RT/Ticket_Overlay.pm:413 +msgid "Invalid value for status" +msgstr "Ikke valid værdi for status" + +#: bin/rt-crontool:216 +msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." +msgstr "Det er af højeste vigtighed at ikke-privilegerede brugere ikke fÃ¥r adgang til at køre dette værktøj." + +#: 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 "Det anbefales at du opretter en ikke-priviligeret unix bruger med det korrekte gruppe medlemsjab og RT adgang for at benytte dette værktøj." + +#: bin/rt-crontool:188 +msgid "It takes several arguments:" +msgstr "Det tager adskellige argumenter:" + +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "Kursiv" + +#: NOT FOUND IN SOURCE +msgid "Items pending my approval" +msgstr "Elementer som afventer min godkendelse" + +#: lib/RT/Date.pm:437 +msgid "Jan." +msgstr "Jan." + +#: lib/RT/Group_Overlay.pm:174 +msgid "Join or leave this group" +msgstr "Tilslut eller forlad denne gruppe" + +#: lib/RT/Date.pm:443 +msgid "Jul." +msgstr "Jul." + +#: html/Ticket/Elements/Tabs:122 +msgid "Jumbo" +msgstr "Jumbo" + +#: lib/RT/Date.pm:442 +msgid "Jun." +msgstr "Jun." + +#: NOT FOUND IN SOURCE +msgid "Keyword" +msgstr "Nøgleord" + +#: NOT FOUND IN SOURCE +msgid "Lang" +msgstr "Sprog" + +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "Sprog" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "Stor" + +#: html/Ticket/Elements/Tabs:96 +msgid "Last" +msgstr "Sidste" + +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 +msgid "Last Contact" +msgstr "Sidste kontakt" + +#: html/Elements/SelectDateType:50 +msgid "Last Contacted" +msgstr "Sidst kontaktet" + +#: NOT FOUND IN SOURCE +msgid "Last Notified" +msgstr "Sidst Notificeret" + +#: html/Elements/SelectDateType:51 +msgid "Last Updated" +msgstr "Sidst Opdateret" + +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "SidstOpdateretAf" + +#: html/Ticket/Elements/ShowBasics:68 +msgid "Left" +msgstr "Tilbage" + +#: html/Admin/Users/Modify.html:109 +msgid "Let this user access RT" +msgstr "Lad denne bruger fÃ¥ adgang til RT" + +#: html/Admin/Users/Modify.html:113 +msgid "Let this user be granted rights" +msgstr "Lad denne bruger fÃ¥ rettigheder" + +#: NOT FOUND IN SOURCE +msgid "Limiting owner to %1 %2" +msgstr "Begrænser ejer til %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Limiting queue to %1 %2" +msgstr "Begrænser kø til %1 %2" + +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 +msgid "Link already exists" +msgstr "Link eksisterer allerede" + +#: lib/RT/Record.pm:1306 +msgid "Link could not be created" +msgstr "Link kunne ikke blive oprettet" + +#: lib/RT/Record.pm:1312 +#. ($TransString) +msgid "Link created (%1)" +msgstr "Link oprettet (%1)" + +#: lib/RT/Record.pm:1373 +#. ($TransString) +msgid "Link deleted (%1)" +msgstr "Link slettet (%1)" + +#: lib/RT/Record.pm:1379 +msgid "Link not found" +msgstr "Link ikke fundet" + +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 +#. ($Ticket->Id) +msgid "Link ticket #%1" +msgstr "Link ticket #%1" + +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 +msgid "Links" +msgstr "Links" + +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "Indlæs" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "Indlæs gemt søgning:" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "IndlæsGemtSøgning" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "Indlæste Perl moduler" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 +msgid "Location" +msgstr "Lokation" + +#: lib/RT.pm:212 +#. ($RT::LogDir) +msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." +msgstr "Log directory %1 kunne ikke findes eller skrive til.\\n RT kan ikke køre." + +#: html/Elements/Header:94 +#. ("<b>".$session{'CurrentUser'}->Name."</b>") +msgid "Logged in as %1" +msgstr "Logget ind som %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 +msgid "Login" +msgstr "Log ind" + +#: html/Elements/Header:91 +msgid "Logout" +msgstr "Log ud" + +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "Opslagstype misforhold" + +#: html/Search/Bulk.html:104 +msgid "Make Owner" +msgstr "Lav Ejer" + +#: html/Search/Bulk.html:128 +msgid "Make Status" +msgstr "Lav Status" + +#: html/Search/Bulk.html:136 +msgid "Make date Due" +msgstr "Sæt forfaldsdato" + +#: html/Search/Bulk.html:138 +msgid "Make date Resolved" +msgstr "Sæt løsnings dato" + +#: html/Search/Bulk.html:132 +msgid "Make date Started" +msgstr "Sæt start dato" + +#: html/Search/Bulk.html:130 +msgid "Make date Starts" +msgstr "Sæt startes dato" + +#: html/Search/Bulk.html:134 +msgid "Make date Told" +msgstr "Sæt dato fortalt" + +#: html/Search/Bulk.html:124 +msgid "Make priority" +msgstr "Sæt Prioritet" + +#: html/Search/Bulk.html:126 +msgid "Make queue" +msgstr "Sæt kø" + +#: html/Search/Bulk.html:122 +msgid "Make subject" +msgstr "Sæt emne" + +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "Gør denne gruppe synlig for bruger" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "Administrer custom felter og custom felt værdier" + +#: html/Admin/index.html:69 +msgid "Manage groups and group membership" +msgstr "Administrer grupper og gruppe medlemskab" + +#: html/Admin/index.html:85 +msgid "Manage properties and configuration which apply to all queues" +msgstr "Administrer egenskaber og konfiguration som gælder for alle køer" + +#: html/Admin/index.html:74 +msgid "Manage queues and queue-specific properties" +msgstr "Administrer køer og kø-specifikke egenskaber" + +#: html/Admin/index.html:64 +msgid "Manage users and passwords" +msgstr "Administrer brugere og adgangskoder" + +#: lib/RT/Date.pm:439 +msgid "Mar." +msgstr "Mar." + +#: lib/RT/Date.pm:441 +msgid "May." +msgstr "Maj." + +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "Medlem %1 tilføjet" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "Medlem %1 slettet" + +#: lib/RT/Group_Overlay.pm:1008 +msgid "Member added" +msgstr "Medlem tilføjet" + +#: lib/RT/Group_Overlay.pm:1170 +msgid "Member deleted" +msgstr "Medlem slettet" + +#: lib/RT/Group_Overlay.pm:1174 +msgid "Member not deleted" +msgstr "Medlem ikke slettet" + +#: html/Elements/SelectLinkType:47 +msgid "Member of" +msgstr "Medlem af" + +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 +msgid "Members" +msgstr "Medlemmer" + +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "Medlemskan af %1 tilføjet" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "Medlemskab af %1 slettet" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "Medlemskaber" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "Medlemskaber for brugeren %1" + +#: lib/RT/Ticket_Overlay.pm:2849 +msgid "Merge Successful" +msgstr "Sammensmeltning succesfuld" + +#: lib/RT/Ticket_Overlay.pm:2736 +msgid "Merge failed. Couldn't set EffectiveId" +msgstr "Sammensmeltning fejlede. Kunne ikke sætte EffectiveId" + +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "Sammensmeltning mislykkedes. Kunne ikke sætte status" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 +msgid "Merge into" +msgstr "Sammensmelt med" + +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Sammensmeltet med %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 +msgid "Message" +msgstr "Besked" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "Besked kunne ikke blive gemt" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Besked gemt" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "Beskeder angÃ¥ende denne ticket vil ikke blive sent til..." + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "Ikke-matchende parenteser" + +#: lib/RT/Record.pm:940 +msgid "Missing a primary key?: %1" +msgstr "Mangler en primærnøgle?: %1" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 +msgid "Mobile" +msgstr "Mobil" + +#: NOT FOUND IN SOURCE +msgid "MobilePhone" +msgstr "MobilTelefon" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "Modify Access Control List" +msgstr "Modificér Adgangs Kontrol Liste" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Field %1" +msgstr "Modificér Custom Felt %1" + +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "Modificér Custom Felter som gælder for %1 for alle %2" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Modificér Customer Felter som gælder for alle %1" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Fields which apply to all queues" +msgstr "Modificér Custom felter som gælder for alle køer" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Modificér Gruppe Rettigheder" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Modificér Medlemmer" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Modificér Rettigheder" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" +msgstr "Modificér Scrip templates for denne kø" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" +msgstr "Modificér Scrips for denne kø" + +#: NOT FOUND IN SOURCE +msgid "Modify Template %1" +msgstr "Modificér Template %1" + +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Modificér Brugerrettigheder" + +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" +msgstr "Modificér CustomFelt for kø %1" + +#: NOT FOUND IN SOURCE +msgid "Modify a CustomField which applies to all queues" +msgstr "Modificér CustomFelt som gælder for alle køer" + +#: html/Admin/Queues/Scrip.html:75 +#. ($QueueObj->Name) +msgid "Modify a scrip for queue %1" +msgstr "Modificér et scrip for kø %1" + +#: html/Admin/Global/Scrip.html:69 +msgid "Modify a scrip which applies to all queues" +msgstr "Modificér et scrip som gælder for alle køer" + +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Modificér objekter associerede med %1" + +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 +#. ($TicketObj->Id) +msgid "Modify dates for #%1" +msgstr "Modific+er datoer for #%1" + +#: html/Ticket/ModifyDates.html:56 +#. ($TicketObj->Id) +msgid "Modify dates for ticket # %1" +msgstr "Modificér datoer for ticket # %1" + +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "Modificér globale custom felter" + +#: 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 "Modificér globale gruppe rettiheder" + +#: html/Admin/Global/GroupRights.html:54 +msgid "Modify global group rights." +msgstr "Modificér globale gruppe rettiheder" + +#: NOT FOUND IN SOURCE +msgid "Modify global scrips" +msgstr "Modificér globale scrips" + +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 +msgid "Modify global user rights" +msgstr "Modificér globale bruger rettiheder" + +#: html/Admin/Global/UserRights.html:54 +msgid "Modify global user rights." +msgstr "Modificér globake bruger rettigehder" + +#: lib/RT/Group_Overlay.pm:171 +msgid "Modify group metadata or delete group" +msgstr "Modificér gruppe metadata eller slet gruppe" + +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Modificér gruppe rettigheder for custom felter %1" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 +#. ($GroupObj->Name) +msgid "Modify group rights for group %1" +msgstr "Modificér gruppe rettigheder for gruppe %1" + +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 +#. ($QueueObj->Name) +msgid "Modify group rights for queue %1" +msgstr "Modificér gruppe rettigheder for kø %1" + +#: lib/RT/Group_Overlay.pm:173 +msgid "Modify membership roster for this group" +msgstr "Modificér medlemskabsliste for denne gruppe" + +#: lib/RT/System.pm:83 +msgid "Modify one's own RT account" +msgstr "Modificér ens egen RT konto" + +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 +#. ($QueueObj->Name) +msgid "Modify people related to queue %1" +msgstr "Modificér folk relateret til kø %1" + +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 +#. ($Ticket->id) +#. ($Ticket->Id) +msgid "Modify people related to ticket #%1" +msgstr "Modificér folk relateret til ticket #%1" + +#: html/Admin/Queues/Scrips.html:67 +#. ($QueueObj->Name) +msgid "Modify scrips for queue %1" +msgstr "Modificér scrips for kø %1" + +#: 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 "Modificér scrips som gælder for alle køer" + +#: 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) +msgid "Modify template %1" +msgstr "Modificér template %1" + +#: html/Admin/Global/Templates.html:65 +msgid "Modify templates which apply to all queues" +msgstr "Modificér templates som gælder for alle køer" + +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 +#. ($Group->Name) +msgid "Modify the group %1" +msgstr "Modificér gruppen %1" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "Modify the queue watchers" +msgstr "Modificér kø watchers" + +#: html/Admin/Users/Modify.html:301 +#. ($UserObj->Name) +msgid "Modify the user %1" +msgstr "Modificer brugeren %1" + +#: html/Ticket/ModifyAll.html:58 +#. ($Ticket->Id) +msgid "Modify ticket # %1" +msgstr "Modificer ticket # %1" + +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 +#. ($TicketObj->Id) +msgid "Modify ticket #%1" +msgstr "Modificer ticket #%1" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "Modify tickets" +msgstr "Modificer tickets" + +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Modificér brugerrettigheder custom felter for %1" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 +#. ($GroupObj->Name) +msgid "Modify user rights for group %1" +msgstr "Modificer bruger rettigheder for gruppe %1" + +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 +#. ($QueueObj->Name) +msgid "Modify user rights for queue %1" +msgstr "Modificer bruger rettigheder for kø %1" + +#: NOT FOUND IN SOURCE +msgid "Modify watchers for queue '%1'" +msgstr "Modificer watchers for kø '%1'" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "ModifyACL" +msgstr "ModificerACL" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "ModifyCustomField" + +#: lib/RT/Group_Overlay.pm:174 +msgid "ModifyOwnMembership" +msgstr "ModificerEgetMedlemskab" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "ModifyQueueWatchers" +msgstr "ModificerQueueWatchers" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "ModifyScrips" +msgstr "ModificerScrips" + +#: lib/RT/System.pm:83 +msgid "ModifySelf" +msgstr "ModificerSelv" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "ModifyTemplate" +msgstr "ModificerTemplate" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "ModifyTicket" +msgstr "ModificerTicket" + +#: lib/RT/Date.pm:413 +msgid "Mon." +msgstr "Man." + +#: html/Ticket/Elements/ShowRequestor:62 +#. ($name) +msgid "More about %1" +msgstr "Mere om %1" + +#: html/Admin/Elements/PickCustomFields:83 +msgid "Move down" +msgstr "Flyt ned" + +#: html/Admin/Elements/PickCustomFields:75 +msgid "Move up" +msgstr "Flyt op" + +#: html/Admin/Elements/SelectSingleOrMultiple:48 +msgid "Multiple" +msgstr "Flere" + +#: lib/RT/User_Overlay.pm:227 +msgid "Must specify 'Name' attribute" +msgstr "'Name' attribut skal angives" + +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "Mine %1 tickets" + +#: NOT FOUND IN SOURCE +msgid "My Approvals" +msgstr "Mine Godkendelser" + +#: html/Approvals/index.html:46 html/Approvals/index.html:47 +msgid "My approvals" +msgstr "Mine godkendelser" + +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Mine gemte søgninger" + +#: 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 +msgid "Name" +msgstr "Navn" + +#: lib/RT/User_Overlay.pm:234 +msgid "Name in use" +msgstr "Navn i brug" + +#: NOT FOUND IN SOURCE +msgid "Need approval from system administrator" +msgstr "Behøver godkendelse af system adminstrator" + +#: html/Ticket/Elements/ShowDates:73 +msgid "Never" +msgstr "Aldrig" + +#: html/Elements/Quicksearch:51 +msgid "New" +msgstr "Ny" + +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nye relationer" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 +msgid "New Password" +msgstr "Ny adgangskode" + +#: etc/initialdata:332 +msgid "New Pending Approval" +msgstr "Ny afventende godkendelse" + +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Ny Søgestreng" + +#: NOT FOUND IN SOURCE +msgid "New Search" +msgstr "Ny Søgning" + +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 +msgid "New custom field" +msgstr "Nyt custom felt" + +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 +msgid "New group" +msgstr "Ny gruppe" + +#: html/SelfService/Prefs.html:53 +msgid "New password" +msgstr "Ny adgangskode" + +#: lib/RT/User_Overlay.pm:817 +msgid "New password notification sent" +msgstr "Ny adgangskode notifikation afsendt" + +#: html/Admin/Elements/QueueTabs:95 +msgid "New queue" +msgstr "Ny kø" + +#: NOT FOUND IN SOURCE +msgid "New request" +msgstr "Ny request" + +#: html/Admin/Elements/SelectRights:65 +msgid "New rights" +msgstr "Nye rettigheder" + +#: 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 "Ny scrip" + +#: NOT FOUND IN SOURCE +msgid "New search" +msgstr "Ny søgning" + +#: 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 "Ny template" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Ny ticket" + +#: lib/RT/Ticket_Overlay.pm:2713 +msgid "New ticket doesn't exist" +msgstr "Ny ticket eksisterer ikke" + +#: html/Admin/Elements/UserTabs:78 +msgid "New user" +msgstr "Ny bruger" + +#: html/Admin/Elements/CreateUserCalled:47 +msgid "New user called" +msgstr "Ny bruger kaldet" + +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 +msgid "New watchers" +msgstr "Nye watchers" + +#: NOT FOUND IN SOURCE +msgid "New window setting" +msgstr "Ny vindues indstilling" + +#: html/Ticket/Elements/Tabs:92 +msgid "Next" +msgstr "Næste" + +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "Næste Side" + +#: NOT FOUND IN SOURCE +msgid "Next page" +msgstr "Næste side" + +#: NOT FOUND IN SOURCE +msgid "NickName" +msgstr "NickName" + +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 +msgid "Nickname" +msgstr "Nickname" + +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "Ingen klasse defineret" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 +msgid "No CustomField" +msgstr "Intet Custom felt" + +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Intet CustomField defineret" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 +msgid "No Group defined" +msgstr "Ingen grupper definerede" + +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Ingen Søgestreng" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 +msgid "No Queue defined" +msgstr "Ingen kø defineret" + +#: bin/rt-crontool:73 +msgid "No RT user found. Please consult your RT administrator.\\n" +msgstr "Ingen RT bruger fundet. Kontakt venligst din RT administrator.\\n" + +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 +msgid "No Template" +msgstr "Ingen Template" + +#: NOT FOUND IN SOURCE +msgid "No Ticket specified. Aborting ticket " +msgstr "Ingen ticket angivet. Afbryder ticket" + +#: NOT FOUND IN SOURCE +msgid "No Ticket specified. Aborting ticket modifications\\n\\n" +msgstr "Ingen ticket angivet. Afbryder ticket ændringer\\n\\n" + +#: html/Approvals/Elements/Approve:67 +msgid "No action" +msgstr "Ingen aktion" + +#: lib/RT/Record.pm:935 +msgid "No column specified" +msgstr "Ingen kolonne angivet" + +#: NOT FOUND IN SOURCE +msgid "No command found\\n" +msgstr "Ingen kommando fundet\\n" + +#: html/Ticket/Elements/ShowRequestor:68 +msgid "No comment entered about this user" +msgstr "Ingen kommentar inddateret for denne bruger" + +#: NOT FOUND IN SOURCE +msgid "No correspondence attached" +msgstr "Ingen korrespondance vedhæftet" + +#: 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) +msgid "No description for %1" +msgstr "Ingen beskrivelse af %1" + +#: lib/RT/Users_Overlay.pm:185 +msgid "No group specified" +msgstr "Ingen gruppe angivet" + +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Ingen grupper som matcher søge kriterier fundet" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "Ingen medelelse vedhæftet" + +#: lib/RT/User_Overlay.pm:1035 +msgid "No password set" +msgstr "Ingen adgangskode sat" + +#: lib/RT/Queue_Overlay.pm:358 +msgid "No permission to create queues" +msgstr "Ingen rettighed til at oprette køer" + +#: lib/RT/Ticket_Overlay.pm:409 +#. ($QueueObj->Name) +msgid "No permission to create tickets in the queue '%1'" +msgstr "Ingen adgang til at oprette tickets i denne kø '%1'" + +#: lib/RT/User_Overlay.pm:187 +msgid "No permission to create users" +msgstr "Ingen rettighed til at oprette brugere" + +#: html/SelfService/Display.html:165 +msgid "No permission to display that ticket" +msgstr "Ingen adgang til at vise denne ticket" + +#: html/SelfService/Update.html:117 +msgid "No permission to view update ticket" +msgstr "Ingen adgang til at vise opdater ticket" + +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 +msgid "No principal specified" +msgstr "Ingen principal angivet" + +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 +msgid "No principals selected." +msgstr "Ingen principaler valgt." + +#: html/Admin/Queues/index.html:57 +msgid "No queues matching search criteria found." +msgstr "Ingen køer fundet som matcher søge kriterie." + +#: html/Admin/Elements/SelectRights:106 +msgid "No rights found" +msgstr "Ingen rettigheder fundet" + +#: html/Admin/Elements/SelectRights:53 +msgid "No rights granted." +msgstr "Ingen rettigheder tildelt." + +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 +msgid "No search to operate on." +msgstr "Ingen søgning at arbejde med." + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Intet emne" + +#: NOT FOUND IN SOURCE +msgid "No ticket id specified" +msgstr "Ingen ticket id angivet" + +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 +msgid "No transaction type specified" +msgstr "Ingen transaktions type angivet" + +#: html/Admin/Users/index.html:55 +msgid "No users matching search criteria found." +msgstr "Ingen brugere fundet som matcher søge kriterie" + +#: NOT FOUND IN SOURCE +msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" +msgstr "Ingen valid RT bruger fundet. RT CVS handler frakoblet. Kontakt venligst din RT administrator.\\n" + +#: lib/RT/Record.pm:932 +msgid "No value sent to _Set!\\n" +msgstr "Ingen værdi sent til _Set!\\n" + +#: html/Elements/QuickCreate:61 +msgid "Nobody" +msgstr "Ingen" + +#: lib/RT/Record.pm:937 +msgid "Nonexistant field?" +msgstr "Ikke eksisterende felt?" + +#: NOT FOUND IN SOURCE +msgid "Not logged in" +msgstr "Ikke logget ind" + +#: html/Elements/Header:96 +msgid "Not logged in." +msgstr "Ikke logget ind." + +#: lib/RT/Date.pm:393 +msgid "Not set" +msgstr "Ikke sat" + +#: html/NoAuth/Reminder.html:48 +msgid "Not yet implemented." +msgstr "Endnu ikke implementeret." + +#: NOT FOUND IN SOURCE +msgid "Not yet implemented...." +msgstr "Endnu ikke implementeret..." + +#: html/Approvals/Elements/Approve:70 +msgid "Notes" +msgstr "Noter" + +#: lib/RT/User_Overlay.pm:820 +msgid "Notification could not be sent" +msgstr "Notification kunne ikke sendes" + +#: etc/initialdata:101 +msgid "Notify AdminCcs" +msgstr "Notificér AdminCc'ere" + +#: etc/initialdata:97 +msgid "Notify AdminCcs as Comment" +msgstr "Notificér AdminCc'ere som kommentar" + +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "Notificér Ccs" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "Notificér Ccs som Kommentarer" + +#: etc/initialdata:128 +msgid "Notify Other Recipients" +msgstr "Notificér andre modtagere" + +#: etc/initialdata:124 +msgid "Notify Other Recipients as Comment" +msgstr "Notificér andre modtagere som kommentar" + +#: etc/initialdata:85 +msgid "Notify Owner" +msgstr "Notificér ejer" + +#: etc/initialdata:81 +msgid "Notify Owner as Comment" +msgstr "Notificér ejer som kommentar" + +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "Notificér ejer om deres afviste ticket" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "Notificér ejere om deres ticket er blevet godkendt af alle Approvere" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "Notificér ejere om deres ticket som er blevet godkendt af Approver" + +#: etc/initialdata:334 +msgid "Notify Owners and AdminCcs of new items pending their approval" +msgstr "Notificér ejere og AdminCc'ere om nye emner som afventer deres godkendelse" + +#: etc/initialdata:77 +msgid "Notify Requestors" +msgstr "Notificér Requestere" + +#: etc/initialdata:111 +msgid "Notify Requestors and Ccs" +msgstr "Notificér Requestere og Cc'ere" + +#: etc/initialdata:106 +msgid "Notify Requestors and Ccs as Comment" +msgstr "Notificér Requestere og Cc'ere som kommentar" + +#: etc/initialdata:120 +msgid "Notify Requestors, Ccs and AdminCcs" +msgstr "Notificér Requestere, Cc'ere og AdminCc'ere" + +#: etc/initialdata:116 +msgid "Notify Requestors, Ccs and AdminCcs as Comment" +msgstr "Notificér Requestere, Cc'ere og AdminCc'ere som kommentar" + +#: lib/RT/Date.pm:447 +msgid "Nov." +msgstr "Nov." + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "ELLER" + +#: lib/RT/Record.pm:319 +msgid "Object could not be created" +msgstr "Objekt kunne ikke oprettes" + +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "Objekt kunne ikke slettes" + +#: lib/RT/Record.pm:338 +msgid "Object created" +msgstr "Objekt oprettet" + +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "Objekt slettet" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "Objekt af typen %1 kan ikke hÃ¥ndtere custom felter" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "Objekt type misforhold" + +#: lib/RT/Date.pm:446 +msgid "Oct." +msgstr "Okt." + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Offline" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Offline editeringer" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "Offline upload" + +#: html/Elements/SelectDateRelation:56 +msgid "On" +msgstr "Ved" + +#: etc/initialdata:163 +msgid "On Comment" +msgstr "Ved kommentar" + +#: etc/initialdata:156 +msgid "On Correspond" +msgstr "Ved korrespondance" + +#: etc/initialdata:145 +msgid "On Create" +msgstr "Ved oprettelse" + +#: etc/initialdata:184 +msgid "On Owner Change" +msgstr "Ved ejerskifte" + +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "Ved prioritets ændring" + +#: etc/initialdata:192 +msgid "On Queue Change" +msgstr "Ved køskifte" + +#: etc/initialdata:198 +msgid "On Resolve" +msgstr "Ved løsning" + +#: etc/initialdata:169 +msgid "On Status Change" +msgstr "Ved statusskifte" + +#: etc/initialdata:150 +msgid "On Transaction" +msgstr "Ved transaktion" + +#: html/Approvals/Elements/PendingMyApproval:71 +#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") +msgid "Only show approvals for requests created after %1" +msgstr "Vis kun godkendelser for requests oprettet efter %1" + +#: html/Approvals/Elements/PendingMyApproval:69 +#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") +msgid "Only show approvals for requests created before %1" +msgstr "Vis kun godkendelser for requests oprettet før %1" + +#: html/Elements/Quicksearch:52 +msgid "Open" +msgstr "Ã…ben" + +#: html/Ticket/Elements/Tabs:159 +msgid "Open it" +msgstr "Ã…ben den" + +#: NOT FOUND IN SOURCE +msgid "Open requests" +msgstr "Ã…ben requests" + +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "Ã…ben tickets" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in a new window" +msgstr "Ã…ben tickets (fra liste) i et nyt vindue" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in another window" +msgstr "Ã…ben tickets (fra liste) i andet vindue" + +#: etc/initialdata:140 +msgid "Open tickets on correspondence" +msgstr "Ã…ben tickets ved korrespondance" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Sortér efter" + +#: NOT FOUND IN SOURCE +msgid "Ordering and sorting" +msgstr "Orden og sortering" + +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 +msgid "Organization" +msgstr "Organisation" + +#: html/Approvals/Elements/Approve:54 +#. ($approving->Id, $approving->Subject) +msgid "Originating ticket: #%1" +msgstr "Oprindelig ticket: #%1" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "UdgÃ¥ende e-mail omkring en kommentar gemt" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "UdgÃ¥ende e-mail gemt" + +#: html/Admin/Queues/Modify.html:90 +msgid "Over time, priority moves toward" +msgstr "Tid overskredet, prioritet gÃ¥r mod" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "Own tickets" +msgstr "Egne tickets" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "OwnTicket" +msgstr "EgenTicket" + +#: 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 +msgid "Owner" +msgstr "Ejer" + +#: NOT FOUND IN SOURCE +msgid "Owner changed from %1 to %2" +msgstr "Ejere ændret fra %1 til %2" + +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "Ejer kunne ikke defineres." + +#: lib/RT/Transaction_Overlay.pm:661 +#. ($Old->Name , $New->Name) +msgid "Owner forcibly changed from %1 to %2" +msgstr "Ejer skiftet forceret fra %1 to %2" + +#: NOT FOUND IN SOURCE +msgid "Owner is" +msgstr "Ejer er" + +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Side %1 af %2" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 +msgid "Pager" +msgstr "Bipper" + +#: NOT FOUND IN SOURCE +msgid "PagerPhone" +msgstr "BipperTelefon" + +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 +msgid "Parents" +msgstr "Forældre" + +#: html/Elements/Login:74 html/User/Prefs.html:105 +msgid "Password" +msgstr "Adgangskode" + +#: html/NoAuth/Reminder.html:46 +msgid "Password Reminder" +msgstr "Adgangskode husker" + +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "Adgangskode ændret" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Password too short" +msgstr "Adgangskode for kort" + +#: html/User/Prefs.html:232 +#. (loc_fuzzy($msg)) +msgid "Password: %1" +msgstr "Adgangskode: %1" + +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "Adgangskoder matcher ikke." + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "Adgangskoder matcher ikke. Din adgangskode er ikke blevet skiftet" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 +msgid "People" +msgstr "Folk" + +#: etc/initialdata:133 +msgid "Perform a user-defined action" +msgstr "Udfør en bruger-defineret aktion" + +#: 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 +msgid "Permission Denied" +msgstr "Adgang afvist" + +#: html/User/Elements/Tabs:56 +msgid "Personal Groups" +msgstr "Personlige Grupper" + +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 +msgid "Personal groups" +msgstr "Personlige grupper" + +#: html/User/Elements/DelegateRights:58 +msgid "Personal groups:" +msgstr "Personlige grupper:" + +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 +msgid "Phone numbers" +msgstr "Telefon numre" + +#: NOT FOUND IN SOURCE +msgid "Placeholder" +msgstr "Placeholder" + +#: 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 +msgid "Preferences" +msgstr "Præferencer" + +#: NOT FOUND IN SOURCE +msgid "Prefs" +msgstr "Præferencer" + +#: lib/RT/Action/Generic.pm:196 +msgid "Prepare Stubbed" +msgstr "Prepare ryddet" + +#: html/Ticket/Elements/Tabs:84 +msgid "Prev" +msgstr "Forr." + +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "Forrige Side" + +#: NOT FOUND IN SOURCE +msgid "Previous page" +msgstr "Forrige side" + +#: NOT FOUND IN SOURCE +msgid "Pri" +msgstr "Pri" + +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 +#. ($args{'PrincipalId'}) +msgid "Principal %1 not found." +msgstr "Principal %1 ikke fundet." + +#: 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 +msgid "Priority" +msgstr "Prioritet" + +#: html/Admin/Queues/Modify.html:86 +msgid "Priority starts at" +msgstr "Prioritet starter ved" + +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "Privat:" + +#: etc/initialdata:25 +msgid "Privileged" +msgstr "Priviligeret" + +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 +#. (loc_fuzzy($msg)) +msgid "Privileged status: %1" +msgstr "Priviligeret status: %1" + +#: html/Admin/Users/index.html:102 +msgid "Privileged users" +msgstr "Priviligerede brugere" + +#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 +msgid "Pseudogroup for internal use" +msgstr "Pseudogruppe til intern brug" + +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Søgestreng" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "Søgestrengs Bygger" + +#: 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 +msgid "Queue" +msgstr "Kø" + +#: 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) +msgid "Queue %1 not found" +msgstr "Kø %1 ikke fundet" + +#: NOT FOUND IN SOURCE +msgid "Queue '%1' not found\\n" +msgstr "Kø '%1' ikke fundet\\n" + +#: html/Admin/Queues/Modify.html:64 +msgid "Queue Name" +msgstr "Kø Navn" + +#: NOT FOUND IN SOURCE +msgid "Queue Scrips" +msgstr "Kø Scrips" + +#: lib/RT/Queue_Overlay.pm:362 +msgid "Queue already exists" +msgstr "Kø eksisterer allerede" + +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 +msgid "Queue could not be created" +msgstr "Kø kunne ikke oprettes" + +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 +msgid "Queue could not be loaded." +msgstr "Kø kunne ikke indlæses" + +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 +msgid "Queue created" +msgstr "Kø oprettet" + +#: NOT FOUND IN SOURCE +msgid "Queue is not specified." +msgstr "Kø ikke angivet" + +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 +msgid "Queue not found" +msgstr "Kø ikke fundet" + +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 +msgid "Queues" +msgstr "Køer" + +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "Kø søgning" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Kvik ticket oprettelse" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS" + +#: html/Elements/Login:66 +#. ($RT::VERSION) +msgid "RT %1" +msgstr "RT %1" + +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 +#. ($RT::VERSION, $RT::rtname) +msgid "RT %1 for %2" +msgstr "RT %1 for %2" + +#: NOT FOUND IN SOURCE +msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." +msgstr "RT %1 fra <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." + +#: NOT FOUND IN SOURCE +msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" +msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" + +#: html/Admin/index.html:46 html/Admin/index.html:47 +msgid "RT Administration" +msgstr "RT Administration" + +#: NOT FOUND IN SOURCE +msgid "RT Authentication error." +msgstr "RT Authentikeringsfejl." + +#: NOT FOUND IN SOURCE +msgid "RT Bounce: %1" +msgstr "RT Bounce: %1" + +#: NOT FOUND IN SOURCE +msgid "RT Configuration error" +msgstr "RT Konfigurationsfejl" + +#: NOT FOUND IN SOURCE +msgid "RT Critical error. Message not recorded!" +msgstr "RT Kritisk fejl. Meddelelse ikke gemt!" + +#: html/Elements/Error:65 html/SelfService/Error.html:62 +msgid "RT Error" +msgstr "RT Fejl" + +#: NOT FOUND IN SOURCE +msgid "RT Received mail (%1) from itself." +msgstr "RT modtog e-mail (%1) fra sig selv" + +#: NOT FOUND IN SOURCE +msgid "RT Self Service / Closed Tickets" +msgstr "RT Selv-betjening / Lukkede Tickets" + +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "RT Variable" + +#: html/index.html:72 html/index.html:75 +msgid "RT at a glance" +msgstr "RT set fra oven" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't authenticate you" +msgstr "RT kunne ikke authentikere dig" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't find requestor via its external database lookup" +msgstr "RT kunne ikke finde requester via sit eksterne database opslag" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't find the queue: %1" +msgstr "RT kunne ikke finde køen: %1" + +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't validate this PGP signature. \\n" +msgstr "RT kunne ikke validere denne PGP signatur. \\n" + +#: html/Elements/PageLayout:108 +#. ($RT::rtname) +msgid "RT for %1" +msgstr "RT for %1" + +#: NOT FOUND IN SOURCE +msgid "RT for %1: %2" +msgstr "RT for %1: %2" + +#: NOT FOUND IN SOURCE +msgid "RT has proccessed your commands" +msgstr "RT har processeret dine kommandoer" + +#: NOT FOUND IN SOURCE +msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +msgstr "RT er © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Bliver distribueret under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 af 'GNU General Public License'.</a>" + +#: NOT FOUND IN SOURCE +msgid "RT thinks this message may be a bounce" +msgstr "RT mener at denne besked er en afvisning" + +#: NOT FOUND IN SOURCE +msgid "RT will process this message as if it were unsigned.\\n" +msgstr "RT vil processere denne besked som var den var usigneret.\\n" + +#: NOT FOUND IN SOURCE +msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." +msgstr "RT's e-mail kommando modus kræver PGP authentikering. Enten har du ikke signeret din besked, eller ogsÃ¥ kunne din signatur ikke verificeres." + +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 +msgid "Real Name" +msgstr "Fulde Navn" + +#: NOT FOUND IN SOURCE +msgid "RealName" +msgstr "FuldeNavn" + +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "Reference fra %1 tilføjet" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "Reference fra %1 slettet" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "Reference til %1 tilføjet" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "Reference til %1 slettet" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 +msgid "Referred to by" +msgstr "Referreret til af" + +#: 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 +msgid "Refers to" +msgstr "Refererer til" + +#: NOT FOUND IN SOURCE +msgid "Refine" +msgstr "Forfin" + +#: NOT FOUND IN SOURCE +msgid "Refine search" +msgstr "Forfin søgning" + +#: html/Elements/Refresh:57 +#. ($value/60) +msgid "Refresh this page every %1 minutes." +msgstr "Genindlæs denne side hver %1 minutter" + +#: html/Search/Bulk.html:116 +msgid "Remove AdminCc" +msgstr "Fjern AdminCc" + +#: html/Search/Bulk.html:112 +msgid "Remove Cc" +msgstr "Fjern Cc" + +#: html/Search/Bulk.html:108 +msgid "Remove Requestor" +msgstr "Fjern Requestor" + +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 +msgid "Reply" +msgstr "Svar" + +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Svar Adresse" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Svar til requestors" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "Reply to tickets" +msgstr "Svar pÃ¥ tickets" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "ReplyToTicket" +msgstr "SvarPÃ¥Ticket" + +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 +msgid "Requestor" +msgstr "Requestor" + +#: NOT FOUND IN SOURCE +msgid "Requestor email address" +msgstr "Requestor e-mail adresse" + +#: NOT FOUND IN SOURCE +msgid "Requestor(s)" +msgstr "Requestor(s)" + +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 +msgid "Requestors" +msgstr "Requestors" + +#: html/Admin/Queues/Modify.html:96 +msgid "Requests should be due in" +msgstr "Request skulle være forefaldende om" + +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "PÃ¥krævet parameter '%1' ikke specificeret" + +#: html/Elements/Submit:104 +msgid "Reset" +msgstr "Reset" + +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 +msgid "Residence" +msgstr "Residens" + +#: html/Ticket/Elements/Tabs:155 +msgid "Resolve" +msgstr "Løs" + +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Resolve ticket #%1 (%2)" +msgstr "Løs ticket #%1 (%2)" + +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 +msgid "Resolved" +msgstr "Løst" + +#: NOT FOUND IN SOURCE +msgid "Response to requestors" +msgstr "Svar til requestors" + +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 +msgid "Results" +msgstr "Resultater" + +#: NOT FOUND IN SOURCE +msgid "Results per page" +msgstr "Resultater per side" + +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 +msgid "Retype Password" +msgstr "Genskriv adgangskode" + +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Faldtilbage" + +#: NOT FOUND IN SOURCE +msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" +msgstr "Rettighed %1 ikke fundet for %2 %3 i scope %4 (%5)\\n" + +#: lib/RT/ACE_Overlay.pm:631 +msgid "Right Delegated" +msgstr "Rettighed overdraget" + +#: lib/RT/ACE_Overlay.pm:321 +msgid "Right Granted" +msgstr "Rettighed Tildelt" + +#: lib/RT/ACE_Overlay.pm:179 +msgid "Right Loaded" +msgstr "Rettighed Indlæst" + +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 +msgid "Right could not be revoked" +msgstr "Rettighed kunne ikke inddrages" + +#: html/User/Delegation.html:85 +msgid "Right not found" +msgstr "Rettighed ikke fundet" + +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 +msgid "Right not loaded." +msgstr "Rettighed ikke indlæst." + +#: lib/RT/ACE_Overlay.pm:713 +msgid "Right revoked" +msgstr "Rettighed inddraget" + +#: html/Admin/Elements/UserTabs:67 +msgid "Rights" +msgstr "Rettigheder" + +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 +#. ($object_type) +msgid "Rights could not be granted for %1" +msgstr "Rettigheder kunne ikke tildeles %1" + +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 +#. ($object_type) +msgid "Rights could not be revoked for %1" +msgstr "Rettigheder kunne ikke inddrages for %1" + +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 +msgid "Roles" +msgstr "Roller" + +#: NOT FOUND IN SOURCE +msgid "RootApproval" +msgstr "RootGodkendelse" + +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Rækker per side" + +#: lib/RT/Date.pm:418 +msgid "Sat." +msgstr "Lør." + +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Gem" + +#: 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 +msgid "Save Changes" +msgstr "Gem Ændringer" + +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Gem Præferencer" + +#: html/Ticket/Elements/PreviewScrips:124 +msgid "Save changes" +msgstr "Gem Ændringer" + +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Gemte søgninger" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) +#. ($ARGS{'id'}) +msgid "Scrip #%1" +msgstr "Scrip #%1" + +#: lib/RT/Scrip_Overlay.pm:205 +msgid "Scrip Created" +msgstr "Scrip Oprettet" + +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Scrip Felter" + +#: html/Admin/Elements/EditScrips:107 +msgid "Scrip deleted" +msgstr "Scrip slettet" + +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 +msgid "Scrips" +msgstr "Scrips" + +#: NOT FOUND IN SOURCE +msgid "Scrips for %1\\n" +msgstr "Scrip for %1\\n" + +#: html/Admin/Queues/Scrips.html:55 +msgid "Scrips which apply to all queues" +msgstr "Scrips som gælder for alle køer" + +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 +msgid "Search" +msgstr "Søg" + +#: NOT FOUND IN SOURCE +msgid "Search Criteria" +msgstr "Søgekriterier" + +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 +msgid "Search for approvals" +msgstr "Søg efter godkendelser" + +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 +msgid "Security:" +msgstr "Sikkerhed:" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "Se custom felter" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "See nøjagtige udgÃ¥ende e-mail beskeder og deres modtagere" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "Se ticket private kommentarer" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "Se ticket sammenfatninger" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "SeCustomFelt" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "SeGruppe" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "SeeQueue" +msgstr "SeKø" + +#: NOT FOUND IN SOURCE +msgid "Select" +msgstr "Vælg" + +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "Vælg et Custom felt" + +#: html/Admin/Groups/index.html:78 +msgid "Select a group" +msgstr "Vælg en gruppe" + +#: html/Admin/Queues/index.html:54 +msgid "Select a queue" +msgstr "Vælg en kø" + +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "Vælg en kø til din næste nye ticket" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 +msgid "Select a user" +msgstr "Vælg en bruger" + +#: html/Admin/Elements/CustomFieldTabs:90 +msgid "Select custom field" +msgstr "Vælg custom felt" + +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "Vælg custom felter for alle brugergrupper" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "Vælg custom felter for alle brugere" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "Vælg custom felter for tickets i alle køer" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "Vælg custom felter for transaktioner pÃ¥ tickets i alle køer" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 +msgid "Select group" +msgstr "Vælg gruppe" + +#: lib/RT/CustomField_Overlay.pm:59 +msgid "Select multiple values" +msgstr "Vælg flere værdier" + +#: lib/RT/CustomField_Overlay.pm:60 +msgid "Select one value" +msgstr "Vælg en værdi" + +#: html/Admin/Elements/QueueTabs:92 +msgid "Select queue" +msgstr "Vælg kø" + +#: 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 "Vælg scrip" + +#: 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 "Vælg template" + +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Vælg op til %1 værdier" + +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" +msgstr "Vælg bruger" + +#: NOT FOUND IN SOURCE +msgid "SelectMultiple" +msgstr "VælgFlere" + +#: NOT FOUND IN SOURCE +msgid "SelectSingle" +msgstr "VælgEnkelt" + +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Valgte Custom Felter" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Valgte objekter" + +#: NOT FOUND IN SOURCE +msgid "Self Service" +msgstr "Selv-betjening" + +#: etc/initialdata:121 +msgid "Send mail to all watchers" +msgstr "Send e-mail til alle watchers" + +#: etc/initialdata:117 +msgid "Send mail to all watchers as a \"comment\"" +msgstr "Send e-mail til alle wathers som en \"kommentar\"" + +#: etc/initialdata:112 +msgid "Send mail to requestors and Ccs" +msgstr "Sender e-mail til requestors og Ccs" + +#: etc/initialdata:107 +msgid "Send mail to requestors and Ccs as a comment" +msgstr "Sender e-mail til requestor og Ccs som en kommentar" + +#: etc/initialdata:78 +msgid "Sends a message to the requestors" +msgstr "Sender en besked til requestorne" + +#: etc/initialdata:125 etc/initialdata:129 +msgid "Sends mail to explicitly listed Ccs and Bccs" +msgstr "Sender e-mail til explicit listede Ccs og Bccs" + +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "Sender e-mail til Cc'ere" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "Sender e-mail to Ccøere som en kommentar" + +#: etc/initialdata:102 +msgid "Sends mail to the administrative Ccs" +msgstr "Sender e-mail til de administrative Ccs" + +#: etc/initialdata:98 +msgid "Sends mail to the administrative Ccs as a comment" +msgstr "Sender e-mail til de administrative Cc som en kommentar" + +#: etc/initialdata:82 etc/initialdata:86 +msgid "Sends mail to the owner" +msgstr "Sender e-mail til ejeren" + +#: lib/RT/Date.pm:445 +msgid "Sep." +msgstr "Sep." + +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Vis" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Vis Godkendelser" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Vis Kolonner" + +#: html/Ticket/Elements/Tabs:201 +msgid "Show Results" +msgstr "Vis Resultater" + +#: html/Approvals/Elements/PendingMyApproval:65 +msgid "Show approved requests" +msgstr "Vis godkendte requests" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show basics" +msgstr "Vis basic" + +#: html/Approvals/Elements/PendingMyApproval:66 +msgid "Show denied requests" +msgstr "Vis afviste requests" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show details" +msgstr "Vis detaljer" + +#: html/Approvals/Elements/PendingMyApproval:64 +msgid "Show pending requests" +msgstr "Vis afventede requests" + +#: html/Approvals/Elements/PendingMyApproval:67 +msgid "Show requests awaiting other approvals" +msgstr "Vis requests som afventer andre godkendelser" + +#: NOT FOUND IN SOURCE +msgid "Show ticket private commentary" +msgstr "Vis ticket private kommentar" + +#: NOT FOUND IN SOURCE +msgid "Show ticket summaries" +msgstr "Vis ticket opsummeringer" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" +msgstr "VisACL" + +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "VisKonfigurationTab" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "VisUdgÃ¥endeEmail" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "VisGemteSøgninger" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "ShowScrips" +msgstr "VisScrips" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "ShowTemplate" +msgstr "VisTemplate" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "ShowTicket" +msgstr "VisTicket" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "ShowTicketComments" +msgstr "VisTicketKommentarer" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Sign up as a ticket Requestor or ticket or queue Cc" +msgstr "Tilmeld som en ticket requestor eller ticket eller kø Cc" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "Sign up as a ticket or queue AdminCc" +msgstr "Tilmeld som en ticket eller kø AdminCc" + +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 +msgid "Signature" +msgstr "Signatur" + +#: NOT FOUND IN SOURCE +msgid "Signed in as %1" +msgstr "Tilsluttet som %1" + +#: html/Admin/Elements/SelectSingleOrMultiple:47 +msgid "Single" +msgstr "Enkelt" + +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 +msgid "Skip Menu" +msgstr "Skip Menu" + +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "Lille" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "Sorter" + +#: NOT FOUND IN SOURCE +msgid "Sort key" +msgstr "Sorteringsnøgle" + +#: NOT FOUND IN SOURCE +msgid "Sort results by" +msgstr "Sorter resultat efter" + +#: NOT FOUND IN SOURCE +msgid "SortOrder" +msgstr "SorteringsOrden" + +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "Trin" + +#: NOT FOUND IN SOURCE +msgid "Stalled" +msgstr "Stalled" + +#: NOT FOUND IN SOURCE +msgid "Start page" +msgstr "Start side" + +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 +msgid "Started" +msgstr "Startet" + +#: NOT FOUND IN SOURCE +msgid "Started date '%1' could not be parsed" +msgstr "Startet dato '%1' kunne ikke parses" + +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 +msgid "Starts" +msgstr "Starter" + +#: NOT FOUND IN SOURCE +msgid "Starts By" +msgstr "Starter den" + +#: NOT FOUND IN SOURCE +msgid "Starts date '%1' could not be parsed" +msgstr "Starter dato '%1' kunne ikke parses" + +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 +msgid "State" +msgstr "Tilstand" + +#: 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 +msgid "Status" +msgstr "Status" + +#: etc/initialdata:309 +msgid "Status Change" +msgstr "Status Ændring" + +#: NOT FOUND IN SOURCE +msgid "Status changed from %1 to %2" +msgstr "Status ændret fra %1 til %2" + +#: NOT FOUND IN SOURCE +msgid "StatusChange" +msgstr "StatusÆndring" + +#: html/Ticket/Elements/Tabs:170 +msgid "Steal" +msgstr "Stjæl" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Stjæl tickets" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "StjælTicket" + +#: lib/RT/Transaction_Overlay.pm:667 +#. ($Old->Name) +msgid "Stolen from %1" +msgstr "StjÃ¥let fra %1" + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 +msgid "Subject" +msgstr "Emne" + +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 +#. ($self->Data) +msgid "Subject changed to %1" +msgstr "Emne ændret til %1" + +#: html/Elements/Submit:97 +msgid "Submit" +msgstr "Send" + +#: NOT FOUND IN SOURCE +msgid "Submit Workflow" +msgstr "Send Workflow" + +#: lib/RT/Group_Overlay.pm:782 +msgid "Succeeded" +msgstr "Lykkedes" + +#: lib/RT/Date.pm:419 +msgid "Sun." +msgstr "Søn." + +#: lib/RT/System.pm:76 +msgid "SuperUser" +msgstr "SuperBruger" + +#: html/User/Elements/DelegateRights:98 +msgid "System" +msgstr "System" + +#: 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 +msgid "System Error" +msgstr "System Fejl" + +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "System Værktøjer" + +#: lib/RT/ACE_Overlay.pm:634 +msgid "System error. Right not delegated." +msgstr "System fejl. Rettighed ikke overdraget" + +#: 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 "System fejl. Rettighed ikke tildelt" + +#: 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 "System grupper" + +#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 +msgid "SystemRolegroup for internal use" +msgstr "SystemRolleGruppe for intern brug" + +#: 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 +msgid "Take" +msgstr "Tag" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "Tag tickets" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "TagTickets" + +#: lib/RT/Transaction_Overlay.pm:652 +msgid "Taken" +msgstr "Taget" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 +msgid "Template" +msgstr "Template" + +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 +#. ($TemplateObj->Id()) +msgid "Template #%1" +msgstr "Template #%1" + +#: html/Admin/Elements/EditTemplates:110 +msgid "Template deleted" +msgstr "Template slettet" + +#: lib/RT/Scrip_Overlay.pm:181 +msgid "Template not found" +msgstr "Template ikke fundet" + +#: NOT FOUND IN SOURCE +msgid "Template not found\\n" +msgstr "Template ikke fundet\\n" + +#: lib/RT/Template_Overlay.pm:376 +msgid "Template parsed" +msgstr "Template parset" + +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 +msgid "Templates" +msgstr "Templates" + +#: NOT FOUND IN SOURCE +msgid "Templates for %1\\n" +msgstr "Templates for %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "Tekst" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 +msgid "That is already the current value" +msgstr "Det er allerede den nuværende værdi" + +#: lib/RT/CustomField_Overlay.pm:407 +msgid "That is not a value for this custom field" +msgstr "Det er ikke værdi for dette custom felt" + +#: lib/RT/Ticket_Overlay.pm:1955 +msgid "That is the same value" +msgstr "Det er den samme værdi" + +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "Den principal har allerede den rettighed" + +#: lib/RT/Queue_Overlay.pm:750 +#. ($args{'Type'}) +msgid "That principal is already a %1 for this queue" +msgstr "Den principal er allerede en %1 for denne kø" + +#: lib/RT/Ticket_Overlay.pm:1396 +#. ($self->loc($args{'Type'})) +msgid "That principal is already a %1 for this ticket" +msgstr "Den principal er allerede en %1 for denne ticket" + +#: lib/RT/Queue_Overlay.pm:849 +#. ($args{'Type'}) +msgid "That principal is not a %1 for this queue" +msgstr "Den principal er ikke en %1 for denne kø" + +#: NOT FOUND IN SOURCE +msgid "That principal is not a %1 for this ticket" +msgstr "Den principal er ikke en %1 for denne ticket" + +#: lib/RT/Ticket_Overlay.pm:1951 +msgid "That queue does not exist" +msgstr "Den kø eksisterer ikke" + +#: lib/RT/Ticket_Overlay.pm:3189 +msgid "That ticket has unresolved dependencies" +msgstr "Denne har ticket har uløste afhængigheder" + +#: NOT FOUND IN SOURCE +msgid "That user already has that right" +msgstr "Den bruger har den rettighed" + +#: lib/RT/Ticket_Overlay.pm:2993 +msgid "That user already owns that ticket" +msgstr "Brugeren ejer allerede den ticket" + +#: lib/RT/Ticket_Overlay.pm:2965 +msgid "That user does not exist" +msgstr "Brugeren eksisterer ikke" + +#: lib/RT/User_Overlay.pm:390 +msgid "That user is already privileged" +msgstr "Brugere er allerede priviligeret" + +#: lib/RT/User_Overlay.pm:411 +msgid "That user is already unprivileged" +msgstr "Brugeren er allerede upriviligeret" + +#: lib/RT/User_Overlay.pm:403 +msgid "That user is now privileged" +msgstr "Brugeren er nu priviligeret" + +#: lib/RT/User_Overlay.pm:424 +msgid "That user is now unprivileged" +msgstr "Brugere er nu upriviligeret" + +#: lib/RT/Ticket_Overlay.pm:2986 +msgid "That user may not own tickets in that queue" +msgstr "Den bruger mÃ¥ ikke eje tickets i den kø" + +#: lib/RT/Link_Overlay.pm:234 +msgid "That's not a numerical id" +msgstr "Det er ikke en numerisk værdi" + +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 +msgid "The Basics" +msgstr "Det Grundlæggende" + +#: lib/RT/ACE_Overlay.pm:113 +msgid "The CC of a ticket" +msgstr "CC for en ticket" + +#: lib/RT/ACE_Overlay.pm:114 +msgid "The administrative CC of a ticket" +msgstr "Den administrative CC for en ticket" + +#: NOT FOUND IN SOURCE +msgid "The comment has been recorded" +msgstr "Kommentarer er blevet gemt" + +#: 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 "Den følgende kommando vil finde alle aktive tickets i køen 'general' og vil sætte deres prioritet til 99 hvis de ikke er blevet rørt i 4 timer:" + +#: NOT FOUND IN SOURCE +msgid "The following commands were not proccessed:\\n\\n" +msgstr "De følgende kommandoer blev ikke processeret:\\n\\n" + +#: lib/RT/Record.pm:934 +msgid "The new value has been set." +msgstr "Den nye værdi er blevet sat" + +#: lib/RT/ACE_Overlay.pm:111 +msgid "The owner of a ticket" +msgstr "Ejeren af en ticket" + +#: lib/RT/ACE_Overlay.pm:112 +msgid "The requestor of a ticket" +msgstr "Anmoderen af en ticket" + +#: html/Admin/Elements/EditUserComments:47 +msgid "These comments aren't generally visible to the user" +msgstr "Disse kommentarer er ikke generelt synlige for brugeren" + +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "Dette custom felt gælder ikke for dette objekt" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Denne feature er kun tilgængelig for system administratorer" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Denne besked vil blive sendt til..." + +#: NOT FOUND IN SOURCE +msgid "This ticket %1 %2 (%3)\\n" +msgstr "Denne ticket %1 %2 (%3)\\n" + +#: bin/rt-crontool:214 +msgid "This tool allows the user to run arbitrary perl modules from within RT." +msgstr "Dette værktøj tillader brugeren at benyttet vilkÃ¥rlige Perl moduler inde fra RT." + +#: lib/RT/Transaction_Overlay.pm:288 +msgid "This transaction appears to have no content" +msgstr "Denne transaktion synes ikke at have noget indhold" + +#: html/Ticket/Elements/ShowRequestor:70 +#. ($rows) +msgid "This user's %1 highest priority tickets" +msgstr "Denne brugers højest prioriterede tickets" + +#: NOT FOUND IN SOURCE +msgid "This user's 25 highest priority tickets" +msgstr "Denne bruger 25 højest prioriterede tickets" + +#: lib/RT/Date.pm:416 +msgid "Thu." +msgstr "Tors." + +#: NOT FOUND IN SOURCE +msgid "Ticket # %1 %2" +msgstr "ticket # %1 %2" + +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket #%1 Jumbo update: %2" +msgstr "ticket #%1 Jumbo opdatering: %2" + +#: html/Approvals/Elements/ShowDependency:67 +#. ($link->BaseObj->Id, $link->BaseObj->Subject) +msgid "Ticket #%1: %2" +msgstr "ticket #%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) +msgid "Ticket %1" +msgstr "Ticket %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 +#. ($self->Id, $QueueObj->Name) +msgid "Ticket %1 created in queue '%2'" +msgstr "ticket %1 oprettet i kø '%2'" + +#: NOT FOUND IN SOURCE +msgid "Ticket %1 loaded\\n" +msgstr "Ticket %1 indlæst\\n" + +#: html/Search/Bulk.html:269 +#. ($Ticket->Id,$_) +msgid "Ticket %1: %2" +msgstr "Ticket %1 : %2" + +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Ticket Custom Felter" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket History # %1 %2" +msgstr "Ticket Historie # %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Ticket Id" +msgstr "Ticket ID" + +#: etc/initialdata:324 +msgid "Ticket Resolved" +msgstr "Ticket Løst" + +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Ticket Transaktioner" + +#: NOT FOUND IN SOURCE +msgid "Ticket attachment" +msgstr "Ticket vedhæftet fil" + +#: lib/RT/Tickets_Overlay.pm:1648 +msgid "Ticket content" +msgstr "Ticket indhold" + +#: lib/RT/Tickets_Overlay.pm:1697 +msgid "Ticket content type" +msgstr "Ticket indholds type" + +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 +msgid "Ticket could not be created due to an internal error" +msgstr "Ticket kunne ikke oprettes pga. en intern fejl" + +#: NOT FOUND IN SOURCE +msgid "Ticket created" +msgstr "Ticket oprettet" + +#: NOT FOUND IN SOURCE +msgid "Ticket creation failed" +msgstr "Ticket oprettelse mislykkedes" + +#: NOT FOUND IN SOURCE +msgid "Ticket deleted" +msgstr "Ticket slettet" + +#: NOT FOUND IN SOURCE +msgid "Ticket id not found" +msgstr "Ticket ID ikke fundet" + +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Ticket metadata" + +#: NOT FOUND IN SOURCE +msgid "Ticket not found" +msgstr "Ticket ikke fundet" + +#: etc/initialdata:310 +msgid "Ticket status changed" +msgstr "Ticket status ændret" + +#: NOT FOUND IN SOURCE +msgid "Ticket watchers" +msgstr "Ticket iagtagere" + +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "TicketSQL søge modul" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "Tickets" + +#: NOT FOUND IN SOURCE +msgid "Tickets %1 %2" +msgstr "Tickets %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Tickets %1 by %2" +msgstr "Tickets %1 af %2" + +#: NOT FOUND IN SOURCE +msgid "Tickets from %1" +msgstr "Tickets fra %1" + +#: html/Approvals/Elements/ShowDependency:48 +msgid "Tickets which depend on this approval:" +msgstr "Tickets som afhænger af denne godkendelse:" + +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "Tid Estimeret" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 +msgid "Time Left" +msgstr "Resterende tid" + +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 +msgid "Time Worked" +msgstr "Tid Arbejdet" + +#: lib/RT/Tickets_Overlay.pm:1619 +msgid "Time left" +msgstr "Resterende tid" + +#: html/Elements/Footer:71 +msgid "Time to display" +msgstr "Tid for visning" + +#: lib/RT/Tickets_Overlay.pm:1594 +msgid "Time worked" +msgstr "Tid arbejdet" + +#: lib/RT/Ticket_Overlay.pm:1143 +msgid "TimeWorked" +msgstr "TidArbejdet" + +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:" +msgstr "For at generere en diff af denne commit:" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:\\n" +msgstr "For at generere en difference af denne commit:\\n" + +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "Forespørgsel ang. support, træning, special udvikling eller licensering, kontakt venligst %1" + +#: lib/RT/Ticket_Overlay.pm:1146 +msgid "Told" +msgstr "Fortalt" + +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Værktøjer" + +#: etc/initialdata:252 +msgid "Transaction" +msgstr "Transaktion" + +#: lib/RT/Transaction_Overlay.pm:794 +#. ($self->Data) +msgid "Transaction %1 purged" +msgstr "Transaktion %1 tømt" + +#: lib/RT/Transaction_Overlay.pm:174 +msgid "Transaction Created" +msgstr "Transaktion Oprettet" + +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Transaktions Custom Felter" + +#: NOT FOUND IN SOURCE +msgid "Transaction->Create couldn't, as you didn't specify a ticket id" +msgstr "Transaktion->Opret kunne ikke gennemføres, da du ikke specificerede en ticket id" + +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "Transaktion->Opret kunne ikke gennemføres, da du ikke specificerede en object type og id" + +#: lib/RT/Transaction_Overlay.pm:838 +msgid "Transactions are immutable" +msgstr "Transaktioner er uforanderlige" + +#: NOT FOUND IN SOURCE +msgid "Trying to delete a right: %1" +msgstr "Forsøger at slette en rettighed: %1" + +#: lib/RT/Date.pm:414 +msgid "Tue." +msgstr "Tirs." + +#: 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 +msgid "Type" +msgstr "Type" + +#: lib/RT/ScripCondition_Overlay.pm:129 +msgid "Unimplemented" +msgstr "Uimplementeret" + +#: html/Admin/Users/Modify.html:89 +msgid "Unix login" +msgstr "Unix login" + +#: NOT FOUND IN SOURCE +msgid "UnixUsername" +msgstr "UnixBrugernavn" + +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 +#. ($self->ContentEncoding) +#. ($ContentEncoding) +msgid "Unknown ContentEncoding %1" +msgstr "Ukendt ContentEncoding %1" + +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "Ukendt felt: $key" + +#: html/Elements/SelectResultsPerPage:58 +msgid "Unlimited" +msgstr "Ubegrænset" + +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Unavngiven søgning" + +#: etc/initialdata:32 +msgid "Unprivileged" +msgstr "Upriviligeret" + +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "Ikke-valgte Custom Felter" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "Ikke-valgte objekter" + +#: lib/RT/Transaction_Overlay.pm:648 +msgid "Untaken" +msgstr "Ikke-tagede" + +#: html/Search/Bulk.html:54 +msgid "Update" +msgstr "Opdater" + +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Opdatér Alle" + +#: NOT FOUND IN SOURCE +msgid "Update ID" +msgstr "Opdater ID" + +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Opdatér Ticket" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 +msgid "Update Type" +msgstr "Opdatér type" + +#: NOT FOUND IN SOURCE +msgid "Update all these tickets at once" +msgstr "Opdatér alle disse tickets pÃ¥ en gang" + +#: NOT FOUND IN SOURCE +msgid "Update email" +msgstr "Opdatér email" + +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Opdatér flere tickets" + +#: NOT FOUND IN SOURCE +msgid "Update name" +msgstr "Opdatér navn" + +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 +msgid "Update not recorded." +msgstr "Opdatering ikke registreret" + +#: html/Search/Bulk.html:99 +msgid "Update selected tickets" +msgstr "Opdatér valgte tickets" + +#: NOT FOUND IN SOURCE +msgid "Update signature" +msgstr "Opdatér signatur" + +#: html/Ticket/ModifyAll.html:84 +msgid "Update ticket" +msgstr "Opdatér ticket" + +#: NOT FOUND IN SOURCE +msgid "Update ticket # %1" +msgstr "Opdatér ticket # %1" + +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 +#. ($Ticket->id) +msgid "Update ticket #%1" +msgstr "Opdatér ticket #%1" + +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Update ticket #%1 (%2)" +msgstr "Opdatér ticket #%1 (%2)" + +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 +msgid "Update type was neither correspondence nor comment." +msgstr "Opdaterings type var hverken korrespondance eller kommentar" + +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 +msgid "Updated" +msgstr "Opdateret" + +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Upload" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Upload flere filer" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Upload flere billeder" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Upload en fil" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Upload et billede" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "Upload op til %1 filer" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "Upload op til %1 billeder" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "Upload dine ændringer" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "User %1 %2: %3\\n" +msgstr "Bruger %1 %2: %3\\n" + +#: NOT FOUND IN SOURCE +msgid "User %1 Password: %2\\n" +msgstr "Bruger %1 Adgangskode: %2\\n" + +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "Bruger '%1' kunne ikke findes" + +#: NOT FOUND IN SOURCE +msgid "User '%1' not found" +msgstr "Bruger '%1' ikke fundet" + +#: NOT FOUND IN SOURCE +msgid "User '%1' not found\\n" +msgstr "Bruger '%1' ikke fundet\\n" + +#: etc/initialdata:132 etc/initialdata:206 +msgid "User Defined" +msgstr "Bruger defineret" + +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Bruger definerede betingelser og aktioner" + +#: NOT FOUND IN SOURCE +msgid "User ID" +msgstr "Bruger ID" + +#: NOT FOUND IN SOURCE +msgid "User Id" +msgstr "Bruger ID" + +#: 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 "Bruger Rettigheder" + +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "Bruger bad om en ukent opdateringstype for custom felt %1 for %1 objekt #%3" + +#: html/Admin/Users/Modify.html:293 +#. ($msg) +msgid "User could not be created: %1" +msgstr "Bruger kunne ikke oprettes: %1" + +#: lib/RT/User_Overlay.pm:331 +msgid "User created" +msgstr "Brugere oprettet" + +#: 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 "Bruger definerede grupper" + +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Bruger indlæst" + +#: NOT FOUND IN SOURCE +msgid "User notified" +msgstr "Bruger notificeret" + +#: NOT FOUND IN SOURCE +msgid "User view" +msgstr "Bruger visning" + +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Bruger-definerede grupper" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 +msgid "Username" +msgstr "Brugernavn" + +#: 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 +msgid "Users" +msgstr "Brugere" + +#: html/Admin/Users/index.html:85 +msgid "Users matching search criteria" +msgstr "Brugere som matcher søgekriterier" + +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Valid Søgestreng" + +#: NOT FOUND IN SOURCE +msgid "ValueOfQueue" +msgstr "KøVærdi" + +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 +msgid "Values" +msgstr "Værdier" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Watch" +msgstr "Watch" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "WatchAsAdminCc" +msgstr "WatchSomAdminCC" + +#: html/Admin/Elements/QueueTabs:63 +msgid "Watchers" +msgstr "Watchers" + +#: NOT FOUND IN SOURCE +msgid "WebEncoding" +msgstr "WebEncoding" + +#: lib/RT/Date.pm:415 +msgid "Wed." +msgstr "Ons." + +#: etc/initialdata:521 +msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" +msgstr "NÃ¥r en ticket er blevet godkendt af alle Approvers, tilføj korrespondance til den originale ticket" + +#: etc/initialdata:485 +msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" +msgstr "NÃ¥r en ticket er blevet godkendt af hvilken som helst Approver, tilføj korrespondance til den originale ticket" + +#: etc/initialdata:146 +msgid "When a ticket is created" +msgstr "NÃ¥r en ticket bliver oprettet" + +#: etc/initialdata:418 +msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" +msgstr "NÃ¥r en godkendelses ticket bliver lavet, notificer Ejer og AdminCc af delen som afventer deres godkendelse" + +#: etc/initialdata:151 +msgid "When anything happens" +msgstr "NÃ¥r hvad som helst sker" + +#: etc/initialdata:199 +msgid "Whenever a ticket is resolved" +msgstr "NÃ¥r en ticket bliver løst" + +#: etc/initialdata:185 +msgid "Whenever a ticket's owner changes" +msgstr "NÃ¥r en tickets ejer ændres" + +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "NÃ¥r en ticketøs prioritet ændres" + +#: etc/initialdata:193 +msgid "Whenever a ticket's queue changes" +msgstr "NÃ¥r en tickets kø ændres" + +#: etc/initialdata:170 +msgid "Whenever a ticket's status changes" +msgstr "NÃ¥r en tickets status ændres" + +#: etc/initialdata:207 +msgid "Whenever a user-defined condition occurs" +msgstr "NÃ¥r en bruger defineret betingelse opfyldes" + +#: etc/initialdata:164 +msgid "Whenever comments come in" +msgstr "NÃ¥r kommentarer kommer ind" + +#: etc/initialdata:157 +msgid "Whenever correspondence comes in" +msgstr "NÃ¥r korrespondance ankommer" + +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 +msgid "Work" +msgstr "Arbejde" + +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Arbejd offline" + +#: NOT FOUND IN SOURCE +msgid "WorkPhone" +msgstr "Arbejdstelefon" + +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 +msgid "Worked" +msgstr "Arbejdede" + +#: lib/RT/Ticket_Overlay.pm:3096 +msgid "You already own this ticket" +msgstr "Du ejer allerede denne ticket" + +#: html/autohandler:158 html/autohandler:166 +msgid "You are not an authorized user" +msgstr "Du er ikke en authoriseret bruger" + +#: lib/RT/Ticket_Overlay.pm:2978 +msgid "You can only reassign tickets that you own or that are unowned" +msgstr "Du kan kun tildele tickets du ejer eller som ikker ejet" + +#: NOT FOUND IN SOURCE +msgid "You don't have permission to view that ticket.\\n" +msgstr "Du har ikke tilladelse til at se den ticket.\\n" + +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 +#. ($num, $queue) +msgid "You found %1 tickets in queue %2" +msgstr "Du fandt %1 tickets i kø %2" + +#: html/NoAuth/Logout.html:52 +msgid "You have been logged out of RT." +msgstr "Du er blevet logget ud af RT." + +#: html/SelfService/Display.html:109 +msgid "You have no permission to create tickets in that queue." +msgstr "Du har ikke tilladelse til at lave requests i den kø" + +#: lib/RT/Ticket_Overlay.pm:1964 +msgid "You may not create requests in that queue." +msgstr "Du mÃ¥ ikke oprette requests i den kø" + +#: html/NoAuth/Logout.html:56 +msgid "You're welcome to login again" +msgstr "Du er velkommen til at logge ind igen" + +#: NOT FOUND IN SOURCE +msgid "Your %1 requests" +msgstr "Din %1 anmodning" + +#: NOT FOUND IN SOURCE +msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" +msgstr "Din RT administrator har ikke konfigureret mail aliaser som starter RT korrekt " + +#: etc/initialdata:502 +msgid "Your request has been approved by %1. Other approvals may still be pending." +msgstr "Din anmodning er blevet godkendt af %1. Andre godkendelser afventer muligvis stadigvæk" + +#: etc/initialdata:540 +msgid "Your request has been approved." +msgstr "Din anmodning er blevet godkendt" + +#: NOT FOUND IN SOURCE +msgid "Your request was rejected" +msgstr "Din anmodning blev afvist" + +#: etc/initialdata:445 +msgid "Your request was rejected." +msgstr "Din anmodning blev afvist" + +#: html/autohandler:193 +msgid "Your username or password is incorrect" +msgstr "Dit brugernavn eller adgangskode er ukorrekt" + +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 +msgid "Zip" +msgstr "Postnummer" + +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "tillad oprettelse af gemte søgninger" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "tillad indlæsning af gemte søgninger" + +#: html/User/Elements/DelegateRights:80 +#. ($right->PrincipalObj->Object->SelfDescription) +msgid "as granted to %1" +msgstr "som givet til %1" + +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "tilhører" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "lukket" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 +msgid "contains" +msgstr "indeholder" + +#: NOT FOUND IN SOURCE +msgid "content" +msgstr "indhold" + +#: NOT FOUND IN SOURCE +msgid "content-type" +msgstr "content-type" + +#: NOT FOUND IN SOURCE +msgid "correspondence (probably) not sent" +msgstr "korrespondance (muligvis) ikke sendt" + +#: NOT FOUND IN SOURCE +msgid "correspondence sent" +msgstr "korrespondance afsendt" + +#: NOT FOUND IN SOURCE +msgid "current: $current, want $want, Error near ->$val<- expecting a " +msgstr "nuværnede: $current, vil have $want, Fejl nær ->$val<- forventer " + +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 +msgid "days" +msgstr "dage" + +#: NOT FOUND IN SOURCE +msgid "delete" +msgstr "slet" + +#: lib/RT/Queue_Overlay.pm:88 +msgid "deleted" +msgstr "slettet" + +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "tilhører ikke" + +#: html/Search/Elements/PickBasics:61 +msgid "does not match" +msgstr "matcher ikke" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 +msgid "doesn't contain" +msgstr "indeholder ikke" + +#: html/Elements/SelectEqualityOperator:59 +msgid "equal to" +msgstr "lig med" + +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "fejl: kan ikke flytte ned" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "fejl: kan ikke flytte til venstre" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "fejl: kan ikke flytte op" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "fejl: intet at slette" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "fejl: intet at flytte" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "fejl: intet at skifte" + +#: NOT FOUND IN SOURCE +msgid "filename" +msgstr "filnavn" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "greater than" +msgstr "større end" + +#: lib/RT/Group_Overlay.pm:222 +#. ($self->Name) +msgid "group '%1'" +msgstr "gruppe '%1'" + +#: lib/RT/Date.pm:338 +msgid "hours" +msgstr "timer" + +#: html/Search/Elements/PickBasics:48 +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 +msgid "is" +msgstr "er" + +#: 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 +msgid "isn't" +msgstr "er ikke" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "less than" +msgstr "mindre end" + +#: html/Search/Elements/PickBasics:60 +msgid "matches" +msgstr "matcher" + +#: lib/RT/Date.pm:334 +msgid "min" +msgstr "min." + +#: html/Ticket/Update.html:64 +msgid "minutes" +msgstr "minutter" + +#: NOT FOUND IN SOURCE +msgid "modifications\\n\\n" +msgstr "ændringer\\n\\n" + +#: lib/RT/Date.pm:350 +msgid "months" +msgstr "mÃ¥neder" + +#: lib/RT/Queue_Overlay.pm:83 +msgid "new" +msgstr "ny" + +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "intet navn" + +#: html/Admin/Elements/EditScrips:64 +msgid "no value" +msgstr "ingen værdi" + +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 +msgid "none" +msgstr "ingen" + +#: html/Elements/SelectEqualityOperator:59 +msgid "not equal to" +msgstr "ikke lig med" + +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 +msgid "open" +msgstr "Ã¥ben" + +#: lib/RT/Group_Overlay.pm:227 +#. ($self->Name, $user->Name) +msgid "personal group '%1' for user '%2'" +msgstr "personlig gruppe '%1' for bruger '%2'" + +#: lib/RT/Group_Overlay.pm:235 +#. ($queue->Name, $self->Type) +msgid "queue %1 %2" +msgstr "kø %1 %2" + +#: lib/RT/Queue_Overlay.pm:87 +msgid "rejected" +msgstr "afvist" + +#: lib/RT/Queue_Overlay.pm:86 +msgid "resolved" +msgstr "løst" + +#: lib/RT/Date.pm:330 +msgid "sec" +msgstr "sek." + +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "vis Konfigurations tab" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "regneark" + +#: lib/RT/Queue_Overlay.pm:85 +msgid "stalled" +msgstr "stallet" + +#: lib/RT/Group_Overlay.pm:230 +#. ($self->Type) +msgid "system %1" +msgstr "system %1" + +#: lib/RT/Group_Overlay.pm:241 +#. ($self->Type) +msgid "system group '%1'" +msgstr "system gruppe '%1'" + +#: html/Elements/Error:66 html/SelfService/Error.html:63 +msgid "the calling component did not specify why" +msgstr "den kaldende komponent specificerede ikke hvorfor" + +#: NOT FOUND IN SOURCE +msgid "ticket #%1" +msgstr "ticket #%1" + +#: lib/RT/Group_Overlay.pm:238 +#. ($self->Instance, $self->Type) +msgid "ticket #%1 %2" +msgstr "ticket #%1 %2" + +#: lib/RT/Group_Overlay.pm:244 +#. ($self->Id) +msgid "undescribed group %1" +msgstr "ubeskrevet gruppe %1" + +#: NOT FOUND IN SOURCE +msgid "undescripbed group %1" +msgstr "ubeskrevet gruppe %1" + +#: lib/RT/Group_Overlay.pm:219 +#. ($user->Object->Name) +msgid "user %1" +msgstr "bruger %1" + +#: lib/RT/Date.pm:346 +msgid "weeks" +msgstr "uger" + +#: NOT FOUND IN SOURCE +msgid "with template %1" +msgstr "med template %1" + +#: lib/RT/Date.pm:354 +msgid "years" +msgstr "Ã¥r" + diff --git a/rt/lib/RT/I18N/de.po b/rt/lib/RT/I18N/de.po index 3595aad47..0b7f1eff7 100644 --- a/rt/lib/RT/I18N/de.po +++ b/rt/lib/RT/I18N/de.po @@ -1,2948 +1,3150 @@ # 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 2.1.54\n" "POT-Creation-Date: 2002-06-22 06:06+0200\n" "PO-Revision-Date: 2003-02-20 04:47+0200\n" -"Last-Translator: Florian Bischof <flo@fxb.de>\n" +"Last-Translator: Karsten Konrad <karsten.konrad@uni-graz.at>\n" "Language-Team: RT German <rt@fxb.de>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 -msgid "#" -msgstr "#" - -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) -msgid "#%1" -msgstr "" - -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->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 +#. ($Ticket->id, $Ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "#%1: %2" -#: lib/RT/Date.pm:337 +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "$prefix %1" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 #%2" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) -msgid "%1 %2 %3" -msgstr "%1 %2 %3" - -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %3. %2 %7, %4:%5:%6" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" msgstr "%1 %2 hinzugefügt" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "vor %1 %2" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 geändert in %3" -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" msgstr "%1 %2 gelöscht" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" msgstr "%1 %2 mit der Vorlage %3" -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 dieses Ticket\\n" +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) von %3" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) -msgid "%1 - %2 shown" -msgstr "%1 - %2 angezeigt" +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (Unverändert)" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") 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:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" -msgstr "" +msgstr "%1 - Statusausgabe auf STDOUT" -#msgstr "%1 - Schreibe Statusupdates nach STDOUT" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Gebe an, welches Action-Modul benutzt werden soll" +msgstr "%1 - Gibt an, welches Action-Modul benutzt werden soll" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Gebe an, welches Condition-Modul benutzt werden soll" +msgstr "%1 - Gibt an, welches Condition-Modul benutzt werden soll" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Gebe an, welches Search-Modul benutzt werden soll" +msgstr "%1 - Gibt an, welches Search-Modul benutzt werden soll" -#: lib/RT/ScripAction_Overlay.pm:122 + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "ScripAction %1 geladen" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 als Wert für %2 hinzugefügt" -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "" - -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) 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:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" -msgstr "am %1 von %2" +msgstr "%1 von %2" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 von %2 in %3 geändert" -#: lib/RT/Interface/Web.pm:857 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "%1 kopieren" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "%1 konnte nicht auf %2 gesetzt werden." -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) 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." -#: html/Elements/MyTickets:25 -#. ($rows) -msgid "%1 highest priority tickets I own..." -msgstr "%1 mir zugewiesene Anfragen mit höchster Priorität..." +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "%1 erstellt" -#: html/Elements/MyRequests:25 +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "%1 gelöscht" + +#: html/Elements/MyTickets:47 #. ($rows) -msgid "%1 highest priority tickets I requested..." -msgstr "Die %1 von mir ausgelösten Anfragen mit höchster Priorität" +msgid "%1 highest priority tickets I own" +msgstr "Ihre %1 Anfragen höchster Priorität" -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 ist ein Werkzeug um Anfragen über externe Terminierungstools wie \"cron\" zu verarbeiten" +msgstr "" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." -msgstr "%1 ist kein %2 dieses Stapels mehr." - -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 ist nicht mehr %2 dieser Anfrage." - -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 ist kein Wert des benutzerdefinierten Feldes %2 mehr" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 ist keine gültige Stapel-Id." - -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +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) msgid "%1 min" msgstr "%1 Min" -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "Die %1 neusten Anfragen ohne Besitzer" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 Objekte" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "%1 Rechte" -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "" - -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 wird alle Mitglieder eines erledigten Gruppentickets erledigen." +msgstr "%1 wird alle Mitglieder eines erledigten Gruppentickets anführen." -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "" +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%1's %2 Objekte" + +#: lib/RT/CustomField_Overlay.pm:829 +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) +msgid "%1's saved searches" +msgstr "%1's gespeicherte Suchanfragen" -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: kein Anhang angegeben" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1b" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" -msgstr "'%1' ist ein ungültiger Wert für Status" +msgstr "'%1' ist ein ung\303\274ltiger Wert f\303\274r Status" -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "" +#: 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)" -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Markieren um Scrip zu löschen)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(Benachrichtigung der markierten Empfänger wird unterdrückt)" -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 -msgid "(Check box to delete)" -msgstr "(Markieren um zu löschen)" +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(Benachrichtigungen an markierte Empfänger aktivieren)" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Gib Anfragenummern oder URLs getrennt durch Leerzeichen ein)" +#: html/Ticket/Create.html:209 +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:54 html/Admin/Queues/Modify.html:60 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "(Bei Freilassen %1" +msgid "(If left blank, will default to %1)" +msgstr "(Standardwert: %1)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "(Keine benutzerdefinierten Felder)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Keine Mitglieder)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(Keine Scrips)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "(Keine Vorlagen)" -#: html/Ticket/Update.html:85 -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 "(Schickt eine Blindkopie dieser Aktualisierung an eine durch Komma getrennte Liste von E-Mail-Adressen. Ändert <b>nicht</b> wer künftig Aktualisierungen geschickt bekommt.)" +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(Nichts)" -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +#: 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/Create.html:79 +#: 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 "(Schickt eine Kopie dieser Aktualisierung an eine durch Komma getrennte Liste von administrativen E-Mail-Adressen. Diese <b>werden</b> künftig Aktualisierungen erhalten.)" +msgstr "" -#: html/Ticket/Update.html:81 +#: 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 "(Schickt eine Kopie dieser Aktualisierung an eine durch Komma getrennte Liste von E-Mail-Adressen. Ändert <b>nicht</b> wer künftig Aktualisierungen geschickt bekommt.)" - -#: NOT FOUND IN SOURCE -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "" -#: html/Ticket/Create.html:69 +#: 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 "(Schickt eine Kopie dieser Aktualisierung an eine durch Komma getrennte Liste von E-Mail-Adressen. Diese <b>werden</b> künftig Aktualisierungen erhalten.)" +msgstr "" + +#: 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)" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(leer)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" -msgstr "" - -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 -msgid "(no subject)" -msgstr "(kein Betreff)" +msgstr "(kein Name gelistet)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" -msgstr "(keine Angabe)" +msgstr "(kein Wert)" + +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(keine Werte)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(nur eine Anfrage)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(wartet auf Freigabe)" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 -msgid "(pending other tickets)" -msgstr "(wartet auf andere Anfragen)" +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(wartet auf andere Sammlung)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(notwendig)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(unbenannt)" -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I own..." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "" - -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" -msgstr "" +msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" +msgstr "<% $_ %>" + +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "<%$_%>" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"Neue Anfrage in\"> %1" -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "Eine leere Vorlage" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + +#: 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:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACEs können nur erstellt und gelöscht werden." -#: bin/rt-commit-handler:755 -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Breche ab um ungewünschte Veränderungen an der Anfrage zu verhindern.\\n" +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "UND" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "Über mich" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "Zugriffskontrolle" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Aktion" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Aktion %1 nicht gefunden" -#: bin/rt-crontool:123 -msgid "Action committed." -msgstr "Aktion durchgeführt." +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "Aktion durchgeführt.\\n" -#: bin/rt-crontool:119 +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "Aktion vorbereitet..." -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Hinzufügen" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "AdminCC hinzufügen" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "CC hinzufügen" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "Spalten hinzufügen" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "Kriterium hinzufügen" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" -msgstr "Mehr Dateien anhängen" msgstr "Weitere Dateien anhängen" -#: html/Search/Bulk.html:88 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "Klient hinzufügen" -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Erstelle ein neues globales Scrip" +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "Wert hinzufügen" -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Erstelle ein Scrip für diesen Stapel" - -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" -msgstr "Scrip erstellen, das auf alle Stapel angewendet wird" +msgstr "Scrip erstellen, das auf alle Bereiche angewendet wird" + +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "zusätzliches Kriterium hinzufügen" -#: html/Search/Bulk.html:118 +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "Füge den ausgewählten Anfragen Kommentare oder Antworten hinzu" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "Mitglieder hinzufügen" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Neue Beobachter hinzufügen" -#: NOT FOUND IN SOURCE -msgid "AddNextState" -msgstr "" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "Hinzufügen, Löschen und Ändern von Werten benutzerdefinierter Felder von Objekten" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" -msgstr "Habe einen Hauptverantwortlichen als %1 für diesen Stapel hinzugefügt" +msgstr "Rolle wurde als %1 für diesen Bereich hinzugefügt" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" -msgstr "Habe einen Hauptverantwortlichen als %1 für diese Anfrage hinzugefügt" +msgstr "Rolle wurde als %1 für diese Anfrage hinzugefügt" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Adresse 1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Adresse 2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Admin CC" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "Admin Kommentar" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "Admin Korrespondenz" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" -msgstr "Admin Stapel" +msgstr "Admin Bereiche" -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "" - -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "Admin/Globale Einstellungen" -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "" - -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 -msgid "Admin/Queue/Basics" -msgstr "Admin/Stapel/Basics" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" -msgstr "" +msgstr "AdminCc" -#: NOT FOUND IN SOURCE -msgid "AdminComment" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:72 -msgid "AdminCustomFields" -msgstr "" +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "AdminBenutzerdefiniertesFeld" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" -msgstr "" +msgstr "AdminGruppe" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" -msgstr "" +msgstr "AdminGruppenZugehörigkeit" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" -msgstr "" +msgstr "AdminEigenePersönlicheGruppen" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" -msgstr "" +msgstr "AdminBereich" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" -msgstr "" +msgstr "AdminBenutzer" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Administrative CC" -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Erweiterte Suche" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Erweitert" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" -msgstr "Nach dem" +msgstr "nach dem" -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Alter" +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "Operator" -#: html/Admin/Elements/EditCustomFields:96 -msgid "All Custom Fields" -msgstr "Alle benutzerdefinierten Felder" +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "Alle Freigaben genehmigt" -#: html/Admin/Queues/index.html:53 +#: html/Admin/Queues/index.html:75 msgid "All Queues" -msgstr "Alle Stapel" +msgstr "Alle Bereiche" -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" -msgstr "" +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "Und/Oder" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "gilt für" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "anwenden" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Änderungen anwenden" -#: html/Elements/Tabs:58 +#: html/Elements/Tabs:74 msgid "Approval" msgstr "Freigabe" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" msgstr "Freigabe #%1: %2" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Freigabe #%1: Notiz wurde aufgrund eines Systemfehlers nicht vermerkt" +msgstr "Freigabe #%1: Notiz wurde aufgrund eines Systemfehlers nicht gespeichert" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" -msgstr "Freigabe #%1: Notiz vermerkt" +msgstr "Freigabe #%1: Notiz gespeichert" -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "" +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Freigabe genehmigt" -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "" +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Freigabe abgelehnt" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "Freigeben" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "Notizen des Freigebenden: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." -msgstr "Apr" +msgstr "Apr." -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "aufsteigend" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Zuweisen und Entfernen von benutzerdefinierten Feldern" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "BenutzerdefiniertesFeldZuweisen" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Anhängen" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "Datei anhängen" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "Dateianhang" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Anhang '%1' konnte nicht geladen werden" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "Anhang erstellt" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "Dateiname des Anhangs" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "Anhänge" -#: lib/RT/Date.pm:418 -msgid "Aug." -msgstr "Aug" +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Attribut gelöscht" -#: html/Admin/Elements/ModifyUser:66 -msgid "AuthSystem" -msgstr "AuthSystem" +#: lib/RT/Date.pm:444 +msgid "Aug." +msgstr "Aug." -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" -msgstr "Autoreply" +msgstr "Automatische Antwort" #: etc/initialdata:72 msgid "Autoreply To Requestors" -msgstr "Autoreply an Klienten" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Fehlerhafte PGP-Signatur: %1\\n" +msgstr "Automatische Antwort an Klienten" -#: html/SelfService/Attachment/dhandler:40 -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Fehlerhafte Anhangs-Id. Konnte Anhang '%1' nicht finden\\n" - -#: bin/rt-commit-handler:827 -#. ($val) -msgid "Bad data in %1" -msgstr "Fehlerhafte Daten in %1" - -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Fehlerhafte Transaktionsnummer für den Anhang. %1 solle %2 sein\\n" - -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "BCC" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Denke daran, Deine Änderungen zu speichern" +msgstr "Änderungen speichern" -### wieder - Duzen??? -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "vor dem" -#: NOT FOUND IN SOURCE -msgid "Begin Approval" +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" msgstr "" -#: etc/initialdata:202 +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "Binär" + +#: etc/initialdata:217 msgid "Blank" msgstr "Leer" -#: html/Search/Listing.html:79 -msgid "Bookmarkable URL for this search" -msgstr "Speicherbare URL für diese Suche" +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "Fett" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "Speicherbarer Link" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "Kurze Kopfzeilen" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" -msgstr "Massen Ticketupdate" +msgstr "Massen Anfrageaktualisierung" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "Kann Systembenutzer nicht ändern" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" -msgstr "Kann dieser Hauptverantwortliche diesen Stapel sehen" +msgstr "Kann diese Rolle diesen Bereich sehen" -#: lib/RT/CustomField_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "Kann kein benutzerdefiniertes Feld ohne Namen hinzufügen" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Kann keine gespeicherte Suche finden" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" -msgstr "Kann kein Ticket auf sich selbst verweisen lassen!" +msgstr "Kann kein Anfrage auf sich selbst verweisen lassen!" -#: lib/RT/Ticket_Overlay.pm:2787 -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Konnte das Ticket nicht in ein vereinigtes Ticket vereinigen. Diesen Fehler solltest du niemals sehen" +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Kann diese Suche nicht speichern" -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" -msgstr "Du kannst nicht Basis und Ziel gleichzeitig angeben" +msgstr "Sie können Basis und Ziel nicht gleichzeitig angeben" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "Kann Benutzer nicht anlegen: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "CC" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "Passwort ändern" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Alle auswählen" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" -msgstr "Zum Löschen ankreuzen" +msgstr "Zum Löschen anwählen" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" -msgstr "Zum Entziehen einer Berechtigung ankreuzen" +msgstr "Zum Entziehen einer Berechtigung anwählen" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Kinder" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "Stadt" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "Alles löschen" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "Geschlossen" -#: html/SelfService/Elements/Tabs:60 -msgid "Closed requests" -msgstr "Geschossene Tickets" - -#: NOT FOUND IN SOURCE -msgid "Command not understood!\\n" -msgstr "" +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "Geschlossene Anfragen" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Kommentar" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Kommentaradresse" -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" -msgstr "Kommentiere Tickets" +msgstr "Kommentiere Anfragen" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" -msgstr "" - -#: html/Admin/Elements/ModifyUser:35 -msgid "Comments" -msgstr "Kommantare" +msgstr "AnfrageKommentieren" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" -msgstr "Kommentar (wird nicht an Klienten geschickt)" +msgstr "Kommentare (werden nicht an Klienten geschickt)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" -msgstr "Kommentar (wird nicht an Klienten geschickt)" - -#: html/Elements/ViewUser:27 -#. ($name) -msgid "Comments about %1" -msgstr "Kommentar über %1" +msgstr "Kommentare (werden nicht an Klienten geschickt)" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" -msgstr "Kommentar zu diesen Benutzer" +msgstr "Kommentare zu diesem Benutzer" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "Kommentar hinzugefügt" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" -msgstr "Übergabe abgehakt" +msgstr "Commit Stumpf ausgeführt" -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "" - -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "Bedingung" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." -msgstr "Condition trifft zu..." +msgstr "Bedingung trifft zu..." -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "Bedingung nicht gefunden" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Konfiguration" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "Bestätigen" -#: html/Admin/Elements/ModifyUser:60 -msgid "ContactInfoSystem" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "" - -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Inhalt" -#: etc/initialdata:266 +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "Inhaltstyp" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "Kopie" + +#: etc/initialdata:286 msgid "Correspondence" msgstr "Korrespondenz" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 -msgid "Correspondence Address" -msgstr "Korrespondenzadresse" - -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Korrespondenz hinzugefügt" -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "" +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "Konnte keinen neuen benutzerdefinierten Wert hinzufügen" -#: lib/RT/Ticket_Overlay.pm:3458 -msgid "Could not add new custom field value for ticket. " -msgstr "Konnte dem Ticket kein neues benutzerdefiniertes Feld hinzufügen. " +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "Konnte kein neuen benutzerdefinierten Wert hinzufügen. %1 " -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " -msgstr "Konnte den Inhaber nicht ändern. " +msgstr "Konnte den Besitzer nicht ändern. " -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" -msgstr "Konnte benutzerdefiniertes Feld nicht anlegen" +msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen" + +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "Konnte benutzerdefiniertes Feld nicht erzeugen: %1" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: 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:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "Konnte Vorlage nicht anlegen: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" -msgstr "Konnte Ticket nicht anlegen. Stapel nicht bestimmt" +msgstr "Konnte Anfrage nicht anlegen. Bereich nicht angegeben" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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" -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "" - -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "Konnte diesen Benutzer nicht finden oder anlegen" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" -msgstr "Konnte diesen Hauptverantwortlichen nicht finden" +msgstr "Konnte diese Rolle nicht finden" -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "" +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Konnte benutzerdefiniertes Feld %1 nicht laden" -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: 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/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" -msgstr "Konnte den Hauptverantwortlichen nicht zu einen %1 dieses Stapels machen" +msgstr "Konnte diese Rolle nicht zu einen %1 dieses Bereichs machen" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" -msgstr "Konnte diesen Hauptverantwortlichen nicht zu einem %1 dieses Tickets machen" +msgstr "Konnte diese Rolle nicht zu einem %1 dieses Anfragen machen" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" -msgstr "Konnte diesen Hauptverantwortlichen nicht als %1 dieses Stapels entfernen" +msgstr "Konnte diese Rolle nicht als %1 dieses Bereichs entfernen" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Konnte diesen Hauptverantwortlichen nicht als %1 dieses Tickets entfernen" +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Konnte Benutzerinformation nicht speichern" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" -msgstr "Konnte Mitglied nicht der Gruppe hinzufügen" +msgstr "Konnte Benutzer nicht der Gruppe hinzufügen" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "Konnte die Transaktion nicht anlegen: %1" -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "" - -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" -msgstr "Konne Zeile nicht finden" +msgstr "Konnte Zeile nicht finden" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" -msgstr "Konnte diesen Hauptverantwortlichen nicht finden" +msgstr "Konnte diese Rolle nicht finden" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "Konnte diesen Wert nicht finden" -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "" - -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "Konnte %1 nicht aus der Benutzerdatenbank laden.\\n" -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "Konnte die Klasse %1 nicht laden" -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "" +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "Konnte das benutzerdefinierte Feld %1 nicht laden" -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "Konnte Gruppe %1 nicht laden" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: 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/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "Konnte Objekt %1 nicht laden" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" -msgstr "Konnte den Stapel nicht laden" +msgstr "Konnte den Bereich nicht laden" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" -msgstr "Konnte den Stapel %1 nicht laden" +msgstr "Konnte den Bereich %1 nicht laden" -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "" +#: html/SelfService/Display.html:156 +#. ($id) +msgid "Couldn't load ticket '%1'" +msgstr "Konnte das Anfrage '%1' nicht laden" -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." msgstr "" -#: html/Admin/Users/Prefs.html:79 -#. ($id) -msgid "Couldn't load that user (%1)" -msgstr "Konnte diesen Benutzer nicht laden (%1)" - -#: html/SelfService/Display.html:166 -#. ($id) -msgid "Couldn't load ticket '%1'" -msgstr "Konnte das Ticket '%1' nicht laden" +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "Land" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "Erstellen" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" -msgstr "Erstelle Tickets" +msgstr "Erstelle Anfragen" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "Erstelle ein benutzerdefiniertes Feld" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" -msgstr "Erstelle ein benutzerdef. Feld für Stapel %1" - -#: html/Admin/Global/CustomField.html:48 -msgid "Create a CustomField which applies to all queues" -msgstr "Erstelle ein benutzerdef. Feld für alle Stapel" +msgstr "Erstelle ein benutzerdefiniertes Feld für den Bereich %1" -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "" - -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: 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:67 html/User/Groups/Modify.html:92 +#: 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" -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "" - -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" -msgstr "Erstelle ein neues Ticket" +msgstr "Erstelle eine neue Anfrage" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "Erstelle einen neuen Benutzer" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" -msgstr "Erstelle einen Stapel" +msgstr "Erstelle einen Bereich" -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "" - -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 -msgid "Create a request" -msgstr "Erstelle ein Ticket" - -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" -msgstr "Erstelle ein Scrip für den Stapel %1" +msgstr "Erstelle ein Scrip für den Bereich %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "Erstelle eine Vorlage" -#: etc/initialdata:130 +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "Neue Anfrage" + +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" -msgstr "Erstelle neue Tickets basierend auf der Vorlage dieses Scrips" +msgstr "Erstelle neue Anfragen basierend auf der Vorlage dieses Scrips" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" -msgstr "Ticket erstellen" +msgstr "Anfrage erzeugen" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" -msgstr "Erstelle Tickets in diesem Stapel" +msgstr "Erstelle Anfragen in diesem Bereich" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" -msgstr "Erstellen, löschen und modifizieren von benutzerdef. Felder" +msgstr "Erstellen, löschen und modifizieren von benutzerdefinierten Felder" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" -msgstr "Erstelle, lösche und modifiziere Stapel" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "" +msgstr "Erstelle, lösche und modifiziere Bereich" -#: lib/RT/System.pm:59 +#: 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" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "Erstellen, löschen und modifizieren von Benutzern" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "GespeicherteSucheErstellen" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" -msgstr "" +msgstr "AnfrageErstellen" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "Angelegt" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "Erstelle ein benutzerdefiniertes Feld %1" -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Ersteller" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Momentane Beziehungen" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "Aktuelle Scrips" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Aktuelle Mitglieder" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Aktuelle Rechte" -#: html/Search/Listing.html:71 -msgid "Current search criteria" -msgstr "Aktuelle Suchkriterien" - -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Aktuelle Beobachter" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) -msgid "Custom Field #%1" -msgstr "Benutzerdef. Feld #%1" - -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" -msgstr "Benutzerdef. Felder" +msgstr "Benutzerdefinierte Felder" + +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Benutzerdefinierte Felder für %1" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" -msgstr "Benutzerdefinierter Action-Cleanup-Code" +msgstr "Benutzerdefinierter Aktions-Aufräum-Code" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "Benutzerdefinierter Aktions-Vorbereitungs-Code" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "Benutzerdefinierte Bedingung" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) -msgid "Custom field %1 %2 %3" -msgstr "Benutzerdefiniertes Feld %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "Benutzerdefiniertes Feld %1 hat einen Wert." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "Benutzerdefiniertes Feld %1 hat keinen Wert." -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Benutzerdefiniertes Feld %1 nicht gefunden" -#: html/Admin/Elements/EditCustomFields:197 -msgid "Custom field deleted" -msgstr "Benutzerdefiniertes Feld wurde gelöscht" - -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "Benutzerdefiniertes Feld nicht gefunden" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "Wert %1 des benutzerdefinierten Feldes %2 konnte nicht gefunden werden" -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "Wert des benutzerdefinierten Felds konnte nicht gelöscht werden" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "Wert des benutzerdefinierten Feldes konnte nicht gefunden werden" -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "Wert des benutzerdefinierten Feldes gelöscht" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" -msgstr "" +msgstr "BenutzerdefiniertesFeld" -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Datumsangaben" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." -msgstr "Dez" - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "" +msgstr "Dez." -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" -msgstr "Standard Autoresponse-Vorlage" +msgstr "Standard Vorlage für automatische Antworten" -#: etc/initialdata:275 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "Standard Bereich" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Standard Klient" + +#: etc/initialdata:296 msgid "Default admin comment template" -msgstr "Standard Admin-Kommentar-Vorlage" +msgstr "Standard Vorlage für Admin-Kommentar" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" -msgstr "Standard Admin-Korrespondenz-Vorlage" +msgstr "Standard Vorlage für Admin-Korrespondenz" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" -msgstr "Standard Korrespondenz-Vorlage" +msgstr "Standard Vorlage für Korrespondenz" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" -msgstr "Standard Transaktions-Vorlage" +msgstr "Standard Vorlage für Transaktion" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Standard: %1/%2 von \"%3\" in \"%4\" geändert." +msgstr "Standard: %1/%2 von \"%3\" auf \"%4\" geändert." -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Rechte weitergeben" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." -msgstr "Dir gewährte Rechte weitergeben" +msgstr "Ihnen gewährte Rechte weitergeben" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" -msgstr "" +msgstr "RechteWeitergabe" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "Rechteweitergabe" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" +msgstr "Löschen" + +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Vorlage löschen" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" msgstr "" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Ausgewähltes Script löschen" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" -msgstr "Lösche Tickets" +msgstr "Anfragen löschen" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" +msgstr "AnfrageLöschen" + +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" msgstr "" -#: lib/RT/Transaction_Overlay.pm:187 +# Are these three strings really different? +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" -msgstr "Löschen dieses Objektes kann die referenzielle Integrität gefährden" +msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen" -#: lib/RT/Queue_Overlay.pm:292 +#: 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 gefährden" +msgstr "Löschen dieses Objektes würde die referenzielle Integrität verletzen" -#: lib/RT/User_Overlay.pm:430 +#: 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" -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "Ablehnen" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" -msgstr "Abhängig gemacht von" +msgstr "Ist Voraussetzung von" -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "" +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "Als Voraussetzung von %1 hinzugefügt" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "Als Voraussetzung von %1 gelöscht" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "Setzt jetzt %1 voraus" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "Setzt %1 nicht mehr voraus " -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 +#: 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 msgid "Depends on" -msgstr "Abhängig von" +msgstr "Voraussetzungen" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "absteigend" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" -msgstr "Beschreibe hier das Problem" +msgstr "Beschreiben Sie hier das Problem" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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/SelfService/Elements/MyRequests:44 -msgid "Details" -msgstr "Details" - -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" -msgstr "Anzeigen" +msgstr "Anzeige" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" -msgstr "Zeige Zugriffskontrollliste an" +msgstr "Zeige Zugriffskontrollliste (ACL) an" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Spalten anzeigen" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" -msgstr "Zeige Scrip-Vorlagen für diesen Stapel" +msgstr "Zeige Scrip-Vorlagen für diesen Bereich" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" -msgstr "Zeige Scrips für diesen Stapel" +msgstr "Zeige Scrips für diesen Bereich" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Anzeigemodus" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) -msgid "Display ticket #%1" -msgstr "Zeige Ticket #%1 an" +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "Gespeicherte Suchanfragen für diese Gruppe anzeigen" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "Mache irgend etwas und alles" -#: html/Elements/Refresh:30 -msgid "Don't refresh this page." -msgstr "Seite nicht aktualisieren." +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "Suche durchführen" -#: html/Search/Elements/PickRestriction:114 -msgid "Don't show search results" -msgstr "Suchergebnisse nicht anzeigen" +#: html/Elements/Refresh:51 +msgid "Don't refresh this page." +msgstr "Diese Seite nicht aktualisieren." -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" -msgstr "Download" +msgstr "Herunterladen" + +#: 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:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: 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 msgid "Due" msgstr "Fällig" -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "" +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" +msgstr "Bearbeite benutzerdefinierte Felder für %1" -#: bin/rt-commit-handler:754 -#. ($1, $msg) -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "FEHLER: Konnte Ticket '%1' nicht laden: %2.\\n" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "Edit" +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" msgstr "" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) -msgid "Edit Custom Fields for %1" -msgstr "Bearbeite benutzerdefinierte Felder für %1" +#: 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 "" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "Bearbeite Beziehungen" -#: html/Admin/Queues/Templates.html:41 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Bearbeite Suche" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" -msgstr "Bearbeite Vorlagen für Stapel %1" +msgstr "Bearbeite Vorlagen für den Bereich %1" -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "Bearbeite gespeicherte Suchanfragen für diese Gruppe" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "Bearbeite Systemvorlagen" -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "" +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "GespeicherteSucheEditieren" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" -msgstr "Bearbeite Konfiguration für den Stapel %1" +msgstr "Bearbeite Konfiguration für den Bereich %1" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) -msgid "Editing Configuration for user %1" -msgstr "Bearbeite Konfiguration für Benutzer %1" - -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "Bearbeite benutzerdefiniertes Feld %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "Bearbeite Mitgliedschaft für die Gruppe %1" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "Bearbeite Mitgliedschaft der persönlichen Gruppe %1" -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" -msgstr "Es muß entweder eine Basis oder ein Ziel angegeben werden" +msgstr "Es muss entweder eine Basis oder ein Ziel angegeben werden" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "E-Mail" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "E-Mail-Adresse bereits in Gebrauch" -#: html/Admin/Elements/ModifyUser:42 -msgid "EmailAddress" -msgstr "E-Mail-Adresse" - -### muss das überhaupt übersetzt werden??? -#: html/Admin/Elements/ModifyUser:54 -msgid "EmailEncoding" -msgstr "E-Mail-Kodierung" - -### muss das überhaupt übersetzt werden??? -#: html/Admin/Elements/EditCustomField:36 +# ## muss das überhaupt übersetzt werden??? +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Aktiviert (Abwählen deaktiviert dieses benutzerdef. Feld)" +msgstr "Aktiviert (Abwählen deaktiviert dieses benutzerdefinierte Feld)" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: 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)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktiviert (Abwählen deaktiviert diesen Stapel)" +msgstr "Aktiviert (Abwählen deaktiviert diesen Bereich)" -#: html/Admin/Elements/EditCustomFields:99 -msgid "Enabled Custom Fields" -msgstr "Aktivierte benutzerdefinierte Felder" - -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" -msgstr "Aktivierte Stapel" +msgstr "Aktivierte Bereiche" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" -msgstr "Status %1 aktiviert" +msgstr "Status aktiviert: %1" + +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "Status aktiviert: %1" -#: lib/RT/CustomField_Overlay.pm:361 +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "Mehrere Werte eingeben" -#: lib/RT/CustomField_Overlay.pm:358 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "Einen Wert eingeben" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Ticketnummern oder URIs getrennt durch Leerzeichen eingeben." +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "" -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "" + +#: 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 msgid "Error" msgstr "Fehler" -#: lib/RT/Queue_Overlay.pm:555 +# 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 Parameter für Queue-AddWatcher" +msgstr "Fehler in den Parametern zu Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Fehler in den Paramter für Queue->DelWatcher" +# 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:1356 +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" -msgstr "Fehler in den Parameter für Ticket->AddWatcher" +msgstr "Fehler in den Parametern zu Ticket->AddWatcher" + +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Fehler in den Parametern zu Ticket->DeleteWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Fehler in den Parameter für Ticket->DelWatcher" +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "Anfragen eskalieren" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Geschätzt" #: etc/initialdata:20 msgid "Everyone" -msgstr "Everyone" +msgstr "Jeder" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "Beispiel:" -#: html/Admin/Elements/ModifyUser:64 -msgid "ExternalAuthId" -msgstr "ExternalAuthId" - -#: html/Admin/Elements/ModifyUser:58 -msgid "ExternalContactInfoId" -msgstr "ExternalContactInfoId" - -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "Zusatzinformationen" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "Konnte die Pseudogruppe 'Privileged' nicht finden." -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Failed to find 'Unprivileged' users pseudogroup" +msgstr "Konnte die Pseudogruppe 'Unprivileged' nicht finden." -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "Konnte Modul %1 nicht laden. (%2)" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." -msgstr "Feb" +msgstr "Feb." -#: NOT FOUND IN SOURCE -msgid "Fin" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Dateiname" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "Mehrere Textfelder füllen" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "Ein Textfeld füllen" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "%1 Textfelder füllen" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" msgstr "" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Endpriorität" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" -msgstr "" +msgstr "EndPriorität" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 -msgid "Find group whose" -msgstr "Finde Gruppe wessen" +#: 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" -#: html/Elements/Quicksearch:25 -msgid "Find new/open tickets" -msgstr "Finde neue/offene Tickets" - -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +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 msgid "Find people whose" msgstr "Finde Leute deren" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "Anfragen suchen" -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "" - -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Erste" -#: html/Search/Listing.html:41 -msgid "First page" -msgstr "Erste Seite" - -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "Foo!" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" -msgstr "erzwinge Änderung" +msgstr "Änderung erzwingen" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" -msgstr "%quant(%1,ticket) gefunden" +msgstr "%1 Anfrage(n) gefunden" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "Objekt gefunden" -#: html/Admin/Elements/ModifyUser:44 -msgid "FreeformContactInfo" -msgstr "FreeformContactInfo" - -#: lib/RT/CustomField_Overlay.pm:38 -msgid "FreeformMultiple" -msgstr "FreieMehrfachauswahl" - -#: lib/RT/CustomField_Overlay.pm:37 -msgid "FreeformSingle" -msgstr "FreieEinzelauswahl" +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "Freie Eingabe" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." -msgstr "Fr" +msgstr "Fr." -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "Alle Kopfzeilen" -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "Vorlage von Datei nehmen" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" -msgstr "An %1 gegeben" +msgstr "An %1 übergeben" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "Global" -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Globale benutzerdefinierte Felder" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "Konfiguration globaler benutzerdefinierter Felder" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "Globale Vorlage: %1" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: 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 msgid "Go!" msgstr "Los!" -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "" - -#: html/Search/Listing.html:50 -msgid "Goto page" -msgstr "Gehe zu Seite" - -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" -msgstr "Zeig' Ticket" +msgstr "Zeige Anfrage" -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "Gruppe" -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "" - -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "Gruppe hat bereits Mitglieder" -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "Gruppe konnte nicht erstellt werden: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "Gruppe angelegt" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "Gruppe hat kein solches Mitglied" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Gruppe nicht gefunden" -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "" - -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Gruppen" -#: lib/RT/Group_Overlay.pm:971 +#: 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" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "Gruppen auf die das Suchkriterium passt" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "Gruppen zu denen der Benutzer gehört" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "Hallo!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Hallo %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" -msgstr "Historie" +msgstr "Geschichte" -#: html/Admin/Elements/ModifyUser:68 -msgid "HomePhone" -msgstr "TelefonZuhause" +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "Geschichte der Gruppe %1" -#: html/Elements/Tabs:46 +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "Geschichte des Benutzers %1" + +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Start" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." -msgstr "" +msgstr "Ich habe %quant(%1, Betonmischer)" -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "" +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "Ich bin verwirrt" -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "Nr." -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identität" -#: etc/upgrade/2.1.71:86 +#: 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." +msgstr "Wenn kein Klient spezifiziert ist, dann generiere Anfragen mit diesem Klienten" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "Wenn kein Bereich spezifiziert ist, dann generiere das Anfrage in diesem Bereich" -#: bin/rt-crontool:190 +#: 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 "Wenn dieses Werkzeug 'setgid' wäre könnte ein feindlicher lokaler Benutzer dadurch administrativen Zugriff auf RT erlangen." +msgstr "" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 du irgend etwas aktualisiert hast, denke daran hier zu klicken" +msgstr "Wenn Sie etwas aktualisiert haben, denken Sie daran hier zu speichern" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "Unerlaubter Wert für %1" -#: lib/RT/Interface/Web.pm:863 +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Bild" + +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "Unveränderbares Feld" -#: html/Admin/Elements/EditCustomFields:74 -msgid "Include disabled custom fields in listing." -msgstr "Zeige auch deaktivierte benutzerdefinierte Felder an." +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Zeige auch deaktivierte Gruppen an." -#: html/Admin/Queues/index.html:43 +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." -msgstr "Zeige auch deaktivierte Stapel an." +msgstr "Zeige auch deaktivierte Bereiche an." -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "Zeige deaktivierte Benutzer auch in der Suche an." -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "Unvollständige Suche" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "Unvollständige Anfrage" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "Anfängliche Priorität" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" -msgstr "" +msgstr "AnfänglichePriorität" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Eingabefehler" -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "Interner Fehler" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" -msgstr "Internet Fehler: %1" +msgstr "Interner Fehler: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "Ungültige Gruppenart" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "Ungültiges Recht" -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "Ungültige Daten" -#: lib/RT/Ticket_Overlay.pm:438 -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Ungültiger Inhaber. Zurücksetzung auf 'nobody'." - -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" -msgstr "Ungültiger Stapel" +msgstr "Ungültiger Bereich" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "Ungültiger Wert für %1" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "Ungültiger Wert für das benutzerdefinierte Feld" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Ungültiger Statuswert" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Es ist sehr wichtig dass nichtprivilegierte Benutzer dieses Werkzeug nicht aufrufen können." +msgstr "" -#: bin/rt-crontool:192 +#: 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 "Es wird empfohlen einen nichtprivilegierten Unix-User mit korrekter Gruppenzugehörigkeit zum Zugriff auf RT anzulegen um dieses Werkzeug aufzurufen." +msgstr "" -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "Es verarbeitet verschiedene Parameter:" -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "kursiv" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." -msgstr "Jan" +msgstr "Jan." -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "Betrete oder verlasse diese Gruppe" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." -msgstr "Jul" +msgstr "Jul." -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "Alles" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." -msgstr "Jun" +msgstr "Jun." -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "" - -#: html/Admin/Elements/ModifyUser:52 -msgid "Lang" +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" msgstr "Sprache" -#: html/Ticket/Elements/Tabs:73 +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "Groß" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" -msgstr "letzter Kontakt" +msgstr "Letzter Kontakt" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Letzter Kontakt" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Zuletzt Kontaktiert" -#: html/Search/Elements/TicketHeader:41 -msgid "Last Notified" -msgstr "Letzte Änderung" - -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Zuletzt Aktualisiert" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "ZuletztBearbeitetVon" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" -msgstr "" +msgstr "Links" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" -msgstr "Diesen Benutzer RT-Zugriff gewähren" +msgstr "Diesem Benutzer RT-Zugriff gewähren" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" -msgstr "Diesen Benutzer mehr Rechte gewähren" +msgstr "Diesem Benutzer Rechte zuweisen lassen" -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" +#: html/Search/Elements/EditFormat:68 +msgid "Link" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2697 +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "Beziehung existiert bereits" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "Beziehung konnte nicht erstellt werden" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "Beziehung erstellt (%1)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "Beziehung gelöscht (%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "Beziehung nicht gefunden" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" -msgstr "Verweise auf Ticket #%1" +msgstr "Verweise auf Anfrage #%1" -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Beziehungen" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "Laden" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "Gespeicherte Suchanfragen laden" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "GespeicherteSucheLaden" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "Geladene Perl Module" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "Adresse" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) 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." +msgstr "" +"Log-Verzeichnis %1 nicht gefunden oder kein Schreibzugriff.\\n RT kann nicht " +"starten." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "Angemeldet als %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" msgstr "Anmelden" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Abmelden" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "Suchtyp unpassend" + +#: html/Search/Bulk.html:104 msgid "Make Owner" -msgstr "Mach Inhaber" +msgstr "Besitzer festlegen" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" -msgstr "Mach Status" +msgstr "Status festlegen" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" -msgstr "Mach Fälligkeitsdatum" +msgstr "Fälligkeitsdatum festlegen" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" -msgstr "Mach Erledigungsdatum" +msgstr "Erledigungsdatum festlegen" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" -msgstr "Mach Datum gestartet" +msgstr "Anfangsdatum festlegen" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" -msgstr "Mach Startdatum" +msgstr "Startdatum festlegen" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" -msgstr "Mach Eingangsdatum" +msgstr "Eingangsdatum festlegen" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" -msgstr "Mach Priorität" +msgstr "Priorität festlegen" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" -msgstr "Mach Stapel" +msgstr "Bereich festlegen" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" -msgstr "Betreff setzen" +msgstr "Betreff festlegen" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "Diese Gruppe dem Benutzer anzeigen" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "Verwalte benutzerdefinierte Felder und Werte" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "Gruppen und Gruppenmitglieder verwalten" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" -msgstr "Eigenschaften und Einstellungen für alle Stapel verwalten" +msgstr "Eigenschaften und Einstellungen für alle Bereiche verwalten" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" -msgstr "Stapel und stapelspezifische Einstellungen verwalten" +msgstr "Bereich und bereichspezifische Einstellungen verwalten" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "Benutzer und Passworte verwalten" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." -msgstr "Mär" +msgstr "Mär." -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." -msgstr "Mai." +msgstr "Mai" + +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "Mitglied %1 hinzugefügt" -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "Mitglied %1 gelöscht" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "Mitglied hinzugefügt" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "Mitglied gelöscht" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "Mitglied nicht gelöscht" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "Mitglied von" -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "Mitglieder" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "Mitgliedschaft in %1 hinzugefügt" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "Mitgliedschaft in %1 gelöscht" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "Mitgliedschaft" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "Mitgliedschaft des Benutzers %1" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" -msgstr "Zusammenführung erfolgreich" +msgstr "Vereinigung erfolgreich" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Zusammenführung fehlgeschlagen. Konnte EffectiveId nicht setztn" +msgstr "Vereinigung fehlgeschlagen. Konnte EffectiveId nicht setzen" + +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "Vereinigung fehlgeschlagen. Konnte Status nicht setzen" -#: html/Ticket/Elements/EditLinks:115 +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" -msgstr "Zusammenführen in" +msgstr "Vereinigen mit" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Vereinigt mit %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "Nachricht" -#: lib/RT/Interface/Web.pm:867 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "Nachricht konnte nicht gespeichert werden" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Nachricht gespeichert" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "Nachrichten über diese Anfrage werden nicht an diese Empfänger gesendet:" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "Unausgeglichene Klammerung" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "%1: Fehlt ein Primärschlüssel?" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" -msgstr "Mobil" +msgstr "Handy" -#: html/Admin/Elements/ModifyUser:72 -msgid "MobilePhone" -msgstr "Mobiltelefon" - -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" -msgstr "Ändere Zugriffskontrollliste" +msgstr "Ändere Zugriffskontrollliste (ACL)" -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "" +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "Alle benutzerdefinierten Felder %2, die zu %1 gehören, ändern" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Alle benutzerdefinierten Felder, die zu %1 gehören, ändern" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 -msgid "Modify Custom Fields which apply to all queues" -msgstr "Ändere benutzdefinierte Felder für diesen Stapel" +#: 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" -#: lib/RT/Queue_Overlay.pm:73 +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Mitglieder ändern" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Rechte ändern" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" -msgstr "Ändere Scrip-Vorlagen für diesen Stapel" +msgstr "Ändere Scrip-Vorlagen für diesen Bereich" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" -msgstr "Ändere Scrips für diesen Stapel" +msgstr "Ändere Scrips für diesen Bereich" -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "" +#: 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" -#: html/Admin/Queues/CustomField.html:45 +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" -msgstr "Ändere ein benutzerdefiniertes Feld für Stapel %1" - -#: html/Admin/Global/CustomField.html:53 -msgid "Modify a CustomField which applies to all queues" -msgstr "Ändere ein globales benutzerdefiniertes Feld" +msgstr "Ändere ein benutzerdefiniertes Feld für den Bereich %1" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" -msgstr "Ändere ein Scrip für den Stapel %1" +msgstr "Ändere ein Scrip für den Bereich %1" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "Ändere ein globales benutzerdefiniertes Feld" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Ändern der assoziierte Objekte von %1" + +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "Ändere Datumsangaben für #%1" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" -msgstr "Ändere Datumsangaben für Ticket #%1" +msgstr "Ändere Datumsangaben für Anfrage #%1" + +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "Ändern der globalen benutzerdefinierten Felder" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: 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" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "Ändere globale Gruppenrechte." -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "" - -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: 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" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "Ändere globale Benutzerrechte." -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "Ändere Gruppen-Metadaten oder lösche die Gruppe" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %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) msgid "Modify group rights for group %1" msgstr "Ändere die Gruppenrechte der Gruppe %1" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" -msgstr "Ändere Gruppenrechte für Stapel %1" +msgstr "Ändere Gruppenrechte für den Bereich %1" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "Ändere Mitgliedsverzeichnis dieser Gruppe" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" -msgstr "Ändere jemandens eigenen RT-Zugang" +msgstr "Ändert den eigenen RT-Zugang" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" -msgstr "Ändere Leute bezogen auf Stapel %1" +msgstr "Ändere Personen im Zusammenhang mit diesem Bereich %1" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" -msgstr "Ändere Personen des Tickets #%1" +msgstr "Ändere Personen der Anfragen #%1" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" -msgstr "Ändere Scrips für den Stapel %1" +msgstr "Ändere Scrips für den Bereich %1" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 Stapel angewandte Scrips" +msgstr "Ändere auf alle Bereiche angewandte Scrips" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "Ändere Vorlage %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" -msgstr "Ändere globale Templates" +msgstr "Ändere globale Vorlagen" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "Ändere Gruppe %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" -msgstr "Ändere die Stapelbeobachter" +msgstr "Ändere die Bereichsbeobachter" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Ändere Benutzer %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" -msgstr "Ändere Ticket #%1" +msgstr "Ändere Anfrage #%1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" -msgstr "Ändere Ticket #%1" +msgstr "Ändere Anfrage #%1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" -msgstr "Ändere Tickets" +msgstr "Ändere Anfragen" + +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Ändere Benutzerrechte für benutzerdefinierte Felder von %1" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Ändere Benutzerrechte für die Gruppe %1" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" -msgstr "Ändere Benutzerrechte für Stapel %1" - -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "" +msgstr "Ändere Benutzerrechte für den Bereich %1" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" -msgstr "" +msgstr "ACLBearbeiten" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "BenutzerdefiniertesFeldBearbeiten" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" -msgstr "" +msgstr "EigeneMitgliedschaftBearbeiten" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" -msgstr "" +msgstr "BereichsBeobachterBearbeiten" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" -msgstr "" +msgstr "ScripsBearbeiten" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" -msgstr "" +msgstr "SelbstBearbeiten" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" -msgstr "" +msgstr "VorlageBearbeiten" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" -msgstr "" +msgstr "AnfrageBearbeiten" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." -msgstr "Mo" +msgstr "Mo." -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "Mehr über %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" -msgstr "Runter verschieben" +msgstr "Hinunter verschieben" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" -msgstr "Hoch verschieben" +msgstr "Hinauf verschieben" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "Mehrere" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" -msgstr "Du musst eine Angabe bei 'Name' machen" +msgstr "Sie müssen eine Angabe bei 'Name' machen" -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "Meine %1 Anfragen" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "Meine Freigaben" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: 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 msgid "Name" msgstr "Name" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Benutzername ist bereits in Gebrauch" -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "" - -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "Niemals" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Neu" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Neue Beziehungen" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Neues Passwort" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "Neue wartende Freigaben" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "Neue Beziehungen" - -#: html/Ticket/Elements/Tabs:36 -msgid "New Search" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" msgstr "Neue Suche" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" -msgstr "Neues benutzerdef. Feld" +msgstr "Neues benutzerdefiniertes Feld" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "Neue Gruppe" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Neues Passwort" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Neue Passworterinnerung wurde verschickt" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" -msgstr "Neuer Stapel" +msgstr "Neuer Bereich" -#: html/SelfService/Elements/Tabs:63 -msgid "New request" -msgstr "Neues Ticket" - -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Neue Rechte" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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" -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "" - -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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" -#: lib/RT/Ticket_Overlay.pm:2771 +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Neue Anfrage" + +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" -msgstr "Neues Ticket existiert nicht" +msgstr "Neue Anfrage existiert nicht" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "Neuer Benutzer" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" -msgstr "Neues Benutzer aufgerufen" +msgstr "Neuer Benutzer aufgerufen" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Neue Beobachter" -#: html/Admin/Users/Prefs.html:42 -msgid "New window setting" -msgstr "Speichere Fenstereinstellungen" - -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Nächste" -#: html/Search/Listing.html:48 -msgid "Next page" +#: html/Elements/TicketList:104 +msgid "Next Page" msgstr "Nächste Seite" -#: html/Admin/Elements/ModifyUser:50 -msgid "NickName" -msgstr "Spitzname" - -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "Spitzname" -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "Keine Klasse definiert" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "Kein benutzerdefiniertes Feld" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Kein benutzerdefiniertes Feld definiert" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "Keine Gruppe definiert" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Keine Suche" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" -msgstr "Kein Stapel vorhanden" +msgstr "Kein Bereich vorhanden" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Kein RT-Benutzer gefunden. Bitte kontaktiere Deinen RT-Administrator.\\n" +msgstr "" +"Kein RT-Benutzer gefunden. Bitte kontaktiere Sie Ihren " +"RT-Administrator.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "Keine Vorlage" -#: bin/rt-commit-handler:764 -msgid "No Ticket specified. Aborting ticket " -msgstr "Kein Ticket angegeben. Bereche Ticket ab " - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "" - -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "Keine Aktion" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "Keine Spalte angegeben" -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "" - -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" -msgstr "Kein Kommentar über diesen Benutzer angegeben" - -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 -msgid "No correspondence attached" -msgstr "Keine Korrespondenz aufgezeichnet" +msgstr "Kein Kommentar zu diesem Benutzer angegeben" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "Keine Beschreibung für %1 vorhanden" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Keine Gruppe angegeben" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Keine Gruppe mit diesen Kriterien gefunden" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "Keine Nachricht angefügt" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "Kein Passwort gesetzt" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" -msgstr "Kein Recht Stapel anzulegen" +msgstr "Keine Erlaubnis Bereiche anzulegen" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" -msgstr "Kein Recht um Tickets im Stapel '%1' anzulegen" +msgstr "Kein Erlaubnis um Anfragen im Bereich '%1' anzulegen" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "Kein Recht Benutzer anzulegen" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" -msgstr "Kein Recht dieses Ticket anzuzeigen" +msgstr "Kein Recht dieses Anfrage anzuzeigen" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" -msgstr "Kein Recht dieses Ticket zu aktualisieren" +msgstr "Kein Recht dieses Anfrage zu aktualisieren" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" -msgstr "Kein Hauptverantwortlicher angegeben" +msgstr "Keine Rolle angegeben" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." -msgstr "Keine Hauptverantwortliche ausgewählt." +msgstr "Keine Rolle ausgewählt." -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." -msgstr "Keine den Suchkriterien entsprechenden Stapel gefunden" +msgstr "Keine den Suchkriterien entsprechenden Bereiche gefunden" -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "Keine Rechte gefunden" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "Keine Rechte gewährt." -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." -msgstr "Keine Suchliste zum bearbeiten." +msgstr "Keine Suche zu bearbeiten." -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "" +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Kein Betreff" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "Kein Transaktionstyp angegeben" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "Keine auf die Suchkriterien passende Benutzer gefunden" -#: bin/rt-commit-handler:644 -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Kein gültiger RT-Benutzer gefunden. RT CVS-Handler weggefallen. Bitte kontaktiere Deinen RT-Administrator.\\n" - -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "Kein Wert an _Set geschickt!\\n" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "Niemand" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "Nichtexistierendes Feld?" -#: html/Elements/Login:99 -msgid "Not logged in" -msgstr "Nicht angemeldet" - -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "Nicht angemeldet." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Nicht angegeben" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "Noch nicht implementiert." -#: html/Admin/Groups/Rights.html:25 -msgid "Not yet implemented...." -msgstr "Noch nicht implementiert..." - -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "Bemerkungen" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "Benachrichtigung konnte nicht verschickt werden" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "Benachrichtige AdminCCs" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "Benachrichtige AdminCCs als Kommentar" -#: etc/initialdata:121 +#: 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 +msgid "Notify Ccs as Comment" +msgstr "Benachrichtige CCs als Kommentar" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "Benachrichtige andere Empfänger" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "Benachrichtige andere Empfänger als Kommentar" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" -msgstr "Benachrichte Inhaber" +msgstr "Benachrichtige Besitzer" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" -msgstr "Benachrichtige Inhaber als Kommentar" +msgstr "Benachrichtige Besitzer als Kommentar" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +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" + +#: 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" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "Benachrichtige Inhaber und AdminCCs neuer auf Freigabe wartende Anfragen" +msgstr "Benachrichtige Besitzer und AdminCCs neuer auf Freigabe wartende Anfragen" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "Benachrichtige die Klienten" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "Benachrichtige die Klienten und CCs" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "Benachrichtige die Klienten und CCs als Kommentar" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "Benachrichtige die Klienten, CCs und AdminCCs" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "Benachrichtige die Klienten, CCs und AdminCCs als Kommentar" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." -msgstr "Nov" +msgstr "Nov." + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "Oder" -#: lib/RT/Record.pm:157 +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "Objekt konnte nicht erstellt werden" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "Objekt konnte nicht gelöscht werden" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "Objekt erstellt" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "Objekt gelöscht" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +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 +msgid "Object type mismatch" +msgstr "Objekt Typ passt nicht" + +#: lib/RT/Date.pm:446 msgid "Oct." -msgstr "Okt" +msgstr "Okt." + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Offline" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Offline Bearbeitung" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "Offline Upload" -#: html/Elements/SelectDateRelation:35 +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "am" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "Bei Kommentar" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "Bei Korrespondenz" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "Bei Erstellen" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" -msgstr "Bei Eigentümerwechsel" +msgstr "Bei Besitzerwechsel" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "Bei Änderung der Priorität" + +#: etc/initialdata:192 msgid "On Queue Change" -msgstr "Bei Stapelwechsel" +msgstr "Bei Änderung des Bereichs" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "Beim Erledigen" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" -msgstr "Bei Statuswechsel" +msgstr "Beim Ändern des Status" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "Bei einer Transaktion" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "Zeige nur Freigaben für nach dem %1 erstelle Anfragen" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "Zeige nur Freigaben für vor dem %1 erstellte Anfragen" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Offen" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Öffnen" -#: html/SelfService/Elements/Tabs:57 -msgid "Open requests" +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" msgstr "Offene Anfragen" -#: html/Admin/Users/Prefs.html:41 -msgid "Open tickets (from listing) in a new window" -msgstr "Öffne Anfragen (aus der Liste) in neuem Fenster" - -#: html/Admin/Users/Prefs.html:40 -msgid "Open tickets (from listing) in another window" -msgstr "Öffne Anfragen (aus der Liste) in ein anderes Fenster" - -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "Öffne Anfragen bei Korrespondenz" -#: html/Search/Elements/PickRestriction:101 -msgid "Ordering and sorting" -msgstr "Sortierung und Reihenfolge" +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Sortiert nach" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "Organisation" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "Ursprüngliche Anfrage: #%1" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "Ausgehende Mail eines Kommentars gespeichert" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +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" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" -msgstr "Eigene Anfrage" +msgstr "Eigene Anfragen" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" -msgstr "" +msgstr "EigeneAnfrage" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" -msgstr "Inhaber" +msgstr "Besitzer" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) -msgid "Owner changed from %1 to %2" -msgstr "Inhaberwechsel von %1 zu %2" +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "Besitzer konnte nicht gesetzt werden" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" -msgstr "Inhaber mit Gewalt von %1 in %2 geändert" +msgstr "Besitzer mit Gewalt von %1 in %2 geändert" -#: html/Search/Elements/PickRestriction:31 -msgid "Owner is" -msgstr "Inhaber ist" +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Seite %1 von %2" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Pager" -#: html/Admin/Elements/ModifyUser:74 -msgid "PagerPhone" -msgstr "PagerTelefon" - -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Eltern" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Passwort" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "Passworterinnerung" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "Passwort geändert" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "Passwort ist zu kurz" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Passwort: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +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" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "Personen" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "Führe eine benutzerdefinierte Aktion aus" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: 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 msgid "Permission Denied" msgstr "Zugriff verweigert" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "Persönliche Gruppen" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Persönliche Gruppen" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Persönliche Gruppen:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Telefonnummern" -#: html/Admin/Users/Rights.html:25 -msgid "Placeholder" -msgstr "Platzhalter" - -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "Voreinstellungen" -#: NOT FOUND IN SOURCE -msgid "Prefs" -msgstr "" - -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" -msgstr "Vorbereitung abgehakt" +msgstr "Prepare Stumpf ausgeführt" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Vorherige" -#: html/Search/Listing.html:44 -msgid "Previous page" +#: html/Elements/TicketList:101 +msgid "Previous Page" msgstr "Vorherige Seite" -#: NOT FOUND IN SOURCE -msgid "Pri" -msgstr "" - -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." -msgstr "Hauptverantwortlichen %1 nicht gefunden." +msgstr "Rolle %1 nicht gefunden." -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Priorität" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "Priorität beginnt bei" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "Privatsphäre:" + #: etc/initialdata:25 msgid "Privileged" msgstr "Privilegiert" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "Privilegierungsstatus: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "Privilegierte Benutzer" @@ -2950,675 +3152,713 @@ msgstr "Privilegierte Benutzer" msgid "Pseudogroup for internal use" msgstr "Pseudogruppe für internen Gebrauch" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Suche" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +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 msgid "Queue" -msgstr "Stapel" +msgstr "Bereich" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" -msgstr "Stapel %2 nicht gefunden" +msgstr "Bereich %2 nicht gefunden" -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "" - -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" -msgstr "Name des Stapels" +msgstr "Name des Bereichs" -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" -msgstr "Stapel existiert bereits" +msgstr "Bereich existiert bereits" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" -msgstr "Stapel konne nicht angelegt werden" +msgstr "Bereich konnte nicht angelegt werden" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." -msgstr "Stapel konnte nicht geladen werden" +msgstr "Bereich konnte nicht geladen werden" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" -msgstr "Stapel angelegt" +msgstr "Bereich angelegt" -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "" - -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" -msgstr "Stapel nicht gefunden" +msgstr "Bereich nicht gefunden" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" -msgstr "Stapel" +msgstr "Bereiche" + +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "Schnellsuche" -#: html/Elements/Login:34 +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Schnelle Anfrageerstellung" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 für %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) -msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." -msgstr "RT %1 von <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -msgstr "" - -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "RT Administration" -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "" - -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "RT Fehler" -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "" - -#: html/SelfService/Closed.html:25 -msgid "RT Self Service / Closed Tickets" -msgstr "RT Selbstbedienung / Geschlossene Anfragen" +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "RT Variablen" -#: html/index.html:25 html/index.html:28 +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT auf einen Blick" -#: NOT FOUND IN SOURCE -msgid "RT couldn't authenticate you" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "" - -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT für %1" -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT hat Deine Befehle verarbeitet" +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 +msgid "Real Name" +msgstr "Echter Name" -#: html/Elements/Login:83 -#. ('2003') -msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "RT © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Vertrieben unter der <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "Referenz von %1 hinzugefügt" -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "" +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "Referenz von %1 gelöscht" -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" -msgstr "" +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "Referenz auf %1 hinzugefügt" -#: NOT FOUND IN SOURCE -msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "" +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "Referenz auf %1 gelöscht" -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 -msgid "Real Name" -msgstr "Realer Name" - -#: html/Admin/Elements/ModifyUser:48 -msgid "RealName" -msgstr "RealerName" - -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" -msgstr "Bezogen von" +msgstr "Referenziert von" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "Bezieht sich auf" -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "" - -#: html/Search/Elements/PickRestriction:27 -msgid "Refine search" -msgstr "Suche Verfeinen" - -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "Seite alle %1 Minuten aktualisieren." -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "Beziehungen" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Entferne AdminCC" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Entferne CC" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Entferne Klient" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Antworten" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Antwort Adresse" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Antwort an Klienten" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "Antworte auf Anfragen" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" -msgstr "" +msgstr "AnfrageBeantwortung" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Klient" -#: html/Search/Elements/PickRestriction:38 -msgid "Requestor email address" -msgstr "email-Adresse des Klienten" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "" - -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Klienten" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" -msgstr "Anfragen sollten erlegt werden in" +msgstr "Anfragen sollten erlegt werden innerhalb" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Benötigter Parameter '%1' nicht angegeben" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Zurücksetzen" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Zuhause" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "Erledigen" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" -msgstr "Erledige Anfrage Nr. %1 (%2)" +msgstr "Erledige Anfrage #%1 (%2)" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "Erledigt" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 -msgid "Response to requestors" -msgstr "Antwort an alle Klienten" - -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Ergebnisse" -#: html/Search/Elements/PickRestriction:105 -msgid "Results per page" -msgstr "Ergebnisse pro Seite" - -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "Passwort wiederholen" -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Zurücksetzen" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" -msgstr "Recht delegiert" +msgstr "Recht weitergegeben" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Recht erteilt" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Recht geladen" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: 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" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Recht nicht gefunden" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: 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:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "Recht zurückgezogen" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Rechte" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" -msgstr "Rechte konnten für %1 nicht gewährt werden" +msgstr "Rechte für %1 konnten nicht gewährt werden" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" -msgstr "Rechte konnten nicht für %1 entzogen werden" +msgstr "Rechte für %1 konnten nicht entzogen werden" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Rollen" -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "" +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Zeilen pro Seite" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." -msgstr "Sa" +msgstr "Sa." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +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 msgid "Save Changes" msgstr "Änderungen Sichern" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Einstellungen speichern" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Änderungen Sichern" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: 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'}) msgid "Scrip #%1" -msgstr "" +msgstr "Scrip #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "Scrip angelegt" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Scrip Felder" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "Scrip gelöscht" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "Scrips" -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Scrips für %1\\n" - -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" -msgstr "Auf alle Stapel angewande Scrips" +msgstr "Auf alle Bereiche angewandte Scrips" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "Suchen" -#: NOT FOUND IN SOURCE -msgid "Search Criteria" +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:39 +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "Suche nach Freigaben" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "Sicherheit:" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +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" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "Anzeigen von anfrage-privaten Kommentaren" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "Anfrage Zusammenfassungen anzeigen" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "Benutzerdefiniertes Feld anzeigen" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "GruppeAnzeigen" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" -msgstr "" +msgstr "BereichAnzeigen" -#: html/Admin/Groups/index.html:40 +#: NOT FOUND IN SOURCE +msgid "Select" +msgstr "Auswahl" + +#: 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" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" -msgstr "Wähle eine Gruppe aus" +msgstr "Wählen Sie eine Gruppe aus" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +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 msgid "Select a user" -msgstr "Wähle einen Benutzer aus" +msgstr "Wählen Sie einen Benutzer aus" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" -msgstr "Wähle ein benutzerdef. 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" + +#: 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" + +#: 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" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: 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 " + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" -msgstr "Wähle eine Gruppe" +msgstr "Wählen Sie eine Gruppe aus" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" -msgstr "Wähle mehrere Werte" +msgstr "Wählen Sie mehrere Werte aus" -#: lib/RT/CustomField_Overlay.pm:352 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" -msgstr "Wähle einen Wert" +msgstr "Wählen Sie einen Wert aus" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" -msgstr "Wähle einen Stapel" +msgstr "Wählen Sie einen Bereich aus" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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ähle ein Scrip" +msgstr "Wählen Sie ein Scrip aus" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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ähle ein Template" +msgstr "Wählen Sie eine Vorlage aus" -#: html/Admin/Elements/UserTabs:49 -msgid "Select user" -msgstr "Wähle einen Benutzer" +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Wählen Sie bis zu %1 Werte aus" -#: lib/RT/CustomField_Overlay.pm:36 -msgid "SelectMultiple" -msgstr "Mehrfachauswahlfeld" +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" +msgstr "Wählen Sie einen Benutzer aus" -#: lib/RT/CustomField_Overlay.pm:35 -msgid "SelectSingle" -msgstr "Einzelauswahlfeld" +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Ausgewählte Benutzerdefinierte Felder" -#: html/SelfService/index.html:25 -msgid "Self Service" -msgstr "Selbstbedienung" +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Ausgewählte Objekte" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" -msgstr "Schicke eine Mail an alle Beobachter" +msgstr "Schickt eine Nachricht an alle Beobachter" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" -msgstr "Schicke eine Mail an alle Beobachter als \"Kommentar\"" +msgstr "Schickt einen Kommentar an alle Beobachter" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" -msgstr "Schicke eine Mail an die Klienten und CCs" +msgstr "Schickt eine Nachricht an die Klienten und CCs" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" -msgstr "Schicke eine Mail an die Klienten und CCs als Kommentar" +msgstr "Schickt einen Kommentar an die Klienten und CCs" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" -msgstr "Schicke eine Mail an die Klienten" +msgstr "Schickt eine Nachricht an die Klienten" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "Schicke eine Mail an die direkt angegebenen CCs und BCCs" +msgstr "Schickt eine Nachricht an die direkt angegebenen CCs und BCCs" + +#: 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:95 +#: 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 " + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" -msgstr "Schicke eine Mail an die administrativen CCs" +msgstr "Schickt eine Nachricht an die administrativen CCs" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" -msgstr "Schicke eine Mail an die administrativen CCs als Kommentar" +msgstr "Schickt einen Kommentar an die administrativen CCs" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" -msgstr "Schicke eine Mail an den Inhaber" +msgstr "Schickt eine Nachricht an den Besitzer" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." -msgstr "Sep" +msgstr "Sep." -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Zeige" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Zeige Freigaben" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Zeige Spalten" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" -msgstr "" +msgstr "Zeige Ergebnisse" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "Zeige freigegebene Anfragen" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Zeige Grundlagen" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "Zeige abgelehnte Anfragen" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Zeige Details" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" -msgstr "Zeige schwebende Anfragen" +msgstr "Zeige anhängige Anfragen" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "Zeige auf andere Freigaben wartende Anfragen" -#: lib/RT/Queue_Overlay.pm:81 -msgid "Show ticket private commentary" -msgstr "Zeige private Kommentare des Anfragen" +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" +msgstr "ACLAnzeigen" -#: lib/RT/Queue_Overlay.pm:79 -msgid "Show ticket summaries" -msgstr "Zeige Kurzfassungen der Anfragen" +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "KonfigurationsMenüAnzeigen" -#: lib/RT/Queue_Overlay.pm:69 -msgid "ShowACL" -msgstr "" +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "AusgehendeNachrichtenAnzeigen" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "GespeicherteSuchanfragenAnzeigen" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" -msgstr "" +msgstr "ScripsAnzeigen" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" -msgstr "" +msgstr "VorlagenAnzeigen" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" -msgstr "" +msgstr "AnfragenAnzeigen" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" -msgstr "" +msgstr "AnfrageKommentareAnzeigen" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "Als Klient einer Anfrage oder Anfrage- bzw. Stapel-CC eintragen" +msgstr "Als Klient einer Anfrage oder Anfrage- bzw. Bereichs-CC eintragen" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" -msgstr "Als Anfrage- oder Stapel-AdminCC eintragen" +msgstr "Als Anfrage- oder Bereichs-AdminCC eintragen" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "E-Mail-Signatur" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) -msgid "Signed in as %1" -msgstr "Angemeldet als %1" - -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Einzel" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "Überspringe Menü" -#: html/Admin/Elements/EditCustomFieldValues:31 -msgid "Sort key" -msgstr "Sortierschlüssel" +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "Klein" -#: html/Search/Elements/PickRestriction:109 -msgid "Sort results by" -msgstr "Sortiere Ergebnisse nach" +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "Sortieren" -#: html/Admin/Elements/AddCustomFieldValue:25 -msgid "SortOrder" -msgstr "Sortierreihenfolge" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "Phase" -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "" - -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "Begonnen" -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "" - -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "Beginnt" -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "" - -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Staat" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "Status" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" -msgstr "Ändere Status" +msgstr "Statusänderung" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Status von %1 auf %2 geändert" -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "" - -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" -msgstr "Stehlen" +msgstr "Übernehmen" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Anfragen übernehmen" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "AnfrageÜbernehmen" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " -msgstr "Gestohlen von %1 " +msgid "Stolen from %1" +msgstr "Gestohlen von %1" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "Betreff" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "Betreff wurde auf %1 geändert" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Übermitteln" -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "" - -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" -msgstr "Geglückt" +msgstr "Gelungen" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." -msgstr "So" +msgstr "So." -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" -msgstr "" +msgstr "SuperBenutzer" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "System" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: 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 msgid "System Error" msgstr "Systemfehler" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "System Werkzeuge" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "Systemfehler. Recht nicht delegiert." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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." -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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" @@ -3626,875 +3866,884 @@ msgstr "Systemgruppen" msgid "SystemRolegroup for internal use" msgstr "SystemRolegroup für internen Gebrauch" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRING" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "Übernehmen" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "Anfragen übernehmen" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "AnfrageÜbernehmen" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Übernommen" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Vorlage" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "Vorlage #%1" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "Vorlage gelöscht" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Vorlage nicht gefunden" -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "" - -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Vorlagen eingelesen" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Vorlagen" #: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Vorlagen für %1\\n" +msgid "Text" +msgstr "Text" -#: lib/RT/Interface/Web.pm:858 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "Das ist bereits der aktuelle Wert" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Dies ist kein gültiger Wert für dieses benutzerdefinierte Feld" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Das ist der gleiche Wert" -#: lib/RT/Queue_Overlay.pm:633 +#: 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'}) msgid "That principal is already a %1 for this queue" -msgstr "Dieser Hauptverantwortliche ist bereits ein %1 dieses Stapels" +msgstr "Diese Rolle ist bereits ein %1 dieses Bereichs" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" -msgstr "Dieser Hauptverantwortliche ist bereits ein %1 dieser Anfrage" +msgstr "Diese Rolle ist bereits ein %1 dieser Anfrage" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" -msgstr "Dieser Hauptverantwortliche ist nicht ein %1 dieses Stapels" +msgstr "Diese Rolle ist nicht ein %1 dieses Bereichs" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this ticket" -msgstr "Dieser Hauptverantwortliche ist nicht ein %1 dieser Anfrage" - -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" -msgstr "Dieser Stapel existiert nicht" +msgstr "Dieser Bereich existiert nicht" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "Diese Anfrage hat ungelöste Abhängigkeiten" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 -msgid "That user already has that right" -msgstr "Dieser Benutzer hat dieses Recht bereits" - -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" -msgstr "Diesem Benutzer gehört diese Anfrage bereits" +msgstr "Diese Anfrage gehört bereits diesem Benutzer" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Dieser Benutzer existiert nicht" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "Dieser Benutzer ist bereits privilegiert" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" -msgstr "Dieser Benutzer ist bereits ungeprivilegiert" +msgstr "Dieser Benutzer ist bereits unprivilegiert" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "Dieser Benutzer ist jetzt privilegiert" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" -msgstr "Dieser Benutzer ist jetzt unprivelegiert" +msgstr "Dieser Benutzer ist jetzt unprivilegiert" -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" -msgstr "Diesem Benutzer dürfen keine Anfragen aus diesen Stapel gehören" +msgstr "Diesem Benutzer dürfen keine Anfragen aus diesen Bereich gehören" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" -msgstr "Dies ist keine numerische Id" +msgstr "Dies ist keine numerische ID" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "Grundlagen" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "Der CC einer Anfrage" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "Der administrative CC einer Anfrage" -#: lib/RT/Ticket_Overlay.pm:2213 -msgid "The comment has been recorded" -msgstr "Der Kommentar wurde aufgezeichnet" - -#: bin/rt-crontool:198 +#: 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 "Das folgende Kommando wird alle aktiven Anfragen des Stapels 'general' finden und ihre Priorität auf 99 setzen, wenn sie innerhalb der letzten 4 Stunden nicht angefasst wurden:" - -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 -msgid "The following commands were not proccessed:\\n\\n" -msgstr "Die folgenden Kommandos wurden nicht verarbeitet:\\n\\n" +msgstr "" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "Der neue Wert wurde gesetzt." -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" -msgstr "Der Inhaber einer Anfrage" +msgstr "Der Besitzer einer Anfrage" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "Der Klient einer Anfrage" -#: html/Admin/Elements/EditUserComments:26 +#: 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" -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "" +#: lib/RT/CustomField_Overlay.pm:912 +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" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Diese Nachricht wird an folgende Empfänger gesendet:" -#: bin/rt-crontool:189 +#: 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:253 +#: 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:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" -msgstr "Die %1 höchstpriorisiertesten Anfragen dieses Benutzers" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "" +msgstr "Die %1 dringensten Anfragen dieses Benutzers" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." -msgstr "Do" +msgstr "Do." -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "" - -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" -msgstr "Anfrage Nr. %1 Alles aktualisieren: %2" +msgstr "Anfrage #%1 Alles aktualisieren: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" -msgstr "Anfrage Nr. %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) +msgid "Ticket %1" +msgstr "Anfrage %1" -#: lib/RT/Ticket_Overlay.pm:608 +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" -msgstr "Anfrage %1 wurde in Anfrage '%2' angelegt" +msgstr "Anfrage %1 wurde im Bereich '%2' angelegt" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) -msgid "Ticket %1 loaded\\n" -msgstr "Anfrage %1 geladen\\n" - -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "Anfrage %1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Benutzerdefinierte Anfrage Felder" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" -msgstr "Verlauf von Anfrage Nr. %1 %2" - -#: html/SelfService/Display.html:34 -msgid "Ticket Id" -msgstr "Anfrage Nr." +msgstr "Geschichte von Anfrage #%1 %2" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "Anfrage erledigt" -#: html/Search/Elements/PickRestriction:63 -msgid "Ticket attachment" -msgstr "Anhang der Anfrage" +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Anfrage Transaktion" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "Inhalt der Anfrage" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "Art des Inhalts der Anfrage" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "Anfrage konnte aufgrund eines internen Fehlers nicht angelegt werden" -#: lib/RT/Transaction_Overlay.pm:522 -msgid "Ticket created" -msgstr "Anfrage angelegt" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:527 -msgid "Ticket deleted" -msgstr "Anfrage gelöscht" - -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 -msgid "Ticket id not found" -msgstr "Anfragenummer nicht gefunden" +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Anfrage Metadaten" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 -msgid "Ticket not found" -msgstr "Anfrage nicht gefunden" - -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "Status der Anfrage geändert" -#: html/Ticket/Update.html:39 -msgid "Ticket watchers" -msgstr "Beobachter der Anfrage" +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "SQL Anfrage Suchmodul" -#: html/Elements/Tabs:49 +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" msgstr "Anfragen" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) -msgid "Tickets %1 %2" -msgstr "Anfragen %1 %2" - -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) -msgid "Tickets %1 by %2" -msgstr "Anfragen %2 von %2" - -#: html/Elements/ViewUser:26 -#. ($name) -msgid "Tickets from %1" -msgstr "Anfragen von %1" - -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "Anfragen, die von dieser Freigabe abhängen:" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "Geschätzte Zeit" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" -msgstr "Übrige Zeit" +msgstr "Verbleibende Zeit" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "Arbeitszeit" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" -msgstr "Übrige Zeit" +msgstr "Verbleibende Zeit" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" -msgstr "Benötigte Zeit" +msgstr "" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" -msgstr "Arbeitszeit" +msgstr "Gearbeitete Zeit" -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" -msgstr "Gearbeitete Zeit" +msgstr "Arbeitszeit" -#: bin/rt-commit-handler:402 -msgid "To generate a diff of this commit:" -msgstr "Um ein 'diff' dieser Übergabe zu erstellen:" +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" -#: bin/rt-commit-handler:391 -msgid "To generate a diff of this commit:\\n" -msgstr "Um ein 'diff' dieser Übergabe zu erstellen:\\n" +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "" -#: lib/RT/Ticket_Overlay.pm:1168 +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Eingegangen" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Werkzeuge" + +#: etc/initialdata:252 msgid "Transaction" msgstr "Transaktion" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" -msgstr "Transaktion %1 durchgeprügelt" +msgstr "Transaktion %1 eliminiert" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "Transaktion erstellt" -#: lib/RT/Transaction_Overlay.pm:89 -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "Transaction->Create konnte nicht ausgeführt werden da keine Ticketnummer angegeben wurde" +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Benutzerdefinierte Felder bei Transaktionen" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:125 +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 msgid "Transactions are immutable" msgstr "Transaktionen sind unveränderbar" -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "" - -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." -msgstr "Di" +msgstr "Di." -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "Typ" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Nicht implementiert" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Unix Login" -#: html/Admin/Elements/ModifyUser:62 -msgid "UnixUsername" -msgstr "UnixBenutzername" - -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" -msgstr "Unbekannte Inhalts-Kodierung %1" +msgstr "Unbekannte Inhaltskodierung (Content-Encoding) %1" + +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "Unbekanntes Feld: $key" -#: html/Elements/SelectResultsPerPage:37 +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "unbegrenzt" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Unbenannte Suche" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "Unprivilegiert" -#: lib/RT/Transaction_Overlay.pm:571 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "Nichtausgewähltes benutzerdefiniertes Feld" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "Nichtausgewähltes Objekte" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "Zurückgegeben" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Aktualisieren" -#: html/Admin/Users/Prefs.html:62 -msgid "Update ID" -msgstr "Aktualisierungs-ID" +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Alles aktualisieren" + +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Anfrage Aktualisieren" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Aktualisierungtyp" -#: html/Search/Listing.html:61 -msgid "Update all these tickets at once" -msgstr "Aktualisiere alle diese Anfragen auf einmal" +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Mehrere Anfragen aktualisieren" -#: html/Admin/Users/Prefs.html:49 -msgid "Update email" -msgstr "Aktualisiere E-Mail" - -#: html/Admin/Users/Prefs.html:55 -msgid "Update name" -msgstr "Aktualisiere Name" - -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." -msgstr "Aktualisierung nicht aufgezeichnet." +msgstr "Aktualisierung nicht gespeichert." -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "Aktualisiere ausgewählte Anfragen" -#: html/Admin/Users/Prefs.html:36 -msgid "Update signature" -msgstr "Aktualisiere Unterschrift" - -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "Aktualisiere Anfrage" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) -msgid "Update ticket # %1" -msgstr "Aktualisiere Anfrage Nr. %1" - -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" -msgstr "Aktualisiere Anfrage Nr. %1" +msgstr "Aktualisiere Anfrage #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" -msgstr "Aktualisiere Anfrage Nr. %1 (%2)" +msgstr "Aktualisiere Anfrage #%1 (%2)" -#: lib/RT/Interface/Web.pm:373 +#: 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:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Aktualisiert" -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Hochladen" -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "" +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Hochladen mehrerer Dateien" -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "" +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Hochladen mehrerer Bilder" -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Hochladen einer Datei" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Hochladen eines Bildes" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "Hochladen von bis zu %1 Dateien" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "Hochladen von bis zu %1 Bildern" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "Änderungen hochladen" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" msgstr "" -#: etc/initialdata:125 etc/initialdata:191 +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "Benutzer '%1' konnte nicht gefunden werden" + +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "Benutzerdefiniert" -#: html/Admin/Users/Prefs.html:59 -msgid "User ID" -msgstr "Benutzer-ID" - -#: html/Elements/SelectUsers:26 -msgid "User Id" -msgstr "Benutzername" +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Benutzerdefinierte Konditionen und Aktionen" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +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" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "Benutzer konnte nicht angelegt werden: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Benutzer angelegt" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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" -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Benutzer geladen" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 -msgid "User view" -msgstr "Benutzeransicht" +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Benutzerdefinierte Gruppe" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Benutzername" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Benutzer" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" -msgstr "Auf diese Kriterien zutreffenede Benutzer" +msgstr "Auf diese Kriterien zutreffende Benutzer" -#: html/Search/Elements/PickRestriction:51 -msgid "ValueOfQueue" -msgstr "ValueOfQueue" +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Gültige Suche" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Werte" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" -msgstr "" +msgstr "Beobachte" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" -msgstr "" +msgstr "BeobachteAlsAdminCc" -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Beobachter" -#: html/Admin/Elements/ModifyUser:56 -msgid "WebEncoding" -msgstr "Webkodierung" - -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." -msgstr "Mi" +msgstr "Mi." -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "Füge Korrespondenz zum Originalticket, wenn eine Anfrage von allen Freigebenden freigegeben wurde" +msgstr "" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "Füge Korrespondenz zum Originalticket wenn eine Anfrage von einem Freigebenden freigegeben wurde" +msgstr "" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" -msgstr "Wenn eine Afrage erstellt wird" +msgstr "Wenn eine Anfrage erstellt wird" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "Benachrichtige Inhaber und AdminCCs der auf Freigabe wartende Anfrage wenn ein Freigabeticket erstellt wurde" +msgstr "" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "Wenn irgendetwas passiert" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" -msgstr "Immer wenn eine Anfrage erledigt wird" +msgstr "Immer wenn eine Anfrage erledigt wird" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" -msgstr "Immer wenn der Eigentümer einer Anfrage wechselt" +msgstr "Immer wenn der Besitzer einer Anfrage wechselt" -#: etc/initialdata:178 +#: 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" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" -msgstr "Immer wenn eine Anfrage den Stapel wechselt" +msgstr "Immer wenn eine Anfrage den Bereich wechselt" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "Immer wenn sich der Status einer Anfrage ändert" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "Immer wenn eine benutzerdefinierte Bedingung auftritt" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "Immer wenn ein neuer Kommentar eingeht" -#: etc/initialdata:149 +1c7f
+itialdata:157 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "Immer wenn neue Korrespondenz eingeht" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Arbeit" -#: html/Admin/Elements/ModifyUser:70 -msgid "WorkPhone" -msgstr "Arbeitstelefon" +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Offline arbeiten" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Arbeitszeit" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" -msgstr "Du besitzt diese Anfrage bereits" +msgstr "Sie sind bereits Besitzer dieser Anfrage" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" -msgstr "Du bist kein authorisierter Benutzer" +msgstr "Sie sind kein autorisierter Benutzer" -#: lib/RT/Ticket_Overlay.pm:2930 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Du kannst nur Anfragen ohne Inhaber zuweisen" +msgstr "Sie können nur Anfragen ohne Besitzer zuweisen" -#: NOT FOUND IN SOURCE -msgid "You don't have permission to view that ticket.\\n" -msgstr "" - -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" -msgstr "Du hast %1 Anfragen in Stapel %2 gefunden" +msgstr "Sie haben %1 Anfragen im Bereich %2 gefunden" -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." -msgstr "Du wurdest von RT abgemeldet." +msgstr "Sie wurden von RT abgemeldet." -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." -msgstr "Du hast kein Recht, Anfragen in diesen Stapel anzulegen." +msgstr "Sie haben kein Recht, Anfragen in diesem Bereich anzulegen." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." -msgstr "Du darfst in diesem Stapel keine Anfragen erstellen" +msgstr "Sie dürfen in diesem Bereich keine Anfragen erstellen" -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" -msgstr "Du kannst dich gerne wieder anmelden" +msgstr "Sie können sich gerne wieder anmelden" -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) -msgid "Your %1 requests" -msgstr "Meine %1 Anfragen" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "" - -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Deine 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:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." -msgstr "Deine Anfrage wurde freigegeben." +msgstr "Ihre Anfrage wurde freigegeben." -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "" - -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." -msgstr "Deine Anfrage wurde abgewiesen" +msgstr "Ihre Anfrage wurde abgewiesen" -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" -msgstr "Dein Benutzername oder Passwort ist falsch" +msgstr "Ihr Benutzername oder Passwort ist falsch" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "PLZ" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "Erlaube Erstellung von gespeicherten Suchabfragen" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "Erlaube das Laden von gespeicherten Suchabfragen" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "wie an %1 gewährt" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 -msgid "contains" -msgstr "enthält" - -#: html/Elements/SelectAttachmentField:26 -msgid "content" -msgstr "Inhalt" +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "gehört zu" -#: html/Elements/SelectAttachmentField:27 -msgid "content-type" -msgstr "content-type" +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "geschlossen" -#: lib/RT/Ticket_Overlay.pm:2282 -msgid "correspondence (probably) not sent" -msgstr "Korrepsondenz (möglicherweise) nicht verschickt" - -#: lib/RT/Ticket_Overlay.pm:2292 -msgid "correspondence sent" -msgstr "Korrespondenz verschickt" +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 +msgid "contains" +msgstr "enthält" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "Tage" -#: html/Search/Listing.html:75 -msgid "delete" -msgstr "löschen" - -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "gelöscht" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "gehört nicht zu" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" -msgstr "entspricht nicht" +msgstr "enthält nicht" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "enthält nicht" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" -msgstr "entspricht" +msgstr "gleich" -#: html/Elements/SelectAttachmentField:28 -msgid "filename" -msgstr "Dateiname" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "Fehler: Kann nicht hinunter bewegen" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "Fehler: Kann nicht nach links bewegen" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "Fehler: Kann nicht hinauf bewegen" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +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 +msgid "error: nothing to move" +msgstr "Fehler: Nichts zu bewegen" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "Fehler: Nichts zum Umschalten" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "größer als" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "Gruppe '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "Stunden" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" -msgstr "" +msgstr "ID" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "ist" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "ist nicht" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "kleiner als" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" -msgstr "entspricht" +msgstr "enthält" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "Min" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "Minuten" -#: bin/rt-commit-handler:765 -msgid "modifications\\n\\n" -msgstr "Änderungen\\n\\n" - -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "Monate" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "neu" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "kein Name" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "kein Wert" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "keine" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" -msgstr "entspricht nicht" +msgstr "ungleich" -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "offen" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "persönliche Gruppe '%1' für Benutzer '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" -msgstr "Stapel %1 %2" +msgstr "Bereich %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "abgewiesen" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "erledigt" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "Sek" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "Zeige Konfigurationsmenü" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "Tabellenkalkulation" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "zurückgestellt" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "System %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "Systemgruppe '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 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:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" -msgstr "Ticket #%1 %2" +msgstr "Anfrage #%1 %2" -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "unbeschriebene Gruppe %1" -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "Benutzer %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "Wochen" -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "" - -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "Jahre" diff --git a/rt/lib/RT/I18N/en.po b/rt/lib/RT/I18N/en.po index ffdc5cce6..28a840680 100644 --- a/rt/lib/RT/I18N/en.po +++ b/rt/lib/RT/I18N/en.po @@ -1,88 +1,88 @@ -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "Apr" -#: lib/RT/Date.pm:418 +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "Aug" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "Dec" -#: lib/RT/Date.pm:412 +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "Feb" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Fri" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Home" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "Jan" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Jul" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "Jun" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "Mar" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "May" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Mon" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "Nov" -#: lib/RT/Date.pm:420 +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Oct" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Open" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Home" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "Sat" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Sep" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Sun" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Thu" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Tue" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Wed" diff --git a/rt/lib/RT/I18N/es.po b/rt/lib/RT/I18N/es.po index 05006b12b..87759ee1e 100644 --- a/rt/lib/RT/I18N/es.po +++ b/rt/lib/RT/I18N/es.po @@ -10,62 +10,72 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) +#: NOT FOUND IN SOURCE msgid "#%1" msgstr "#%1" -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->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 +#. ($Ticket->id, $Ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "#%1: %2" -#: lib/RT/Date.pm:337 +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) +#: NOT FOUND IN SOURCE msgid "%1 %2 %3" msgstr "%1 %2 %3" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %2 %3 %4:%5:%6 %7" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" msgstr "Añadido %1 %2" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "Hace %1 %2" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 ha cambiado a %3" -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" msgstr "%1 %2 borrado" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" msgstr "%1 %2 con la plantilla %3" @@ -74,44 +84,85 @@ msgstr "%1 %2 con la plantilla %3" msgid "%1 (%2) %3 this ticket\\n" msgstr "%1 (%2) %3 este caso\\n" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "" + +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "%1 - %2 shown" msgstr "%1 - %2 mostrados" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - Un parametro para pasar a %2" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - El estado de la salida actualiza STDOUT" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "%1 - Especifica el modulo de accion que quieres usar" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "%1 - Especifica el modulo de condicion que quieres usar" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "%1 - Especifica el modulo de busqueda que quieres usar" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "%1 ScripAction cargado" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "$1 añadido como un valor de %2" @@ -128,27 +179,31 @@ msgstr "%1 alias requieren un TicketId en el que trabajar " msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "%1 alias requieren un TicketId en el que trabajar (de %2) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "%1 parece ser un objeto local, pero no se encuentra en la base de datos" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 por %2" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 ha cambiado de %2 a %3" -#: lib/RT/Interface/Web.pm:857 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "%1 no se ha podido fijar a %2" @@ -156,38 +211,49 @@ msgstr "%1 no se ha podido fijar a %2" msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1 no pudo iniciar una transacción (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 no pudo fijar el estado a resuelto. La base de datos de RT podrÃa ser inconsistente." -#: html/Elements/MyTickets:25 +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." msgstr "Los %1 tickets de mayor prioridad que poseo... " -#: html/Elements/MyRequests:25 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." msgstr "Los %1 tickets de mayor prioridad que he pedido" -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "$1 es una herramienta para actuar sobre los tickets con una herramienta de planificacion externa, como crom" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 ha dejado de ser un %2 para esta cola." -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1 ha dejado de ser un %2 para este ticket." -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 ha dejado de ser un valor para campo personalizable %2" @@ -195,16 +261,29 @@ msgstr "%1 ha dejado de ser un valor para campo personalizable %2" msgid "%1 isn't a valid Queue id." msgstr "%1 no es un identificador de Cola válido." -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 min" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1 no mostrado" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "%1 privilegios" @@ -225,7 +304,7 @@ msgstr "%1 tipo desconocido para %2" msgid "%1 was created without a CurrentUser\\n" msgstr "%1 se creó sin CurrentUser\\n" -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 resolverá todos los miembros de un grupo de tickets resueltos." @@ -234,22 +313,36 @@ msgstr "%1 resolverá todos los miembros de un grupo de tickets resueltos." msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." msgstr "%1 pondrá como pendiente una BASE [local] si es dependiente [o miembro] de una solicitud ligada." -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: ningún archivo adjunto especificado" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1b" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' es un valor inválido para el estado" @@ -266,7 +359,7 @@ msgstr "(Marque la caja para borrar al miembro del grupo)" msgid "(Check box to delete scrip)" msgstr "(Marque la caja para borrar el scrip)" -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(Marque la caja para borrar)" @@ -274,37 +367,49 @@ msgstr "(Marque la caja para borrar)" msgid "(Check boxes to delete)" msgstr "(Marque las cajas para borrar)" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Introduzca los identificadores de ticket o URLs, separados por espacios)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "(Si se deja vacio, pasara por defecto a %1" +msgid "(If left blank, will default to %1)" +msgstr "(Si se deja vacio, pasara por defecto a %1)" #: NOT FOUND IN SOURCE msgid "(No Value)" msgstr "(Sin Valor)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "(No hay campos custom)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Sin miembros)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(Sin scrips)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "(Sin plantillas)" -#: html/Ticket/Update.html:85 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "" + +#: 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 "(Envia una copia oculta de esta actualizacion a una lista delimitada por comas de direcciones de email. <b>NO</b> cambia quien recibirá futuras actualizaciones)" @@ -312,11 +417,11 @@ msgstr "(Envia una copia oculta de esta actualizacion a una lista delimitada por msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(EnvÃa una copia oculta de esta actualización a una lista de direcciones de correo delimitada por comas. <b>No</b> cambia a quien recibirá futuras actualizaciones.)" -#: html/Ticket/Create.html:79 +#: 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 "(Envia una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email administrativas. Estas personas <b>recibirán</b> las futuras actualizaciones.)" -#: html/Ticket/Update.html:81 +#: 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 "(Envia una copia oculta de esta actualización a una lista delimitada por comas de direcciones de email.<b>NO</b> cambia quien recibirá futuras actualizaciones." @@ -324,43 +429,55 @@ msgstr "(Envia una copia oculta de esta actualización a una lista delimitada po msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Manda una copia de esta actualización a una lista de direcciones de correo delimitada por comas. <b>No</b> cambia a quien recibirá futuras actualizaciones.)" -#: html/Ticket/Create.html:69 +#: 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 "(Envia una copia de esta actualización a una lista de direcciones de correo delimitada por comas. Estas personas <b>recibirán</b> actualizaciones futuras." -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(vacÃo)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "(no hay nombres listados)" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(sin asunto)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(sin valor)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(solo un ticket)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(pendiente de aprobacion)" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" msgstr "(pendiente de otros tickets)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(requerido)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(sin titulo)" @@ -372,23 +489,35 @@ msgstr "Los 25 tickets de mayor prioridad que poseo..." msgid "25 highest priority tickets I requested..." msgstr "Los 25 tickets de mayor prioridad que he solicitado..." -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "<% $_ %>" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"Nuevo ticket en\"> %1" -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "Una plantilla en blanco" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + #: NOT FOUND IN SOURCE msgid "ACE Deleted" msgstr "ACE Borrado" @@ -405,59 +534,83 @@ msgstr "ACE no se pudo borrar" msgid "ACE could not be found" msgstr "ACE no se encontró" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE no encontrado" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACEs solo pueden ser creadas o borradas." -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" msgstr "Abortando para prevenir modificaciones no intencionadas al ticket\\n" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "Sobre mi" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "Control de acceso" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Acción" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Acción %1 no encontrada" -#: bin/rt-crontool:123 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "Action committed." -#: bin/rt-crontool:119 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "Acción preparada..." -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "Añadir AdminCc" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "Añadir Cc" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" msgstr "Añadir más archivos" -#: html/Search/Bulk.html:88 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "Añadir solicitante" +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Add a keyword selection to this queue" msgstr "Añadir una seleccion de palabra clave a esta cola" @@ -470,57 +623,65 @@ msgstr "Añadir un nuevo scrip global" msgid "Add a scrip to this queue" msgstr "Añadir un scrip a esta cola" -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" msgstr "Añadir un scrip que se aplicará a todas las colas" -#: html/Search/Bulk.html:118 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "Añadir comentarios o respuestas a los tickets seleccionados" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "Añadir miembro" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Añadir nuevos observadores" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "AddNextState" msgstr "AddNextState" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "Principal ha sido añadido como %1 para esta cola" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "Principal ha sido añadido como %1 para este ticket" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Dirección 1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Dirección 2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Admin Cc" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "Admin Comment" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "Admin Correspondence" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "Administración de colas" @@ -528,7 +689,7 @@ msgstr "Administración de colas" msgid "Admin users" msgstr "Administración de usuarios" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "Adminsitración de la configuración global" @@ -536,7 +697,7 @@ msgstr "Adminsitración de la configuración global" msgid "Admin/Groups" msgstr "Administración de Grupos" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "Administración de una cola" @@ -544,7 +705,7 @@ msgstr "Administración de una cola" msgid "AdminAllPersonalGroups" msgstr "AdminAllPersonalGroups" -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "AdminCc" @@ -556,39 +717,47 @@ msgstr "AdminComment" msgid "AdminCorrespondence" msgstr "AdminCorrespondence" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" msgstr "AdminCustomFields" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "AdminGroup" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "AdminGroupMembership" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "AdminOwnPersonalGroups" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "AdminQueue" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "AdminUsers" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Cc Administrativa" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "Búsqueda avanzada" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "Después" @@ -596,11 +765,19 @@ msgstr "Después" msgid "Age" msgstr "Edad" -#: html/Admin/Elements/EditCustomFields:96 +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "" + +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "All Custom Fields" msgstr "Todos los campos custom" -#: html/Admin/Queues/index.html:53 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "Todas las colas" @@ -608,24 +785,39 @@ msgstr "Todas las colas" msgid "Always sends a message to the requestors independent of message sender" msgstr "Siempre envia un mensaje a los solicitantes independientemente del remitente del mensaje" -#: html/Elements/Tabs:58 +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "" + +#: html/Elements/Tabs:74 msgid "Approval" msgstr "Aprobacion" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" msgstr "Aprobacion #%1: %2" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "Aprobación #%1: No se han guardado las notas debido a un error del sistema" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "Aprobacion #%1: Notas guardadas" @@ -634,19 +826,27 @@ msgstr "Aprobacion #%1: Notas guardadas" msgid "Approval Details" msgstr "Detalles de la aprobación" +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Approval diagram" msgstr "Diagrama de la aprobación" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "Aprobar" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "Notas del aprobador: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "Abr." @@ -654,39 +854,52 @@ msgstr "Abr." msgid "April" msgstr "Abril" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "Ascendente" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Adjunto" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "Adjuntar archivo" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "Archivo adjunto" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Archivo adjunto '%1' no pudo ser cargado" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "Archivo adjunto creado" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "Nombre del archivo adjunto" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "Archivos adjuntos" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "Ago." @@ -694,11 +907,11 @@ msgstr "Ago." msgid "August" msgstr "Agosto" -#: html/Admin/Elements/ModifyUser:66 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "Sistema de autenticación" -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "Autorespuesta" @@ -714,33 +927,31 @@ msgstr "AutoreplyToRequestors" msgid "Bad PGP Signature: %1\\n" msgstr "Firma PGP incorrecta: %1\\n" -#: html/SelfService/Attachment/dhandler:40 +#: NOT FOUND IN SOURCE msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "Identificador de archivo adjunto erróneo. No se puede encontrar el archivo '%1'\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "Datos incorrectos en %1" -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) +#: NOT FOUND IN SOURCE msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "Número de transacción incorrecta para el archivo adjunto. %1 debe ser %2\\n" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "Basicos" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Bcc" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Asegúrese de salvar sus cambios" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "Antes" @@ -748,92 +959,129 @@ msgstr "Antes" msgid "Begin Approval" msgstr "Begin Approval" -#: etc/initialdata:202 +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: etc/initialdata:217 msgid "Blank" msgstr "Vacio" -#: html/Search/Listing.html:79 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "URL para guardar esta búsqueda en sus marcadores" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "Encabezados breves" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "Actualización de varios tickets a la vez" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "No se pueden modificar los usuarios del sistema" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "Can this principal see this queue" -#: lib/RT/CustomField_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "No se puede agregar un campo personalizable si no tiene un nombre" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "No se puede ligar un ticket a sà mismo" -#: lib/RT/Ticket_Overlay.pm:2787 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "No se puede fusionar dentro de un caso ya fusionado. Nunca deberia recibir este error" -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "No se puede especificar origen y destino al mismo tiempo" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "No se puede crear el usuario: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "Cc" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "Cambiar contraseña" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "Check box to delete" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "Seleccione la caja para quitar el permiso" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Hijo" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "Ciudad" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "Cerrado" -#: html/SelfService/Elements/Tabs:60 +#: NOT FOUND IN SOURCE msgid "Closed requests" msgstr "Solicitudes cerradas" +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Command not understood!\\n" msgstr "No se entendió el comando!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Comentario" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Dirección de comentario" @@ -841,40 +1089,39 @@ msgstr "Dirección de comentario" msgid "Comment not recorded" msgstr "Comentario no grabado" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "Comentario sobre los tickets" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "CommentOnTicket" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "Comentarios" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "Comentarios (no se envÃan a los solicitantes)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "Comentarios (no se envÃan a los solicitantes)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "Comentarios acerca de %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "Comentarios acerca de este usuario" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "Comentarios añadidos" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "Acción realizada" @@ -882,27 +1129,27 @@ msgstr "Acción realizada" msgid "Compile Restrictions" msgstr "Compilar restricciones" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "Condición" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "La condicion coincide..." -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "Condición no encontrada" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Configuración" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "Confirmar" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "Información de contacto" @@ -910,23 +1157,31 @@ msgstr "Información de contacto" msgid "Contacted date '%1' could not be parsed" msgstr "Fecha de contacto '%1' no pudo ser leida" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Contenido" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Coould not create group" msgstr "No se pudo crear grupo" -#: etc/initialdata:266 +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "" + +#: etc/initialdata:286 msgid "Correspondence" msgstr "Correspondencia" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "Dirección de corresponencia" -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Correspondencia agregada" @@ -934,7 +1189,7 @@ msgstr "Correspondencia agregada" msgid "Correspondence not recorded" msgstr "Correspondencia no guardada" -#: lib/RT/Ticket_Overlay.pm:3458 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "No se pudo añadir un nuevo valor de campo personalizable para el ticket. " @@ -942,29 +1197,43 @@ msgstr "No se pudo añadir un nuevo valor de campo personalizable para el ticket msgid "Could not add new custom field value for ticket. %1 " msgstr "No se pudo añadir un nuevo valor de campo personalizable para el ticket. %1 " -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "No se pudo cambiar el propietario. " -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "No se puede crear un CampoPersonalizable" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "No se pudo crear el grupo" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "No se pudo crear la plantilla: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "No se pudo crear el ticket. Cola no seleccionada" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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 "No se pudo crear el usuario" @@ -980,11 +1249,11 @@ msgstr "No se pudo encontrar un ticket con identificador $1" msgid "Could not find group %1." msgstr "No se pudo encontrar el grupo %1." -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "No se pudo encontrar o crear el usuario" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "No se pudo encontrar ese principal" @@ -992,35 +1261,51 @@ msgstr "No se pudo encontrar ese principal" msgid "Could not find user %1." msgstr "No se pudo encontrar el usuario %1." -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "No se puede cargar el grupo" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "No se pudo hacer ese principal un %1 para esta cola" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "No se pudo hacer ese principal un %1 para este ticket" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "No se pudo quitar ese principal como un %1 para esta cola" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "No se pudo quitar ese principal como un %1 para este ticket" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "No se pudo agregar el miembro al grupo" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "No se pudo crear la transacción: %1" @@ -1033,15 +1318,15 @@ msgstr "No se pudo averiguar que hacer a partir de la firma gpg de la respuesta" msgid "Couldn't find group\\n" msgstr "No se pudo encontrar el grupo\\n" -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "No se pudo encontrar la fila" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "No pudo enconcontrar ese principal" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "No se pudo encontrar ese valor" @@ -1053,11 +1338,21 @@ msgstr "No se pudo encontrar ese observador" msgid "Couldn't find user\\n" msgstr "No se pudo encontrar el usuario\\n" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "No se pudo cargar %1 desde la base de datos de usuarios.\\n" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Couldn't load KeywordSelects." msgstr "No se pudo cargar KeywordSelects" @@ -1070,21 +1365,26 @@ msgstr "No se pudo cargar el archivo de configuración de RT '%1' %2" msgid "Couldn't load Scrips." msgstr "No se pudieron cargar los Scrips." -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "No se pudo cargar el grupo %1" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "No se puedo cargar el enlace" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "No se pudo cargar la cola" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "No se pudo cargar la cola %1" @@ -1097,38 +1397,47 @@ msgstr "No se pudo cargar el scrip" msgid "Couldn't load template" msgstr "No se pudo cargar la plantilla" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "No se pudo cargar ese usuario (%1)" -#: html/SelfService/Display.html:166 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "No se pudo cargar el ticket '%1'" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "PaÃs" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "Crear" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "Crear Tickets" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "Crear CampoPersonalizable" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "Crear un campo personalizables para la cola %1" -#: html/Admin/Global/CustomField.html:48 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" msgstr "Crear un campo personalizable que se aplique a todas las colas" @@ -1140,11 +1449,11 @@ msgstr "Crear un nuevo campo personalizable" msgid "Create a new global scrip" msgstr "Crear un nuevo scrip global" -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "Creat un nuevo grupo" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "Crear un nuevo grupo personal" @@ -1160,15 +1469,15 @@ msgstr "Crear un nuevo scrip" msgid "Create a new template" msgstr "Crear una nueva plantilla" -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "Crear un nuevo ticket" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "Crear un nuevo usuario" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "Crear una cola" @@ -1176,19 +1485,23 @@ msgstr "Crear una cola" msgid "Create a queue called" msgstr "Crear una cola llamada " -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 +#: NOT FOUND IN SOURCE msgid "Create a request" msgstr "Crear una solicitud" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "Crear un scrip para la cola %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "Crear una plantilla" +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Create failed: %1 / %2 / %3 " msgstr "Creación fallida: %1 / %2 / %3 " @@ -1197,23 +1510,23 @@ msgstr "Creación fallida: %1 / %2 / %3 " msgid "Create failed: %1/%2/%3" msgstr "Creación fallida: %1 / %2 / %3 " -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "Crear nuevos tickets basados en esta plantilla de scrip" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "Crear ticket" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "Crear tickets en esta cola" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "Crear, borrar y modifical campos personalizables" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "Crear, borrar y modificar colas" @@ -1221,23 +1534,27 @@ msgstr "Crear, borrar y modificar colas" msgid "Create, delete and modify the members of any user's personal groups" msgstr "Crear, borrar y modificar los miembros de cualquier grupo personal de usuario" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "Crear, borrar y modificar los miembros de los grupos personales" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "Crear, borrar y modificar usuarios" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "CreateTicket" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "Creado" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "CampoPersonalizable %1 creado" @@ -1246,80 +1563,87 @@ msgstr "CampoPersonalizable %1 creado" msgid "Created template %1" msgstr "Plantilla %1 creada" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Relaciones actuales" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "Scrips actuales" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Miembros actuales" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Permisos actuales" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" msgstr "Criterio de busqueda actual" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Observadores actuales" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) +#: NOT FOUND IN SOURCE msgid "Custom Field #%1" msgstr "Campo personalizable #%1" -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "Campos personalizables" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "Codigo de limpieza de accion personalizable" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "Codigo de preparacion de accion personalizable" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "Condicion personalizable" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "Campo personalizado %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "Campo personalizado %1 tiene un valor." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "Campo personalizado %1 no tiene un valor." -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Campo personalizado %1 no encontrado" -#: html/Admin/Elements/EditCustomFields:197 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" msgstr "Campo personalizable borrado" -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "Campo personalizado no encontrado" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "El valor del campo %1 no pudo ser encontrado para el campo %2" @@ -1328,19 +1652,19 @@ msgstr "El valor del campo %1 no pudo ser encontrado para el campo %2" msgid "Custom field value changed from %1 to %2" msgstr "Valor del campo cambiado de %1 a %2" -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "El valor del campo no pudo ser borrado" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "El valor del campo no pudo se encontrado" -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "Valor del campo borrado" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "CustomField" @@ -1348,11 +1672,11 @@ msgstr "CustomField" msgid "Data error" msgstr "Error de datos" -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Fechas" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "Dic." @@ -1364,68 +1688,92 @@ msgstr "Diciembre" msgid "Default Autoresponse Template" msgstr "Plantilla de autorespuesta por defecto" -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "Plantilla de autorespuesta por defect" -#: etc/initialdata:275 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "Plantilla de comentario de admin por defecto" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "Plantilla de correspondencia de admin por defecto" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "Plantilla de correspondencia por defecto" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "Plantilla de trasacciones por defecto" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" msgstr "Por defecto: %1/%2 ha cambiado de %3 a %4" -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Delegar derechos" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "Delegar derechos especificos que te han sido concedidos" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "DelegateRights" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "Delegar" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "Borrar" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "Borrar tickets" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "DeleteTicket" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "Al borrar este objeto, se puede romper la integridad referencial" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "Al borrar este objeto, se romperá la integridad referencial" -#: lib/RT/User_Overlay.pm:430 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Al borrar este objeto, se violará la integridad referencial" @@ -1437,11 +1785,11 @@ msgstr "Al borrar este objeto, se violará la integridad referencial." msgid "Deleting this object would violate referential integrity. That's bad." msgstr "Al borrar este objeto, se violará la integridad referencial. Eso es malo." -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "Denegar" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" msgstr "Dependen de este ticket" @@ -1449,7 +1797,27 @@ msgstr "Dependen de este ticket" msgid "Dependencies: \\n" msgstr "Dependencias: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "" + +#: 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 msgid "Depends on" msgstr "Depende de" @@ -1457,64 +1825,83 @@ msgstr "Depende de" msgid "DependsOn" msgstr "DependsOn" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "Descendiente" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "Describa el problema debajo" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "Descripción" -#: html/SelfService/Elements/MyRequests:44 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "Detalles" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Despliegue" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "Mostrar Lista de Control de Acceso" -#: lib/RT/Queue_Overlay.pm:75 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "Mostrar plantillas de scrip para esta cola" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "Mostrar scrips para esta cola" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Modo de despliegue" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "Despliega ticket #%1" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "Hacer cualquier cosa y todo" -#: html/Elements/Refresh:30 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "No recargar esta página" -#: html/Search/Elements/PickRestriction:114 +#: NOT FOUND IN SOURCE msgid "Don't show search results" msgstr "No mostrar los resultados de la busqueda" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "Descargar" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 msgid "Due" msgstr "Retraso" @@ -1522,8 +1909,7 @@ msgstr "Retraso" msgid "Due date '%1' could not be parsed" msgstr "La fecha de retraso '%1' no pudo ser leida" -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "ERROR: No se pudo cargar el ticket '%1': %2.\\n" @@ -1531,16 +1917,32 @@ msgstr "ERROR: No se pudo cargar el ticket '%1': %2.\\n" msgid "Edit" msgstr "Editar" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "Editar campos personalizados para %1" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "Editar relaciones" -#: html/Admin/Queues/Templates.html:41 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "Editar plantillas para la cola %1" @@ -1549,11 +1951,15 @@ msgstr "Editar plantillas para la cola %1" msgid "Edit keywords" msgstr "Editar palabras clave" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Edit scrips" msgstr "Editar acciones" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "Editar plantillas del sistema" @@ -1561,28 +1967,30 @@ msgstr "Editar plantillas del sistema" msgid "Edit templates for %1" msgstr "Editar plantillas para %1" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "Editando configuración para la cola %1" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "Editando configuración para el usuario %1" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "Editando campo %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "Editando los miembros del grupo %1" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "Editando los miembros para el grupo personal %1" @@ -1591,64 +1999,82 @@ msgstr "Editando los miembros para el grupo personal %1" msgid "Editing template %1" msgstr "Editando plantilla %1" -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "La base o el destinatario deben ser especificados" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Correo" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "La dirección de correo ya está en uso" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "Correo Electrónico" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "Codificación para el correo" -#: html/Admin/Elements/EditCustomField:36 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "Habilitado (Desmarcar esta caja deshabilita este campo personalizable)" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "Habilitado (Desmarcar esta caja deshabilita este campo personalizable)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "Habilitado (Desmarcar esta caja, deshabilita esta cola)" -#: html/Admin/Elements/EditCustomFields:99 +#: NOT FOUND IN SOURCE msgid "Enabled Custom Fields" msgstr "Campos Personalizables Habilitados" -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "Colas habilitadas" + -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "Estado %1 habilitado" -#: lib/RT/CustomField_Overlay.pm:361 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "Introducir multiples valores" -#: lib/RT/CustomField_Overlay.pm:358 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "Introducir un valor" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." msgstr "Ingrese los números de ticket o las URL que llevan hacia el ticket. Separe multiples entradas con espacios" -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Error" @@ -1656,56 +2082,81 @@ msgstr "Error" msgid "Error adding watcher" msgstr "Error añadiendo observador" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "Error en los parámetros para Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Queue->DelWatcher" msgstr "Error en los parámetros para Queue->DelWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Error en los parámetros para Queue->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Ticket->DelWatcher" msgstr "Error en los parámetros para Queue->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "" + #: etc/initialdata:20 msgid "Everyone" msgstr "Todos" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "Ejemplo" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "ExternalAuthId" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "ExternalContactInfoId" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "Información extra" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "Problema para encontrar el pseudogrupo de usuarios 'Privileged'" -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "Problema para encontrar el pseudogrupo de usuarios 'Unprivileged'" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "Error al cargar el modulo %1. (%2)" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "Feb." @@ -1713,31 +2164,63 @@ msgstr "Feb." msgid "February" msgstr "Febrero" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Fin" msgstr "Fin" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Prioridad Final" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "FinalPriority" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 +#: NOT FOUND IN SOURCE msgid "Find group whose" msgstr "Encontrar grupo que" -#: html/Elements/Quicksearch:25 +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Find new/open tickets" msgstr "Encontrar tickets nuevos/abiertos" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "Encontrar gente que" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "Encontrar tickets" @@ -1745,68 +2228,80 @@ msgstr "Encontrar tickets" msgid "Finish Approval" msgstr "Aprobacion final" -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Primero" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "Primera página" -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "Foo!" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "Forzar cambio" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "Encontrado %quant(%1,ticket)" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "Objeto encontrado" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "FreeformContactInfo" -#: lib/RT/CustomField_Overlay.pm:38 +#: NOT FOUND IN SOURCE msgid "FreeformMultiple" msgstr "FreeformMultiple" -#: lib/RT/CustomField_Overlay.pm:37 +#: NOT FOUND IN SOURCE msgid "FreeformSingle" msgstr "FreeformSingle" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Vie." -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "Encabezados completos" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "Obteniendo el usuario de la firma pgp" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "Given to %1" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "Global" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Global Keyword Selections" msgstr "Seleccion de palabras clave globales" @@ -1815,12 +2310,20 @@ msgstr "Seleccion de palabras clave globales" msgid "Global Scrips" msgstr "Acciones Globales" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" + +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "Plantilla global" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "" + +#: 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 msgid "Go!" msgstr " Ir " @@ -1828,15 +2331,15 @@ msgstr " Ir " msgid "Good pgp sig from %1\\n" msgstr "Firma pgp correcta de %1\\n" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "Ir a página" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "Ir a ticket" -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "Grupo" @@ -1844,11 +2347,11 @@ msgstr "Grupo" msgid "Group %1 %2: %3" msgstr "Grupo %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "Derechos del grupo" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "El grupo ya tiene miembros" @@ -1856,20 +2359,20 @@ msgstr "El grupo ya tiene miembros" msgid "Group could not be created." msgstr "El grupo no se pudo crear" -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "El grupo no se pudo crear: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "Grupo creado" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "El grupo no tiene este miembro" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Grupo no encontrado" @@ -1881,36 +2384,54 @@ msgstr "Grupo no entontrado\\n" msgid "Group not specified.\\n" msgstr "Grupo no especificado\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Grupos" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "Los grupos no pueden ser miembros de sus propios miembros" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "Hola!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Hola, %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "Historial" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "Tel Casa" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Inicio" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "Tengo %quant(%1,concrete mixer)." @@ -1919,55 +2440,79 @@ msgstr "Tengo %quant(%1,concrete mixer)." msgid "I have [quant,_1,concrete mixer]." msgstr "Tengo [quant,_1,concrete mixer]." -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "Id" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identidad" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "Si una aprobacion es rechazada, rechazar la original y borrar las aprobaciones pendientes" -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "" + +#: 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 "Si esta herramienta estaba setgid, un usuario hostil local podria usar esta herramienta para conseguir acceso administrativo a RT." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "Si ha actualizado algo más arriba, no olvide" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "Valor ilegal para %1" -#: lib/RT/Interface/Web.pm:863 +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "Campo inmutable" -#: html/Admin/Elements/EditCustomFields:74 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." msgstr "Incluir campos personalizables deshabilitados en el listado." -#: html/Admin/Queues/index.html:43 +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "" + +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "Incluir colas deshabilitadas en el listado" -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "Incluir usuarios deshabilitados en la búsqueda" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "Prioridad inicial" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "InitialPriority" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Error de entrada" @@ -1975,20 +2520,20 @@ msgstr "Error de entrada" msgid "Interest noted" msgstr "Interest noted" -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "Error interno" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "Error interno: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "Tipo de grupo inválido" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "Derechos inválidos" @@ -1996,52 +2541,56 @@ msgstr "Derechos inválidos" msgid "Invalid Type" msgstr "Tipo inválido" -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "Datos no válidos" -#: lib/RT/Ticket_Overlay.pm:438 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." msgstr "Propietario inválido. Estableciéndolo a 'nobody'." -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "Ãrea inválida" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "Permiso inválido" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "Valor inválido para %1" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "Valor inválido para el campo personalizable" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Valor inválido para el estado" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "Es increiblemente importante que los usuarios sin privilegios no puedan ejecutar esta herramienta" -#: bin/rt-crontool:192 +#: 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 "Es recomendable crear un usuario unix sin privilegios que pertenezca al grupo correcto y que tenga aceso a ejecutar esta herramienta" -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "Tiene varios parametros:" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Items pending my approval" msgstr "Items pendientes de mi aprobación" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "Ene." @@ -2049,11 +2598,11 @@ msgstr "Ene." msgid "January" msgstr "Enero" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "Unirse o abandonar este grupo" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Jul." @@ -2061,11 +2610,11 @@ msgstr "Jul." msgid "July" msgstr "Julio" -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "Todo" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "Jun." @@ -2077,27 +2626,35 @@ msgstr "Junio" msgid "Keyword" msgstr "Palabras clave" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "Leng" -#: html/Ticket/Elements/Tabs:73 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "Último" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Último contacto" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Último contactado" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" msgstr "Se le notifico por ultima vez" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Actualizado por ultima vez" @@ -2105,15 +2662,19 @@ msgstr "Actualizado por ultima vez" msgid "LastUpdated" msgstr "LastUpdated" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "Izquierda" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "Permitir a este usuario acceder al RT" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "Permitir que este usuario tenga privilegios adicionales" @@ -2125,29 +2686,33 @@ msgstr "Limitando propietario a %1 %2" msgid "Limiting queue to %1 %2" msgstr "Limitando cola a %1 %2" -#: lib/RT/Ticket_Overlay.pm:2697 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "El vÃnculo ya existe" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "El vÃnculo no pudo ser creado" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "VÃnculo creado (%2)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "VÃnculo borrado (%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "VÃnculo no encontrado" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "Vincular caso #%1" @@ -2156,89 +2721,122 @@ msgstr "Vincular caso #%1" msgid "Link ticket %1" msgstr "Enlazar ticket %1" -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Enlaces" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "Direccion" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "El directorio del log %1 no pudo ser encontrado o no se pudo escribir en él.\\n RT no puede ejecutarse." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "Autenticado como %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" msgstr "Entrar" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Salir" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "Hacer propietario a" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "Establecer estatus" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "Establecer fecha de plazo" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "Establecer fecha de resolución" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "Establecer fecha de inicio" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "Establecer fecha de inicio" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "Establecer fecha de último cambio" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "Establecer prioridad" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "Establecer cola" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "Establecer tÃtulo" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "Administrar grupos y miembros" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "Administrar propiedades y configuracion que se aplique a todas las colas" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "Administrar colas y propiedades especificas" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "Administrar usuarios y contraseñas" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "Mar." @@ -2250,23 +2848,33 @@ msgstr "Marzo" msgid "May" msgstr "Mayo" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "May." -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "Miembro añadido" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "Miembro borrado" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "Miembro no borrado" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "Miembro de" @@ -2274,39 +2882,83 @@ msgstr "Miembro de" msgid "MemberOf" msgstr "MemberOf" -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "Miembros" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "Fusión exitosa" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "Fusión fallida. No se pudo establecer el EffectiveId" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "Fusionar dentro de" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "Mensaje" -#: lib/RT/Interface/Web.pm:867 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "Falta una clave primaria?: %1" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "Movil" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "Telefono Movil" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "Modificar lista de control de acceso" @@ -2314,15 +2966,37 @@ msgstr "Modificar lista de control de acceso" msgid "Modify Custom Field %1" msgstr "Modificar el campo personalizable %1" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Modify Custom Fields which apply to all queues" msgstr "Modificar los campos personalizables que se apliquen a todas las colas" -#: lib/RT/Queue_Overlay.pm:73 +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" msgstr "Modificar plantillas Sript para esta cola" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" msgstr "Modificar Scrips para esta cola" @@ -2334,43 +3008,56 @@ msgstr "Modificar ACLs de sistema" msgid "Modify Template %1" msgstr "Modificar plantilla %1" -#: html/Admin/Queues/CustomField.html:45 +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "" + +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" msgstr "Modificar un campo personalizable para la cola %1" -#: html/Admin/Global/CustomField.html:53 +#: NOT FOUND IN SOURCE msgid "Modify a CustomField which applies to all queues" msgstr "Modificar un campo personalizable que se aplique a todas las colas" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "Modificar un scrip para la cola %1" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "Modificar un scrip que se aplique a todas las colas" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Modify dates for # %1" msgstr "Modificar fechas para # %1" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "Modificar fechas para #%1" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "Modificar fechas para ticket # %1" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Modificar privilegios globales de grupo" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "Modificar privilegios globales de grupo." @@ -2386,100 +3073,110 @@ msgstr "Modificar privilegios globales para usuarios" msgid "Modify global scrips" msgstr "Modificar acciones globales" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "Modificar derechos globales de usuario" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "Modificar privilegios globales de usuario" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "Modificar metadatos del grupo o borrar grupo" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "Modificar privilegios de grupo para %1" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "Modificar privilegios de grupo para la cola %1" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "Modificar miembros de este grupo" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "Modificar la propia cuenta RT" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "Modificar personas relacionadas al cola %1" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "Modificar personas relacionadas al ticket #%1" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "Modificar acciones para la cola %1" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "Modificar scrips que se aplican a todas las colas" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "Modificar plantilla %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "Modificar plantillas que se aplican a todas las colas" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "Modificar el grupo %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "Modificar los observadores de la cola" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Modificar el usuario %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "Modificar el ticket # %1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "Modificar el ticket #%1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "Modificar tickets" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Modificar privilegios de usuario para el grupo %1" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "Modificar derechos de usuario para la cola %1" @@ -2488,72 +3185,85 @@ msgstr "Modificar derechos de usuario para la cola %1" msgid "Modify watchers for queue '%1'" msgstr "Modificar observadores para la cola '%1'" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "ModifyACL" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "ModifyOwnMembership" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "ModifyQueueWatchers" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "ModifyScrips" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "ModifySelf" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "ModifyTemplate" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "ModifyTicket" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Lun." -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "Más acerca de %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "Mover hacia abajo" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "Move hacia arriba" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "Múltiple" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "Se debe especificar un nombre" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "My Approvals" msgstr "Mis aprobaciones" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "Mis aprobaciones" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "" + +#: 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 msgid "Name" msgstr "Nombre" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Nombre en uso" @@ -2561,59 +3271,63 @@ msgstr "Nombre en uso" msgid "Need approval from system administrator" msgstr "Se necesita aprobacion del administrador del sistema" -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "Nunca" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Nuevo" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nuevas relaciones" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" -msgstr "Nueva contraseñaa" +msgstr "Nueva contraseña" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "Nueva pendiente de aprobación" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "Nuevas relaciones" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "" -#: html/Ticket/Elements/Tabs:36 +#: NOT FOUND IN SOURCE msgid "New Search" msgstr "Nueva búsqueda" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "Nuevo campo personalizable" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "Nuevo grupo" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" -msgstr "Nueva contraseñaa" +msgstr "Nueva contraseña" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Notificación de nueva contraseña enviada" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "Nueva cola" -#: html/SelfService/Elements/Tabs:63 +#: NOT FOUND IN SOURCE msgid "New request" msgstr "Nueva solicitud" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Nuevos privilegios" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "Nuevo scrip" @@ -2621,67 +3335,87 @@ msgstr "Nuevo scrip" msgid "New search" msgstr "Nueva búsqueda" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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 "Nueva plantilla" -#: lib/RT/Ticket_Overlay.pm:2771 +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "El ticket nuevo no existe" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "Nuevo usuario" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Nuevo usuario llamado" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Nuevo observador" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "Establecer nueva ventana " -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Siguiente" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "Siguiente página" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "Alias" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "Alias" -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "No hay campo personalizable" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "No hay grupo definido" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" msgstr "No hay cola definida" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "No se encontró el usuario. Por favor consulte al administrador.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "No hay plantilla" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "No se especificó el ticket. Abortada la transacción" @@ -2689,11 +3423,11 @@ msgstr "No se especificó el ticket. Abortada la transacción" msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "No se especificó ticket. Abortando las modificaciones al ticket\\n\\n" -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "No action" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "No se ha especificado ninguna columna" @@ -2701,77 +3435,93 @@ msgstr "No se ha especificado ninguna columna" msgid "No command found\\n" msgstr "Comando no encontrado\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "No hay comentarios sobre este usuario" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "No hay ningún archivo adjunto" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "No hay descripción para %1" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "No hay grupo especificado" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "No hay contraseña definida" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "No tiene privilegios para crear colas" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "No tiene privilegios para crear tickets en la cola '%1'" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "No tiene privilegios para crear usuarios" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "No tiene privilegios para mostrar el ticket" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "Sin permiso para ver la actualización del ticket" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "No hay un principal especificado" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "No hay principales seleccionados" -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "No hay colas que concuerden con los criterios de búsqueda" -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "No se encontraron derechos" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "Sin privilegios concedidos" -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "No hay búsqueda sobre la que operar" +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "" + #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "No se especificó el identificador del ticket" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "No se especificó el tipo de transacción" @@ -2779,103 +3529,123 @@ msgstr "No se especificó el tipo de transacción" msgid "No user or email address specified" msgstr "No se especificó email o usuario" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "No se encontraron usuarios que concuerden con los criterios de búsqueda" -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "Usuario no encontrado. El manejador cvs está deshabilitado. Por favor consulte a su administrador.\\n" -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "No se envió ningun valor a _Set!\\n" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "Nadie" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "Campo no existente?" -#: html/Elements/Login:99 +#: NOT FOUND IN SOURCE msgid "Not logged in" msgstr "No autenticado" -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "No autenticado." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "No establecido" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "No se ha implementado." -#: html/Admin/Groups/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Not yet implemented...." msgstr "No está implementado..." -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "Notas" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "La notificación no se pudo enviar" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "Notificar AdminCcs" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "Notificar AdminCcs como comentario" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "Notificar otros destinatarios" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "Notificar otros destinatarios como comentario" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "Notificar al propietario" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "Notificar al propietario como comentario" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "Notificar propietarios y AdminCcs de nuevos items pendientes de aprobación" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "Notificar solicitantes" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "Notificar solicitantes y Ccs" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "Notificar solicitantes y Ccs como comentario" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "Notificar solicitantes, Ccs y AdminCcs" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "Notificar solicitantes, Ccs y AdminCcs como comentario" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "Nov." @@ -2883,15 +3653,37 @@ msgstr "Nov." msgid "November" msgstr "Noviembre" -#: lib/RT/Record.pm:157 +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "No se pudo crear el objeto" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "Objeto creado" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Oct." @@ -2899,181 +3691,250 @@ msgstr "Oct." msgid "October" msgstr "Octubre" -#: html/Elements/SelectDateRelation:35 +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "en " -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "Al comentar" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "On Correspond" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "Al crear" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "Al cambiar de propietario" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "Al cambiar de cola" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "Al resolver" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "Al cambiar de status" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "Al hacer transaccion" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "Solo muestra aprobaciones para solicitudes creadas despues de %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "Solo muestra aprobaciones para solicitudes creadas antes de %1" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Abierto" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Abrirlo" -#: html/SelfService/Elements/Tabs:57 +#: NOT FOUND IN SOURCE msgid "Open requests" msgstr "Solicitudes abiertas" -#: html/Admin/Users/Prefs.html:41 +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "Tickets abiertos (del listado) en una nueva ventana" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "Tickets abiertos (del listado) en otra ventana" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "Open tickets on correspondence" -#: html/Search/Elements/PickRestriction:101 +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "Ordenación y clasificación" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "Organización" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "Ticket originario: #%1" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "Pasada la fecha de gracia, la prioridad se mueve a" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "Tickets poseidos" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "OwnTicket" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "Propietario" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) +#: NOT FOUND IN SOURCE msgid "Owner changed from %1 to %2" msgstr "Propietario cambiado de %1 a %2" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "Propietario cambiado forzosamente de %1 a %2" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "El propietario es" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Buscapersonas" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "Buscapersonas Tel." -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Padres" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" -msgstr "Contraseñaa" +msgstr "Contraseña" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "Recordatorio de contraseña" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "Contraseña cambiado" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "Contraseña demasiado corta" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Contraseña: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "" + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "Personas" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "Realizar una acion definida por el usuario" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "" + +#: 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 msgid "Permission Denied" msgstr "Permiso denegado" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "Grupos personales" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Grupos personales" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Grupos personales:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Números de teléfono" -#: html/Admin/Users/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Placeholder" msgstr "Placeholder" -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "Preferencias" @@ -3081,15 +3942,19 @@ msgstr "Preferencias" msgid "Prefs" msgstr "Prefs" -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Preparación cortada" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Prev" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "Página anterior" @@ -3097,29 +3962,33 @@ msgstr "Página anterior" msgid "Pri" msgstr "Pri" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "No se encontró el principal %1" -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Prioridad" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "La prioridad empieza en" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "" + #: etc/initialdata:25 msgid "Privileged" msgstr "Privilegiado" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "Estado privilegiado: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "Usuarios privilegiados:" @@ -3127,11 +3996,19 @@ msgstr "Usuarios privilegiados:" msgid "Pseudogroup for internal use" msgstr "Pseudogrupo para uso interno" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "" + +#: 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 msgid "Queue" msgstr "Cola" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" @@ -3145,7 +4022,7 @@ msgstr "Cola '%1' no encontrada\\n" msgid "Queue Keyword Selections" msgstr "Selecciones de palabras clave de la cola" -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "Nombre de la cola" @@ -3153,19 +4030,19 @@ msgstr "Nombre de la cola" msgid "Queue Scrips" msgstr "Acciones de la cola" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "La cola ya existe" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "La cola no se pudo crear" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "La cola no se pudo cargar" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "Cola creada" @@ -3173,26 +4050,37 @@ msgstr "Cola creada" msgid "Queue is not specified." msgstr "No se especifico ninguna cola" -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "Cola no encontrada" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "Colas" -#: html/Elements/Login:34 +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 para %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "RT %1 de <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." @@ -3200,7 +4088,7 @@ msgstr "RT %1 de <a href=\"http://bestpractical.com\">Best Practical Solutions, msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Derechos reservados 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "Administración del RT" @@ -3220,7 +4108,7 @@ msgstr "Error de configuración del RT" msgid "RT Critical error. Message not recorded!" msgstr "Error crÃtico en RT. El mensaje no fue grabado!" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "Error del RT" @@ -3232,11 +4120,15 @@ msgstr "RT recibió correo (%1) de sà mismo." msgid "RT Recieved mail (%1) from itself." msgstr "RT recibió correo (%1) de sà mismo." -#: html/SelfService/Closed.html:25 +#: NOT FOUND IN SOURCE msgid "RT Self Service / Closed Tickets" msgstr "RT AutoServicio / Tickets cerrados" -#: html/index.html:25 html/index.html:28 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT en un vistazo" @@ -3252,11 +4144,15 @@ msgstr "RT no pudo encontrar el solicitante a través de una busqueda a la base msgid "RT couldn't find the queue: %1" msgstr "RT no pudo encontrar la cola: %1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "RT no pudo validar esta firma PGP. \\n" -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT para %1" @@ -3269,8 +4165,7 @@ msgstr "RT para %1: %2" msgid "RT has proccessed your commands" msgstr "RT ha procesado tus comandos" -#: html/Elements/Login:83 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RT es © Copyright 1996-%1 de Jesse Vincent <jesse@bestpractical.com>. Es distrbuido bajo <a href=\"http://www.gnu.org/copyleft/gpl.html\">la version 2 de la licencia GNU GPL (General Public License)</a>." @@ -3286,19 +4181,39 @@ msgstr "RT procesará este mensaje como si fuera uno no firmado\\n" msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." msgstr "El modo de comandos por correo de RT requiere autenticación PGP. Ya sea que no haya firmado su mensaje, o que su firma no pueda ser verificada." -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "Nombre real" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "Nombre real" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "Referenciado por" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "Hace referencia a" @@ -3310,48 +4225,52 @@ msgstr "RefersTo" msgid "Refine" msgstr "Refinar" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "Refinar la búsqueda" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "Refrescar esta página cada %1 minutos" -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "Relaciones" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Quitar AdminCc" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Quitar Cc" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Quitar solicitante" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Responder" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "Responder a los tickets" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "ReplyToTicket" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Solicitante" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "Dirección de correo del solicitante" @@ -3363,98 +4282,107 @@ msgstr "Solicitante(s)" msgid "RequestorAddresses" msgstr "RequestorAddresses" -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Solicitantes" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "Las solicitudes entran en vencimiento en" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Borrar" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Residencia" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "Resolver" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "Resolver ticket #%1 (%2)" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "Resuelto" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "Responder a los solicitantes" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Resultados" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "Resultados por página" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "Confirmar contraseña" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "Privilegio %1 no encontrado para %2 %3 referente a %4 (%5)\\n" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Privilegio delegado" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Privilegio otorgado" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Privilegio cargado" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "Privilegio no pudo ser revocado" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Privilegio no encontrado" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "Privilegio no cargado" -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "Privilegio revocado" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Privilegios" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "No se pudieron conceder los privilegios a %1" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "No se pudieron revocar los privilegios de %1" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Roles" @@ -3462,32 +4390,59 @@ msgstr "Roles" msgid "RootApproval" msgstr "RootApproval" -#: lib/RT/Date.pm:393 +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "" + +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "Sab." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "" + +#: 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 msgid "Save Changes" msgstr "Guardar Cambios" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Guardar cambios" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "Scrip #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "Acción creada" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "Acción borrada" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "Acciones" @@ -3495,11 +4450,11 @@ msgstr "Acciones" msgid "Scrips for %1\\n" msgstr "Acciones para %1\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "Acciones que se aplican a todas las colas" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "Búsqueda" @@ -3507,111 +4462,188 @@ msgstr "Búsqueda" msgid "Search Criteria" msgstr "Criterios de búsqueda" -#: html/Approvals/Elements/PendingMyApproval:39 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "Buscar aprobaciones" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "Seguridad:" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "Ver cola" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "Seleccione un grupo" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "Seleccione una cola" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "Seleccione un usuario" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "Seleccionar un campo personalizable" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "Seleccionar grupo" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "Seleccionar valores múltiples" -#: lib/RT/CustomField_Overlay.pm:352 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "Seleccionar un valor" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "Seleccionar cola" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "Seleccionar accion" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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 "Selecionar plantilla" -#: html/Admin/Elements/UserTabs:49 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "Seleccionar usuario" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" msgstr "SelectMultiple" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectSingle" msgstr "SelectSingle" -#: html/SelfService/index.html:25 +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Self Service" msgstr "Autoservicio" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "Enviar mail a todos los observadores" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "Enviar mail a todos los observadores como comentario" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "Enviar mail a los solicitantes y Ccs" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "Enviar mail a los solicitantes y Ccs como comentario" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "Envia un mesaje a los solicitantes" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "Enviar mail a los Ccs y Bccs listados explicitamente" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "Envia mail a los Ccs administrativos" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "Envia mail a los Ccs administrativos como comentario" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "Enviar mail al propietario" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Sep." @@ -3619,99 +4651,138 @@ msgstr "Sep." msgid "September" msgstr "Septiembre" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "Mostrar resultados" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "Mostrar peticiones aprobadas" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Mostrar lo básico" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "Mostrar solicitudes denegadas" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Mostrar detalles" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "Mostrar solicitudes pendientes" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "Mostrar solicitudes esperando otras aprobaciones" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" msgstr "Mostrar ticket en un comentario privado" -#: lib/RT/Queue_Overlay.pm:79 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" msgstr "Mostrar resumen del ticket" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "ShowACL" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "ShowScrips" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "ShowTemplate" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "ShowTicket" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "ShowTicketComments" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "Validarse como solicitante de ticket o ticket o cola Cc" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "Validarse como ticket o cola AdminCc" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "Firma" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) +#: NOT FOUND IN SOURCE msgid "Signed in as %1" msgstr "Validado como %1" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Sencillo" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "Saltar Menu" -#: html/Admin/Elements/EditCustomFieldValues:31 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Sort key" msgstr "Clave de ordenación" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "Ordenar resultados por" -#: html/Admin/Elements/AddCustomFieldValue:25 +#: NOT FOUND IN SOURCE msgid "SortOrder" msgstr "Ordenamiento" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Stalled" msgstr "Pendiente" @@ -3720,7 +4791,7 @@ msgstr "Pendiente" msgid "Start page" msgstr "Página de inicio" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "Empezado" @@ -3728,7 +4799,7 @@ msgstr "Empezado" msgid "Started date '%1' could not be parsed" msgstr "La fecha de inicio '%1' no se pudo leer" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "Empieza" @@ -3740,20 +4811,19 @@ msgstr "Empezado por" msgid "Starts date '%1' could not be parsed" msgstr "La fecha de inicio '%1' no se pudo ser leer" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Estado" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "Estado" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" msgstr "Cambio de status" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Estado cambiado de %1 a %2" @@ -3761,25 +4831,37 @@ msgstr "Estado cambiado de %1 a %2" msgid "StatusChange" msgstr "StatusChange" -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "Robar" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " +msgid "Stolen from %1" msgstr "Robado de %1" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "Asunto" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "Asunto cambiado a %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Enviar" @@ -3787,23 +4869,27 @@ msgstr "Enviar" msgid "Submit Workflow" msgstr "Submit Workflow" -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "Completado" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Dom." -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "Superusuario" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "Sistema" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "" + +#: 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 "Error del sistema" @@ -3815,11 +4901,20 @@ msgstr "Error de sistema. Derecho no concedido" msgid "System Error. right not granted" msgstr "Error de sistema. Derecho no concedido" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "Error del sistema. Privilegio no delegado." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "Error del sistema. Privilegio no otorgado" @@ -3827,7 +4922,7 @@ msgstr "Error del sistema. Privilegio no otorgado" msgid "System error. Unable to grant rights." msgstr "Error de sistema. Incapaz de conceder permisos" -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "Grupos del sistema" @@ -3835,32 +4930,40 @@ msgstr "Grupos del sistema" msgid "SystemRolegroup for internal use" msgstr "SystemRolegroup for internal use" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRING" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "Coger" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Cogido" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Plantilla" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "Plantilla #%1" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "Plantilla borrada" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Plantilla no encontrada" @@ -3868,11 +4971,11 @@ msgstr "Plantilla no encontrada" msgid "Template not found\\n" msgstr "Plantilla no encontrada\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Plantilla procesada" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Plantillas" @@ -3880,71 +4983,74 @@ msgstr "Plantillas" msgid "Templates for %1\\n" msgstr "Plantillas de %1\\n" -#: lib/RT/Interface/Web.pm:858 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "Ese es el valor actual" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Ese no es un valor para este campo personalizable" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Este es el mismo valor" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "Ese principal ya es un %1 para esta cola" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "Ese principal ya es un %1 para este ticket" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "Ese principal no es un %1 para esta cola" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "Ese principal no es un %1 para este ticket" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "Esa cola no existe" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "Ese ticket tiene dependencias sin resolver" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: NOT FOUND IN SOURCE msgid "That user already has that right" msgstr "Ese usuario ya tiene ese privilegio" -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "Ese usuario ya posee ese ticket" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Ese usuario no existe" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "Ese usuario ya tiene privilegios" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "Ese usuario ya está sin privilegios" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "Ese usuario ahora tiene privilegios" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "Ese usuario ya no tiene privilegios" @@ -3952,67 +5058,79 @@ msgstr "Ese usuario ya no tiene privilegios" msgid "That user is now unprivilegedileged" msgstr "Este usuario ya no tiene privilegios" -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "Ese usuario puede no poseer tickets en esa cola" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "Ese no es un identificador numérico" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "Lo básico" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "El CC de un ticket" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "El CC administrativo de un ticket" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "El comentario ha sido grabado" -#: bin/rt-crontool:198 +#: 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 "El siguiente comando encontrará todos los tickets activos en la cola 'general' y pondra su prioridad a 99 si no han sido tocados en 4 horas:" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "Los siguientes comandos no han sido procesados:\\n\\n" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "Ha sido establecido el nuevo valor" -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "El propietario de un ticket" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "El solicitante de un ticket" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Estos comentarios generalmente no están visibles para el usuario" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "" + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "Este ticket %1 %2 (%3)" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "Esta herramiento permite al usuario ejectutar modulos perl arbitrarios desde dentro de RT" -#: lib/RT/Transaction_Overlay.pm:253 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "Parece que esta transacción no tiene contenido" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "Los %1 tickets de mayor prioridad de este usuario" @@ -4021,7 +5139,7 @@ msgstr "Los %1 tickets de mayor prioridad de este usuario" msgid "This user's 25 highest priority tickets" msgstr "Los 25 casos de mayor prioridad de este usuario" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Jue." @@ -4033,61 +5151,75 @@ msgstr "Ticket # %1 %2" msgid "Ticket # %1 Jumbo update: %2" msgstr "Actualizacion Jumbo para el ticket # %1: %2" -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "Actualización Jumbo para el ticket #%1: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "Ticket #%1: %2" -#: lib/RT/Ticket_Overlay.pm:608 +#: 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) +msgid "Ticket %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "Ticket %1 creado en la cola '%2'" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "Ticket %1 cargado\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "Ticket %1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "Historial del ticket # %1 %2" -#: html/SelfService/Display.html:34 +#: NOT FOUND IN SOURCE msgid "Ticket Id" msgstr "Id del ticket:" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "Ticket resuelto" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "Archivos adjuntos del ticket" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "Contenido del ticket" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "Tipo de contenido del ticket" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "No se pudo crear el ticket debido a un error interno" -#: lib/RT/Transaction_Overlay.pm:522 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "Ticket creado" @@ -4095,11 +5227,11 @@ msgstr "Ticket creado" msgid "Ticket creation failed" msgstr "Creación del ticket fallida" -#: lib/RT/Transaction_Overlay.pm:527 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "Ticket borrado" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" msgstr "Id de ticket no encontrada" @@ -4107,58 +5239,68 @@ msgstr "Id de ticket no encontrada" msgid "Ticket killed" msgstr "Ticket matado" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "Ticket no encontrado" -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "Estado del ticket cambiado" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "Observadores del ticket" -#: html/Elements/Tabs:49 +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" msgstr "Tickets" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" msgstr "Tickets %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" msgstr "Tickets %1 por %2" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "Tickets de %1" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "Tickets que dependen de esta aprobación:" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "Tiempo Restante" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "Tiempo Trabajado" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "Tiempo restante" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "Tiempo para mostrar" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "Tiempo trabajado" @@ -4166,40 +5308,61 @@ msgstr "Tiempo trabajado" msgid "TimeLeft" msgstr "TimeLeft" -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "TimeWorked" -#: bin/rt-commit-handler:402 +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "Para generar una comparación de este cometido:" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "Para generar una comparación de este cometido:\\n" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Última actualización" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "" + +#: etc/initialdata:252 msgid "Transaction" msgstr "Transacción" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "Transacción %1 limpiada" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "Transacción creada" -#: lib/RT/Transaction_Overlay.pm:89 +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" msgstr "Transaction->Create no pudo, ya no no especificó un ID de ticket" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "Las transacciones son inmutables" @@ -4207,106 +5370,170 @@ msgstr "Las transacciones son inmutables" msgid "Trying to delete a right: %1" msgstr "Intentando borrar el privilegio: %1" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Mar." -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "Tipo" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "No implementado" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Usuario en Unix" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "Usuario en Unix" -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "Codificación de contenido desconocida: %1" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "Ilimitado" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "No privilegiado" -#: lib/RT/Transaction_Overlay.pm:571 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "No cogido" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Actualizar" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "Id de actualización" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Tipo de actualización" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "Actualizar todos estos casos al mismo tiempo" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "Actualizar correo" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "Actualizar nombre" -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "Actualización no grabada." -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "Actualizar tickets seleccionados" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "Actualizar firma" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "Actualizar ticket" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) +#: NOT FOUND IN SOURCE msgid "Update ticket # %1" msgstr "Actualización de ticket # %1" -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "Actualizar ticket #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "Actualizar ticket #%1 (%2)" -#: lib/RT/Interface/Web.pm:373 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "El tipo de actualización no fue ni respuesta ni comentario" -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Actualizado" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" msgstr "Usuario %1 %2: %3\\n" @@ -4315,6 +5542,11 @@ msgstr "Usuario %1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "Usuario %1 Contraseña: %2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "Usuario '%1' no encontrado" @@ -4323,68 +5555,89 @@ msgstr "Usuario '%1' no encontrado" msgid "User '%1' not found\\n" msgstr "Usuario '%1' no encontrado\\n" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "Definido por el usuario" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "ID de usuario" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "Id de usuario" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "Privilegios de usuario" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "El usuario no pudo ser creado: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Usuario creado" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "Grupos definidos por el usuario" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "Usuario notificado" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "Vista de usuario" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Nombre de usuario" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Usuarios" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "Usuarios que concuerdan con los criterios de búsqueda" -#: html/Search/Elements/PickRestriction:51 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "Valor de la cola" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Valores" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "Observar" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "WatchAsAdminCc" @@ -4392,87 +5645,95 @@ msgstr "WatchAsAdminCc" msgid "Watcher loaded" msgstr "Observador cargado" -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Observadores" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "Codificación de Web" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Mie." -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "Cuando un ticket ha sido aprobado por todos los aprobadores, añadir correspondencia al ticket original" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "Cuando un ticket ha sido aprobado por cualquier aprobador, añadir correspondencia al ticket original" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "Cuando un ticket se crea" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "Cuando una aprobacion de ticket se crea, notifica al propietario y AdminCC del item que espera su aprobación" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "Cuando pasa cualquier cosa" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "Siempre que un ticket este sin resolver" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "Siempre que el propietario de un ticket cambie" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "Siempre que la cola de un ticket cambie" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "Siempre que el estado de un ticket cambie" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "Siempre que ocurra una condicion definida por el usuario" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "Siempre que venga algun comentario" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "Siempre que venga correspondencia" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Trabajo" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "Tel Trabajo" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Trabajado" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "Usted ya es propietario de este caso" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "Usted no es un usuario autorizado" -#: lib/RT/Ticket_Overlay.pm:2930 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "Usted solo puede reasignar casos que posee o que no posee nadie³" @@ -4480,29 +5741,28 @@ msgstr "Usted solo puede reasignar casos que posee o que no posee nadie³" msgid "You don't have permission to view that ticket.\\n" msgstr "No tiene permiso para ver ese ticket.\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "Usted encontró %1 casos en la cola %2" -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "Se ha desconectado del sistema RT" -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "No tiene permiso para crear tickets en esa cola." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "No puede crear solicitudes en esa cola." -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "Es bienvenido a regresar en cualquier momento." -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) +#: NOT FOUND IN SOURCE msgid "Your %1 requests" msgstr "Sus solicitudes %1" @@ -4510,11 +5770,11 @@ msgstr "Sus solicitudes %1" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "Su administrador del RT ha desconfigurado el alias de correo que invoca el RT" -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "Su petición ha sido aprobada por %1. Otras aprobaciones pueden estar pendientes todavia" -#: etc/initialdata:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "Su peticion ha sido aprobada." @@ -4522,15 +5782,15 @@ msgstr "Su peticion ha sido aprobada." msgid "Your request was rejected" msgstr "Su petición ha sido rechazada" -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "Su petición ha sido rechazada" -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "Nombre o contraseña de usuario incorrectos" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "Zip" @@ -4538,32 +5798,48 @@ msgstr "Zip" msgid "[no subject]" msgstr "[sin asunto]" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "como priviligiado para %1" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "contiene" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" msgstr "contenido" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "content-type" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "Respuesta (probablemente) no enviada" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "Correspondencia enviada" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "dÃas" @@ -4571,96 +5847,128 @@ msgstr "dÃas" msgid "dead" msgstr "muerto" -#: html/Search/Listing.html:75 +#: NOT FOUND IN SOURCE msgid "delete" msgstr "borrar" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "borrado" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "no coincide" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "no contiene" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "igual a" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + #: NOT FOUND IN SOURCE msgid "false" msgstr "falso" -#: html/Elements/SelectAttachmentField:28 +#: NOT FOUND IN SOURCE msgid "filename" msgstr "nombre de archivo" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "mayor que" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "grupo '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "horas" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "id" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "es" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "no es" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "menor que" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "contiene" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "min" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "minutos" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "modificaciones\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "meses" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "nuevo" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "sin valor" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "ninguno" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "no igual a" @@ -4668,51 +5976,59 @@ msgstr "no igual a" msgid "notlike" msgstr "notlike" -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "abierto" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "grupo personal '%1' para usuario '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "Cola %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "rechazado" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "resuelto" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "sec" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "pendiente" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "sistema %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "grupo del sistema '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "el componente que llama no especifica por qué" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "ticket #%1 %2" @@ -4721,7 +6037,7 @@ msgstr "ticket #%1 %2" msgid "true" msgstr "verdadero" -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "grupo sin descripción %1" @@ -4730,12 +6046,12 @@ msgstr "grupo sin descripción %1" msgid "undescripbed group %1" msgstr "grupo sin descripción %1" -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "usuario %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "semanas" @@ -4743,7 +6059,7 @@ msgstr "semanas" msgid "with template %1" msgstr "con plantilla %1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "años" diff --git a/rt/lib/RT/I18N/fi.po b/rt/lib/RT/I18N/fi.po index ee1ad71f9..eaac6bfb0 100644 --- a/rt/lib/RT/I18N/fi.po +++ b/rt/lib/RT/I18N/fi.po @@ -4,191 +4,245 @@ msgid "" msgstr "" "Project-Id-Version: RT 2.1.x\n" "POT-Creation-Date: 2002-07-08 17:41+0200\n" -"PO-Revision-Date: 2002-07-09 18:09+0200\n" -"Last-Translator: Janne Pirkkanen <jp@oppipoika.net>\n" +"PO-Revision-Date: 2004-01-13 15:21+0200\n" +"Last-Translator: Tuukka Vainio <tuukka.vainio@utu.fi>\n" "Language-Team: Finnish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 -msgid "#" +#: 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) +msgid "#%1: %2" msgstr "" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) -msgid "#%1" +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" msgstr "" -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "#%1: %2" +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" msgstr "" -#: lib/RT/Date.pm:337 +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) -msgid "%1 %2 %3" -msgstr "" - -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %3.%2 %7 %4:%5:%6" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" -msgstr "" +msgstr "%1 %2 lisätty" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" -msgstr "" +msgstr "%1 %2 sitten" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1: %2 muutettu arvoon %3" -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" -msgstr "" +msgstr "%1 %2 poistettu" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" -msgstr "" +msgstr "%1 %2 pohjalla %3" #: NOT FOUND IN SOURCE msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 tässä työpyynnössä\\n" +msgstr "%1 (%2) %3 tässä tapauksessa\\n" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) -msgid "%1 - %2 shown" +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "" + +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" msgstr "" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: NOT FOUND IN SOURCE +msgid "%1 - %2 shown" +msgstr "näkyvillä %1 - %2" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "ScriptAction %1 ladattu" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 lisätty arvoksi %2lle" #: NOT FOUND IN SOURCE msgid "%1 aliases require a TicketId to work on" -msgstr "%1 aliakset vaativat työpyynnön id:n" +msgstr "%1 aliakset vaativat tapauksen id:n" #: NOT FOUND IN SOURCE msgid "%1 aliases require a TicketId to work on " -msgstr "%1 aliakset vaativat työpyynnön id:n " +msgstr "%1 aliakset vaativat tapauksen id:n " #: NOT FOUND IN SOURCE msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "%1 aliakset vaativat työpyynnön id:n (osoite %2) %3" +msgstr "%1 aliakset vaativat tapauksen id:n (osoite %2) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 - %2" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 muutettu arvosta %2 arvoon %3" -#: lib/RT/Interface/Web.pm:857 -msgid "%1 could not be set to %2." +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" msgstr "" +#: lib/RT/Record.pm:930 +msgid "%1 could not be set to %2." +msgstr "Arvoa %1 ei voitu asettaa arvoksi %2" + #: NOT FOUND IN SOURCE msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 ei voinut suorittaa toimintoa (%2)\\n" +msgstr "%1 ei voinut suorittaa tapahtumaa (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 ei voinut asettaa tilan arvoa päätetyksi. RT:n tietokanta saattaa olla vioittunut." +msgstr "%1 ei voinut asettaa tilaa päätetyksi. RT:n tietokanta saattaa olla vioittunut." -#: html/Elements/MyTickets:25 -#. ($rows) -msgid "%1 highest priority tickets I own..." +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" msgstr "" -#: html/Elements/MyRequests:25 +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "" + +#: html/Elements/MyTickets:47 #. ($rows) -msgid "%1 highest priority tickets I requested..." +msgid "%1 highest priority tickets I own" msgstr "" -#: bin/rt-crontool:161 +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I own..." +msgstr "%1 tärkeintä omistamaani tapausta..." + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I requested..." +msgstr "%1 tärkeintä tilaamaani tapausta..." + +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 ei ole enää %2 tälle työjonolle" -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 ei ole enää %2 tälle työpyynnölle" +msgstr "%1 ei ole enää %2 tälle tapaukselle" -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 ei ole enää kentän %2 arvo" @@ -196,16 +250,29 @@ msgstr "%1 ei ole enää kentän %2 arvo" msgid "%1 isn't a valid Queue id." msgstr "%1 ei ole kelvollinen työjonon id" -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 min" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1 ei näy" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "" @@ -222,35 +289,45 @@ msgstr "%1 tyyppi tuntematon viestille $MessageId" msgid "%1 type unknown for %2" msgstr "%1 tyyppi tuntematon viestille %2" -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" -msgstr "" - -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 päättää kaikki päätetyt työpyynnöt -ryhmän työpyynnöt." +msgstr "%1 päättää kaikki päätetyn ryhmän jäsentapaukset." #: NOT FOUND IN SOURCE msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 jäädyttää [paikallisen] BASE jos se riippuu linkitetystä työpyynnöstä [tai on sen jäsen]." +msgstr "%1 jäädyttää [paikallisen] BASE jos se riippuu linkitetystä tapauksesta [tai on sen jäsen]." -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: liitetiedostoa ei ole määritelty" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' ei kelpaa tilan arvoksi" @@ -261,267 +338,307 @@ msgstr "'%1' ei ole tunnettu tapahtuma." #: NOT FOUND IN SOURCE msgid "(Check box to delete group member)" -msgstr "" +msgstr "(Rastita laatikko poistaaksesi ryhmän jäsenen)" #: NOT FOUND IN SOURCE msgid "(Check box to delete scrip)" -msgstr "(Rastita laatikko poistaaksesi skriptin)" +msgstr "(Rastita laatikko poistaaksesi toiminnon)" -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(Rastita laatikko poistaaksesi)" #: NOT FOUND IN SOURCE msgid "(Check boxes to delete)" +msgstr "(Rastita laatikko poistaaksesi)" + +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" msgstr "" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Syötä työpyynnön numerot tai www-osoitteet, välilyönneillä erotettuina)" +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(Syötä tapausten numerot tai www-osoitteet, välilyönneillä erotettuina)" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "" +msgid "(If left blank, will default to %1)" +msgstr "(Jos jätetään tyhjäksi, palaa arvoon %1)" #: NOT FOUND IN SOURCE msgid "(No Value)" -msgstr "" +msgstr "(Ei arvoa)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" -msgstr "" +msgstr "(Ei kenttiä)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Ei jäseniä)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" -msgstr "(Ei skriptejä)" +msgstr "(Ei toimintoja)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" +msgstr "(Ei pohjia)" + +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" msgstr "" -#: html/Ticket/Update.html:85 +#: 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 "" +msgstr "(Lähettää piilokopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei lisää</b> pysyviksi vastaanottajiksi.)" #: NOT FOUND IN SOURCE msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" -msgstr "(Lähettää piilokopion tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei muuta</b> jatkossa tehtävien lähetysten kohteita.)" +msgstr "(Lähettää piilokopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei lisää</b> pysyviksi vastaanottajiksi.)" -#: html/Ticket/Create.html:79 +#: 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 "" +msgstr "(Lähettää kopion tästä päivityksestä pilkulla erotettuihin hallinnollisiin sähköpostiosoitteisiin. <b>Lisää</b> pysyviksi vastaanottajiksi.)" -#: html/Ticket/Update.html:81 +#: 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 "" +msgstr "(Lähettää kopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei lisää</b> pysyviksi vastaanottajiksi.)" #: NOT FOUND IN SOURCE msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" -msgstr "(Lähettää kopion tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei muuta</b> jatkossa tehtävien lähetysten kohteita.)" +msgstr "(Lähettää kopion vain tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Ei lisää</b> pysyviksi vastaanottajiksi.)" -#: html/Ticket/Create.html:69 +#: 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 "(Lähettää kopion tästä päivityksestä pilkulla erotettuihin sähköpostiosoitteisiin. <b>Lisää</b> pysyviksi vastaanottajiksi.)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" msgstr "" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(tyhjä)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" -msgstr "" +msgstr "(ei nimiä listattuna)" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(ei otsikkoa)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(ei arvoa)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" -msgstr "(vain yksi työpyyntö)" +msgstr "(vain yksi tapaus)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" +msgstr "(odottaa hyväksyntää)" + +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" msgstr "" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" -msgstr "" +msgstr "(odottaa toisia tapauksia)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(pakollinen)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" -msgstr "" +msgstr "(nimetön)" #: NOT FOUND IN SOURCE msgid "25 highest priority tickets I own..." -msgstr "25 omistamaani korkeimpien prioriteettien työpyyntöä..." +msgstr "25 tärkeintä omistamaani tapausta..." #: NOT FOUND IN SOURCE msgid "25 highest priority tickets I requested..." -msgstr "25 tilaamaani korkeimman prioriteetin työpyyntöä..." +msgstr "25 tärkeintä tilaamaani tapausta..." -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid "<input type=\"submit\" value=\"New ticket in\"> %1" -msgstr "<input type=\"submit\" value=\"Uusi työpyyntö\"> %1" - -#: etc/initialdata:203 -msgid "A blank template" +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE Deleted" +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" -msgstr "" +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<input type=\"submit\" value=\"Uusi tapaus\"> %1" -#: NOT FOUND IN SOURCE -msgid "ACE could not be deleted" -msgstr "" +#: etc/initialdata:218 +msgid "A blank template" +msgstr "Tyhjä pohja" -#: NOT FOUND IN SOURCE -msgid "ACE could not be found" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." msgstr "" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE ei löytynyt" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACE:ja voi vain luoda ja poistaa." -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Poistuminen ei-tarkoitettujen työpyyntömuutosten välttämiseksi.\\n" +msgstr "Peruutetaan tarkoittamattomien tapausmuutosten välttämiseksi.\\n" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" -msgstr "" +msgstr "Omat asetukset" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "Pääsynvalvonta" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Tapahtuma" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Tapahtumaa %1 ei löydetty" -#: bin/rt-crontool:123 -msgid "Action committed." +#: bin/rt-crontool:148 +msgid "Action committed.\\n" msgstr "" -#: bin/rt-crontool:119 +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "" -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "Lisää kopio ylläpidolle" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "Lisää kopio" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 -msgid "Add More Files" +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" msgstr "" -#: html/Search/Bulk.html:88 +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "Lisää useampi tiedosto" + +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "Lisää tilaaja" -#: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" msgstr "" #: NOT FOUND IN SOURCE msgid "Add a new a global scrip" -msgstr "Lisää uusi globaali lappu" +msgstr "Lisää uusi yleinen toiminto" #: NOT FOUND IN SOURCE msgid "Add a scrip to this queue" -msgstr "Lisää lappu tälle työjonolle" +msgstr "Lisää toiminto tähän työjonoon" -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" -msgstr "Lisää kaikille työjonoille yhteinen lappu" +msgstr "Lisää kaikille työjonoille yhteinen toiminto" -#: html/Search/Bulk.html:118 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" -msgstr "Lisää kommentteja tai vastauksia valituille työpyynnöille" +msgstr "Lisää kommentteja tai vastauksia valituille tapauksille" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" -msgstr "Lisää jäsenä" +msgstr "Lisää jäseniä" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Lisää uusia tarkkailijoita" -#: NOT FOUND IN SOURCE -msgid "AddNextState" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" msgstr "" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "Lisätty toimeksiantaja %1:ksi tähän työjonoon" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" -msgstr "Lisätty toimeksiantaja %1:ksi tälle työpyynnölle" +msgstr "Lisätty toimeksiantaja %1:ksi tälle tapaukselle" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Osoite1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Osoite2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Kopio ylläpidolle" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "Työjonojen ylläpito" @@ -529,312 +646,363 @@ msgstr "Työjonojen ylläpito" msgid "Admin users" msgstr "Käyttäjien ylläpito" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" -msgstr "Ylläpito/Globaalit asetukset" +msgstr "Ylläpito/Yleiset asetukset" #: NOT FOUND IN SOURCE msgid "Admin/Groups" msgstr "Ylläpito/Ryhmät" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "Ylläpito/Työjono/Perustiedot" -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "Kopio ylläpidolle" -#: NOT FOUND IN SOURCE -msgid "AdminComment" +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" msgstr "" -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:72 -msgid "AdminCustomFields" -msgstr "" - -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Kopio ylläpidolle" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "Tarkennettu haku" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "Jälkeen" #: NOT FOUND IN SOURCE msgid "Age" +msgstr "Ikä" + +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" msgstr "" -#: html/Admin/Elements/EditCustomFields:96 -msgid "All Custom Fields" +#: etc/initialdata:363 +msgid "All Approvals Passed" msgstr "" -#: html/Admin/Queues/index.html:53 +#: NOT FOUND IN SOURCE +msgid "All Custom Fields" +msgstr "Kaikki kentät" + +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "Kaikki työjonot" -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" msgstr "" -#: html/Elements/Tabs:58 -msgid "Approval" +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply" msgstr "" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "" + +#: html/Elements/Tabs:74 +msgid "Approval" +msgstr "Hyväksyntä" + +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" msgstr "" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "" #: NOT FOUND IN SOURCE msgid "Approval Details" +msgstr "Hyväksynnän lisätiedot" + +#: etc/initialdata:351 +msgid "Approval Passed" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Approval diagram" +#: etc/initialdata:374 +msgid "Approval Rejected" msgstr "" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" -msgstr "" +msgstr "Hyväksy" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" -msgstr "" +msgstr "Hyväksyjän merkintöjä: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." -msgstr "Huhti" +msgstr "huhti" #: NOT FOUND IN SOURCE msgid "April" -msgstr "" +msgstr "huhtikuu" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "Nouseva" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Liitä" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "Liitä tiedosto" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" -msgstr "" +msgstr "Liitä tiedosto" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Liitteen '%1' lataaminen ei onnistunut" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "Liitetiedosto luotu" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "Liitetiedoston nimi" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "Liitetiedostot" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "" + +#: lib/RT/Date.pm:444 msgid "Aug." -msgstr "Elo" +msgstr "elo" #: NOT FOUND IN SOURCE msgid "August" -msgstr "" +msgstr "elokuu" -#: html/Admin/Elements/ModifyUser:66 -msgid "AuthSystem" -msgstr "" - -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "" #: etc/initialdata:72 msgid "Autoreply To Requestors" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "" +msgstr "Automaattivastaus tilaajille" #: NOT FOUND IN SOURCE msgid "Bad PGP Signature: %1\\n" msgstr "Virheellinen PGP allekirjoitus: %1\\n" -#: html/SelfService/Attachment/dhandler:40 +#: NOT FOUND IN SOURCE msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "Virheellinen liitteen numero. Liitetiedostoa '%1' ei löytynyt\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "Virheellistä dataa kentässä %1" -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) +#: NOT FOUND IN SOURCE msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Virheellinen toiminnon numero liitetiedostolle. %1 pitäisi olla %2\\n" +msgstr "Virheellinen tapahtuman numero liitetiedostolle. %1 pitäisi olla %2\\n" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "Perustiedot" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Piilokopio" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Muista tallentaa muutokset" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" -msgstr "Ennen" +msgstr "ennen" -#: NOT FOUND IN SOURCE -msgid "Begin Approval" +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" msgstr "" -#: etc/initialdata:202 +#: etc/initialdata:217 msgid "Blank" +msgstr "Tyhjä" + +#: html/Search/Elements/EditFormat:84 +msgid "Bold" msgstr "" -#: html/Search/Listing.html:79 +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "Osoite tähän kyselyyn (selaimen kirjanmerkkeihin)" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "Lyhyet otsikot" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" -msgstr "Työpyyntöjen ryhmäpäivitys" +msgstr "Tapausten ryhmäpäivitys" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" -msgstr "Systeemikäyttäjien muokkaus ei ole sallittua" +msgstr "Järjestelmäkäyttäjien muokkaus ei ole sallittua" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" -msgstr "" +msgstr "Näkeekö toimeksiantaja tämän työjonon" -#: lib/RT/CustomField_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "Kentän lisääminen ilman nimeä ei onnistu" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" -msgstr "Työpyyntöä ei voi linkittää itseensä" +msgstr "Tapausta ei voi linkittää itseensä" -#: lib/RT/Ticket_Overlay.pm:2787 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Et voi yhdistää jo yhdistettyyn työpyyntöön. Sinun ei pitäisi saada tätä virhettä koskaan." +msgstr "Et voi yhdistää jo yhdistettyyn tapaukseen. Sinun ei pitäisi saada tätä virhettä koskaan." + +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "" -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" -msgstr "Sekä basen ja kohteen määritteleminen samalla ei ole mahdollista" +msgstr "Sekä juuren ja kohteen määritteleminen samalla ei ole mahdollista" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "Käyttäjää ei voitu luoda: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "Kopio" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "Muuta salasana" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 -msgid "Check box to delete" +#: html/Elements/Submit:100 +msgid "Check All" msgstr "" -#: html/Admin/Elements/SelectRights:31 +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 +msgid "Check box to delete" +msgstr "Valitse laatikko poistaaksesi" + +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" -msgstr "Valitse laatikko poistaaksesi oikeuden" +msgstr "Valitse laatikko peruaksesi oikeuden" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" -msgstr "Lapsi" +msgstr "Lapset" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "Kaupunki" -#: html/Ticket/Elements/ShowDates:47 -msgid "Closed" +#: html/Elements/Submit:102 +msgid "Clear All" msgstr "" -#: html/SelfService/Elements/Tabs:60 +#: html/Ticket/Elements/ShowDates:68 +msgid "Closed" +msgstr "Suljettu" + +#: NOT FOUND IN SOURCE msgid "Closed requests" -msgstr "Suljetut työpyynnöt" +msgstr "Suljetut tapaukset" + +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "" #: NOT FOUND IN SOURCE msgid "Command not understood!\\n" msgstr "Komentoa ei ymmärretty!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Kommentoi" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Kommenttien osoite" @@ -842,40 +1010,39 @@ msgstr "Kommenttien osoite" msgid "Comment not recorded" msgstr "Kommenttia ei tallennettu" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" -msgstr "" +msgstr "Kommentoi tapauksia" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "Kommentit" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" -msgstr "Kommentit (Ei lähetetä tilaajille)" +msgstr "Kommentti (ei lähetetä tilaajille)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" -msgstr "Kommentit (Ei lähetetä tilaajille)" +msgstr "Kommentti (ei lähetetä tilaajille)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "Kommentit kohteesta %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "Kommentit tästä käyttäjästä" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "Kommentit lisätty" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "Suorita tumppi" @@ -883,51 +1050,55 @@ msgstr "Suorita tumppi" msgid "Compile Restrictions" msgstr "Kokoa rajoitukset" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "Ehto" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "" -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "Ehtoa ei löydetty" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Ylläpito" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" -msgstr "Varmista" +msgstr "Vahvista" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" -msgstr "Kontaktitietojärjestelmä" +msgstr "Yhteystietojärjestelmä" #: NOT FOUND IN SOURCE msgid "Contacted date '%1' could not be parsed" msgstr "Järjestelmä ei ymmärrä päivää '%1'" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Sisältö" -#: NOT FOUND IN SOURCE -msgid "Coould not create group" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" msgstr "" -#: etc/initialdata:266 +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "" + +#: etc/initialdata:286 msgid "Correspondence" msgstr "" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "Kirjeenvaihdon osoite" -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Kirjeenvaihto lisätty" @@ -935,203 +1106,249 @@ msgstr "Kirjeenvaihto lisätty" msgid "Correspondence not recorded" msgstr "Vastausta ei tallennettu" -#: lib/RT/Ticket_Overlay.pm:3458 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " -msgstr "Uuden tiedon lisääminen kenttään ei onnistunut" +msgstr "Uuden tiedon lisääminen kenttään epäonnistui" #: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. %1 " +msgstr "Uuden kentän lisäys tapaukselle epäonnistui. %1 " + +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " msgstr "" -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "Omistajaa ei voitu vaihtaa." -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" -msgstr "Uuden kentän lisääminen ei onnistunut" +msgstr "Uuden kentän lisääminen epäonnistui" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" -msgstr "Ryhmän luominen ei onnistunut" +msgstr "Ryhmän luominen epäonnistui" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" -msgstr "Ei onnistuttu luomaan pohjaa: " +msgstr "Pohjan luonti epäonnistui: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" -msgstr "Työpyynön luominen ei onnistunut. Työjonoa ei ole asetettu" +msgstr "Tapauksen luonti epäonnistui. Työjonoa ei ole asetettu" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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 "Käyttäjän luominen ei onnistunut" - -#: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "" +msgstr "Käyttäjän luonti epäonnistui" #: NOT FOUND IN SOURCE msgid "Could not find a ticket with id %1" -msgstr "Työpyyntöä numero '%1' ei löytynyt." +msgstr "Tapausta numerolla %1 ei löytynyt." #: NOT FOUND IN SOURCE msgid "Could not find group %1." -msgstr "Ryhmää '%1' ei löytynyt." +msgstr "Ryhmää %1 ei löytynyt." -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "Käyttäjää ei löydetty eikä pystytty luomaan" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "Tätä toimeksiantajaa ei löytynyt" #: NOT FOUND IN SOURCE msgid "Could not find user %1." -msgstr "Käyttäjää '%1' ei löytynyt." +msgstr "Käyttäjää %1 ei löytynyt." -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "Ryhmän lataaminen ei onnistunut" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "Ei voinut tehdä toimeksiantajaa %1:ksi tälle työjonolle" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" -msgstr "Ei voinut tehdä toimeksiantajaa tälle työpyynnölle: %1" +msgstr "Ei voinut tehdä toimeksiantajaa tälle tapaukselle: %1" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" -msgstr "Ei voinut poistaa toimeksiantajaa tältä työjonolta: %1" +msgstr "Toimeksiantajaa ei voitu poistaa tältä työjonolta: %1" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Ei voinut poistaa toimeksiantajaa tältä työpyynnöltä: %1" +msgstr "Toimeksiantajaa ei voitu poistaa tältä tapaukselta: %1" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "Jäsenen lisääminen ryhmään ei onnistunut" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" -msgstr "Toiminnon luominen ei onnistunut: %1" +msgstr "Tapahtuman luominen ei onnistunut: %1" #: NOT FOUND IN SOURCE msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Järjestelmä ei ymmärtänyt mitä tehdä pgp:n vastauksella\\n" +msgstr "Järjestelmä ei gpg:n vastauksesta ymmärtänyt mitä tehdä\\n" #: NOT FOUND IN SOURCE msgid "Couldn't find group\\n" msgstr "Ryhmää ei löytynyt\\n" -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" -msgstr "" +msgstr "Riviä ei löytynyt" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" -msgstr "Tätä toimeksiantajaa ei löytynyt" +msgstr "Toimeksiantajaa ei löytynyt" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" -msgstr "Tätä arvoa ei löytynyt" +msgstr "Arvoa ei löytynyt" #: NOT FOUND IN SOURCE msgid "Couldn't find that watcher" -msgstr "" +msgstr "Tarkkailijaa ei löytynyt" #: NOT FOUND IN SOURCE msgid "Couldn't find user\\n" msgstr "Käyttäjää ei löytynyt\\n" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" -msgstr "Ei onnistuttu lataamaan käytäjää %1 tietokannasta.\\n" +msgstr "Ei onnistuttu lataamaan käyttäjää %1 tietokannasta.\\n" -#: NOT FOUND IN SOURCE -msgid "Couldn't load KeywordSelects." +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" msgstr "" #: NOT FOUND IN SOURCE msgid "Couldn't load RT config file '%1' %2" -msgstr "RT asetustiedoston lataaminen ei onnistunut:'%1' %2" +msgstr "RT-asetustiedoston lataaminen ei onnistunut:'%1' %2" #: NOT FOUND IN SOURCE msgid "Couldn't load Scrips." -msgstr "Lappujen lataaminen ei onnistunut." +msgstr "Toimintojen lataaminen ei onnistunut." -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "Ryhmän %1 lataaminen ei onnistunut" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "Linkin lataaminen ei onnistunut" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "Työjonon lataaminen ei onnistunut" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "Työjonon %1 lataaminen ei onnistunut" #: NOT FOUND IN SOURCE msgid "Couldn't load scrip" -msgstr "Lapun lataaminen ei onnistunut" +msgstr "Toiminnon lataaminen ei onnistunut" #: NOT FOUND IN SOURCE msgid "Couldn't load template" msgstr "Pohjan lataaminen ei onnistunut" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "Tämän käyttäjän lataaminen ei onnistunut (%1)" -#: html/SelfService/Display.html:166 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" -msgstr "Työpyynnön '%1' lataaminen ei onnistunut" +msgstr "Tapauksen '%1' lataaminen ei onnistunut" + +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "Maa" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "Luo" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" -msgstr "" +msgstr "Luo tapauksia" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "Luo kenttä" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" -msgstr "" +msgstr "Luo kenttä työjonolle %1" -#: html/Admin/Global/CustomField.html:48 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" -msgstr "" +msgstr "Luo kenttä, jota sovelletaan kaikkiin työjonoihin" #: NOT FOUND IN SOURCE msgid "Create a new Custom Field" @@ -1139,15 +1356,15 @@ msgstr "Luo uusi kenttä" #: NOT FOUND IN SOURCE msgid "Create a new global scrip" -msgstr "Luo uusi globaali lappu" +msgstr "Luo uusi yleinen toiminto" -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "Luo uusi ryhmä" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" -msgstr "Luo uusi personaali ryhmä" +msgstr "Luo uusi henkilökohtainen ryhmä" #: NOT FOUND IN SOURCE msgid "Create a new queue" @@ -1155,21 +1372,21 @@ msgstr "Luo uusi työjono" #: NOT FOUND IN SOURCE msgid "Create a new scrip" -msgstr "" +msgstr "Luo uusi toiminto" #: NOT FOUND IN SOURCE msgid "Create a new template" msgstr "Luo uusi pohja" -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" -msgstr "Luo uusi työpyyntö" +msgstr "Luo uusi tapaus" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "Luo uusi käyttäjä" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "Luo uusi työjono" @@ -1177,68 +1394,76 @@ msgstr "Luo uusi työjono" msgid "Create a queue called" msgstr "Luo työjono nimeltään" -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 +#: NOT FOUND IN SOURCE msgid "Create a request" -msgstr "Luo työpyyntö" +msgstr "Luo tapaus" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" -msgstr "" +msgstr "Luo toiminto työjonolle %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "Luo pohja" +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Create failed: %1 / %2 / %3 " -msgstr "" +msgstr "Luonti epäonnistui %1 / %2 / %3 " #: NOT FOUND IN SOURCE msgid "Create failed: %1/%2/%3" -msgstr "" +msgstr "Luonti epäonnistui: %1/%2/%3" -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" -msgstr "" +msgstr "Luo uusia tapauksia tämän toiminnon pohjalta" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" -msgstr "Luo työpyyntö" +msgstr "Luo tapaus" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" -msgstr "" +msgstr "Luo tapauksia tähän työjonoon" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" -msgstr "" +msgstr "Luo, muokkaa ja poista kenttiä" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" -msgstr "" +msgstr "Luo, poista ja muokkaa työjonoja" #: NOT FOUND IN SOURCE msgid "Create, delete and modify the members of any user's personal groups" -msgstr "" +msgstr "Luo, poista ja muokkaa kenen tahansa henkilökohtaisten ryhmien jäseniä" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" -msgstr "" +msgstr "Luo, poista ja muokkaa henkilökohtaisten ryhmien jäseniä" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" +msgstr "Luo, poista ja muokkaa käyttäjiä" + +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" msgstr "" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "Luotu" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "Luotu kenttä %1" @@ -1247,630 +1472,763 @@ msgstr "Luotu kenttä %1" msgid "Created template %1" msgstr "Luotu pohja %1" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Tämänhetkiset suhteet" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" -msgstr "" +msgstr "Tämänhetkinen toiminto" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Tämänhetkiset jäsenet" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Tämänhetkiset oikeudet" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" -msgstr "" +msgstr "Tämänhetkiset hakumääritteet" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Tämänhetkiset tarkkailijat" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) -msgid "Custom Field #%1" -msgstr "" - -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "Kentät" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "Kenttä %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "Kentällä %1 on arvo" -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "Kentällä %1 ei ole arvoa" -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Kenttää %1 ei löytynyt" -#: html/Admin/Elements/EditCustomFields:197 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" -msgstr "" +msgstr "Kenttä poistettu" -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "Kenttää ei löytynyt" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Kenttän arvoa %1 ei löytynyt kentälle %2" +msgstr "Kentän arvoa %1 ei löytynyt kentälle %2" #: NOT FOUND IN SOURCE msgid "Custom field value changed from %1 to %2" -msgstr "Kenttän arvo muutettu arvosta %1 arvoon" +msgstr "Kentän arvo muutettu arvosta %1 arvoon" -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" -msgstr "Kenttän arvoa ei pystytty poistamaan" +msgstr "Kentän arvoa ei pystytty poistamaan" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" -msgstr "Kenttän arvoa ei löydetty" +msgstr "Kentän arvoa ei löydetty" -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" -msgstr "Kenttän arvo poistettu" +msgstr "Kentän arvo poistettu" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Data error" -msgstr "" - -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Päivät" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." -msgstr "Joulu" +msgstr "joulu" #: NOT FOUND IN SOURCE msgid "December" +msgstr "joulukuu" + +#: etc/initialdata:222 +msgid "Default Autoresponse template" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" +#: html/Tools/Offline.html:61 +msgid "Default Queue" msgstr "" -#: etc/initialdata:207 -msgid "Default Autoresponse template" +#: html/Tools/Offline.html:70 +msgid "Default Requestor" msgstr "" -#: etc/initialdata:275 +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" -msgstr "" +msgstr "Oletustapahtumapohja" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" -msgstr "" +msgstr "Oletus: %1/%2 muutettu arvosta %3 arvoon %4" -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Delegoi oikeuksia" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "Poista" -#: lib/RT/Queue_Overlay.pm:90 -msgid "Delete tickets" +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" msgstr "" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "Delete tickets" +msgstr "Poista tapaukset" + +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "Tämän objektin poistaminen saattaa rikkoa tietokannan viitteet" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "Tämän objektin poistaminen rikkoo tietokannan viitteet" -#: lib/RT/User_Overlay.pm:430 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Tämän objektin poistaminen rikkoo tietokannan viitteet" -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity. That's bad." -msgstr "" - -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" -msgstr "Tästä pyynnöstä riippuu" +msgstr "Tästä tapauksesta riippuu" #: NOT FOUND IN SOURCE msgid "Dependencies: \\n" msgstr "Riippuvuudet: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 -msgid "Depends on" -msgstr "Riippuu pyynnöstä" +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "DependsOn" +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" msgstr "" -#: html/Elements/SelectSortOrder:35 +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "" + +#: 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 +msgid "Depends on" +msgstr "Riippuu tapauksesta" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "Laskeva" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" -msgstr "Työtilauksen kuvaus" +msgstr "Kuvaa tapausta" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "Kuvaus" -#: html/SelfService/Elements/MyRequests:44 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "Yksityiskohdat" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Näytä" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" +msgstr "Näytä käyttöoikeuslista" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" msgstr "" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" -msgstr "" +msgstr "Näytä työjonon toimintopohjat" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" -msgstr "" +msgstr "Näytä työjonon toiminnot" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Näkymä" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Display ticket #%1" -msgstr "Näytä työpyyntö #%1" +msgstr "Näytä tapaus #%1" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" +msgstr "Tee mitä tahansa ja kaikki" + +#: html/Search/Build.html:112 +msgid "Do the Search" msgstr "" -#: html/Elements/Refresh:30 +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "Älä päivitä tätä sivua" -#: html/Search/Elements/PickRestriction:114 +#: NOT FOUND IN SOURCE msgid "Don't show search results" -msgstr "" +msgstr "Älä näytä hakutuloksia" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "Lataa" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 msgid "Due" -msgstr "Mennessä" +msgstr "Erääntyy" #: NOT FOUND IN SOURCE msgid "Due date '%1' could not be parsed" -msgstr "Mennessä -päivää '%1' ei onnistuttu kääntämään järjestelmälle." +msgstr "Erääntymispäivää '%1' ei onnistuttu tulkkaamaan järjestelmälle." -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "VIRHE: Työpyynnön '%1' lataaminen ei onnistunut: %2.\\n" +msgstr "VIRHE: Tapauksen '%1' lataaminen ei onnistunut: %2.\\n" #: NOT FOUND IN SOURCE msgid "Edit" msgstr "Muokkaa" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" -msgstr "Muokkaa kenttiä: työjono %1" +msgstr "Muokkaa työjonon %1 kenttiä" + +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "Muokkaa suhteita" -#: html/Admin/Queues/Templates.html:41 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" -msgstr "" +msgstr "Muokkaa työjonon %1 pohjia" #: NOT FOUND IN SOURCE msgid "Edit keywords" +msgstr "Muokkaa avainsanoja" + +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" msgstr "" #: NOT FOUND IN SOURCE msgid "Edit scrips" -msgstr "Muokkaa lappuja" +msgstr "Muokkaa toimintoja" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" -msgstr "Muokkaa systeemipohjia" +msgstr "Muokkaa järjestelmäpohjia" #: NOT FOUND IN SOURCE msgid "Edit templates for %1" -msgstr "Muokkaa pohjia: työjono %1" +msgstr "Muokkaa työjonon %1 pohjia" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" -msgstr "Asetusten muokkaus: työjono %1" +msgstr "Muokataan työjonon %1 asetuksia" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" -msgstr "Asetusten muokkaus: käyttäjä %1" +msgstr "Muokataan käyttäjän %1 asetuksia" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" -msgstr "Kentän %1 muokkaus" +msgstr "Muokataan kenttää %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" -msgstr "Ryhmän %1 jäsenten muokkaus" +msgstr "Muokataan ryhmän %1 jäseniä" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" -msgstr "Henkilökohtaisen ryhmän %1 jäsenten muokkaus" +msgstr "Muokataan henkilökohtaisen ryhmän %1 jäseniä" #: NOT FOUND IN SOURCE msgid "Editing template %1" -msgstr "Pohjan %1 muokkaus" +msgstr "Muokataan pohjaa %1" -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "Joko juuri tai kohde täytyy olla määritelty" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Sähköposti" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "Sähköpostiosoite on jo käytössä" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "Sähköpostiosoite" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "Sähköpostin koodaus" -#: html/Admin/Elements/EditCustomField:36 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "" +msgstr "Aktiivinen (rastin poistaminen passivoi kentän)" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" -msgstr "" +msgstr "Aktiivinen (rastin poistaminen passivoi ryhmän)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktiivinen (Rastin poistaminen asettaa työjonon ei-aktiiviseksi)" - -#: html/Admin/Elements/EditCustomFields:99 -msgid "Enabled Custom Fields" -msgstr "" +msgstr "Aktiivinen (rastin poistaminen passivoi työjonon)" -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "Aktiiviset työjonot" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "Aktivoitu tila %1" -#: lib/RT/CustomField_Overlay.pm:361 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" +msgstr "Anna useampi arvo" + +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." msgstr "" -#: lib/RT/CustomField_Overlay.pm:358 +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" +msgstr "Anna yksi arvo" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." msgstr "" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Lisää työpyyntöjen numerot tai www-linkit. Käytä välilyöntiä erottimena syöttäessäsi useampaa numeroa tai linkkiä." +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Lisää tapausten numerot tai www-linkit. Erota useammat välilyönneillä." -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Virhe" -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "Virhe parametreissa: Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Queue->DelWatcher" msgstr "Virhe parametreissa: Queue->DelWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Virhe parametreissa: Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Ticket->DelWatcher" msgstr "Virhe parametreissa: Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "" + #: etc/initialdata:20 msgid "Everyone" -msgstr "" +msgstr "Kaikki" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "Ulkoinen autentikointitunnus" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "Ulkoinen yhteystietotunnus" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" -msgstr "Lisatieto" +msgstr "Lisätieto" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "'Etuoikeutettu' -pseudoryhmää ei löytynyt" +msgstr "'Erioikeutettu'-valeryhmää ei löytynyt" -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Ei-etuoikeutettu' -pseudoryhmää ei löytynyt" +msgstr "'Erioikeudeton'-valeryhmää ei löytynyt" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." -msgstr "Helmi" +msgstr "helmi" #: NOT FOUND IN SOURCE msgid "February" +msgstr "helmikuu" + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" msgstr "" #: NOT FOUND IN SOURCE msgid "Fin" msgstr "Fin" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Loppuprioriteetti" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 +#: NOT FOUND IN SOURCE msgid "Find group whose" +msgstr "Etsi ryhmä, jonka" + +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" msgstr "" -#: html/Elements/Quicksearch:25 +#: NOT FOUND IN SOURCE msgid "Find new/open tickets" -msgstr "Etsi uudet/avoimet työpyynnöt" +msgstr "Etsi uudet/avoimet tapaukset" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" -msgstr "Etsi käyttäjät joiden" +msgstr "Etsi käyttäjät, joiden" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" -msgstr "" +msgstr "Hae tapauksia" -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "" - -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Ensimmäinen" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "Viimeinen sivu" -#: docs/design_docs/string-extraction-guide.txt:33 +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 msgid "Foo Bar Baz" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:24 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "Pakota muutos" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "Vapaamuotoiset yhteystiedot" -#: lib/RT/CustomField_Overlay.pm:38 -msgid "FreeformMultiple" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:37 -msgid "FreeformSingle" -msgstr "" - -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Pe" -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "Kokonaiset otsikot" -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" +#: html/Tools/Offline.html:87 +msgid "Get template from file" msgstr "" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" -msgstr "" +msgstr "Annettu käyttäjälle %1" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" -msgstr "Globaali" +msgstr "Yleiset" -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" msgstr "" #: NOT FOUND IN SOURCE msgid "Global Scrips" -msgstr "Globaalit laput" +msgstr "Yleiset toiminnot" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" +msgstr "Yleinen pohja: %1" + +#: html/Tools/Offline.html:91 +msgid "Go" msgstr "" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: 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 msgid "Go!" msgstr "Ok!" #: NOT FOUND IN SOURCE msgid "Good pgp sig from %1\\n" -msgstr "Hyvä PGP allekirjoitus käyttäjältä %1\\n" +msgstr "Hyvä PGP-allekirjoitus käyttäjältä %1\\n" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "Siirry sivulle" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" -msgstr "Siirry työpyyntöön" +msgstr "Siirry tapaukseen" -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" -msgstr "" +msgstr "Ryhmä" #: NOT FOUND IN SOURCE msgid "Group %1 %2: %3" msgstr "Ryhmä %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "Ryhmän oikeudet" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "Ryhmässä on jo jäsen" #: NOT FOUND IN SOURCE msgid "Group could not be created." -msgstr "" +msgstr "Ryhmää ei voitu luoda." -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" -msgstr "" +msgstr "Ryhmää ei voitu luoda: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "Ryhmä luotu" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" -msgstr "" +msgstr "Ryhmässä ei ole sellaista jäsentä" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Ryhmää ei löydetty" @@ -1882,239 +2240,281 @@ msgstr "Ryhmää ei löydetty.\\n" msgid "Group not specified.\\n" msgstr "Ryhmää ei määritelty.\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Ryhmät" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "Ryhmät eivät voi olla jäsentensä jäseniä" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "Hei!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Hei, %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "Historia" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "Kotipuhelin" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Kotisivu" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "" -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." +#: html/Search/Build.html:637 +msgid "I'm lost" msgstr "" -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "Numero" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identiteetti" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" +msgstr "Jos hyväksyntä hylätään, hylkää alkuperäinen ja poista siitä riippuvat hyväksynnät" + +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." msgstr "" -#: bin/rt-crontool:190 +#: 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 "" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "Jos olet muuttanut tietoja, muista tallentaa" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" -msgstr "" +msgstr "Kelpaamaton arvo %1" -#: lib/RT/Interface/Web.pm:863 +#: lib/RT/Record.pm:936 msgid "Immutable field" -msgstr "" +msgstr "Muuttumaton kenttä" -#: html/Admin/Elements/EditCustomFields:74 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." +msgstr "Sisällytä passiiviset kentät listaukseen" + +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." msgstr "" -#: html/Admin/Queues/index.html:43 +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." -msgstr "Sisällytä listaukseen myös ei-aktiiviset työjonot." +msgstr "Sisällytä listaukseen myös passiiviset työjonot." -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." -msgstr "Sisällytä listaukseen myös ei-aktiiviset käyttäjät." +msgstr "Sisällytä listaukseen myös passiiviset käyttäjät." + +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "Alkuprioriteetti" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Virhe syötteessä" -#: NOT FOUND IN SOURCE -msgid "Interest noted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" -msgstr "" +msgstr "Sisäinen virhe" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" -msgstr "" +msgstr "Sisäinen virhe: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "Ryhmän tyyppi ei kelpaa" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" -msgstr "" +msgstr "Kelpaamaton oikeus" #: NOT FOUND IN SOURCE msgid "Invalid Type" -msgstr "" +msgstr "Kelpaamaton tyyppi" -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" -msgstr "" +msgstr "Kelpaamatonta dataa" -#: lib/RT/Ticket_Overlay.pm:438 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Omistaja ei kelpaa. Asetetaan oletusasetusten mukaan 'eikukaan'" +msgstr "Omistaja ei kelpaa. Asetetaan oletusasetusten mukaan 'ei kukaan'" -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "Kelpaamaton työjono" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "Kelpaamaton oikeus" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "Kelpaamaton arvo kohteelle %1" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "Kelpaamaton arvo kentälle" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Kelpaamaton arvo tilalle" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "" -#: bin/rt-crontool:192 +#: 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 "" -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" msgstr "" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "Tammi" #: NOT FOUND IN SOURCE msgid "January" -msgstr "" +msgstr "tammikuu" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" -msgstr "" +msgstr "Liity tai jätä ryhmä" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Heinä" #: NOT FOUND IN SOURCE msgid "July" -msgstr "" +msgstr "Heinäkuu" -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" -msgstr "Jumbo" +msgstr "Jätti" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." -msgstr "Kesä" +msgstr "kesä" #: NOT FOUND IN SOURCE msgid "June" -msgstr "" +msgstr "kesäkuu" #: NOT FOUND IN SOURCE msgid "Keyword" msgstr "Avainsana" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" -msgstr "Keili" +msgstr "Kieli" + +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" -#: html/Ticket/Elements/Tabs:73 +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "Viimeinen" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Viimeinen yhteydenotto" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Viimeksi otettu yhteyttä" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" -msgstr "" +msgstr "Viimeksi huomautettu" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Viimeksi päivitetty" -#: NOT FOUND IN SOURCE -msgid "LastUpdated" +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" -msgstr "Vasen" +msgstr "Jäljellä" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" -msgstr "Päästä tämä käyttäjä sisään RT:een" +msgstr "Päästä tämä käyttäjä sisään RT:iin" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "Tälle käyttäjälle voidaan antaa oikeuksia" @@ -2126,575 +2526,728 @@ msgstr "Rajoitetaan omistajaa %1 %2" msgid "Limiting queue to %1 %2" msgstr "Rajoitetaan työjonoa %1 %2" -#: lib/RT/Ticket_Overlay.pm:2697 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "Linkki on jo olemassa" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "Linkkiä ei voitu luoda" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "Linkki luotu (%1)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "Linkki poistettu (%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "Linkkiä ei löydetty" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" -msgstr "Linkitä työpyyntö #%1" +msgstr "Linkitä tapaus #%1" #: NOT FOUND IN SOURCE msgid "Link ticket %1" -msgstr "" +msgstr "Linkitä tapaus #%1" -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Linkit" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "Sijainti" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Lokihakemistoa %1 ei löytynyt tai kirkoittaminen ei onnistunut.\\n RT ei voi toimia." +msgstr "Lokihakemistoa %1 ei löytynyt tai kirjoittaminen ei onnistunut.\\n RT ei voi toimia." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" -msgstr "Kirjautunut sisään tunnuksella %1" +msgstr "Olet kirjautunut sisään tunnuksella %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" msgstr "Kirjaudu sisään" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Kirjaudu ulos" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "Aseta omistaja" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "Aseta tila" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" -msgstr "Aseta mennessä -aika" +msgstr "Aseta erääntymisaika" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" -msgstr "Aseta päätetty -aika" +msgstr "Aseta päätösaika" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" -msgstr "Aseta aloitettu -aika" +msgstr "Aseta aloitusaika" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" -msgstr "Aseta alkaa -aika" +msgstr "Aseta alkuaika" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "Aseta oltu yhteydessä -aika" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "Aseta prioriteetti" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "Aseta työjono" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "Aseta otsikko" -#: html/Admin/index.html:33 -msgid "Manage groups and group membership" +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" msgstr "" -#: html/Admin/index.html:39 -msgid "Manage properties and configuration which apply to all queues" +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" msgstr "" -#: html/Admin/index.html:36 +#: html/Admin/index.html:69 +msgid "Manage groups and group membership" +msgstr "Hallinnoi ryhmiä ja jäsenyyksiä" + +#: html/Admin/index.html:85 +msgid "Manage properties and configuration which apply to all queues" +msgstr "Hallinnoi yleisiä asetuksia, jotka vaikuttavat kaikkiin työjonoihin" + +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" -msgstr "" +msgstr "Hallinnoi työjonoja ja työjonokohtaisia asetuksia" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" -msgstr "" +msgstr "Hallinnoi käyttäjiä ja salasanoja" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." -msgstr "Maasis" +msgstr "Maalis" #: NOT FOUND IN SOURCE msgid "March" -msgstr "" +msgstr "Maaliskuu" #: NOT FOUND IN SOURCE msgid "May" -msgstr "" +msgstr "Toukokuu" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "Touko" -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "Jäsen lisätty" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "Jäsen poistettu" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "Jäsentä ei poistettu" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "Jäsen:" -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "" - -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "Jäsenet" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "Yhdistäminen onnistui" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "Yhdistäminen epäonnistui. EffectiveId:n arvoa ei pystytty asettamaan" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "Yhdistä" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" +msgstr "Viesti" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" msgstr "" -#: lib/RT/Interface/Web.pm:867 +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" -msgstr "Käsipuhelin" +msgstr "Kännykkä" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" -msgstr "Käsipuhelin" +msgstr "Kännykkä" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" -msgstr "" +msgstr "Muokkaa käyttöoikeusluetteloa" #: NOT FOUND IN SOURCE msgid "Modify Custom Field %1" msgstr "Muokkaa kenttää %1" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Modify Custom Fields which apply to all queues" +msgstr "Muokkaa kaikkia työjonoja koskevia kenttiä" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 -msgid "Modify Scrip templates for this queue" +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" msgstr "" -#: lib/RT/Queue_Overlay.pm:76 -msgid "Modify Scrips for this queue" +#: html/User/Delegation.html:58 +msgid "Modify Rights" msgstr "" +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" +msgstr "Muokkaa tämän työjonon toimintopohjia" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" +msgstr "Muokkaa tämän työjonon toimintoja" + #: NOT FOUND IN SOURCE msgid "Modify System ACLS" -msgstr "" +msgstr "Muokkaa järjestelmän käyttöoikeusluetteloa" #: NOT FOUND IN SOURCE msgid "Modify Template %1" +msgstr "Muokkaa pohjaa %1" + +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" msgstr "" -#: html/Admin/Queues/CustomField.html:45 +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" msgstr "" -#: html/Admin/Global/CustomField.html:53 -msgid "Modify a CustomField which applies to all queues" -msgstr "" - -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" -msgstr "" +msgstr "Muokkaa työjonon %1 toimintoa" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" -msgstr "" +msgstr "Muokkaa toimintoa, jota sovelletaan kaikkiin työjonoihin" -#: NOT FOUND IN SOURCE -msgid "Modify dates for # %1" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" msgstr "" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" -msgstr "Muokkaa työpyynnön #%1 päiviä" +msgstr "Muokkaa tapauksen #%1 päiviä" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" -msgstr "Muokkaa työpyynnön #%1 päiviä" +msgstr "Muokkaa tapauksen #%1 päiviä" + +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: 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 "Muokkaa ryhmien globaaleja oikeuksia" +msgstr "Muokkaa ryhmien yleisiä oikeuksia" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." -msgstr "Muokkaa ryhmien globaaleja oikeuksia." - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" -msgstr "" +msgstr "Muokkaa ryhmien yleisiä oikeuksia." #: NOT FOUND IN SOURCE msgid "Modify global scrips" -msgstr "Muokkaa globaaleja lappuja" +msgstr "Muokkaa yleisiä toimintoja" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" -msgstr "" +msgstr "Muokkaa yleisiä käyttäjien oikeuksia" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." -msgstr "Muokkaa käyttäjien globaaleja oikeuksia." +msgstr "Muokkaa käyttäjien yleisiä oikeuksia." -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" +msgstr "Muokkaa ryhmän metatietoja tai poista ryhmä" + +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" msgstr "" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "Muokkaa ryhmän %1 oikeuksia." -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "Muokkaa ryhmän oikeuksia työjonossa %1" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" -msgstr "" +msgstr "Muokkaa tämän ryhmän jäsenlistaa" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" -msgstr "" +msgstr "Muokkaa omaa RT-tunnustasi" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "Muokkaa työjonoon %1 liittyviä käyttäjiä" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" -msgstr "Muokkaa työpyyntöön %1 liittyviä käyttäjiä" +msgstr "Muokkaa tapaukseen %1 liittyviä käyttäjiä" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" -msgstr "Muokkaa työjonoon %1 liittyviä lappuja" +msgstr "Muokkaa työjonoon %1 liittyviä toimintoja" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "" +msgstr "Muokkaa toimintoja, joita sovelletaan kaikkiin työjonoihin" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "Muokkaa pohjaa %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" -msgstr "" +msgstr "Muokkaaa pohjia, joita sovelletaan kaikkiin työjonoihin" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" -msgstr "Muokkaa työjonoa %1" +msgstr "Muokkaa ryhmää %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" -msgstr "" +msgstr "Muokkaa työjonon tarkkailjoita" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Muokkaa käyttäjää %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" -msgstr "Muokkaa työpyyntöä #%1" +msgstr "Muokkaa tapausta #%1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" -msgstr "Muokkaa työpyyntöä #%1" +msgstr "Muokkaa tapausta #%1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" +msgstr "Muokkaa tapauksia" + +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" msgstr "" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Muokkaa ryhmän %1 käyttäjien oikeuksia" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "Muokkaa työjonoon %1 liittyviä käyttäjien oikeuksia" #: NOT FOUND IN SOURCE msgid "Modify watchers for queue '%1'" -msgstr "Muokkaa työpyynnön %1 katselijoita" +msgstr "Muokkaa tapauksen %1 seuraajia" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Ma" -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "Lisätietoa: %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" -msgstr "" +msgstr "Siirrä alas" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" -msgstr "" +msgstr "Siirrä ylös" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "Monta" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "'Nimi' täytyy määritellä" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "My Approvals" -msgstr "" +msgstr "Hyväksyntäni" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" +msgstr "Hyväksyntäni" + +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" msgstr "" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: 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 msgid "Name" msgstr "Nimi" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Nimi on käytössä" #: NOT FOUND IN SOURCE msgid "Need approval from system administrator" -msgstr "" +msgstr "Tarvitsee järjestelmän ylläpitäjän hyväksynnän" -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" -msgstr "" +msgstr "Ei ikinä" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Uusi" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Uusi linkki" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Uusi salasana" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "Uusi linkki" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "" -#: html/Ticket/Elements/Tabs:36 +#: NOT FOUND IN SOURCE msgid "New Search" -msgstr "" +msgstr "Uusi haku" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" -msgstr "" +msgstr "Uusi ryhmä" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Uusi salasana" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Uusi salasana" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" -msgstr "" +msgstr "Uusi työjono" -#: html/SelfService/Elements/Tabs:63 +#: NOT FOUND IN SOURCE msgid "New request" -msgstr "Uusi työpyyntö" +msgstr "Uusi tapaus" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Uudet oikeudet" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "" +msgstr "Uusi toiminto" #: NOT FOUND IN SOURCE msgid "New search" msgstr "Uusi haku" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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 "Uusi pohja" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2771 +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" -msgstr "Uutta työpyyntöä ei löydy" +msgstr "Uutta tapausta ei löydy" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" -msgstr "" +msgstr "Uusi käyttäjä" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Uusi käyttäjä pyydetty" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Uusi tarkkailija" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "Uusi ikkunan asetus" -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Seuraava" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "Seuraava sivu" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "Lempinimi" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "Lempinimi" -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "Ei kenttiä" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "Ryhmää ei ole määritelty" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" msgstr "Työjonoa ei ole määritelty" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "Käyttäjää ei löydy. Ole hyvä ja ota yhteyttä RT:n ylläpitäjään.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "Ei pohjaa" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " -msgstr "Työpyyntöä ei määritelty. Poistutaan työpyynnöstä" +msgstr "Tapausta ei määritelty. Perutaan tapaus " #: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "Työpyyntöä ei määritelty. Poistutaan työpyynnön muokkauksesta\\n\\n" +msgstr "Tapausta ei määritelty. Poistutaan tapauksen muokkauksesta\\n\\n" -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "" @@ -2702,379 +3255,506 @@ msgstr "" msgid "No command found\\n" msgstr "Komentoa ei löytynyt\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" -msgstr "Tälle käyttäjälle ei ole annettu kommentteja" +msgstr "Käyttäjälle ei ole annettu kommentteja" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "Ei kirjeenvaihtoa liitettynä" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "Ei kuvausta kohteelle %1" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Ryhmää ei ole määritelty" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "Salasanaa ei ole asetettu" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" -msgstr "Ei oikeutta luoda kyselyitä" +msgstr "Ei oikeutta luoda työjonoja" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" -msgstr "" +msgstr "Ei oikeutta luoda tapauksia työjonoon '%1'" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "Ei oikeutta luoda käyttäjiä" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" -msgstr "Ei oikeutta tarkastella tätä työpyyntöä" +msgstr "Ei oikeutta tarkastella tätä tapausta" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" -msgstr "Ei oikeutta päivittää tätä työpyyntöä" +msgstr "Ei oikeutta päivittää tätä tapausta" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "Toimeksiantajaa ei ole määritelty" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." -msgstr "Johtajia ei ole valittu." +msgstr "Toimeksiantajia ei ole valittu." -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." -msgstr "Yhtään hakukriteerit täyttävää työpyyntöä ei löytynyt." +msgstr "Yhtään hakukriteerit täyttävää tapausta ei löytynyt." -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" -msgstr "" +msgstr "Oikeuksia ei löytynyt" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." -msgstr "Ei oikeuksia" +msgstr "Ei myönnettyjä oikeuksia." + +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" -#: html/Search/Bulk.html:149 +#: html/Search/Bulk.html:194 msgid "No search to operate on." -msgstr "Ei hakua jonka kanssa työskennellä" +msgstr "Ei työstettävää hakua" + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "" #: NOT FOUND IN SOURCE msgid "No ticket id specified" -msgstr "Työpyynnön numeroa ei ole määritelty" +msgstr "Tapauksen numeroa ei ole määritelty" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" -msgstr "Toiminnon tyyppiä ei ole määritelty" +msgstr "Tapahtuman tyyppiä ei ole määritelty" #: NOT FOUND IN SOURCE msgid "No user or email address specified" -msgstr "" +msgstr "Käyttäjää tai sähköpostiosoitetta ei ole määritelty" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "Yhtään hakukriteerit täyttävää käyttäjää ei löytynyt." -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Ei kelpaa RT käyttäjäksi. RT cvs käsittelijä irrottautuu. Ole hyvä ja ota yhteyttä RT:n ylläpitäjään.\\n" +msgstr "Ei kelpaa RT-käyttäjäksi. RT:n cvs-käsittelijä irrottautuu. Ole hyvä ja ota yhteyttä RT:n ylläpitäjään.\\n" -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" -msgstr "" +msgstr "Ei kukaan" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" -msgstr "" +msgstr "Olematon kenttä?" -#: html/Elements/Login:99 +#: NOT FOUND IN SOURCE msgid "Not logged in" -msgstr "" +msgstr "Sisäänkirjautumaton" -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "Et ole kirjautunut järjestelmään" -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Ei asetettu" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." -msgstr "Ei vielä implementoitu." +msgstr "Ei vielä toteutettu." -#: html/Admin/Groups/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Not yet implemented...." -msgstr "Ei vielä implementoitu..." +msgstr "Ei vielä toteutettu..." -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" -msgstr "" +msgstr "Merkintöjä" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "Ilmoitusta ei pystytty lähettämään" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "Marras" #: NOT FOUND IN SOURCE msgid "November" +msgstr "marraskuu" + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" msgstr "" -#: lib/RT/Record.pm:157 +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Loka" #: NOT FOUND IN SOURCE msgid "October" +msgstr "lokakuu" + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" msgstr "" -#: html/Elements/SelectDateRelation:35 +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "-" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" -msgstr "" +msgstr "Näytä vain pyynnöt, jotka on luotu jälkeen %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" -msgstr "" +msgstr "Näytä vain pyynnöt, jotka on luotu ennen %1" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Avoin" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Avaa" -#: html/SelfService/Elements/Tabs:57 +#: NOT FOUND IN SOURCE msgid "Open requests" -msgstr "Avoimet työpyynnöt" +msgstr "Avoimet tapaukset" -#: html/Admin/Users/Prefs.html:41 +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" -msgstr "Avoimet työpyynnöt (listasta) uudessa ikkunassa" +msgstr "Avoimet tapaukset (listasta) uudessa ikkunassa" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" -msgstr "Avoimet työpyynnöt (listasta) toisessa ikkunassa" +msgstr "Avoimet tapaukset (listasta) toisessa ikkunassa" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" +msgstr "Avaa tapaukset, kun esiintyy kirjeenvaihtoa" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" msgstr "" -#: html/Search/Elements/PickRestriction:101 +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "Järjestäminen" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" -msgstr "Organisaatio" +msgstr "Laitos" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" +msgstr "Alkuperäinen tapaus: #%1" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" msgstr "" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "Ajan kuluessa prioriteetti muuttuu kohti" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" -msgstr "" +msgstr "Omat tapaukset" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "Omistaja" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) +#: NOT FOUND IN SOURCE msgid "Owner changed from %1 to %2" +msgstr "Omistaja vaihdettu tunnuksesta %1 tunnukseen %2" + +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." msgstr "" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" -msgstr "Omistaja pakottamalla muutettu arvosta %1 arvoon %2" +msgstr "Omistaja pakolla vaihdettu tunnuksesta %1 tunnukseen %2" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" -msgstr "Omistaja on" +msgstr "Omistaja" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Hakulaite" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" -msgstr "Hakulaite puhelin" +msgstr "Hakulaite-puhelin" -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Isät" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Salasana" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" -msgstr "Salasanan muistuttaja" +msgstr "Salasanan muistutus" + +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "Salasana liian lyhyt" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Salasana: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "" + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "Käyttäjät" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "" + +#: 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 msgid "Permission Denied" msgstr "Pääsy kielletty" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" -msgstr "" +msgstr "Omat ryhmät" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Omat ryhmät" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Omat ryhmät:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Puhelinnumerot" -#: html/Admin/Users/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Placeholder" msgstr "Paikanpitäjä" -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "Asetukset" @@ -3082,15 +3762,19 @@ msgstr "Asetukset" msgid "Prefs" msgstr "Asetukset" -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Valmistele tumppi" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Edellinen" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "Edellinen sivu" @@ -3098,110 +3782,129 @@ msgstr "Edellinen sivu" msgid "Pri" msgstr "Pri" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." -msgstr "" +msgstr "Toimeksiantajaa %1 ei löytynyt" -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Prioriteetti" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "Prioriteetti alkaa arvosta" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "" + #: etc/initialdata:25 msgid "Privileged" -msgstr "" +msgstr "Erioikeutettu" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" -msgstr "Etuoikeutuksen tila: &1" +msgstr "Erioikeutuksen tila: &1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" -msgstr "Etuoikeutetut käyttäjät" +msgstr "Erioikeutetut käyttäjät" #: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 msgid "Pseudogroup for internal use" +msgstr "Valeryhmä sisäiseen käyttöön" + +#: html/Search/Elements/EditQuery:47 +msgid "Query" msgstr "" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "" + +#: 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 msgid "Queue" msgstr "Työjono" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" -msgstr "" +msgstr "Työjonoa %1 ei löytynyt" #: NOT FOUND IN SOURCE msgid "Queue '%1' not found\\n" msgstr "Työjonoa '%1' ei löytynyt" -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "" - -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "Työjonon nimi" #: NOT FOUND IN SOURCE msgid "Queue Scrips" -msgstr "Työjonon laput" +msgstr "Työjonon toiminnot" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "Työjono on jo olemassa" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "Työjonoa ei voitu luoda" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "Työjonoa ei voitu ladata." -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "Työjono luotu" #: NOT FOUND IN SOURCE msgid "Queue is not specified." -msgstr "" +msgstr "Työjonoa ei määritelty" -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "Työjonoa ei löytynyt" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "Työjonot" -#: html/Elements/Login:34 +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 - %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." -msgstr "RT %1, tekijä <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." +msgstr "RT %1, tekijä: <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." #: NOT FOUND IN SOURCE msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "RT Ylläpito" @@ -3221,7 +3924,7 @@ msgstr "RT Konfiguraatiovirhe" msgid "RT Critical error. Message not recorded!" msgstr "RT Kriittinen virhe. Viestiä ei tallennettu!" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "RT Virhe" @@ -3230,17 +3933,17 @@ msgid "RT Received mail (%1) from itself." msgstr "RT Sai sähköpostin (%1) itseltään." #: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "" - -#: html/SelfService/Closed.html:25 msgid "RT Self Service / Closed Tickets" -msgstr "RT Itsepalvelu / Suljetut työpyynnöt" +msgstr "RT Itsepalvelu / Suljetut tapaukset" -#: html/index.html:25 html/index.html:28 -msgid "RT at a glance" +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" msgstr "" +#: html/index.html:72 html/index.html:75 +msgid "RT at a glance" +msgstr "RT yhdellä silmäyksellä" + #: NOT FOUND IN SOURCE msgid "RT couldn't authenticate you" msgstr "RT Ei pystynyt tunnistamaan sinua" @@ -3253,25 +3956,24 @@ msgstr "RT ei löytänyt tilaajaa ulkopuolisesta tietokannasta" msgid "RT couldn't find the queue: %1" msgstr "RT ei löytänyt työjonoa: %1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "RT ei pystynyt tarkistamaan tätä PGP allekirjoitusta.\\n" -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "" +msgstr "%1: RT" #: NOT FOUND IN SOURCE msgid "RT has proccessed your commands" msgstr "RT on prosessoinut antamasi komennot" -#: html/Elements/Login:83 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RT on tekijänoikeuslain alainen, © 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Se on jakelussa seuraavalla lisenssillä: <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" @@ -3285,222 +3987,270 @@ msgstr "RT prosessoi tämän viestin kuten se olisi allekirjoittamaton." #: NOT FOUND IN SOURCE msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "RT:n sähköpostiohjaus moodi vaatii PGP tunnistamista. Et allekirjoittanut (PGP) viestiä tai allekirjoitustasi ei pystytty varmistamaan." +msgstr "RT:n sähköpostiohjaustila vaatii PGP-tunnistamista. Et allekirjoittanut (PGP) viestiä tai allekirjoitustasi ei pystytty vahvistamaan." -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "Oikea nimi" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "Oikea nimi" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "Viitattu jostakin" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "Viittaus johonkin" #: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Refine" msgstr "Päivitä" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "Päivitä haku" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "Päivitä tämä sivu %1 minuutin välein" -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "Linkit" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Poista kopio ylläpidolle" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Poista kopio" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Poista tilaaja" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Vastaa" -#: lib/RT/Queue_Overlay.pm:85 -msgid "Reply to tickets" +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" msgstr "" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "Reply to tickets" +msgstr "Vastaa tapauksiin" + +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Tilaaja" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "Tilaajan sähköpostiosoite" #: NOT FOUND IN SOURCE msgid "Requestor(s)" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RequestorAddresses" -msgstr "" +msgstr "Tilaajat" -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Tilaajat" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" -msgstr "Työpyyntö tulisi suorittaa mennessä" +msgstr "Tapaus tulisi suorittaa mennessä" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Palauta" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" -msgstr "Asuinpaikka" +msgstr "Koti" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "Päätä" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" -msgstr "" +msgstr "Ratkaise tapaus #%1 (%2)" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "Päätetty" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "Vastaus tilaajille" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Tulokset" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" -msgstr "Tulosta sivulle" +msgstr "Tuloksia sivulle: " -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" -msgstr "Varmista salasana" +msgstr "Vahvista salasana" + +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "" #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "Oikeutta %1 ei löydetty %2 %3 laajuudessa %4 (%5)\\n" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Oikeus delegoitu" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" -msgstr "Oikeus delegoitu" +msgstr "Oikeus myönnetty" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Oikeus ladattu" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" -msgstr "Oikeutta ei voitu peruuttaa" +msgstr "Oikeutta ei voitu perua" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Oikeutta ei löydetty" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "Oikeutta ei ladattu" -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" -msgstr "Oikeus peruutettu" +msgstr "Oikeus peruttu" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Oikeudet" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" -msgstr "" +msgstr "Oikeuksia ei voitu myöntää: %1" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" -msgstr "" +msgstr "Oikeuksia ei voitu perua: %1" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Roolit" -#: NOT FOUND IN SOURCE -msgid "RootApproval" +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" msgstr "" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "La" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "" + +#: 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 msgid "Save Changes" msgstr "Tallenna muutokset" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Tallenna muutokset" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" -msgstr "" +msgstr "Toiminto #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" -msgstr "Lappu luotu" +msgstr "Toiminto luotu" -#: html/Admin/Elements/EditScrips:84 -msgid "Scrip deleted" +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" msgstr "" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/EditScrips:107 +msgid "Scrip deleted" +msgstr "Toiminto poistettu" + +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" -msgstr "Laput" +msgstr "Toiminnot" #: NOT FOUND IN SOURCE msgid "Scrips for %1\\n" -msgstr "Laput työjonolle %1\\n" +msgstr "Toiminnot työjonolle %1\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" -msgstr "" +msgstr "Toiminnot, joita sovelletaan kaikkiin työjonoihin" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "Hae" @@ -3508,210 +4258,314 @@ msgstr "Hae" msgid "Search Criteria" msgstr "Hakukriteerit" -#: html/Approvals/Elements/PendingMyApproval:39 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "Valitse ryhmä" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "Valitse työjono" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "Valitse käyttäjä" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 -msgid "Select group" +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" msgstr "" -#: lib/RT/CustomField_Overlay.pm:355 -msgid "Select multiple values" +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" msgstr "" -#: lib/RT/CustomField_Overlay.pm:352 -msgid "Select one value" +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" msgstr "" -#: html/Admin/Elements/QueueTabs:67 -msgid "Select queue" +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" msgstr "" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 +msgid "Select group" +msgstr "Valitse ryhmä" + +#: lib/RT/CustomField_Overlay.pm:59 +msgid "Select multiple values" +msgstr "Valitse useita arvoja" + +#: lib/RT/CustomField_Overlay.pm:60 +msgid "Select one value" +msgstr "Valitse yksi arvo" + +#: html/Admin/Elements/QueueTabs:92 +msgid "Select queue" +msgstr "Valitse työjono" + +#: 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 "" +msgstr "Valitse toiminto" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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 "Valitse pohja" + +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" msgstr "" -#: html/Admin/Elements/UserTabs:49 +#: html/Admin/Elements/UserTabs:75 msgid "Select user" -msgstr "" +msgstr "Valitse käyttäjä" -#: lib/RT/CustomField_Overlay.pm:36 -msgid "SelectMultiple" +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" msgstr "" -#: lib/RT/CustomField_Overlay.pm:35 -msgid "SelectSingle" +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" msgstr "" -#: html/SelfService/index.html:25 +#: NOT FOUND IN SOURCE msgid "Self Service" msgstr "Itsepalvelu" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" -msgstr "" +msgstr "Lähettää postia omistajalle" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Syys" #: NOT FOUND IN SOURCE msgid "September" +msgstr "syyskuu" + +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "Näytä tulokset" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Näytä perustiedot" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Näytä yksityiskohdat" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" -msgstr "" +msgstr "Näytä tapauksen kommentointi" -#: lib/RT/Queue_Overlay.pm:79 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" -msgstr "" +msgstr "Näytä tapausten yhteenvedot" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "Allekirjoitus" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) -msgid "Signed in as %1" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Yksittäinen" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "" -#: html/Admin/Elements/EditCustomFieldValues:31 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Sort key" msgstr "Järjestys" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "Järjestä tulokset" -#: html/Admin/Elements/AddCustomFieldValue:25 +#: NOT FOUND IN SOURCE msgid "SortOrder" -msgstr "Lajittelujärjestyt" +msgstr "Lajittelujärjestys" + +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "" #: NOT FOUND IN SOURCE msgid "Stalled" @@ -3721,15 +4575,15 @@ msgstr "Jäädytetty" msgid "Start page" msgstr "Etusivu" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "Aloitettu" #: NOT FOUND IN SOURCE msgid "Started date '%1' could not be parsed" -msgstr "Aloitettu -aikaa '%1' ei pystytty tulkitsemaan" +msgstr "Aloittamisaikaa '%1' ei pystytty tulkitsemaan" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "Alkaa" @@ -3739,129 +4593,141 @@ msgstr "Alkaa mennessä" #: NOT FOUND IN SOURCE msgid "Starts date '%1' could not be parsed" -msgstr "Alkaa -aikaa '%1' ei pystytty tulkitsemaan" +msgstr "Alkamisaikaa '%1' ei pystytty tulkitsemaan" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Tila" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "Tila" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" msgstr "" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Tila muutettu arvosta %1 arvoon %2" -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "" - -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "Kaappaa" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " +msgid "Stolen from %1" msgstr "Kaapattu käyttäjältä %1" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "Otsikko" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" -msgstr "" +msgstr "Otsikko vaihdettu: %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Lähetä" -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "" - -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" -msgstr "" +msgstr "Onnistui" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Su" -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" +msgstr "Järjestelmä" + +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" msgstr "" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: 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 "Systeemivirhe" +msgstr "Järjestelmävirhe" -#: NOT FOUND IN SOURCE -msgid "System Error. Right not granted." +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "System Error. right not granted" +#: html/Admin/Tools/index.html:47 +msgid "System Tools" msgstr "" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." -msgstr "Systeemivirhe. Oikeutta ei delegoitu." +msgstr "Järjestelmävirhe. Oikeutta ei delegoitu." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "Systeemivirhe. Oikeutta ei luovutettu." +msgstr "Järjestelmävirhe. Oikeutta ei luovutettu." -#: NOT FOUND IN SOURCE -msgid "System error. Unable to grant rights." -msgstr "" - -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "Systeemiryhmät" +msgstr "Järjestelmäryhmät" #: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 msgid "SystemRolegroup for internal use" msgstr "" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" -msgstr "TESTI_STRINGI" +msgstr "TESTIMERKKIJONO" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "Ota itselle" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Otettu" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Pohja" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" -msgstr "" +msgstr "Pohja #%1" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" -msgstr "" +msgstr "Pohja poistettu" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Pohjaa ei löydetty" @@ -3869,11 +4735,11 @@ msgstr "Pohjaa ei löydetty" msgid "Template not found\\n" msgstr "Pohjaa ei löydetty\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Pohja tulkittu" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Pohjat" @@ -3881,433 +4747,529 @@ msgstr "Pohjat" msgid "Templates for %1\\n" msgstr "Pohjat työjonolle %1\\n" -#: lib/RT/Interface/Web.pm:858 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Ei ole arvo tälle kentälle" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Tämä on sama arvo" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" -msgstr "Tämä toimeksiantaja on jo %1 tälle työjonolle" +msgstr "Toimeksiantaja on jo %1 tälle työjonolle" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" -msgstr "Tämä toimeksiantaja on jo %1 tälle työpyynnölle" +msgstr "Toimeksiantaja on jo %1 tälle tapaukselle" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" -msgstr "Tämä toimeksiantaja ei ole %1 tälle työjonolle" +msgstr "Toimeksiantaja ei ole %1 tälle työjonolle" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" -msgstr "Tämä toimeksiantaja ei ole %1 tälle työpyynnölle" +msgstr "Toimeksiantaja ei ole %1 tälle tapaukselle" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" -msgstr "Tätä työjonoa ei ole olemassa" +msgstr "Työjonoa ei ole olemassa" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" -msgstr "Tämä työpyyntö sisältää ei-päätettyjä riippuvuuksia" +msgstr "Tapaus sisältää päättämättömiä riippuvuuksia" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: NOT FOUND IN SOURCE msgid "That user already has that right" msgstr "Käyttäjällä on jo tuo oikeus" -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" -msgstr "Käyttäjä omistaa jo tämän työpyynnön" +msgstr "Käyttäjä omistaa jo tämän tapauksen" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Käyttäjää ei ole olemassa" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" -msgstr "Tämä käyttäjä on jo etuoikeutettu" +msgstr "Käyttäjä on jo erioikeutettu" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" -msgstr "Tämä käyttäjä on jo ei-etuoikeutettu" +msgstr "Käyttäjä on jo erioikeudeton" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" -msgstr "Tämä käyttäjä on nyt etuoikeutettu" +msgstr "Käyttäjä on nyt erioikeutettu" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" -msgstr "Tämä käyttäjä on nyt ei-etuoikeutettu" +msgstr "Käyttäjä on nyt erioikeudeton" -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" -msgstr "Käyttäjä ei voi omistaa työpyyntöjä tuossa työjonossa" +msgstr "Käyttäjä ei voi omistaa tapauksia tuossa työjonossa" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "Ei ole numero" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "Perustiedot" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "Kommentti on tallennettu" -#: bin/rt-crontool:198 +#: 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 "" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "Seuraavia komentoja ei suoritettu:\\n\\n" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." -msgstr "" +msgstr "Uusi arvo asetettu." -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" -msgstr "" +msgstr "Tapauksen omistaja" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" -msgstr "" +msgstr "Tapauksen tilaaja" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Nämä kommentit eivät ole yleisesti näkyvillä käyttäjälle" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "" + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" -msgstr "Tämä työpyyntö %1 %2 (%3)\\n" +msgstr "Tämä tapaus %1 %2 (%3)\\n" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "" -#: lib/RT/Transaction_Overlay.pm:253 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" -msgstr "Tämä toiminto ei näytä sisältävän mitään" +msgstr "Tämä tapahtuma ei näytä sisältävän mitään" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" -msgstr "" +msgstr "Käyttäjän %1 tärkeintä tapausta" #: NOT FOUND IN SOURCE msgid "This user's 25 highest priority tickets" -msgstr "Tämän käyttäjän 25 korkeimman prioriteetin työpyyntöä" +msgstr "Käyttäjän 25 tärkeintä tapausta" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "To" #: NOT FOUND IN SOURCE msgid "Ticket # %1 %2" -msgstr "Työpyyntö # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 Jumbo update: %2" -msgstr "" +msgstr "Tapaus # %1 %2" -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" -msgstr "Työpyyntö #%1 Jumbo päivitys: %2" +msgstr "Tapauksen #%1 jättipäivitys: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" +msgstr "Tapaus #%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) +msgid "Ticket %1" msgstr "" -#: lib/RT/Ticket_Overlay.pm:608 +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" -msgstr "Työpyyntö %1 luotu työjonoon '%2'" +msgstr "Tapaus %1 luotu työjonoon '%2'" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" -msgstr "Työpyyntö %1 ladattu\\n" +msgstr "Tapaus %1 ladattu\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" -msgstr "Työpyyntö %1: %2" +msgstr "Tapaus %1: %2" + +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" -msgstr "Työpyynnön historia # %1 %2" +msgstr "Tapauksen historia # %1 %2" -#: html/SelfService/Display.html:34 +#: NOT FOUND IN SOURCE msgid "Ticket Id" -msgstr "Työpyynnön numero" +msgstr "Tapauksen numero" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" -msgstr "Työpyynnön liite" +msgstr "Tapauksen liitteen" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" -msgstr "Työpyynnön sisältö" +msgstr "Tapauksen sisältö" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" -msgstr "Työpyynnön sisällön tyyppi" +msgstr "Tapauksen sisällön tyyppi" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" -msgstr "" +msgstr "Tapausta ei voitu luoda sisäisestä virheestä johtuen" -#: lib/RT/Transaction_Overlay.pm:522 +#: NOT FOUND IN SOURCE msgid "Ticket created" -msgstr "Työpyyntö luotu" +msgstr "Tapaus luotu" #: NOT FOUND IN SOURCE msgid "Ticket creation failed" -msgstr "Työpyynnön luonti epäonnistui" +msgstr "Tapauksen luonti epäonnistui" -#: lib/RT/Transaction_Overlay.pm:527 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" -msgstr "Työpyyntö poistettu" +msgstr "Tapaus poistettu" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" -msgstr "" +msgstr "Tapauksen numeroa ei löytynyt" -#: NOT FOUND IN SOURCE -msgid "Ticket killed" +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" msgstr "" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: NOT FOUND IN SOURCE msgid "Ticket not found" -msgstr "" +msgstr "Tapausta ei löydy" -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" -msgstr "" +msgstr "Tapauksen tila vaihdettu" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" -msgstr "Työpyynnön tarkkailijat" +msgstr "Tapauksen tarkkailijat" -#: html/Elements/Tabs:49 -msgid "Tickets" -msgstr "" - -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) -msgid "Tickets %1 %2" +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) -msgid "Tickets %1 by %2" -msgstr "" +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "Tapaukset" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" -msgstr "Työpyynnöt %1" +msgstr "Tapaukset %1" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "Aikaa jäljellä" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "Aikaa käytetty" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "Aikaa jäljellä" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "Aika" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "Aikaa käytetty" -#: NOT FOUND IN SOURCE -msgid "TimeLeft" +#: lib/RT/Ticket_Overlay.pm:1143 +msgid "TimeWorked" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1165 -msgid "TimeWorked" +#: html/Search/Elements/EditFormat:74 +msgid "Title" msgstr "" -#: bin/rt-commit-handler:402 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "Luodaksesi diffin tästä käskystä:" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "To generate a diff of this commit:\\n" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Oltu yhteydessä" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "" + +#: etc/initialdata:252 msgid "Transaction" msgstr "" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" -msgstr "Toiminto %1 puhdistettu" +msgstr "Tapahtuma %1 puhdistettu" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" -msgstr "Toiminto luotu" +msgstr "Tapahtuma luotu" + +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "" -#: lib/RT/Transaction_Overlay.pm:89 -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" msgstr "" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" -msgstr "Toiminnot ovat muuttumattomia" +msgstr "Tapahtumat ovat muuttumattomia" #: NOT FOUND IN SOURCE msgid "Trying to delete a right: %1" msgstr "Yritetään poistaa oikeus: %1" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Ti" -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "Tyyppi" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Toteuttamaton" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Unix login" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "Käyttäjän Unix-tunnus" -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" -msgstr "Tuntematon sisällön enkoodaus %1" +msgstr "Tuntematon sisällön koodaus %1" + +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" -#: html/Elements/SelectResultsPerPage:37 +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "Rajoittamaton" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "" + #: etc/initialdata:32 msgid "Unprivileged" +msgstr "Erioikeudeton" + +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" msgstr "" -#: lib/RT/Transaction_Overlay.pm:571 +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "Ottamaton" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Päivitä" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "Päivitä numero" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Päivitä tyyppi" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" -msgstr "Päivitä kaikki nämä työpyynnöt kerralla" +msgstr "Päivitä kaikki nämä tapaukset kerralla" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "Päivitä sähköposti" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "Päivitä nimi" -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "Päivitystä ei tallennettu" -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" -msgstr "Päivitä valitut työpyynnöt" +msgstr "Päivitä valitut tapaukset" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "Päivitä allekirjoitus" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" -msgstr "Päivitä työpyyntö" +msgstr "Päivitä tapaus" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) +#: NOT FOUND IN SOURCE msgid "Update ticket # %1" -msgstr "Päivitä työpyyntö # %1" +msgstr "Päivitä tapaus # %1" -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" -msgstr "Päivitä työpyyntö #%1" +msgstr "Päivitä tapaus #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" -msgstr "" +msgstr "Päivitä tapaus #%1 (%2)" -#: lib/RT/Interface/Web.pm:373 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "Päivityksen tyyppi ei ollut kirjeenvaihto eikä kommentti." -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Päivitetty" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" msgstr "Käyttäjä %1 %2: %3\\n" @@ -4316,6 +5278,11 @@ msgstr "Käyttäjä %1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "Käyttäjä %1 Salasana: %2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "Käyttäjää '%1' ei löydetty" @@ -4324,419 +5291,479 @@ msgstr "Käyttäjää '%1' ei löydetty" msgid "User '%1' not found\\n" msgstr "Käyttäjää '%1' ei löydetty\\n" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User ID" -msgstr "Käyttäjän tunnus" +msgstr "Käyttäjätunnus" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" -msgstr "Käyttäjän tunnus" +msgstr "Käyttäjätunnus" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "Käyttäjän oikeudet" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "Käyttäjää ei voitu luoda: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Käyttäjä luotu" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "Käyttäjän luomat ryhmät" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "Käyttäjää informoitu" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "Käyttäjän näkymä" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Käyttäjätunnus" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Käyttäjät" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "Hakua vastaavat käyttäjät" -#: html/Search/Elements/PickRestriction:51 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" -msgstr "Työpyynnon arvo" +msgstr "Tapauksen arvo" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Arvot" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "" - -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Tarkkailijat" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" -msgstr "Web Enkoodaus" +msgstr "Web-koodaus" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Ke" -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Työ" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "Työpuhelin" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Tehty" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" -msgstr "Omistat jo tämän työpyynnön" +msgstr "Omistat jo tämän tapauksen" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" -msgstr "Et ole autorisoitu käyttäjä" +msgstr "Et ole valtuutettu käyttäjä" -#: lib/RT/Ticket_Overlay.pm:2930 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Voit palauttaa vain työpyyntöjä jotka omistat itse tai jotka ovat ilman omistajaa" +msgstr "Voit palauttaa vain tapauksia, jotka omistat itse tai jotka ovat ilman omistajaa" #: NOT FOUND IN SOURCE msgid "You don't have permission to view that ticket.\\n" -msgstr "Sinulla ei ole oikeutta tarkastella tätä työpyyntöä.\\n" +msgstr "Sinulla ei ole valtuuksia tarkastella tätä tapausta.\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" -msgstr "Löysit %1 työpyyntöä työjonosta %2" +msgstr "Löysit %1 tapausta työjonosta %2" -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "Olet kirjautunut ulos RT:stä" -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." -msgstr "Sinulla ei ole oikeutta luoda työpyyntöjä tähän työjonoon." +msgstr "Sinulla ei ole valtuuksia luoda tapauksia tähän työjonoon." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." -msgstr "Et ehkä voi luoda työpyyntöjä tuohon työjonoon." +msgstr "Et voi luoda tapauksia tuohon työjonoon." -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "Tervetuloa kirjautumaan järjestelmään uudelleen" -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) +#: NOT FOUND IN SOURCE msgid "Your %1 requests" -msgstr "Sinun %1 työpyyntöäsi" +msgstr "Sinun %1 tapaustasi" #: NOT FOUND IN SOURCE msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "RT:n ylläpitäjä on konfiguroinut RT:n käynnisävät sähköpostialiakset väärin." -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "" -#: etc/initialdata:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "" -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "" - -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "" -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "Käyttäjätunnuksesi tai salasanasi on väärä" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "Postinumero" -#: NOT FOUND IN SOURCE -msgid "[no subject]" +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" msgstr "" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "sallittu käyttäjälle %1" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "sisältää" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" -msgstr "" +msgstr "sisältö" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" -msgstr "" +msgstr "sisällön tyyppi" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" -msgstr "kirjeenvaihtoa (luultavasti) ei ole asetettu" +msgstr "kirjeenvaihtoa (luultavasti) ei ole lähetetty" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "kirjeenvaihto lähetetty" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "päivää" #: NOT FOUND IN SOURCE -msgid "dead" -msgstr "" - -#: html/Search/Listing.html:75 msgid "delete" msgstr "poista" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "poistettu" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" -msgstr "ei täsmää" +msgstr "ei sisällä" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "ei sisällä" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "on yhtäsuuri" -#: NOT FOUND IN SOURCE -msgid "false" +#: html/Search/Build.html:387 +msgid "error: can't move down" msgstr "" -#: html/Elements/SelectAttachmentField:28 -msgid "filename" +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" msgstr "" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "filename" +msgstr "tiedostonimi" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" -msgstr "suurempi kuin" +msgstr "on suurempi kuin" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "ryhmä %1" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" -msgstr "tunnit" +msgstr "tuntia" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "numero" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "on" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "ei ole" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" -msgstr "vähemmän kuin" +msgstr "on pienempi kuin" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "sisältää" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "min" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "minuuttia" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "muokkaukset\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "kuukausia" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "uusi" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "ei mitään" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" -msgstr "eri suuri kuin" +msgstr "on erisuuri kuin" -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "avoin" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "oma ryhmä '%1' käyttäjälle '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "työjono %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "hylätty" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "päätetty" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "sec" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "jäädytetty" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" -msgstr "systeemi %1" +msgstr "järjestelmä %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" -msgstr "systeemiryhmä '%1'" +msgstr "järjestelmäryhmä '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "kutsuva komponentti ei eritellyt syytä" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" -msgstr "työpyyntö #%1 %2" +msgstr "tapaus #%1 %2" #: NOT FOUND IN SOURCE msgid "true" -msgstr "" +msgstr "tosi" -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" -msgstr "" +msgstr "kuvailematon ryhmä %1" #: NOT FOUND IN SOURCE msgid "undescripbed group %1" -msgstr "kuvalematon ryhmä %1" +msgstr "kuvailematon ryhmä %1" -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "käyttäjä %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "viikkoa" @@ -4744,7 +5771,7 @@ msgstr "viikkoa" msgid "with template %1" msgstr "pohjalla %1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "vuosia" diff --git a/rt/lib/RT/I18N/fr.po b/rt/lib/RT/I18N/fr.po index 4ef68fb3a..8d1f3c3b2 100644 --- a/rt/lib/RT/I18N/fr.po +++ b/rt/lib/RT/I18N/fr.po @@ -1,745 +1,665 @@ -# Copyright (c) 2002 Jesse Vincent <jesse@bestpractical.com> -# msgid "" msgstr "" -"Project-Id-Version: RT 3.0.4pre1\n" +"Project-Id-Version: fr\n" "POT-Creation-Date: 2002-05-02 11:36+0800\n" -"PO-Revision-Date: 2003-07-03 02:00+0800\n" -"Last-Translator: Blaise Thauvin <blaise@fdn.fr>\n" -"Language-Team: rt-devel <rt-devel@lists.fsck.com>\n" +"PO-Revision-Date: 2005-08-06 22:14+0200\n" +"Last-Translator: jfenal <jfenal@free.fr>\n" +"Language-Team: <fr@li.org>\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.9.1\n" -#: html/Elements/MyRequests:27 html/Elements/MyTickets:27 -msgid "#" -msgstr "n°" - -#: NOT FOUND IN SOURCE -msgid "#%1" -msgstr "n°%1" - -#: html/Approvals/Elements/Approve:26 html/Approvals/Elements/ShowDependency:49 html/SelfService/Display.html:24 html/Ticket/Display.html:25 html/Ticket/Display.html:29 -#. ($Ticket->Id, $Ticket->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 #. ($Ticket->id, $Ticket->Subject) #. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "n°%1: %2" -#: lib/RT/Date.pm:337 +#: lib/RT/Record.pm:927 +#. ($label) +msgid "$prefix %1" +msgstr "$prefix %1" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 n°%2" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) -msgid "%1 %2 %3" -msgstr "%1 %2 %3" - -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %2 %3 %4:%5:%6 %7" -#: lib/RT/Ticket_Overlay.pm:3569 lib/RT/Transaction_Overlay.pm:557 lib/RT/Transaction_Overlay.pm:599 +#: lib/RT/Record.pm:1672 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) msgid "%1 %2 added" msgstr "%1 %2 ajouté" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "il y a %1 %2" -#: lib/RT/Ticket_Overlay.pm:3575 lib/RT/Transaction_Overlay.pm:564 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1679 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 changé en %3" -#: lib/RT/Ticket_Overlay.pm:3572 lib/RT/Transaction_Overlay.pm:560 lib/RT/Transaction_Overlay.pm:605 -#. ($cf->Name, $old_value) +#: lib/RT/Record.pm:1676 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) msgid "%1 %2 deleted" msgstr "%1 %2 supprimé" -#: NOT FOUND IN SOURCE -msgid "%1 %2 of group %3" -msgstr "%1 %2 du groupe %3" - -#: html/Admin/Elements/EditScrips:43 html/Admin/Elements/ListGlobalScrips:27 +#: 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)) msgid "%1 %2 with template %3" msgstr "%1 %2 avec modèle %3" -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 ce ticket\\n" +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) par %3" -#: html/Search/Listing.html:56 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) -msgid "%1 - %2 shown" -msgstr "Tickets %1 à %2" +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (inchangé)" -#: bin/rt-crontool:168 bin/rt-crontool:175 bin/rt-crontool:181 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - Un paramètre à passer à %2" -#: bin/rt-crontool:184 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - Ecrit les mises à jour de statuts sur STDOUT" -#: bin/rt-crontool:178 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "%1 - Précisez l'action que vous voulez utiliser" -#: bin/rt-crontool:172 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "%1 - Précisez la condition que vous voulez utiliser" -#: bin/rt-crontool:165 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "%1 - Précisez la recherche que vous voulez utiliser" -#: lib/RT/ScripAction_Overlay.pm:121 +#: html/Elements/Footer:54 +#. ('»|«', $RT::VERSION, '2005', '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "%1 RT %2 Copyright 1996-%3 %4." + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" -msgstr "%1 ScripAction chargée" +msgstr "ScripAction %1 chargée" -#: lib/RT/Ticket_Overlay.pm:3602 +#: lib/RT/Record.pm:1709 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 ajouté(e) comme valeur de %2" -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on" -msgstr "les alias %1 nécessitent un TicketId sur lequel travailler" - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on " -msgstr "les alias %1 nécessitent un TicketId sur lequel travailler " - -#: NOT FOUND IN SOURCE -msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "les alias %1 nécessitent un TicketId pour fonctionner avec (depuis %2) %3" - -#: lib/RT/Link_Overlay.pm:116 lib/RT/Link_Overlay.pm:123 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "%1 semble être un objet local, mais est introuvable dans la base de données" -#: html/Ticket/Elements/ShowDates:51 lib/RT/Transaction_Overlay.pm:481 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 par %2" -#: lib/RT/Transaction_Overlay.pm:535 lib/RT/Transaction_Overlay.pm:675 lib/RT/Transaction_Overlay.pm:684 lib/RT/Transaction_Overlay.pm:687 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 changé(e) de %2 à %3" -#: lib/RT/Interface/Web.pm:893 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "%1 copie" + +#: lib/RT/Record.pm:931 msgid "%1 could not be set to %2." msgstr "%1 n'a pas pu être positionné à %2" -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "%1 n'a pas pu initialiser une transaction (%2)\\n" - -#: lib/RT/Ticket_Overlay.pm:2867 +#: lib/RT/Ticket_Overlay.pm:2751 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 ne peut pas mettre le statut à résolu. La base de données RT est peut être incohérente." -#: html/Elements/MyTickets:24 -#. ($rows) -msgid "%1 highest priority tickets I own..." -msgstr "Mes %1 tickets à traiter en priorité..." +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "%1 créé(e)" -#: html/Elements/MyRequests:24 +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "%1 supprimé(e)" + +#: html/Elements/MyTickets:47 #. ($rows) -msgid "%1 highest priority tickets I requested..." -msgstr "Mes %1 demandes les plus prioritaires..." +msgid "%1 highest priority tickets I own" +msgstr "Mes %1 tickets de plus haute priorité" -#: bin/rt-crontool:160 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." -msgstr "%1 est un outil agissant sur les tickets depuis un planificateur externe tel que cron" +msgstr "%1 est un outil agissant sur les tickets depuis un planificateur externe tel que cron." -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:864 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." -msgstr "%1 n'est plus un %2 pour cette queue." - -#: lib/RT/Ticket_Overlay.pm:1587 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 n'est plus un %2 pour ce ticket." - -#: lib/RT/Ticket_Overlay.pm:3658 -#. ($args{'Value'}, $cf->Name) -msgid "%1 is no longer a value for custom field %2" -msgstr "%1 n'est plus une valeur pour le champ personnalisé %2" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." -msgstr "%1 n'est pas un identifiant de queue valide" - -#: html/Ticket/Elements/ShowBasics:35 -#. ($TimeWorked) +msgstr "%1 n'est plus un %2 pour cette file." + +#: 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) msgid "%1 min" msgstr "%1 min" -#: NOT FOUND IN SOURCE -msgid "%1 not shown" -msgstr "%1 non montré" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "les %1 derniers tickets sans propriétaire" + +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 objets" -#: html/User/Elements/DelegateRights:75 +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "Droits de %1" -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "%1 réussi\\n" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "Type %1 inconnu pour $MessageId" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" -msgstr "type %1 inconnu pour %2" - -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" -msgstr "%1 a été créé sans utilisateur courant\\n" - -#: lib/RT/Action/ResolveMembers.pm:41 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 résoudra tous les membres d'un ticket groupé résolu." -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 va bloquer une base [locale] s'il dépend ou est membre d'une demande liée." +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%1 de %2 objets" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "%1 de %2 de %3 objets" -#: lib/RT/Transaction_Overlay.pm:433 +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "Recherches sauvées de %1" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: pas d'attachement spécifié" -#: html/Ticket/Elements/ShowTransaction:88 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1b" -#: html/Ticket/Elements/ShowTransaction:85 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k" -#: lib/RT/Ticket_Overlay.pm:1176 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' est un statut invalide" -#: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "'%1' n'est pas une action connue. " - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete group member)" -msgstr "(Cocher la case pour supprimer un membre du groupe)" - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "(Cocher la case pour supprimer un scrip)" - -#: html/Admin/Elements/EditCustomFieldValues:24 html/Admin/Elements/EditQueueWatchers:28 html/Admin/Elements/EditScrips:34 html/Admin/Elements/EditTemplates:35 html/Admin/Groups/Members.html:51 html/Ticket/Elements/EditLinks:32 html/Ticket/Elements/EditPeople:45 html/User/Groups/Members.html:54 +#: 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 "(Cocher la case pour supprimer)" -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" -msgstr "(Cocher la case pour supprimer)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(Cocher les cases pour désactiver les notifications aux destinataires listés)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(Cocher les cases pour activer les notifications aux destinataires listés)" -#: html/Ticket/Create.html:177 -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Entrer les numéros de tickets ou les URLs, séparés par des espaces)" +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(Entrer le numéro du ticket ou son URL, séparés par des espaces)" -#: html/Admin/Queues/Modify.html:53 html/Admin/Queues/Modify.html:59 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "Si laissé à blanc, valeur par défaut : %1" +msgid "(If left blank, will default to %1)" +msgstr "(sera par défaut %1 si laissé vide)" -#: NOT FOUND IN SOURCE -msgid "(No Value)" -msgstr "(Non renseigné)" - -#: html/Admin/Elements/EditCustomFields:32 html/Admin/Elements/ListGlobalCustomFields:31 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" -msgstr "Pas de champ personnalisé" +msgstr "(Pas de champ personnalisé)" -#: html/Admin/Groups/Members.html:49 html/User/Groups/Members.html:52 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Aucun membre)" -#: html/Admin/Elements/EditScrips:31 html/Admin/Elements/ListGlobalScrips:31 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(Aucun Scrip)" -#: html/Admin/Elements/EditTemplates:30 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" -msgstr "Aucun modèle" +msgstr "(Aucun modèle)" -#: html/Ticket/Update.html:83 -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 "(Envoie une copie cachée de cette mise à jour à une liste d'adresses email séparées par des virgules. Ceci <b>ne changera pas</b> les destinataires des mises à jour suivantes.)" +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(Aucun)" -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +#: 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 "(Envoie une copie cachée de cette mise à jour à une liste d'adresses email séparées par des virgules. Ceci <b>ne changera pas</b> les destinataires des mises à jour suivantes.)" -#: html/Ticket/Create.html:78 +#: 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 "(Envoie une copie de cette mise à jour à une liste d'adresses email séparées par des virgules. Ces personnes <b>recevront</b> les mises à jour suivantes.)" -#: html/Ticket/Update.html:79 +#: 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 "(Envoie une copie de cette mise à jour à une liste d'adresses email séparées par des virgules. Ceci <b>ne changera pas</b> les destinataires des mises à jour suivantes.)" -#: NOT FOUND IN SOURCE -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" -msgstr "Envoie une copie de cette mise à jour à une liste d'adresses email séparées par des virgules. Ceci <b>ne changera pas</b> les destinataires des mises à jour suivantes.)" - -#: html/Ticket/Create.html:68 +#: 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 "(Envoie une copie de cette mise à jour à une liste d'adresses email séparées par des virgules. Ces personnes <b>recevront</b> les mises à jour suivantes.)" +msgstr "(Transmettre une copie de cette mise à jour à une liste d'adresses email séparées par des virgules. Ces personnes <b>recevront</b> les mises à jour suivantes.)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(Utilisez ces champs lorsque vous sélectionnez 'User Defined' pour une condition ou une action)" -#: html/Admin/Groups/index.html:32 html/User/Groups/index.html:32 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(vide)" -#: html/Admin/Users/index.html:38 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "(aucun nom)" -#: html/Elements/MyRequests:42 html/Elements/MyTickets:44 -msgid "(no subject)" -msgstr "(pas de sujet)" - -#: html/Admin/Elements/SelectRights:47 html/Elements/SelectCustomFieldValue:29 html/Ticket/Elements/EditCustomField:60 html/Ticket/Elements/ShowCustomFields:35 lib/RT/Transaction_Overlay.pm:534 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/I18N/fr.po.orig:146 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" -msgstr "(non renseigné)" +msgstr "(sans information)" -#: html/Ticket/Elements/BulkLinks:27 html/Ticket/Elements/EditLinks:115 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(aucune valeur)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(un seul ticket)" -#: html/Elements/MyRequests:51 html/Elements/MyTickets:54 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(en attente d'approbation)" -#: html/Elements/MyRequests:53 html/Elements/MyTickets:56 -msgid "(pending other tickets)" -msgstr "(en attente d'autres tickets)" - -#: NOT FOUND IN SOURCE -msgid "(requestor's group)" -msgstr "(groupe du demandeur)" +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(en attente d'autres Collection)" -#: html/Admin/Users/Modify.html:49 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(exigé)" -#: html/Ticket/Elements/ShowTransaction:91 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(sans titre)" -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I own..." -msgstr "Mes 25 tickets à traiter en priorité..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "Mes 25 demandes les plus prioritaires..." - -#: html/Ticket/Elements/ShowBasics:31 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Statut%>" -#: html/Elements/SelectTicketTypes:26 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" -msgstr "" +msgstr "<% $_ %>" + +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "<%$_%>" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "<%$field%>" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:25 +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"Créer un ticket dans\"> %1" -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "Un modèle vide" -#: NOT FOUND IN SOURCE -msgid "ACE Deleted" -msgstr "ACE Supprimé" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "L'utilisateur ne pourra se connecter car aucun mot de passe n'a été défini." -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" -msgstr "ACE Chargé" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be deleted" -msgstr "l'ACE n'a pu être supprimé" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be found" -msgstr "l'ACE n'a pu être trouvé" - -#: lib/RT/ACE_Overlay.pm:156 lib/RT/Principal_Overlay.pm:180 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE non trouvé" -#: lib/RT/ACE_Overlay.pm:830 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "Les ACE peuvent seulement être créés et effacés." -#: bin/rt-commit-handler:754 -msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Interruption pour éviter des modifications de ticket involontaires" +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "ET" -#: html/User/Elements/Tabs:31 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "A propos" -#: html/Admin/Users/Modify.html:79 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "contrôle d'accès" -#: html/Admin/Elements/EditScrip:56 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Action" -#: lib/RT/Scrip_Overlay.pm:146 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Action %1 non trouvée" -#: bin/rt-crontool:122 -msgid "Action committed." -msgstr "Action validée" +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "Action validée.\\n" -#: bin/rt-crontool:118 +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "Action préparée..." -#: html/Search/Bulk.html:95 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Ajouter" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "Ajouter AdminCC" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "Ajouter CC" -#: html/Ticket/Create.html:113 html/Ticket/Update.html:98 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "Ajouter des colonnes" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "Ajouter un critère" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" msgstr "Ajouter d'autres fichiers" -#: NOT FOUND IN SOURCE -msgid "Add Next State" -msgstr "Ajouter étape suivant" - -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "Ajouter Demandeur" -#: html/Admin/Elements/AddCustomFieldValue:24 +#: html/Admin/Elements/AddCustomFieldValue:46 msgid "Add Value" msgstr "Ajouter une valeur" -#: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" -msgstr "Ajouter une sélection de mots clé à cette queue" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "Ajouter un nouveau scrip global" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" -msgstr "Ajouter un scrip à cette queue" - -#: html/Admin/Global/Scrip.html:54 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" -msgstr "Ajouter un scrip qui s'ajoute à toutes les queues" +msgstr "Ajouter un scrip qui s'applique à toutes les files" -#: html/Search/Bulk.html:127 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "Ajouter un critère additionnel" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "Ajouter des commentaires ou des réponses aux tickets sélectionnés" -#: html/Admin/Groups/Members.html:41 html/User/Groups/Members.html:38 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "Ajouter des membres" -#: html/Admin/Queues/People.html:65 html/Ticket/Elements/AddWatchers:27 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Ajouter de nouveaux observateurs" -#: NOT FOUND IN SOURCE -msgid "AddNextState" -msgstr "AjouterEtatSuivant" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "Ajouter, retirer et modifier des champs personnalisés pour les objets" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:764 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" -msgstr "Ajout groupe/utilisateur comme %1 pour cette queue" +msgstr "Ajout groupe/utilisateur comme %1 pour cette file" -#: lib/RT/Ticket_Overlay.pm:1471 +#: lib/RT/Ticket_Overlay.pm:1424 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "Ajout groupe/utilisateur comme %1 pour ce ticket" -#: html/Admin/Elements/ModifyUser:75 html/Admin/Users/Modify.html:121 html/User/Prefs.html:87 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Adresse1" -#: html/Admin/Elements/ModifyUser:77 html/Admin/Users/Modify.html:126 html/User/Prefs.html:89 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Adresse2" -#: html/Ticket/Create.html:73 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Admin Cc" -#: etc/initialdata:280 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "Commentaire Admin" -#: etc/initialdata:259 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "Correspondance Admin " -#: html/Admin/Queues/index.html:24 html/Admin/Queues/index.html:27 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" -msgstr "Administrateurs de queue" +msgstr "Administrateurs de files" -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "Gérer les Utilisateurs" - -#: html/Admin/Global/index.html:25 html/Admin/Global/index.html:27 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "configuration Gestion/Globale" -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "Gestion/Groupes" - -#: html/Admin/Queues/Modify.html:24 html/Admin/Queues/Modify.html:28 -msgid "Admin/Queue/Basics" -msgstr "Gestion/Queues/Essentiel" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "GérerTousGroupesPersonnels" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:38 html/Ticket/Update.html:49 lib/RT/ACE_Overlay.pm:88 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "AdminCc" -#: NOT FOUND IN SOURCE -msgid "AdminComment" -msgstr "CommentaireAdministrateur" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "CorrespondanceAdministrateur" +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "GérerChampPersonnalisé" -#: lib/RT/Queue_Overlay.pm:71 -msgid "AdminCustomFields" -msgstr "GérerChampsPersonnalisés" - -#: lib/RT/Group_Overlay.pm:145 +#: lib/RT/Group_Overlay.pm:163 msgid "AdminGroup" msgstr "GérerGroupes" -#: lib/RT/Group_Overlay.pm:147 +#: lib/RT/Group_Overlay.pm:165 msgid "AdminGroupMembership" msgstr "GérerAppartenanceGroupes" -#: lib/RT/System.pm:58 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "GérerGroupesPersonnelsPropres" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" -msgstr "GérerQueues" +msgstr "GérerFile" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "GérerUtilisateurs" -#: html/Admin/Queues/People.html:47 html/Ticket/Elements/EditPeople:53 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Cc Administratif" -#: NOT FOUND IN SOURCE -msgid "Admins" -msgstr "Administrateurs" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" -msgstr "Recherche avancée" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Avancé" -#: html/Elements/SelectDateRelation:35 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "Après" -#: NOT FOUND IN SOURCE -msgid "Age" -msgstr "Age" - -#: NOT FOUND IN SOURCE -msgid "Alias" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Alias for" -msgstr "Alias pour" +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "Aggrégateur" -#: etc/initialdata:348 +#: etc/initialdata:363 msgid "All Approvals Passed" msgstr "Toutes les approbations obtenues" -#: html/Admin/Elements/EditCustomFields:95 -msgid "All Custom Fields" -msgstr "Tous les champs personnalisés" - -#: html/Admin/Queues/index.html:52 +#: html/Admin/Queues/index.html:75 msgid "All Queues" -msgstr "Toutes les queues" +msgstr "Toutes les files" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "Et/Ou" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "S'applique à " + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Appliquer" -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" -msgstr "Envoie toujours un message au demandeur indépendamment de l'expéditeur" +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Appliquer vos changements" -#: html/Elements/Tabs:55 +#: html/Elements/Tabs:74 msgid "Approval" -msgstr "Approbation" +msgstr "Approbations" -#: html/Approvals/Display.html:45 html/Approvals/Elements/ShowDependency:41 html/Approvals/index.html:64 +#: 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) msgid "Approval #%1: %2" msgstr "Approbation n°%1: %2" -#: html/Approvals/index.html:53 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "Approbation n°%1: Notes non enregistrées en raison d'une erreur système" -#: html/Approvals/index.html:51 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "Approbation n°%1: Notes non enregistrées" -#: NOT FOUND IN SOURCE -msgid "Approval Details" -msgstr "Détails de l'approbation" - -#: etc/initialdata:336 +#: etc/initialdata:351 msgid "Approval Passed" msgstr "Approbations obtenues" -#: etc/initialdata:359 +#: etc/initialdata:374 msgid "Approval Rejected" msgstr "Approbations refusées" -#: NOT FOUND IN SOURCE -msgid "Approval diagram" -msgstr "Diagramme d'approbation" - -#: html/Approvals/Elements/Approve:43 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "Approuver" -#: etc/initialdata:486 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" -msgstr "Notes de l'approbateur: %1" +msgstr "Notes de l'approbateur : %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "Avr." -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "Avril" - -#: html/Elements/SelectSortOrder:34 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "Croissant" -#: html/Search/Bulk.html:136 html/SelfService/Update.html:32 html/Ticket/ModifyAll.html:82 html/Ticket/Update.html:98 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Fixer et supprimer les champs personnalisés" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "FixerChampsPersonnalisés" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Attaché" -#: html/SelfService/Create.html:64 html/Ticket/Create.html:109 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" -msgstr "Attacher un ficher" +msgstr "Attacher un fichier" -#: html/Ticket/Create.html:97 html/Ticket/Update.html:87 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "Fichier attaché" -#: NOT FOUND IN SOURCE +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Attachement '%1' ne peut pas être chargé" -#: lib/RT/Transaction_Overlay.pm:441 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "Attachement créé" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1702 msgid "Attachment filename" msgstr "Nom de fichier de l'attachement" -#: html/Ticket/Elements/ShowAttachments:25 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "Attachements" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Attibut supprimé" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "Aoû." -#: NOT FOUND IN SOURCE -msgid "August" -msgstr "Août" - -#: html/Admin/Elements/ModifyUser:65 -msgid "AuthSystem" -msgstr "AuthSystem" - -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "RéponseAuto" @@ -747,2211 +667,2092 @@ msgstr "RéponseAuto" msgid "Autoreply To Requestors" msgstr "Réponse automatique aux demandeurs" -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "RéponseAutomtiqueAuxDemandeurs" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "Signature PGP invalide: %1\\n" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Id d'attachement erroné. Impossible de trouver l'attachement '%1'\\n" - -#: bin/rt-commit-handler:826 -#. ($val) -msgid "Bad data in %1" -msgstr "Données incorrectes dans %1" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "Numéro de transaction incorrect pour l'attachement. %1 doit être %2\\n" - -#: html/Admin/Elements/GroupTabs:38 html/Admin/Elements/QueueTabs:38 html/Admin/Elements/UserTabs:37 html/Ticket/Elements/Tabs:89 html/User/Elements/GroupTabs:37 +#: 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 "Essentiel" -#: html/Ticket/Update.html:81 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Bcc" -#: html/Admin/Elements/EditScrip:87 html/Admin/Global/GroupRights.html:84 html/Admin/Global/Template.html:45 html/Admin/Global/UserRights.html:53 html/Admin/Groups/GroupRights.html:72 html/Admin/Groups/Members.html:80 html/Admin/Groups/Modify.html:55 html/Admin/Groups/UserRights.html:54 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:44 html/Admin/Queues/UserRights.html:53 html/User/Groups/Modify.html:55 +#: 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 "Assurez-vous de sauvegarder vos modifications" -#: html/Elements/SelectDateRelation:33 lib/RT/CurrentUser.pm:321 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "Avant" -#: NOT FOUND IN SOURCE -msgid "Begin Approval" -msgstr "Débuter l'approbation" +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "Logo d'entreprise de Best Practical Solutions, LLC" -#: etc/initialdata:202 +#: etc/initialdata:217 msgid "Blank" msgstr "Vide" -#: html/Search/Listing.html:78 -msgid "Bookmarkable URL for this search" -msgstr "URL prédéfinie pour cette recherche" +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "Gras" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "Lien prédéfini" -#: html/Ticket/Elements/ShowHistory:38 html/Ticket/Elements/ShowHistory:44 +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "En-têtes courts" -#: html/Search/Bulk.html:24 html/Search/Bulk.html:25 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "modification de tickets en masse" -#: lib/RT/User_Overlay.pm:1524 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "Les utilisateurs système ne peuvent être modifiés" -#: lib/RT/Queue_Overlay.pm:66 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" -msgstr "Le groupe/utilisateur peut-il voir cette queue" +msgstr "Le groupe/utilisateur peut-il voir cette file" -#: lib/RT/CustomField_Overlay.pm:205 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "Impossible d'ajouter une valeur de champ personnalisé sans un nom" -#: lib/RT/Link_Overlay.pm:131 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "Impossible de trouver une collection pour la classe '%1'" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Impossible de trouver une recherche sauvée et de l'utiliser" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "Un ticket ne peut être lié à lui même" -#: lib/RT/Ticket_Overlay.pm:2844 -msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Impossible de fusionner un ticket à un ticket fusionné. Vous ne devriez jamais obtenir cette erreur" +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Impossible de sauver cette recherche" -#: lib/RT/Ticket_Overlay.pm:2646 lib/RT/Ticket_Overlay.pm:2725 +#: lib/RT/Record.pm:1267 lib/RT/Record.pm:1345 msgid "Can't specifiy both base and target" msgstr "Impossible de spécifier à la fois la base et la cible" -#: html/autohandler:113 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "Impossible de créer l'utilisateur: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:43 html/SelfService/Create.html:48 html/Ticket/Create.html:63 html/Ticket/Elements/EditPeople:50 html/Ticket/Elements/ShowPeople:34 html/Ticket/Update.html:44 html/Ticket/Update.html:76 lib/RT/ACE_Overlay.pm:87 +#: 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 msgid "Cc" msgstr "Cc" -#: html/SelfService/Prefs.html:30 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "Changer le mot de passe" -#: html/Ticket/Create.html:100 html/Ticket/Update.html:90 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Tout cocher" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "Cocher la case pour supprimer" -#: html/Admin/Elements/SelectRights:30 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "Cocher la case pour retirer le droit" -#: html/Ticket/Create.html:182 html/Ticket/Elements/BulkLinks:42 html/Ticket/Elements/EditLinks:130 html/Ticket/Elements/EditLinks:68 html/Ticket/Elements/ShowLinks:56 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Fils" -#: html/Admin/Elements/ModifyUser:79 html/Admin/Users/Modify.html:131 html/User/Prefs.html:91 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "Ville" -#: html/Ticket/Elements/ShowDates:46 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "Tout effacer" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "Fermé" -#: html/SelfService/Closed.html:24 -msgid "Closed Tickets" -msgstr "Tickets fermés" - -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "Demandes closes" - -#: html/SelfService/Elements/Tabs:44 +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 msgid "Closed tickets" msgstr "Tickets fermés" -#: NOT FOUND IN SOURCE -msgid "Code" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Command not understood!\\n" -msgstr "Commande incomprise! \\n" - -#: html/Ticket/Elements/ShowTransaction:165 html/Ticket/Elements/Tabs:152 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Commenter" -#: html/Admin/Elements/ModifyQueue:44 html/Admin/Queues/Modify.html:57 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Adresse de commentaire" -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "Commentaire non enregistré" - -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "Commentaire sur le ticket" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "CommenterTicket" -#: html/Admin/Elements/ModifyUser:34 -msgid "Comments" -msgstr "Commentaires" - -#: html/Ticket/ModifyAll.html:69 html/Ticket/Update.html:68 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "Commentaires (non envoyés aux demandeurs)" -#: html/Search/Bulk.html:131 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "Commentaires (non envoyés aux demandeurs)" -#: html/Elements/ViewUser:26 -#. ($name) -msgid "Comments about %1" -msgstr "Commentaires sur %1" - -#: html/Admin/Users/Modify.html:184 html/Ticket/Elements/ShowRequestor:43 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "Commentaires sur cet utilisateur" -#: lib/RT/Transaction_Overlay.pm:543 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "Commentaires ajoutés" -#: lib/RT/Action/Generic.pm:139 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "tr(Commit Stubbed)" -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "Restrictions de compilation" - -#: html/Admin/Elements/EditScrip:40 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "Condition" -#: bin/rt-crontool:108 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "La condition satisfait..." -#: lib/RT/Scrip_Overlay.pm:159 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "Condition non trouvée" -#: html/Elements/Tabs:49 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Configuration" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "Confirmer" -#: html/Admin/Elements/ModifyUser:59 -msgid "ContactInfoSystem" -msgstr "ContactInfoSystem" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "Date de contact ne peut pas être analysée" - -#: html/Admin/Elements/ModifyTemplate:43 html/Ticket/ModifyAll.html:86 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Contenu" -#: NOT FOUND IN SOURCE -msgid "Coould not create group" -msgstr "Le groupe n'a pas pu être créé" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "Type de contenu" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "Copier" -#: etc/initialdata:271 +#: etc/initialdata:286 msgid "Correspondence" msgstr "Courrier" -#: html/Admin/Elements/ModifyQueue:38 html/Admin/Queues/Modify.html:50 -msgid "Correspondence Address" -msgstr "Adresse de correspondance" - -#: lib/RT/Transaction_Overlay.pm:539 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Courrier ajouté" -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" -msgstr "Courrier non enregistré" - -#: lib/RT/Ticket_Overlay.pm:3589 -msgid "Could not add new custom field value for ticket. " -msgstr "Impossible d'ajouter une nouvelle valeur de champ personnalisé pour ce ticket. " +#: lib/RT/Record.pm:1694 +msgid "Could not add new custom field value. " +msgstr "Impossible d'ajouter une nouvelle valeur de champ personnalisé. " -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. %1 " -msgstr "La valeur de champ personnalisé n'a pas pu être ajoutée. %1" +#: lib/RT/Record.pm:1647 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "Impossible d'ajouter une nouvelle valeur de champ personnalisé. %1" -#: lib/RT/Ticket_Overlay.pm:3095 lib/RT/Ticket_Overlay.pm:3103 lib/RT/Ticket_Overlay.pm:3120 +#: lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3020 lib/RT/Ticket_Overlay.pm:3037 msgid "Could not change owner. " msgstr "Impossible de changer l'intervenant. " -#: html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditCustomFields:165 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" -msgstr "Impossible de créer un champ personnalisé CustomField" +msgstr "Impossible de créer le champ personnalisé" -#: html/User/Groups/Modify.html:76 lib/RT/Group_Overlay.pm:473 lib/RT/Group_Overlay.pm:480 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "Impossible de créer le champ personnalisé : %1" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:494 lib/RT/Group_Overlay.pm:501 msgid "Could not create group" msgstr "Impossible de créer un groupe" -#: html/Admin/Global/Template.html:74 html/Admin/Queues/Template.html:71 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" -msgstr "Impossible de créer un modèle : %1" +msgstr "Impossible de créer le modèle : %1" -#: lib/RT/Ticket_Overlay.pm:1109 lib/RT/Ticket_Overlay.pm:352 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" -msgstr "Impossible de créer un ticket. Queue non indiquée" +msgstr "Impossible de créer un ticket. File non indiquée" -#: lib/RT/User_Overlay.pm:267 lib/RT/User_Overlay.pm:279 lib/RT/User_Overlay.pm:297 lib/RT/User_Overlay.pm:483 +#: 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 "Impossible de créer un utilisateur" - -#: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "L'observateur n'a pas pu être crée pour le demandeur" +msgstr "Impossible de créer l'utilisateur" -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" -msgstr "Impossible de trouver le ticket numéro %1" - -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." -msgstr "Impossible de trouver le groupe %1." - -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1439 +#: lib/RT/Queue_Overlay.pm:742 lib/RT/Ticket_Overlay.pm:1392 msgid "Could not find or create that user" msgstr "Impossible de trouver ou créer cet utilisateur" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1518 +#: lib/RT/Queue_Overlay.pm:803 lib/RT/Ticket_Overlay.pm:1473 msgid "Could not find that principal" msgstr "Impossible de trouver ce groupe ou utilisateur" -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." -msgstr "Impossible de trouver l'utilisateur %1." +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Impossible de charger le champ personnalisé %1" -#: html/Admin/Groups/Members.html:87 html/User/Groups/Members.html:89 html/User/Groups/Modify.html:81 +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "Impossible de charger ce groupe" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "Impossible de charger l'objet pour %1" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "Impossible de charger l'attribut de recherche" + +#: lib/RT/Queue_Overlay.pm:762 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" -msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour cette queue" +msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour cette file" -#: lib/RT/Ticket_Overlay.pm:1460 +#: lib/RT/Ticket_Overlay.pm:1413 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "Impossible de faire de ce groupe/utilisateur un %1 pour ce ticket" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:861 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" -msgstr "Impossible de supprimer ce groupe/utilisateur comme un %1 pour cette queue" +msgstr "Impossible de supprimer ce groupe/utilisateur comme un %1 pour cette file" -#: lib/RT/Ticket_Overlay.pm:1576 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Impossible de supprimer ce groupe/utilisateur comme un %1 pour ce ticket" +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Impossible de sauver les informations utilisateur" -#: lib/RT/Group_Overlay.pm:984 +#: lib/RT/Group_Overlay.pm:1003 msgid "Couldn't add member to group" msgstr "Impossible d'ajouter un membre à ce groupe" -#: lib/RT/Ticket_Overlay.pm:3599 lib/RT/Ticket_Overlay.pm:3655 +#: lib/RT/Record.pm:1706 lib/RT/Record.pm:1758 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "Impossible de créer une transaction : %1" -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Impossible de comprendre ce qu'il faut faire avec cette réponse gpg\\n" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "Groupe introuvable\\n" - -#: lib/RT/Interface/Web.pm:902 +#: lib/RT/Record.pm:940 msgid "Couldn't find row" msgstr "Colonne introuvable" -#: lib/RT/Group_Overlay.pm:958 +#: lib/RT/Group_Overlay.pm:977 msgid "Couldn't find that principal" msgstr "groupe/utilisateur introuvable" -#: lib/RT/CustomField_Overlay.pm:239 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "Valeur introuvable" -#: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "L'observateur n'a pas pu être trouvé" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "Utilisateur introuvable\\n" - -#: lib/RT/CurrentUser.pm:111 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" -msgstr "Impossible de charger %1 depuis la base de données des utilisateurs.\\n" +msgstr "Impossible de charger %1 depuis la base des utilisateurs.\\n" -#: NOT FOUND IN SOURCE -msgid "Couldn't load KeywordSelects." -msgstr "KeywordSelects n'a pas pu être chargé" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" -msgstr "Impossible de charger le fichier de configuration RT '%1' %2" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "Impossible de charger la classe %1" -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." -msgstr "Les scrips n'ont pas pu être chargés" +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "Impossible de charger le champ personnalisé %1" -#: html/Admin/Groups/GroupRights.html:87 html/Admin/Groups/UserRights.html:74 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "Impossible de charger le groupe %1" -#: lib/RT/Link_Overlay.pm:174 lib/RT/Link_Overlay.pm:183 lib/RT/Link_Overlay.pm:210 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "Impossible de charger le lien" -#: html/Admin/Elements/EditCustomFields:146 html/Admin/Queues/People.html:120 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 #. ($id) -msgid "Couldn't load queue" -msgstr "Impossible de charger la queue" +msgid "Couldn't load object %1" +msgstr "Impossible de charger l'objet %1" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:71 +#: html/Admin/Queues/People.html:142 #. ($id) -msgid "Couldn't load queue %1" -msgstr "Impossible de charger la queue %1" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" -msgstr "Impossible de charger le Scrip" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" -msgstr "Impossible de charger le modèle" +msgid "Couldn't load queue" +msgstr "Impossible de charger la file" -#: html/Admin/Users/Prefs.html:78 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) -msgid "Couldn't load that user (%1)" -msgstr "Impossible de charger cet utilisateur (%1)" +msgid "Couldn't load queue %1" +msgstr "Impossible de charger la file %1" -#: html/SelfService/Display.html:108 +#: html/SelfService/Display.html:158 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "Impossible de charger le ticket '%1'" -#: html/Admin/Elements/ModifyUser:85 html/Admin/Users/Modify.html:148 html/User/Prefs.html:97 +#: lib/RT/Ticket_Overlay.pm:2620 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "Impossible de résoudre la base '%1' dans une URI." + +#: lib/RT/Ticket_Overlay.pm:2619 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "Impossible de résoudre la cible '%1' dans une URI." + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "Pays" -#: html/Admin/Elements/CreateUserCalled:25 html/Ticket/Create.html:134 html/Ticket/Create.html:194 +#: 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 msgid "Create" msgstr "Ajouter" -#: etc/initialdata:127 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "Ajouter des tickets" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "Ajouter un Champ Personnalisé" -#: html/Admin/Queues/CustomField.html:47 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" -msgstr "Ajouter un champ personnalisé à la queue %1" - -#: html/Admin/Global/CustomField.html:47 -msgid "Create a CustomField which applies to all queues" -msgstr "Ajouter un champ personnalisé à toutes les queues" +msgstr "Ajouter un champ personnalisé pour la file %1" -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "Ajouter un nouveaux champ personnalisé" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "Ajouter un nouveau scrip global" - -#: html/Admin/Groups/Modify.html:66 html/Admin/Groups/Modify.html:92 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "Ajouter un nouveau groupe" -#: html/User/Groups/Modify.html:66 html/User/Groups/Modify.html:91 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "Ajouter un nouveau groupe personnel" -#: NOT FOUND IN SOURCE -msgid "Create a new queue" -msgstr "Ajouter une nouvelle queue" - -#: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "Ajouter un nouveau scrip" - -#: NOT FOUND IN SOURCE -msgid "Create a new template" -msgstr "Ajouter un nouveau modèle" - -#: html/Ticket/Create.html:24 html/Ticket/Create.html:27 html/Ticket/Create.html:35 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "Ajouter un nouveau ticket" -#: html/Admin/Users/Modify.html:213 html/Admin/Users/Modify.html:240 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "Ajouter un nouvel utilisateur" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" -msgstr "Ajouter une queue" - -#: NOT FOUND IN SOURCE -msgid "Create a queue called" -msgstr "Ajouter une nouvelle queue appelée" - -#: NOT FOUND IN SOURCE -msgid "Create a request" -msgstr "Ajouter une demande" +msgstr "Ajouter une file" -#: html/Admin/Queues/Scrip.html:58 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" -msgstr "Ajouter un scrip pour la queue %1" +msgstr "Ajouter un scrip pour la file %1" -#: html/Admin/Global/Template.html:68 html/Admin/Queues/Template.html:64 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "Ajouter un modèle" -#: html/SelfService/Create.html:24 +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 msgid "Create a ticket" msgstr "Ajouter un ticket" -#: NOT FOUND IN SOURCE -msgid "Create failed: %1 / %2 / %3 " -msgstr "Echec à la création de: %1 / %2 / %3" - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "Echec à la création de: %1/%2/%3" - -#: etc/initialdata:129 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "Ajouter de nouveaux tickets basés sur le modèle de ce scrip" -#: html/SelfService/Create.html:77 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "Ajouter un ticket" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" -msgstr "Ajouter des tickets dans cette queue" +msgstr "Ajouter des tickets dans cette file" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "Ajouter, supprimer et modifier des champs personnalisés" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" -msgstr "Ajouter, supprimer et modifier les queues" - -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "Ajouter, supprime et modifie les membres des groupe spersonnels de n'importe quel utilisateur" +msgstr "Ajouter, supprimer et modifier les files" -#: lib/RT/System.pm:58 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "Ajouter, supprimer et modifier les membres d'un groupe personnel" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "Ajouter, supprimer et modifier les utilisateurs" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "CréerRechercheSauvée" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "CréerTicket" -#: html/Elements/SelectDateType:25 html/Ticket/Elements/ShowDates:26 lib/RT/Ticket_Overlay.pm:1203 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "Créé" -#: html/Admin/Elements/EditCustomField:87 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" -msgstr "Champ Personnalisé %1 ajouté" +msgstr "Champ Personnalisé %1 créé" -#: NOT FOUND IN SOURCE -msgid "Created template %1" -msgstr "Modèle %1 créé" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Créateur" -#: html/Ticket/Elements/EditLinks:27 -msgid "Current Relationships" -msgstr "Relations actuelles" +#: html/Elements/EditLinks:49 +msgid "Current Links" +msgstr "Liens courants" -#: html/Admin/Elements/EditScrips:29 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "Scrips actuels" -#: html/Admin/Groups/Members.html:38 html/User/Groups/Members.html:41 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Membres actuels" -#: html/Admin/Elements/SelectRights:28 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Droits actuels" -#: html/Search/Listing.html:70 -msgid "Current search criteria" -msgstr "Critères de recherche courants" - -#: html/Admin/Queues/People.html:40 html/Ticket/Elements/EditPeople:44 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Observateurs actuels" -#: html/Admin/Global/CustomField.html:54 -#. ($CustomField) -msgid "Custom Field #%1" -msgstr "Champ personnalisé n°%1" - -#: html/Admin/Elements/QueueTabs:52 html/Admin/Elements/SystemTabs:39 html/Admin/Global/index.html:49 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "Champs Personnalisés" -#: html/Admin/Elements/EditScrip:72 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Champs personnalisés pour %1" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "Programme de nettoyage d'action personnalisé" -#: html/Admin/Elements/EditScrip:64 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "Programme de préparation d'action personnalisé " -#: html/Admin/Elements/EditScrip:48 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "Condition personnalisée" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) -msgid "Custom field %1 %2 %3" -msgstr "Champs personnalisés %1 %2 %3" - -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2176 #. ($CF->Name) msgid "Custom field %1 has a value." -msgstr "Le champ personnalisé %1 a une valeur" +msgstr "Le champ personnalisé %1 a une valeur." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2172 #. ($CF->Name) msgid "Custom field %1 has no value." -msgstr "Le champ personnalisé %1 n'a pas de valeur" +msgstr "Le champ personnalisé %1 n'a pas de valeur." -#: lib/RT/Ticket_Overlay.pm:3491 +#: lib/RT/Record.pm:1580 lib/RT/Record.pm:1741 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Le champ personnalisé %1 est introuvable" -#: html/Admin/Elements/EditCustomFields:196 -msgid "Custom field deleted" -msgstr "Champ personnalisé supprimé" - -#: lib/RT/Ticket_Overlay.pm:3641 -msgid "Custom field not found" -msgstr "Le champ personnalisé est introuvable" - -#: lib/RT/CustomField_Overlay.pm:349 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "La valeur du champ personnalisé %1 ne peut pas être trouvée pour le champ personnalisé %2" -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "Valeur de champ personnalisé modifié de %1 à %2" - -#: lib/RT/CustomField_Overlay.pm:249 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "La valeur du champ personnalisé ne peut pas être effacée" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "La valeur du champ personnalisé ne peut par être trouvée" -#: lib/RT/CustomField_Overlay.pm:247 lib/RT/CustomField_Overlay.pm:357 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "La valeur du champ personnalisé est effacée" -#: lib/RT/Transaction_Overlay.pm:548 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "ChampPersonnalisé" -#: NOT FOUND IN SOURCE -msgid "Data error" -msgstr "Erreur de données" - -#: html/SelfService/Display.html:38 html/Ticket/Create.html:160 html/Ticket/Elements/ShowSummary:54 html/Ticket/Elements/Tabs:92 html/Ticket/ModifyAll.html:43 +#: 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 msgid "Dates" msgstr "Dates" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "Déc." -#: NOT FOUND IN SOURCE -msgid "December" -msgstr "Décembre" - -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" -msgstr "Modèle de réponse automatique par défaut" - -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "Modèle de réponse automatique par défaut" -#: etc/initialdata:281 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "File par défaut" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Demandeur par défaut" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "Modèle de commentaire administrateur par défaut" -#: etc/initialdata:260 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "Modèle de courrier administrateur par défaut" -#: etc/initialdata:272 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "Modèle de courrier par défaut" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "Modèle de transaction par défaut" -#: lib/RT/Transaction_Overlay.pm:694 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "Par défaut: %1/%2 modifié de %3 à %4" - -#: html/User/Delegation.html:24 html/User/Delegation.html:27 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Déléguer les droits" -#: lib/RT/System.pm:62 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." -msgstr "Déléguer des droits spécifiques qui vous ont été accordés" +msgstr "Déléguer des droits spécifiques qui vous ont été accordés." -#: lib/RT/System.pm:62 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "DéléguerDroits" -#: html/User/Elements/Tabs:37 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "Délégation" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "Supprimer" -#: lib/RT/Queue_Overlay.pm:88 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Détruire le modèle" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "Échec de la destruction : %1" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Supprimer les scrips sélectionnés" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" -msgstr "Supprimer des tickets" +msgstr "Supprimer les tickets" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "SupprimerTicket" -#: lib/RT/Transaction_Overlay.pm:187 -msgid "Deleting this object could break referential integrity" -msgstr "Effacer cet objet pourrait briser l'intégrité référentielle" +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "Recherche détruite" -#: lib/RT/Queue_Overlay.pm:293 +#: lib/RT/Queue_Overlay.pm:395 msgid "Deleting this object would break referential integrity" msgstr "Effacer cet objet briserait l'intégrité référentielle" -#: lib/RT/User_Overlay.pm:499 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Effacer cet objet violerait l'intégrité référentielle" -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity." -msgstr "Effacer cet objet violerait l'intégrité référentielle" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity. That's bad." -msgstr "Effacer cet objet violerait l'intégrité référentielle, c'est serait facheux!" - -#: html/Approvals/Elements/Approve:44 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "Refuser" -#: html/Ticket/Create.html:180 html/Ticket/Elements/BulkLinks:34 html/Ticket/Elements/EditLinks:122 html/Ticket/Elements/EditLinks:46 html/Ticket/Elements/ShowDependencies:31 html/Ticket/Elements/ShowLinks:36 +#: 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 msgid "Depended on by" msgstr "En dépend" -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" -msgstr "Dépendances : \\n" - -#: lib/RT/Transaction_Overlay.pm:626 +#: lib/RT/Transaction_Overlay.pm:707 #. ($value) msgid "Dependency by %1 added" msgstr "Ajout de la dépendance par %1" -#: lib/RT/Transaction_Overlay.pm:655 +#: lib/RT/Transaction_Overlay.pm:747 #. ($value) msgid "Dependency by %1 deleted" msgstr "Suppression de la dépendance par %1" -#: lib/RT/Transaction_Overlay.pm:624 +#: lib/RT/Transaction_Overlay.pm:704 #. ($value) msgid "Dependency on %1 added" msgstr "Ajout de la dépendance de %1" -#: lib/RT/Transaction_Overlay.pm:653 +#: lib/RT/Transaction_Overlay.pm:744 #. ($value) msgid "Dependency on %1 deleted" msgstr "Suppression de la dépendance de %1" -#: html/Elements/SelectLinkType:26 html/Ticket/Create.html:179 html/Ticket/Elements/BulkLinks:30 html/Ticket/Elements/EditLinks:118 html/Ticket/Elements/EditLinks:35 html/Ticket/Elements/ShowDependencies:24 html/Ticket/Elements/ShowLinks:26 +#: 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 msgid "Depends on" msgstr "Dépend de" -#: NOT FOUND IN SOURCE -msgid "DependsOn" -msgstr "DépendDe" - -#: html/Elements/SelectSortOrder:34 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "Décroissant" -#: html/SelfService/Create.html:72 html/Ticket/Create.html:118 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "Décrivez la situation ci-dessous" -#: html/Admin/Elements/AddCustomFieldValue:35 html/Admin/Elements/EditCustomField:38 html/Admin/Elements/EditScrip:33 html/Admin/Elements/ModifyQueue:35 html/Admin/Elements/ModifyTemplate:35 html/Admin/Groups/Modify.html:48 html/Admin/Queues/Modify.html:47 html/Elements/SelectGroups:26 html/User/Groups/Modify.html:48 +#: 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 "Description" -#: NOT FOUND IN SOURCE -msgid "Details" -msgstr "Détails" - -#: html/Ticket/Elements/Tabs:84 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Afficher" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "Afficher la liste des droits" -#: lib/RT/Queue_Overlay.pm:74 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Afficher les colonnes" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" -msgstr "Afficher les modèles de Scrips pour cette queue" +msgstr "Afficher les modèles de Scrips pour cette file" -#: lib/RT/Queue_Overlay.pm:77 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" -msgstr "Afficher les Scrips pour cette queue" +msgstr "Afficher les Scrips pour cette file" -#: html/Ticket/Elements/ShowHistory:34 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Mode d'affichage" -#: NOT FOUND IN SOURCE -msgid "Display ticket #%1" -msgstr "Afficher le ticket n°%1" +#: lib/RT/Group_Overlay.pm:168 +msgid "Display saved searches for this group" +msgstr "Afficher les recherches sauvegardées de ce groupe" + +#: html/Elements/Footer:56 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "Distribué selon les termes de la version 2 de la <a href=\"http://www.gnu.org/copyleft/gpl.html\">licence GNU GPL.</a>" -#: lib/RT/System.pm:53 +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "Faire tout et n'importe quoi" -#: html/Elements/Refresh:29 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "Lancer la recherche" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "Ne pas rafraîchir cette page." -#: html/Search/Elements/PickRestriction:113 -msgid "Don't show search results" -msgstr "Ne pas afficher le résultat de la recherche" - -#: html/Ticket/Elements/ShowTransaction:91 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "Télécharger" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:44 html/Ticket/Elements/ShowDates:42 lib/RT/Ticket_Overlay.pm:1207 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "Télécharger en tant que fichier délimité par tabulations" + +#: 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 msgid "Due" msgstr "Echéance" -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" -msgstr "Date d'échéance '%1' n'est pas comprise" +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" +msgstr "Modifier les champs personnalisés pour %1" -#: bin/rt-commit-handler:753 -#. ($1, $msg) -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "ERREUR: impossible de charger le ticket '%1' : %2.\\n" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "Modifier les champs personnalisés pour tous les groupes" -#: NOT FOUND IN SOURCE -msgid "Edit" -msgstr "Modifier" +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "Modifier les champs personnalisés pour tous les utilisateurs" -#: NOT FOUND IN SOURCE -msgid "Edit Conditions" -msgstr "Modifier les conditions" +#: 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 "Modifier les champs personnalisés pour les tickets de toutes les files" -#: html/Admin/Queues/CustomFields.html:44 -#. ($Queue->Name) -msgid "Edit Custom Fields for %1" -msgstr "Editer les champs personnalisés pour %1" +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" +msgstr "Modifier les liens" -#: html/Search/Bulk.html:143 html/Ticket/ModifyLinks.html:35 -msgid "Edit Relationships" -msgstr "Modifier les relations" +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Modifier la requête" -#: html/Admin/Queues/Templates.html:41 +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" -msgstr "Modifier les modèles pour la queue %1" +msgstr "Modifier les modèles pour la file %1" -#: NOT FOUND IN SOURCE -msgid "Edit keywords" -msgstr "Modifier les mots clé" +#: lib/RT/Group_Overlay.pm:167 +msgid "Edit saved searches for this group" +msgstr "Modifier les recherches sauvées du groupe" -#: NOT FOUND IN SOURCE -msgid "Edit scrips" -msgstr "Modifier les scrips" - -#: html/Admin/Global/index.html:45 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "Modifier les modèles système" -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" -msgstr "Modifier les modèles pour %1" +#: lib/RT/Group_Overlay.pm:167 +msgid "EditSavedSearches" +msgstr "ModifierRecherchesSaugardées" -#: html/Admin/Elements/ModifyQueue:24 html/Admin/Queues/Modify.html:118 +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" -msgstr "Modifier la configuration de la queue %1" +msgstr "Modifier la configuration de la file %1" -#: html/Admin/Elements/ModifyUser:24 -#. ($UserObj->Name) -msgid "Editing Configuration for user %1" -msgstr "Modifier la configuration de l'utilisateur %1" - -#: html/Admin/Elements/EditCustomField:90 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" -msgstr "Modifier le ChampPersonnalisé %1" +msgstr "Modifier le champ personnalisé %1" -#: html/Admin/Groups/Members.html:31 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "Modifier les membres du groupe %1" -#: html/User/Groups/Members.html:128 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "Modifier les membres du groupe personnel %1" -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "Modifie le modèle %1" - -#: lib/RT/Ticket_Overlay.pm:2660 lib/RT/Ticket_Overlay.pm:2738 +#: lib/RT/Record.pm:1282 lib/RT/Record.pm:1359 msgid "Either base or target must be specified" msgstr "La base ou la cible doivent être spécifiées" -#: html/Admin/Users/Modify.html:52 html/Admin/Users/Prefs.html:45 html/Elements/SelectUsers:26 html/Ticket/Elements/AddWatchers:55 html/User/Prefs.html:41 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Email" -#: lib/RT/User_Overlay.pm:247 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "Adresse email utilisée" -#: html/Admin/Elements/ModifyUser:41 -msgid "EmailAddress" -msgstr "EmailAddress" - -#: html/Admin/Elements/ModifyUser:53 -msgid "EmailEncoding" -msgstr "EmailEncoding" - -#: html/Admin/Elements/EditCustomField:50 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "Activé (Décocher cette case désactive ce champ personnalisé)" -#: html/Admin/Groups/Modify.html:52 html/User/Groups/Modify.html:52 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "Activé (Décocher cette case désactive ce groupe)" -#: html/Admin/Queues/Modify.html:83 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Activé (Décocher cette case désactive cette queue)" - -#: html/Admin/Elements/EditCustomFields:98 -msgid "Enabled Custom Fields" -msgstr "Champs personnalisés actifs" +msgstr "Activé (Décocher cette case désactive cette file)" -#: html/Admin/Queues/index.html:55 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" -msgstr "Queues actives" +msgstr "Files actives" -#: html/Admin/Elements/EditCustomField:106 html/Admin/Groups/Modify.html:116 html/Admin/Queues/Modify.html:140 html/Admin/Users/Modify.html:282 html/User/Groups/Modify.html:116 +#: 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)) msgid "Enabled status %1" -msgstr "Statut actif %1" +msgstr "État %1 activé" -#: lib/RT/CustomField_Overlay.pm:427 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "État actif : %1" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" -msgstr "Entrer plusieurs valeurs" +msgstr "Saisir plusieurs valeurs" -#: lib/RT/CustomField_Overlay.pm:424 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Saisir les objets ou les URI pour y lier les objets. Séparer les saisies par des espaces." + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" -msgstr "Entrer une seule valeur" +msgstr "Saisir une seule valeur" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Saisir les files ou les URI pour y lier les files. Séparer les saisies avec des espaces." -#: html/Search/Bulk.html:144 html/Ticket/Elements/EditLinks:111 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Saisir les tickets ou URIs pour y lier les tickets. Séparer les saisies par des espaces." +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Saisir les tickets ou URI pour y lier les tickets. Séparer les saisies par des espaces." -#: html/Elements/Login:39 html/SelfService/Error.html:24 html/SelfService/Error.html:25 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "Saisir au plus %1 valeurs" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Erreur" -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" -msgstr "Erreur à l'ajout de l'observateur" - -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:673 msgid "Error in parameters to Queue->AddWatcher" msgstr "Erreur de paramètres pour Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 -msgid "Error in parameters to Queue->DelWatcher" -msgstr "Erreur de paramètres pour Queue->DelWatcher" +#: lib/RT/Queue_Overlay.pm:834 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Erreur dans les paramètre de Queue->DeleteWatcher" -#: lib/RT/Ticket_Overlay.pm:1392 +#: lib/RT/Ticket_Overlay.pm:1341 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Erreur de paramètres pour Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1549 -msgid "Error in parameters to Ticket->DelWatcher" -msgstr "Erreur de paramètres pour Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1507 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Erreur dans les paramètres de Ticket->DeleteWatcher" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "Échelonner les tickets" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Estimé" #: etc/initialdata:20 msgid "Everyone" msgstr "Tout le monde" -#: bin/rt-crontool:193 +#: bin/rt-crontool:219 msgid "Example:" -msgstr "Exemple:" - -#: html/Admin/Elements/ModifyUser:63 -msgid "ExternalAuthId" -msgstr "ExternalAuthId" +msgstr "Exemple :" -#: html/Admin/Elements/ModifyUser:57 -msgid "ExternalContactInfoId" -msgstr "ExternalContactInfoId" - -#: html/Admin/Users/Modify.html:72 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "Info supplémentaire" -#: lib/RT/User_Overlay.pm:363 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "Impossible de créer l'attribut de recherche" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Recherche du pseudo groupe d'utilisateurs 'Priviligiés' infructueuse" +msgstr "Recherche du pseudo groupe d'utilisateurs 'Priviligiés' infructueuse." -#: lib/RT/User_Overlay.pm:370 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "Recherche du pseudo groupe d'utilisateurs 'non-privilégiés' infructueuse" -#: bin/rt-crontool:137 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "Echec de chargement du module %1. (%2)" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "Impossible de charger l'objet pour %1" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "Fév." -#: NOT FOUND IN SOURCE -msgid "February" -msgstr "Février" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "NomFichier" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "Saisir dans plusieurs champs de type texte" -#: NOT FOUND IN SOURCE -msgid "Fin" -msgstr "Fin" +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "Saisir plusieurs champs de type wiki" -#: html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:58 lib/RT/Tickets_Overlay.pm:1091 +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "Saisir dans un champ de type texte" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "Saisir un champ de type wiki" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "Saisir au plus %1 champs de type texte" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "Saisir au plus %1 champs de type wiki" + +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1598 msgid "Final Priority" msgstr "Priorité finale" -#: lib/RT/Ticket_Overlay.pm:1198 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "PrioritéFinale" -#: html/Admin/Queues/People.html:60 html/Ticket/Elements/EditPeople:33 -msgid "Find group whose" -msgstr "Trouver un groupe dont" - -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "Accéder aux tickets en cours" +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "Trouver les groupes dont" -#: html/Admin/Queues/People.html:56 html/Admin/Users/index.html:45 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "Trouver les gens dont" -#: html/Search/Listing.html:107 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "Rechercher des tickets" -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "Terminer l'approbation" - -#: html/Ticket/Elements/Tabs:57 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Premier" -#: html/Search/Listing.html:40 -msgid "First page" -msgstr "Première page" - -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" -msgstr "Foo!" +msgstr "Foo !" -#: html/Search/Bulk.html:86 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "Forcer la modification" -#: html/Search/Listing.html:105 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "Format" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "%quant(%1,ticket) trouvés" -#: lib/RT/Interface/Web.pm:904 +#: lib/RT/Record.pm:943 msgid "Found Object" msgstr "Objet trouvé" -#: html/Admin/Elements/ModifyUser:43 -msgid "FreeformContactInfo" -msgstr "SaisieLibreInfoContact" - -#: lib/RT/CustomField_Overlay.pm:37 -msgid "FreeformMultiple" -msgstr "SaisieLibreMultiple" - -#: lib/RT/CustomField_Overlay.pm:36 -msgid "FreeformSingle" -msgstr "SaisieLibreSimple" - -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Ven." -#: html/Ticket/Elements/ShowHistory:40 html/Ticket/Elements/ShowHistory:50 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "En-têtes complets" -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" -msgstr "Obtention de l'utilisateur courant depuis une signature pgp\\n" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "Obtenir le modèle à partir d'un fichier" -#: lib/RT/Transaction_Overlay.pm:593 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "Donné à %1" -#: html/Admin/Elements/Tabs:40 html/Admin/index.html:37 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "Global" -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" -msgstr "Mots clé globaux" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Champs personnalisés globaux" -#: NOT FOUND IN SOURCE -msgid "Global Scrips" -msgstr "Scrips globaux" +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "Configuration globale des champs personnalisés" -#: html/Admin/Elements/SelectTemplate:37 +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" -msgstr "Modèle global: %1" - -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Queues/People.html:58 html/Admin/Queues/People.html:62 html/Admin/Queues/index.html:43 html/Admin/Users/index.html:48 html/Ticket/Elements/EditPeople:31 html/Ticket/Elements/EditPeople:35 html/index.html:40 -msgid "Go!" -msgstr "Go!" +msgstr "Modèle global : %1" -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" -msgstr "Signature pgp valide pour %1\\n" +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Lancer" -#: html/Search/Listing.html:49 -msgid "Goto page" -msgstr "Aller à la page" +#: 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 +msgid "Go!" +msgstr "Lancer !" -#: html/Elements/GotoTicket:24 html/SelfService/Elements/GotoTicket:24 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "Aller au ticket" -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "Accorder" - -#: html/Ticket/Elements/AddWatchers:45 html/User/Elements/DelegateRights:77 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "Groupe" -#: NOT FOUND IN SOURCE -msgid "Group %1 %2: %3" -msgstr "Groupe %1 %2 : %3" - -#: html/Admin/Elements/GroupTabs:44 html/Admin/Elements/QueueTabs:56 html/Admin/Elements/SystemTabs:43 html/Admin/Global/index.html:54 +#: 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 "Droits de groupe" -#: lib/RT/Group_Overlay.pm:964 +#: lib/RT/Group_Overlay.pm:983 msgid "Group already has member" msgstr "Le groupe a déjà un membre" -#: NOT FOUND IN SOURCE -msgid "Group could not be created." -msgstr "Le groupe n'a pas pu être créé" - -#: html/Admin/Groups/Modify.html:76 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "Le groupe %1 n'a pu être créé" -#: lib/RT/Group_Overlay.pm:496 +#: lib/RT/Group_Overlay.pm:521 msgid "Group created" msgstr "Groupe ajouté" -#: lib/RT/Group_Overlay.pm:1132 +#: lib/RT/Group_Overlay.pm:1155 msgid "Group has no such member" msgstr "Un tel membre n'appartient pas au groupe" -#: lib/RT/Group_Overlay.pm:944 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1446 lib/RT/Ticket_Overlay.pm:1524 +#: lib/RT/Group_Overlay.pm:963 lib/RT/Queue_Overlay.pm:749 lib/RT/Queue_Overlay.pm:809 lib/RT/Ticket_Overlay.pm:1399 lib/RT/Ticket_Overlay.pm:1479 msgid "Group not found" msgstr "Groupe introuvable" -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "Groupe introuvable.\\n" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "Groupe non spécifié.\\n" - -#: html/Admin/Elements/SelectNewGroupMembers:34 html/Admin/Elements/Tabs:34 html/Admin/Groups/Members.html:63 html/Admin/Queues/People.html:82 html/Admin/index.html:31 html/User/Groups/Members.html:66 +#: 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 msgid "Groups" msgstr "Groupes" -#: lib/RT/Group_Overlay.pm:970 +#: lib/RT/Group_Overlay.pm:989 msgid "Groups can't be members of their members" msgstr "Les groupes ne peuvent pas être membres de leurs membres" -#: lib/RT/Interface/CLI.pm:72 lib/RT/Interface/CLI.pm:72 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "Groupes correspondant au critère de recherche" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "Cette utilisateur appartient aux groupes" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" -msgstr "Bonjour!" +msgstr "Bonjour !" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Bonjour, %1" -#: html/Ticket/Elements/ShowHistory:29 html/Ticket/Elements/Tabs:87 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "Historique" -#: html/Admin/Elements/ModifyUser:67 -msgid "HomePhone" -msgstr "Téléphone domicile" +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "Historique du groupe %1" -#: html/Elements/Tabs:43 +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "Historique de l'utilisateur %1" + +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Page d'accueil" -#: lib/RT/Base.pm:73 +#: lib/RT/Base.pm:119 #. (6) msgid "I have %quant(%1,concrete mixer)." -msgstr "J'ai %quant (%1, toupie à béton)" +msgstr "J'ai %quant(%1, toupie à béton)." -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." -msgstr "J'ai %quant (%1, toupie à béton)" +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "Je suis perdu" -#: html/Ticket/Elements/ShowBasics:26 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1523 msgid "Id" msgstr "Identifiant" -#: html/Admin/Users/Modify.html:43 html/User/Prefs.html:38 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identité" -#: etc/initialdata:411 etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "Si une approbation est refusée, rejette l'original et supprime les approbations en attente" -#: bin/rt-crontool:189 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "SI aucun demandeur n'est spécifié, créer les tickets pour ce demandeur." + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "Si aucune file n'est spécifée, créer les tickets dans cette file." + +#: 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 "Si cet outil était setgid, un utilisateur local mal intentionné pourrait l'utiliser pour obtenir un access administrateur à RT" +msgstr "Si cet outil était setgid, un utilisateur local mal intentionné pourrait l'utiliser pour obtenir un accès administrateur à RT." -#: html/Admin/Queues/People.html:104 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyPeople.html:37 +#: 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 "Si vous avez fait une modification, assurez vous de" -#: lib/RT/Interface/Web.pm:896 +#: lib/RT/Record.pm:934 msgid "Illegal value for %1" msgstr "Valeur incorrecte pour %1" -#: lib/RT/Interface/Web.pm:899 +#: lib/RT/Record.pm:937 msgid "Immutable field" msgstr "Champ non modifiable" -#: html/Admin/Elements/EditCustomFields:73 -msgid "Include disabled custom fields in listing." -msgstr "Inclure les champs personnalisés désactivés dans la liste" +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Inclure les groupes inactifs dans le listage." -#: html/Admin/Queues/index.html:42 +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." -msgstr "Afficher les queues inactives." +msgstr "Afficher les files inactives." -#: html/Admin/Users/index.html:46 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." -msgstr "Inclure les utilisateurs désactivés dans le résultat" +msgstr "Inclure les utilisateurs désactivés dans le résultat." -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "Requête incomplète" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "Requête incomplète" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1573 msgid "Initial Priority" msgstr "Priorité initiale" -#: lib/RT/Ticket_Overlay.pm:1197 lib/RT/Ticket_Overlay.pm:1199 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "PrioritéInitiale" -#: lib/RT/ScripAction_Overlay.pm:104 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Erreur à l'entrée" -#: NOT FOUND IN SOURCE -msgid "Interest noted" -msgstr "Votre intéret est noté" - -#: lib/RT/Ticket_Overlay.pm:3866 +#: lib/RT/Ticket_Overlay.pm:3467 msgid "Internal Error" msgstr "Erreur interne" -#: lib/RT/Record.pm:142 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" -msgstr "Erreur interne: %1" +msgstr "Erreur interne : %1" -#: lib/RT/Group_Overlay.pm:643 +#: lib/RT/Group_Overlay.pm:668 msgid "Invalid Group Type" msgstr "Type de groupe invalide" -#: lib/RT/Principal_Overlay.pm:127 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "Droit invalide" -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "Type invalide" - -#: lib/RT/Interface/Web.pm:901 +#: lib/RT/Record.pm:939 msgid "Invalid data" msgstr "Données invalides" -#: lib/RT/Ticket_Overlay.pm:457 -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Intervenant invalide, affectation à 'personne'" - -#: lib/RT/Scrip_Overlay.pm:133 lib/RT/Template_Overlay.pm:250 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" -msgstr "Queue invalide" +msgstr "File invalide" -#: lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:269 lib/RT/ACE_Overlay.pm:274 +#: 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 "Droit invalide" -#: lib/RT/Record.pm:117 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" -msgstr "Queue invalide pour %1" +msgstr "File invalide pour %1" -#: lib/RT/Ticket_Overlay.pm:3498 +#: lib/RT/Record.pm:1598 msgid "Invalid value for custom field" msgstr "Valeur incorrecte pour le champ personnalisé" -#: lib/RT/Ticket_Overlay.pm:364 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Valeur de statut invalide" -#: bin/rt-crontool:190 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Il est extrêmement important que les utilisateurs non authorisés n'aient pas accès à cet outil" +msgstr "Il est extrêmement important que les utilisateurs non autorisés n'aient pas accès à cet outil." -#: bin/rt-crontool:191 +#: 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 "Il est suggéré de créer un utilisateur unix non privilégié appartenant au bon groupe et ayant accès à RT pour utiliser cet outil" +msgstr "Il est suggéré de créer un utilisateur Unix non privilégié appartenant au bon groupe et ayant accès à RT pour utiliser cet outil." -#: bin/rt-crontool:162 +#: bin/rt-crontool:188 msgid "It takes several arguments:" -msgstr "Il faut plusieurs paramètres:" +msgstr "Il faut plusieurs paramètres :" -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" -msgstr "Eléments attendant mon approbation" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "Italique" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "Jan." -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "Janvier" - -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:166 msgid "Join or leave this group" msgstr "Rejoignez ou quittez ce groupe" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Jul." -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "Juillet" - -#: html/Ticket/Elements/Tabs:98 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "Tout" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "Jun." -#: NOT FOUND IN SOURCE -msgid "June" -msgstr "Juin" - -#: NOT FOUND IN SOURCE -msgid "Keyword" -msgstr "Mot Clé" +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "Langue" -#: html/Admin/Elements/ModifyUser:51 -msgid "Lang" -msgstr "Lang" +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "Grande" -#: html/Ticket/Elements/Tabs:72 +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "Dernier" -#: html/Ticket/Elements/EditDates:37 html/Ticket/Elements/ShowDates:38 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Dernier contact" -#: html/Elements/SelectDateType:28 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Date dernier contact" -#: html/Search/Elements/TicketHeader:40 -msgid "Last Notified" -msgstr "Dernière notification" - -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Date dernière MAJ" -#: NOT FOUND IN SOURCE -msgid "LastUpdated" -msgstr "DernièreMAJ" +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "DernièreMAJPar" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "Restant" -#: html/Admin/Users/Modify.html:82 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "Donner accès à RT à cet utilisateur" -#: html/Admin/Users/Modify.html:86 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "Autoriser cet utilisateur à recevoir des droits" -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "Limitation des intervenants à %1 %2" +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "Relation" -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" -msgstr "Limitation de la queue à %1 %2" - -#: lib/RT/Ticket_Overlay.pm:2752 +#: lib/RT/Record.pm:1293 msgid "Link already exists" msgstr "Le lien existe déja" -#: lib/RT/Ticket_Overlay.pm:2764 +#: lib/RT/Record.pm:1307 msgid "Link could not be created" msgstr "Le lien ne peut être ajouté" -#: lib/RT/Ticket_Overlay.pm:2772 lib/RT/Ticket_Overlay.pm:2784 +#: lib/RT/Record.pm:1313 #. ($TransString) msgid "Link created (%1)" msgstr "Le lien est ajouté (%1)" -#: lib/RT/Ticket_Overlay.pm:2685 +#: lib/RT/Record.pm:1374 #. ($TransString) msgid "Link deleted (%1)" msgstr "Le lien est effacé (%1)" -#: lib/RT/Ticket_Overlay.pm:2691 +#: lib/RT/Record.pm:1380 msgid "Link not found" msgstr "Lien introuvable" -#: html/Ticket/ModifyLinks.html:24 html/Ticket/ModifyLinks.html:28 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "Lier le ticket n°%1" -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "Lier au ticket %1" - -#: html/Ticket/Elements/Tabs:96 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Relations" -#: html/Admin/Users/Modify.html:113 html/User/Prefs.html:84 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "Charger" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "Charger les recherches sauvées :" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "ChargerRechercheSauvée" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "Modules perl chargés" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "Recherche %1 chargée" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "Localisation" -#: lib/RT.pm:162 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." -msgstr "Le répertoire de log %1 est introuvable ou en lecture seule. \\n RT ne peut pas démarrer" +msgstr "Le répertoire de journalisation %1 est introuvable ou inaccessible en écriture.\\n RT ne peut être lancé." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "Connecté en tant que %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:35 html/Elements/Login:44 html/Elements/Login:54 +#: 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 msgid "Login" msgstr "Connexion" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Déconnexion" -#: html/Search/Bulk.html:85 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "Faire attention aux types différents" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "Attribuer" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "Appliquer Statut" -#: html/Search/Bulk.html:117 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "Appliquer date d'échéance" -#: html/Search/Bulk.html:119 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "Appliquer date de résolution" -#: html/Search/Bulk.html:113 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "Appliquer date de début" -#: html/Search/Bulk.html:111 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "Appliquer date d'ouverture" -#: html/Search/Bulk.html:115 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "Appliquer Age" -#: html/Search/Bulk.html:105 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "Appliquer priorité" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:126 msgid "Make queue" -msgstr "Appliquer queue" +msgstr "Appliquer file" -#: html/Search/Bulk.html:103 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "Changer le sujet" -#: html/Admin/index.html:32 +#: lib/RT/Group_Overlay.pm:169 +msgid "Make this group visible to user" +msgstr "Malkovich Malkovich Malkovich Malkovich" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "Gérer les champs personnalisés et leurs valeurs" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "Gérer les groupes et leurs membres" -#: html/Admin/index.html:38 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" -msgstr "Gérer les propriétés et configurations générales des queues" +msgstr "Gérer les propriétés et configurations générales des files" -#: html/Admin/index.html:35 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" -msgstr "Gérer les queues et leurs propriétés individuelles" +msgstr "Gérer les files et leurs propriétés individuelles" -#: html/Admin/index.html:29 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "Gérer les utilisateurs et mots de passe" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "Mar." -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "Mars" - -#: NOT FOUND IN SOURCE -msgid "May" -msgstr "Mai" - -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "Mai." -#: lib/RT/Transaction_Overlay.pm:635 +#: lib/RT/Transaction_Overlay.pm:720 #. ($value) msgid "Member %1 added" msgstr "Membre %1 ajouté" -#: lib/RT/Transaction_Overlay.pm:664 +#: lib/RT/Transaction_Overlay.pm:760 #. ($value) msgid "Member %1 deleted" msgstr "Membre %1 supprimé" -#: lib/RT/Group_Overlay.pm:981 +#: lib/RT/Group_Overlay.pm:1000 msgid "Member added" msgstr "Membre ajouté" -#: lib/RT/Group_Overlay.pm:1139 +#: lib/RT/Group_Overlay.pm:1162 msgid "Member deleted" msgstr "Membre supprimé" -#: lib/RT/Group_Overlay.pm:1143 +#: lib/RT/Group_Overlay.pm:1166 msgid "Member not deleted" msgstr "Membre non supprimé" -#: html/Elements/SelectLinkType:25 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "Membre de" -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "MembreDe" - -#: html/Admin/Elements/GroupTabs:41 html/User/Elements/GroupTabs:41 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "Membres" -#: lib/RT/Transaction_Overlay.pm:633 +#: lib/RT/Transaction_Overlay.pm:717 #. ($value) msgid "Membership in %1 added" msgstr "Appartenance à %1 ajoutée" -#: lib/RT/Transaction_Overlay.pm:662 +#: lib/RT/Transaction_Overlay.pm:757 #. ($value) msgid "Membership in %1 deleted" msgstr "Appartenance à %1 supprimée" -#: lib/RT/Ticket_Overlay.pm:2941 +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "Affiliations" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "Affiliations de l'utilisateur %1" + +#: lib/RT/Ticket_Overlay.pm:2857 msgid "Merge Successful" msgstr "Fusion réussie" -#: lib/RT/Ticket_Overlay.pm:2861 +#: lib/RT/Ticket_Overlay.pm:2744 msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Echec de fusion. Ne peut appliquer EffectiveId" +msgstr "Échec de fusion. Ne peut appliquer EffectiveId" -#: html/Ticket/Elements/BulkLinks:26 html/Ticket/Elements/EditLinks:114 +#: lib/RT/Ticket_Overlay.pm:2752 +msgid "Merge failed. Couldn't set Status" +msgstr "Échec de fusion. Ne peut appliquer Status" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "Fusionner dans" -#: html/Search/Bulk.html:137 html/Ticket/Update.html:100 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Fusionné avec %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "Message" -#: lib/RT/Interface/Web.pm:903 +#: lib/RT/Ticket_Overlay.pm:2414 +msgid "Message could not be recorded" +msgstr "Le message ne peut être sauvegardé" + +#: lib/RT/Ticket_Overlay.pm:2417 +msgid "Message recorded" +msgstr "Message sauvegardé" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "Les messages relatifs à ce ticket ne seront pas envoyés à ..." + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "Parenthèses non correspondantes" + +#: lib/RT/Record.pm:941 msgid "Missing a primary key?: %1" -msgstr "Clé primaire manquante? : %1" +msgstr "Clé primaire manquante ? : %1" -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:53 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "Mobile" -#: html/Admin/Elements/ModifyUser:71 -msgid "MobilePhone" -msgstr "MobilePhone" - -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "Modifier la liste de droits" -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" -msgstr "Modifier champ personnalisé %1" +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "Modifier les champs personnalisés s'appliquant à %1 pour tous les %2" -#: html/Admin/Global/CustomFields.html:43 html/Admin/Global/index.html:50 -msgid "Modify Custom Fields which apply to all queues" -msgstr "Modifier les champs personnalisés globaux" +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Modifier les champs personnalisés qui s'appliquent à tous les %1" -#: lib/RT/Queue_Overlay.pm:72 +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Modifier les droits du groupe" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Modifier les membres" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Modifier les droits" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" -msgstr "Modifier les modèles de Scrips pour cette queue" +msgstr "Modifier les modèles de Scrips pour cette file" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" -msgstr "Modifier les Scrips pour cette queue" +msgstr "Modifier les Scrips pour cette file" -#: NOT FOUND IN SOURCE -msgid "Modify System ACLS" -msgstr "Modifier ACLs système" - -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" -msgstr "Modifier le modèle %1" +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Modifier les droits des usagers" -#: html/Admin/Queues/CustomField.html:44 +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" -msgstr "Modifier un champ personnalisé pour la queue %1" +msgstr "Modifier un champ personnalisé pour la file %1" -#: html/Admin/Global/CustomField.html:52 -msgid "Modify a CustomField which applies to all queues" -msgstr "Modifier un champ personnalisé global" - -#: html/Admin/Queues/Scrip.html:53 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" -msgstr "Modifier le scrip pour la queue %1" +msgstr "Modifier le scrip pour la file %1" -#: html/Admin/Global/Scrip.html:47 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" -msgstr "Modiier le scrip qui s'applique à toutes les queues" +msgstr "Modifier le scrip qui s'applique à toutes les files" -#: NOT FOUND IN SOURCE -msgid "Modify dates for # %1" -msgstr "Modifier les dates pur n°%1" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Modifier les objets associés à %1" -#: html/Ticket/ModifyDates.html:24 html/Ticket/ModifyDates.html:28 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "Modifier les dates pour n°%1" -#: html/Ticket/ModifyDates.html:34 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "Modifier les dates du ticket n°%1" -#: html/Admin/Global/GroupRights.html:24 html/Admin/Global/GroupRights.html:27 html/Admin/Global/index.html:55 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "Modifier globalement les champs personnalisés" + +#: 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 "Modifier les droits de groupe globaux" -#: html/Admin/Global/GroupRights.html:32 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." -msgstr "Modifier les droits de groupe globaux" +msgstr "Modifier les droits de groupe globaux." -#: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" -msgstr "Modifier les droits globaux des groupes" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" -msgstr "Modifier les droits globaux des utilisateurs" - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "Modifier les scrips globaux" - -#: html/Admin/Global/UserRights.html:24 html/Admin/Global/UserRights.html:27 html/Admin/Global/index.html:59 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "Modifier les droits utilisateurs globaux" -#: html/Admin/Global/UserRights.html:32 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." -msgstr "Modifier les droits utilisateurs globaux" +msgstr "Modifier les droits utilisateurs globaux." -#: lib/RT/Group_Overlay.pm:145 +#: lib/RT/Group_Overlay.pm:163 msgid "Modify group metadata or delete group" msgstr "Modifier les métadonnées ou supprimer le groupe" -#: html/Admin/Groups/GroupRights.html:24 html/Admin/Groups/GroupRights.html:28 html/Admin/Groups/GroupRights.html:34 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Modifier les droits de groupe pour le champ personnalisé %1" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "Modifier les droits du groupe %1" -#: html/Admin/Queues/GroupRights.html:24 html/Admin/Queues/GroupRights.html:28 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" -msgstr "Modifier les droits de groupe pour la queue %1" +msgstr "Modifier les droits de groupe pour la file %1" -#: lib/RT/Group_Overlay.pm:147 +#: lib/RT/Group_Overlay.pm:165 msgid "Modify membership roster for this group" -msgstr "Modifier le membership roster pour ce groupe" +msgstr "Modifier la liste des membres pour ce groupe" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" -msgstr "Modifier son propre profile RT" +msgstr "Modifier son propre profil RT" -#: html/Admin/Queues/People.html:24 html/Admin/Queues/People.html:28 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" -msgstr "Modifier les utilisateurs de la queue %1" +msgstr "Modifier les utilisateurs de la file %1" -#: html/Ticket/ModifyPeople.html:24 html/Ticket/ModifyPeople.html:28 html/Ticket/ModifyPeople.html:34 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "Modifier les utilisateurs du ticket n°%1" -#: html/Admin/Queues/Scrips.html:45 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" -msgstr "Modifier les scrips de la queue %1" +msgstr "Modifier les scrips de la file %1" -#: html/Admin/Global/Scrips.html:43 html/Admin/Global/index.html:41 +#: 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 "Modifier les scrips s'appliquant à toutes les queues" +msgstr "Modifier les scrips s'appliquant à toutes les files" -#: html/Admin/Global/Template.html:24 html/Admin/Global/Template.html:29 html/Admin/Global/Template.html:80 html/Admin/Queues/Template.html:77 +#: 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) msgid "Modify template %1" msgstr "Modifier le modèle %1" -#: html/Admin/Global/Templates.html:43 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "Modifier les modèles globaux" -#: html/Admin/Groups/Modify.html:86 html/User/Groups/Modify.html:85 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "Modifier le groupe %1" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" -msgstr "Modifier les observateurs de la queue" +msgstr "Modifier les observateurs de la file" -#: html/Admin/Users/Modify.html:235 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Modifier l'utilisateur %1" -#: html/Ticket/ModifyAll.html:36 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" -msgstr "Modifier le ticket # %1" +msgstr "Modifier le ticket n°%1" -#: html/Ticket/Modify.html:24 html/Ticket/Modify.html:27 html/Ticket/Modify.html:33 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "Modifier le ticket n°%1" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "Modifier les tickets" -#: html/Admin/Groups/UserRights.html:24 html/Admin/Groups/UserRights.html:28 html/Admin/Groups/UserRights.html:34 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Modifier les droits utilisateurs pour le champ personnalisé %1" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Modifier les droits utilisateurs pour le groupe %1" -#: html/Admin/Queues/UserRights.html:24 html/Admin/Queues/UserRights.html:28 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" -msgstr "Modifier les droits utilisateurs pour la queue %1" +msgstr "Modifier les droits utilisateurs pour la file %1" -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" -msgstr "Modifier les observateurs dela queue '%1'" - -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "ModifierACL" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "ModifierChampPersonnalisé" + +#: lib/RT/Group_Overlay.pm:166 msgid "ModifyOwnMembership" msgstr "ModifierPropresAppartenances" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "ModifierObservateurs" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "ModifierScrips" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "ModifierDonnéesPerso" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "ModifierModèle" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "ModifierTicket" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Lun." -#: html/Ticket/Elements/ShowRequestor:41 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" -msgstr "Plus d'info sur %1" +msgstr "Plus d'informations sur %1" -#: html/Admin/Elements/EditCustomFields:60 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "Aller en bas" -#: html/Admin/Elements/EditCustomFields:52 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "Aller en haut" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "Multiple" -#: lib/RT/User_Overlay.pm:238 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "Attribut 'Nom' obligatoire" -#: html/SelfService/Elements/MyRequests:48 +#: html/SelfService/Elements/MyRequests:70 #. ($friendly_status) msgid "My %1 tickets" -msgstr "Mes %1 tickets" - -#: NOT FOUND IN SOURCE -msgid "My Approvals" -msgstr "Mes approbations" +msgstr "Mes tickets %1s" -#: html/Approvals/index.html:24 html/Approvals/index.html:25 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "Mes approbations" -#: html/Admin/Elements/AddCustomFieldValue:31 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/ModifyTemplate:27 html/Admin/Elements/ModifyUser:29 html/Admin/Groups/Modify.html:43 html/Elements/SelectGroups:25 html/Elements/SelectUsers:27 html/User/Groups/Modify.html:43 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Mes recherches" + +#: html/Admin/CustomFields/Modify.html:58 html/Admin/Elements/AddCustomFieldValue:53 html/Admin/Elements/EditCustomField:55 html/Admin/Elements/EditCustomFieldValues:55 html/Admin/Elements/ModifyTemplate:49 html/Admin/Groups/Modify.html:65 html/User/Groups/Modify.html:65 msgid "Name" msgstr "Nom" -#: lib/RT/User_Overlay.pm:245 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Nom utilisé" -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "Approbation de l'administrateur système nécessaire" - -#: html/Ticket/Elements/ShowDates:51 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "Jamais" -#: html/Elements/Quicksearch:29 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Nouveau" -#: html/Admin/Elements/ModifyUser:31 html/Admin/Users/Modify.html:92 html/User/Prefs.html:64 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nouveaux liens" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Nouveau mot de passe" -#: etc/initialdata:317 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "Nouvelles approbations en attente" -#: html/Ticket/Elements/EditLinks:110 -msgid "New Relationships" -msgstr "Nouvelles relations" - -#: html/Ticket/Elements/Tabs:35 -msgid "New Search" -msgstr "Nouvelle recherche" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Nouvelle requête" -#: html/Admin/Global/CustomField.html:40 html/Admin/Global/CustomFields.html:38 html/Admin/Queues/CustomField.html:51 html/Admin/Queues/CustomFields.html:39 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "Nouveau champ personnalisé" -#: html/Admin/Elements/GroupTabs:53 html/User/Elements/GroupTabs:51 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "Nouveau groupe" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Nouveau mot de passe" -#: lib/RT/User_Overlay.pm:764 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Notification de nouveau mot de passe envoyée" -#: html/Admin/Elements/QueueTabs:69 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" -msgstr "Nouvelle queue" +msgstr "Nouvelle file" -#: NOT FOUND IN SOURCE -msgid "New request" -msgstr "Nouvelle demande" - -#: html/Admin/Elements/SelectRights:41 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Nouveaux droits" -#: html/Admin/Global/Scrip.html:39 html/Admin/Global/Scrips.html:38 html/Admin/Queues/Scrip.html:42 html/Admin/Queues/Scrips.html:54 +#: 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 "Nouveau scrip" -#: NOT FOUND IN SOURCE -msgid "New search" -msgstr "Nouvelle recherche" - -#: html/Admin/Global/Template.html:59 html/Admin/Global/Templates.html:38 html/Admin/Queues/Template.html:57 html/Admin/Queues/Templates.html:49 +#: 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 "Nouveau modèle" -#: html/SelfService/Elements/Tabs:47 +#: html/SelfService/Elements/Tabs:69 msgid "New ticket" msgstr "Nouveau ticket" -#: lib/RT/Ticket_Overlay.pm:2828 +#: lib/RT/Ticket_Overlay.pm:2721 msgid "New ticket doesn't exist" msgstr "Nouveau ticket inconnu" -#: html/Admin/Elements/UserTabs:51 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "Nouvel utilisateur" -#: html/Admin/Elements/CreateUserCalled:25 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Nouvel utilisateur appelé" -#: html/Admin/Queues/People.html:54 html/Ticket/Elements/EditPeople:28 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Nouveaux observateurs" -#: html/Admin/Users/Prefs.html:41 -msgid "New window setting" -msgstr "Nouveaux paramètres d'affichage" - -#: html/Ticket/Elements/Tabs:68 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Suivant" -#: html/Search/Listing.html:47 -msgid "Next page" +#: html/Elements/TicketList:104 +msgid "Next Page" msgstr "Page suivante" -#: html/Admin/Elements/ModifyUser:49 -msgid "NickName" -msgstr "Surnom" - -#: html/Admin/Users/Modify.html:62 html/User/Prefs.html:45 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "Surnom" -#: html/Admin/Elements/EditCustomField:89 html/Admin/Elements/EditCustomFields:104 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "Aucune classe définie" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" -msgstr "Pas de CustomField" +msgstr "Aucun champ personnalisé" + +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Aucun champ personnalisé défini" -#: html/Admin/Groups/GroupRights.html:83 html/Admin/Groups/UserRights.html:70 +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "Aucun groupe défini" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:67 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Aucune requête" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" -msgstr "Aucune queue définie" +msgstr "Aucune file définie" -#: bin/rt-crontool:55 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Aucun utilisateur RT trouvé. Merci de consulter votre administrateur RT" +msgstr "Pas d'utilisateur RT trouvé. Merci de consulter votre administrateur RT.\\n" -#: html/Admin/Global/Template.html:78 html/Admin/Queues/Template.html:75 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "Pas de modèle" -#: bin/rt-commit-handler:763 -msgid "No Ticket specified. Aborting ticket " -msgstr "Aucun ticket spécifié. Annulation de ticket" - -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "Aucun ticket spécifié. Annulation des modifications de tickets\\n\\n" - -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "Pas d'action" -#: lib/RT/Interface/Web.pm:898 +#: lib/RT/Record.pm:936 msgid "No column specified" msgstr "Aucune colonne spécifiée" -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "Commande introuvable\\n" - -#: html/Elements/ViewUser:35 html/Ticket/Elements/ShowRequestor:44 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "Pas de commentaires concernant cet utilisateur" -#: lib/RT/Ticket_Overlay.pm:2220 lib/RT/Ticket_Overlay.pm:2288 -msgid "No correspondence attached" -msgstr "Pas de texte dans le courrier" - -#: lib/RT/Action/Generic.pm:149 lib/RT/Condition/Generic.pm:175 lib/RT/Search/ActiveTicketsInQueue.pm:55 lib/RT/Search/Generic.pm:112 +#: 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) msgid "No description for %1" msgstr "Aucune description disponible pour %1" -#: lib/RT/Users_Overlay.pm:150 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Aucun groupe spécifié" -#: lib/RT/User_Overlay.pm:982 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Aucun groupe trouvé d'après le critère de recherche." + +#: lib/RT/Ticket_Overlay.pm:2357 +msgid "No message attached" +msgstr "Aucun messages attachés" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "Pas de mot de passe configuré" -#: lib/RT/Queue_Overlay.pm:260 +#: lib/RT/Queue_Overlay.pm:362 msgid "No permission to create queues" -msgstr "Permission refusée pour la création de queue" +msgstr "Permission refusée pour la création de file" -#: lib/RT/Ticket_Overlay.pm:360 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" -msgstr "Vous n'êtes pas autorisé à créer un ticket dans cette queue '%1'" +msgstr "Vous n'êtes pas autorisé à créer un ticket dans cette file '%1'" -#: lib/RT/User_Overlay.pm:211 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "Permission refusée pour la création d'utilisateurs" -#: html/SelfService/Display.html:117 +#: html/SelfService/Display.html:167 msgid "No permission to display that ticket" msgstr "Pas de permission pour afficher ce ticket" -#: html/SelfService/Update.html:51 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "Pas de permission pour afficher le ticket mis à jour" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1505 +#: lib/RT/Queue_Overlay.pm:796 lib/RT/Ticket_Overlay.pm:1458 msgid "No principal specified" msgstr "Aucun groupe/utilisateur spécifié" -#: html/Admin/Queues/People.html:153 html/Admin/Queues/People.html:163 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." -msgstr "Aucun groupe/utilisateur sélectionné" +msgstr "Aucun groupe/utilisateur sélectionné." -#: html/Admin/Queues/index.html:34 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." -msgstr "Pas de queue correspondant aux critères de recherche" +msgstr "Pas de file correspondant aux critères de recherche." -#: html/Admin/Elements/SelectRights:80 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "Aucun droit trouvé" -#: html/Admin/Elements/SelectRights:32 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." -msgstr "Aucun droit accordé" +msgstr "Aucun droit accordé." -#: html/Search/Bulk.html:160 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "Pas de recherche chargée" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "Pas de critère de recherche." -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" -msgstr "Aucun numéro de ticket spécifié." +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Pas de sujet" -#: lib/RT/Transaction_Overlay.pm:478 lib/RT/Transaction_Overlay.pm:516 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" -msgstr "Aucun type de transaction spécifié." - -#: NOT FOUND IN SOURCE -msgid "No user or email address specified" -msgstr "Aucun utilisateur ou adresse email spécifié" +msgstr "Aucun type de transaction spécifié" -#: html/Admin/Users/index.html:35 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "Aucun utilisateur ne correspond aux critères de recherche." -#: bin/rt-commit-handler:643 -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "Aucun utilisateur RT valide trouvé. Gestionnaire de cvs RT inaccessible. Merci de contacter votre administrateur RT.\\n" - -#: lib/RT/Interface/Web.pm:895 +#: lib/RT/Record.pm:933 msgid "No value sent to _Set!\\n" -msgstr "Aucune valeur envoyée à _Set!\\n" +msgstr "Pas de valeur à positionner !\\n" -#: html/Search/Elements/TicketRow:36 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "Personne" -#: lib/RT/Interface/Web.pm:900 +#: lib/RT/Record.pm:938 msgid "Nonexistant field?" -msgstr "Champ inexistant?" - -#: NOT FOUND IN SOURCE -msgid "Not logged in" -msgstr "Non loggé" +msgstr "Champ inexistant ?" -#: html/Elements/Header:59 +#: html/Elements/Header:96 msgid "Not logged in." -msgstr "Non connecté" +msgstr "Non connecté." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Non renseigné" -#: html/NoAuth/Reminder.html:26 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." -msgstr "Fonction pas encore disponible" - -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "Fonction pas encore disponible..." +msgstr "Fonction pas encore disponible." -#: html/Approvals/Elements/Approve:48 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "Notes" -#: lib/RT/User_Overlay.pm:767 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "Impossible d'envoyer la notification" -#: etc/initialdata:93 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "Avertir les AdminCCs" -#: etc/initialdata:89 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "Avertir les AdminCCs par un commentaire" -#: etc/initialdata:120 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "Aviser par cc" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "Aviser par cc pour commentaires" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "Avertir les autres destinataires" -#: etc/initialdata:116 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "Avertir les autres destinataires par un commentaire" @@ -2963,19 +2764,19 @@ msgstr "Avertir l'intervenant" msgid "Notify Owner as Comment" msgstr "Avertir l'intervenant par un commentaire" -#: etc/initialdata:361 +#: etc/initialdata:376 msgid "Notify Owner of their rejected ticket" msgstr "Avertir l'Intervenant du rejet de son ticket" -#: etc/initialdata:350 +#: etc/initialdata:365 msgid "Notify Owner of their ticket has been approved by all approvers" msgstr "Avertir l'Intervenant de l'approbation de son ticket par tous les approbateurs" -#: etc/initialdata:338 +#: etc/initialdata:353 msgid "Notify Owner of their ticket has been approved by some approver" msgstr "Avertir l'Intervenant de l'approbation de son ticket par un des approbateurs" -#: etc/initialdata:319 etc/upgrade/2.1.71:17 +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "Avertir les intervenants et les AdminCCs de nouveaux éléments attendant leur approbation" @@ -2983,282 +2784,310 @@ msgstr "Avertir les intervenants et les AdminCCs de nouveaux éléments attendan msgid "Notify Requestors" msgstr "Avertir les demandeurs" -#: etc/initialdata:103 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "Avertir les demandeurs et les Ccs" -#: etc/initialdata:98 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "Avertir les demandeurs et les CC par un commentaire" -#: etc/initialdata:112 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "Avertir les demandeurs, CCs et AdminCCs" -#: etc/initialdata:108 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "Avertir les demandeurs, CCs et AdminCCs par un commentaire" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "Nov." -#: NOT FOUND IN SOURCE -msgid "November" -msgstr "Novembre" +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "OU" -#: lib/RT/Record.pm:156 +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "L'objet n'a pas pu être ajouté" -#: lib/RT/Record.pm:175 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "Impossible d'effacer l'objet" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "Objet ajouté" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "Objet effacé" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "Les objets de type %1 ne peuvent avoir de champs personnalisés" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "Le type d'objet ne correspond pas" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Oct." -#: NOT FOUND IN SOURCE -msgid "October" -msgstr "Octobre" +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Déconnecté" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Édition hors ligne" -#: html/Elements/SelectDateRelation:34 +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "Téléchargement hors ligne" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "Le" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "Lors d'un commentaire" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "Lors d'un courrier" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "Lors d'une création" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "Lors d'un changement d'intervenant" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "Lors d'un changement de priorité" + +#: etc/initialdata:192 msgid "On Queue Change" -msgstr "Lors d'un changement de queue" +msgstr "Lors d'un changement de file" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "Lors de la résolution/clôture" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "Lors d'un changement de statut" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "Lors d'une transaction" -#: html/Approvals/Elements/PendingMyApproval:49 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "Ne montrer que les approbations pour les demandes créées après %1" -#: html/Approvals/Elements/PendingMyApproval:47 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "Ne montrer que les approbations pour les demandes créées avant %1" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Ouvert" -#: html/Ticket/Elements/Tabs:135 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Ouvrir" -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "Ouvrir les demandes" - -#: html/SelfService/Elements/Tabs:41 +#: html/SelfService/Elements/Tabs:63 msgid "Open tickets" -msgstr "Ouvrir les tickets" +msgstr "Tickets ouverts" -#: html/Admin/Users/Prefs.html:40 -msgid "Open tickets (from listing) in a new window" -msgstr "Ouvrir les tickets (depuis une liste) dans une nouvelle fenêtre." - -#: html/Admin/Users/Prefs.html:39 -msgid "Open tickets (from listing) in another window" -msgstr "Ouvrir les tickets (depuis une liste) dans une autre fenêtre." - -#: etc/initialdata:132 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "Ouvrir les tickets lors d'une correspondance" -#: html/Search/Elements/PickRestriction:100 -msgid "Ordering and sorting" -msgstr "Ranger et classer" +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Trier par" -#: html/Admin/Elements/ModifyUser:45 html/Admin/Users/Modify.html:116 html/Elements/SelectUsers:28 html/User/Prefs.html:85 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "Organisation" -#: html/Approvals/Elements/Approve:32 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "Ticket source: n°%1" -#: html/Admin/Elements/ModifyQueue:54 html/Admin/Queues/Modify.html:68 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "Mail sortant suite à l'enregistrement d'un commentaire" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "Mail sortant enregistré" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" -msgstr "Temps dépassé, priorité déplacée" +msgstr "Temps dépassé, priorité augmentée" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "Tickets propres" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "PrendreTicket" -#: etc/initialdata:38 html/Elements/MyRequests:31 html/SelfService/Elements/MyRequests:29 html/Ticket/Create.html:47 html/Ticket/Elements/EditPeople:42 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/ShowPeople:26 html/Ticket/Update.html:62 lib/RT/ACE_Overlay.pm:85 lib/RT/Tickets_Overlay.pm:1244 +#: 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:1763 msgid "Owner" msgstr "Intervenant" -#: NOT FOUND IN SOURCE -msgid "Owner changed from %1 to %2" -msgstr "Intervenant changé de %1 en %2" +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "Le propriétaire ne peut être sauvé." -#: lib/RT/Transaction_Overlay.pm:582 +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "Intervenant forcé de %1 à %2" -#: html/Search/Elements/PickRestriction:30 -msgid "Owner is" -msgstr "L'intervenant est" +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Page %1 sur %2" -#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:55 +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Bipeur" -#: html/Admin/Elements/ModifyUser:73 -msgid "PagerPhone" -msgstr "PagerPhone" - -#: NOT FOUND IN SOURCE -msgid "Parent" -msgstr "" - -#: html/Ticket/Create.html:181 html/Ticket/Elements/BulkLinks:38 html/Ticket/Elements/EditLinks:126 html/Ticket/Elements/EditLinks:57 html/Ticket/Elements/ShowLinks:46 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Parents" -#: html/Elements/Login:52 html/User/Prefs.html:60 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Mot de passe" -#: html/NoAuth/Reminder.html:24 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "Pense-bête pour votre mot de passe" -#: lib/RT/User_Overlay.pm:228 lib/RT/User_Overlay.pm:985 -msgid "Password too short" -msgstr "Mot de passe trop court" +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "Mot de passe changé" -#: html/Admin/Users/Modify.html:290 html/User/Prefs.html:171 +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "Le mot de passe doit comporter au moins %1 caractères" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "Mot de passe défini" + +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" -msgstr "Mot de passe: %1" +msgstr "Mot de passe : %1" -#: html/Admin/Users/Modify.html:292 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "Mot de passe : permission refusée" + +#: html/Admin/Users/Modify.html:356 msgid "Passwords do not match." -msgstr "Les mots de passes sont différents" +msgstr "Les mots de passe sont différents." -#: html/User/Prefs.html:173 +#: html/User/Prefs.html:234 msgid "Passwords do not match. Your password has not been changed" msgstr "Les mots de passe sont différents. Votre mot de passe n'a pas été modifié" -#: html/Ticket/Elements/ShowSummary:44 html/Ticket/Elements/Tabs:95 html/Ticket/ModifyAll.html:50 +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "Personnes" -#: etc/initialdata:125 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "Réaliser une action définie par l'utilisateur" -#: lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:236 lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:572 lib/RT/ACE_Overlay.pm:582 lib/RT/ACE_Overlay.pm:647 lib/RT/CurrentUser.pm:82 lib/RT/CurrentUser.pm:91 lib/RT/CustomField_Overlay.pm:100 lib/RT/CustomField_Overlay.pm:201 lib/RT/CustomField_Overlay.pm:233 lib/RT/CustomField_Overlay.pm:511 lib/RT/CustomField_Overlay.pm:90 lib/RT/Group_Overlay.pm:1094 lib/RT/Group_Overlay.pm:1098 lib/RT/Group_Overlay.pm:1107 lib/RT/Group_Overlay.pm:1158 lib/RT/Group_Overlay.pm:1162 lib/RT/Group_Overlay.pm:1168 lib/RT/Group_Overlay.pm:425 lib/RT/Group_Overlay.pm:517 lib/RT/Group_Overlay.pm:595 lib/RT/Group_Overlay.pm:603 lib/RT/Group_Overlay.pm:700 lib/RT/Group_Overlay.pm:704 lib/RT/Group_Overlay.pm:710 lib/RT/Group_Overlay.pm:903 lib/RT/Group_Overlay.pm:907 lib/RT/Group_Overlay.pm:920 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:125 lib/RT/Scrip_Overlay.pm:136 lib/RT/Scrip_Overlay.pm:196 lib/RT/Scrip_Overlay.pm:433 lib/RT/Template_Overlay.pm:283 lib/RT/Template_Overlay.pm:87 lib/RT/Template_Overlay.pm:93 lib/RT/Ticket_Overlay.pm:1377 lib/RT/Ticket_Overlay.pm:1387 lib/RT/Ticket_Overlay.pm:1401 lib/RT/Ticket_Overlay.pm:1535 lib/RT/Ticket_Overlay.pm:1544 lib/RT/Ticket_Overlay.pm:1557 lib/RT/Ticket_Overlay.pm:1906 lib/RT/Ticket_Overlay.pm:2044 lib/RT/Ticket_Overlay.pm:2208 lib/RT/Ticket_Overlay.pm:2275 lib/RT/Ticket_Overlay.pm:2634 lib/RT/Ticket_Overlay.pm:2715 lib/RT/Ticket_Overlay.pm:2819 lib/RT/Ticket_Overlay.pm:2834 lib/RT/Ticket_Overlay.pm:3033 lib/RT/Ticket_Overlay.pm:3043 lib/RT/Ticket_Overlay.pm:3048 lib/RT/Ticket_Overlay.pm:3270 lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3630 lib/RT/Ticket_Overlay.pm:3682 lib/RT/Ticket_Overlay.pm:3860 lib/RT/Transaction_Overlay.pm:466 lib/RT/Transaction_Overlay.pm:473 lib/RT/Transaction_Overlay.pm:502 lib/RT/Transaction_Overlay.pm:509 lib/RT/User_Overlay.pm:1079 lib/RT/User_Overlay.pm:1527 lib/RT/User_Overlay.pm:687 lib/RT/User_Overlay.pm:722 lib/RT/User_Overlay.pm:978 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Configuration de Perl" + +#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm: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:1117 lib/RT/Group_Overlay.pm:1121 lib/RT/Group_Overlay.pm:1130 lib/RT/Group_Overlay.pm:1240 lib/RT/Group_Overlay.pm:1244 lib/RT/Group_Overlay.pm:1250 lib/RT/Group_Overlay.pm:445 lib/RT/Group_Overlay.pm:542 lib/RT/Group_Overlay.pm:620 lib/RT/Group_Overlay.pm:628 lib/RT/Group_Overlay.pm:726 lib/RT/Group_Overlay.pm:730 lib/RT/Group_Overlay.pm:736 lib/RT/Group_Overlay.pm:922 lib/RT/Group_Overlay.pm:926 lib/RT/Group_Overlay.pm:939 lib/RT/Queue_Overlay.pm:1055 lib/RT/Queue_Overlay.pm:141 lib/RT/Queue_Overlay.pm:159 lib/RT/Queue_Overlay.pm:658 lib/RT/Queue_Overlay.pm:668 lib/RT/Queue_Overlay.pm:682 lib/RT/Queue_Overlay.pm:820 lib/RT/Queue_Overlay.pm:829 lib/RT/Queue_Overlay.pm:842 lib/RT/Scrip_Overlay.pm:150 lib/RT/Scrip_Overlay.pm:161 lib/RT/Scrip_Overlay.pm:226 lib/RT/Scrip_Overlay.pm:540 lib/RT/Template_Overlay.pm:112 lib/RT/Template_Overlay.pm:118 lib/RT/Template_Overlay.pm:309 lib/RT/Ticket_Overlay.pm:1326 lib/RT/Ticket_Overlay.pm:1336 lib/RT/Ticket_Overlay.pm:1350 lib/RT/Ticket_Overlay.pm:1491 lib/RT/Ticket_Overlay.pm:1501 lib/RT/Ticket_Overlay.pm:1515 lib/RT/Ticket_Overlay.pm:1632 lib/RT/Ticket_Overlay.pm:1952 lib/RT/Ticket_Overlay.pm:2090 lib/RT/Ticket_Overlay.pm:2260 lib/RT/Ticket_Overlay.pm:2310 lib/RT/Ticket_Overlay.pm:2482 lib/RT/Ticket_Overlay.pm:2585 lib/RT/Ticket_Overlay.pm:2633 lib/RT/Ticket_Overlay.pm:2712 lib/RT/Ticket_Overlay.pm:2726 lib/RT/Ticket_Overlay.pm:2950 lib/RT/Ticket_Overlay.pm:2960 lib/RT/Ticket_Overlay.pm:2965 lib/RT/Ticket_Overlay.pm:3188 lib/RT/Ticket_Overlay.pm:3192 lib/RT/Ticket_Overlay.pm:3335 lib/RT/Ticket_Overlay.pm:3461 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 msgid "Permission Denied" msgstr "Accès refusé" -#: html/User/Elements/Tabs:34 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "Groupes personnels" -#: html/User/Groups/index.html:29 html/User/Groups/index.html:39 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Groupes personnels" -#: html/User/Elements/DelegateRights:36 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Groupes personnels:" -#: html/Admin/Users/Modify.html:155 html/User/Prefs.html:48 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Numéros de téléphone" -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "Paramètre fictif" - -#: html/Elements/Header:51 html/Elements/Tabs:52 html/SelfService/Elements/Tabs:50 html/SelfService/Prefs.html:24 html/User/Prefs.html:24 html/User/Prefs.html:27 +#: 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 msgid "Preferences" msgstr "Préférences" -#: NOT FOUND IN SOURCE -msgid "Prefs" -msgstr "Préférences" - -#: lib/RT/Action/Generic.pm:159 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Préparation interrompue" -#: html/Ticket/Elements/Tabs:60 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Précédent" -#: html/Search/Listing.html:43 -msgid "Previous page" +#: html/Elements/TicketList:101 +msgid "Previous Page" msgstr "Page précédente" -#: NOT FOUND IN SOURCE -msgid "Pri" -msgstr "Pri." - -#: lib/RT/ACE_Overlay.pm:132 lib/RT/ACE_Overlay.pm:207 lib/RT/ACE_Overlay.pm:551 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." -msgstr "Principal %1 non trouvé" +msgstr "Personne/groupe %1 non trouvé." -#: html/Search/Elements/PickRestriction:53 html/Ticket/Create.html:153 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:38 lib/RT/Tickets_Overlay.pm:1042 +#: 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:1547 msgid "Priority" msgstr "Priorité" -#: html/Admin/Elements/ModifyQueue:50 html/Admin/Queues/Modify.html:64 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "La priorité débute à " +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "Privé:" + #: etc/initialdata:25 msgid "Privileged" msgstr "Privilégié" -#: html/Admin/Users/Modify.html:270 html/User/Prefs.html:162 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" -msgstr "Statuts privilégiés : %1" +msgstr "Statut privilégiés : %1" -#: html/Admin/Users/index.html:61 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "Utilisateurs privilégiés" @@ -3266,500 +3095,466 @@ msgstr "Utilisateurs privilégiés" msgid "Pseudogroup for internal use" msgstr "Pseudo groupe pour usage interne" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Elements/Quicksearch:28 html/Search/Elements/PickRestriction:45 html/SelfService/Create.html:32 html/Ticket/Create.html:37 html/Ticket/Elements/EditBasics:63 html/Ticket/Elements/ShowBasics:42 html/User/Elements/DelegateRights:79 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Requête" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "Constructeur de requête" + +#: 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:1374 msgid "Queue" -msgstr "Queue" +msgstr "File" -#: html/Admin/Queues/CustomField.html:41 html/Admin/Queues/Scrip.html:49 html/Admin/Queues/Scrips.html:47 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" -msgstr "Queue %1 non trouvée" - -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "Queue '%1' inconnue\\n" +msgstr "File %1 non trouvée" -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "Sélection des mots clé de queue" - -#: html/Admin/Elements/ModifyQueue:30 html/Admin/Queues/Modify.html:42 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" -msgstr "Nom de la queue" - -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "Scrips de queue" +msgstr "Nom de la file" -#: lib/RT/Queue_Overlay.pm:264 +#: lib/RT/Queue_Overlay.pm:366 msgid "Queue already exists" -msgstr "Queue déjà créée" +msgstr "File déjà créée" -#: lib/RT/Queue_Overlay.pm:273 lib/RT/Queue_Overlay.pm:279 +#: lib/RT/Queue_Overlay.pm:375 lib/RT/Queue_Overlay.pm:381 msgid "Queue could not be created" -msgstr "Impossible de créer la queue" +msgstr "Impossible de créer la file" -#: html/Ticket/Create.html:204 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." -msgstr "Queue ne pouvant être chargée" +msgstr "File ne pouvant être chargée." -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:283 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:385 lib/RT/StyleGuide.pod:809 msgid "Queue created" -msgstr "Queue créée" - -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "Queue non spécifié" +msgstr "File créée" -#: html/SelfService/Display.html:70 lib/RT/CustomField_Overlay.pm:97 +#: html/SelfService/Display.html:126 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" -msgstr "Queue inconnue" +msgstr "File inconnue" -#: html/Admin/Elements/Tabs:37 html/Admin/index.html:34 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" -msgstr "Queues" +msgstr "Files" -#: html/Elements/Quicksearch:24 +#: html/Elements/Quicksearch:46 msgid "Quick search" msgstr "Recherche rapide" -#: html/Elements/Login:44 +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Création rapide de ticket" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 pour %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) -msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." -msgstr "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" -msgstr "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" - -#: html/Admin/index.html:24 html/Admin/index.html:25 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "Administration RT" -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "Erreur d'authentification RT." - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "Avis de rejet RT: %1" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "Erreur de configuration RT" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "Erreur critique RT. Courrier non enregistré !" - -#: html/Elements/Error:41 html/SelfService/Error.html:40 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "Erreur RT" -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." -msgstr "RT a reçu un e-mail (%1) de lui-même." - -#: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "RT a reçu du courrier (%1) de lui même" +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "Variables de RT" -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "RT Self Service / Tickets résolus" - -#: html/index.html:24 html/index.html:27 +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" -msgstr "RT en un coup d'oeil" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't authenticate you" -msgstr "RT n'a pas réussi à vous identifier" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT n'a pas pu trouver de demandeur par sa recherche dans une base externe" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" -msgstr "RT n'a pas trouvé la queue" +msgstr "RT en un coup d'Å“il" -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT n'a pas réussi à valider cette signature PGP. \\n" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "RT ne peut enregistrer votre session." -#: html/Elements/PageLayout:85 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT pour %1" -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "RT pour %1: %2" - -#: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "RT a exécuté vos commandes" - -#: html/Elements/Login:94 -#. ('2003') -msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "RT est © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. Distribué sous <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 de la licence générale GNU.</a>" - -#: NOT FOUND IN SOURCE -msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "RT est © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. Distribué sous <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 de la licence générale GNU.</a>" - -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" -msgstr "RT pense que ce courrier peut être un avis de non-distribution" - -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" -msgstr "RT va traiter ce courrier comme s'il n'était pas signé.\\n" - -#: NOT FOUND IN SOURCE -msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "L'interface d'utilisation de RT par email utilise une authentification PGP. Soit vous n'avez pas signé votre courrier, soit la signature est n'a pas pu être vérifiée" - -#: html/Admin/Users/Modify.html:57 html/Admin/Users/Prefs.html:51 html/User/Prefs.html:43 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "Nom" -#: html/Admin/Elements/ModifyUser:47 -msgid "RealName" -msgstr "RealName" - -#: lib/RT/Transaction_Overlay.pm:631 +#: lib/RT/Transaction_Overlay.pm:714 #. ($value) msgid "Reference by %1 added" msgstr "Ajout d'une référence par %1" -#: lib/RT/Transaction_Overlay.pm:660 +#: lib/RT/Transaction_Overlay.pm:754 #. ($value) msgid "Reference by %1 deleted" msgstr "Suppression de la référence par %1" -#: lib/RT/Transaction_Overlay.pm:629 +#: lib/RT/Transaction_Overlay.pm:711 #. ($value) msgid "Reference to %1 added" -msgstr "Ajout d'une reference à %1" +msgstr "Ajout d'une référence à %1" -#: lib/RT/Transaction_Overlay.pm:658 +#: lib/RT/Transaction_Overlay.pm:751 #. ($value) msgid "Reference to %1 deleted" -msgstr "Suppression d'une reference à %1" +msgstr "Suppression d'une référence à %1" -#: html/Ticket/Create.html:184 html/Ticket/Elements/BulkLinks:50 html/Ticket/Elements/EditLinks:138 html/Ticket/Elements/EditLinks:93 html/Ticket/Elements/ShowLinks:70 +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "Mentionné par" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:183 html/Ticket/Elements/BulkLinks:46 html/Ticket/Elements/EditLinks:134 html/Ticket/Elements/EditLinks:79 html/Ticket/Elements/ShowLinks:60 +#: 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 msgid "Refers to" msgstr "Se rapporte à " -#: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "SeRapporteA" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "Affiner" - -#: html/Search/Elements/PickRestriction:26 -msgid "Refine search" -msgstr "Affiner la recherche" - -#: html/Elements/Refresh:35 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "Rafraîchir cette page toutes les %1 minutes." -#: html/Ticket/Create.html:173 html/Ticket/Elements/ShowSummary:61 html/Ticket/ModifyAll.html:56 -msgid "Relationships" -msgstr "Relations" - -#: html/Search/Bulk.html:97 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" -msgstr "Enlever AdminCc " +msgstr "Enlever AdminCc" -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Enlever Cc" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Enlever Demandeur" -#: html/Ticket/Elements/ShowTransaction:159 html/Ticket/Elements/Tabs:121 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Répondre" -#: lib/RT/Queue_Overlay.pm:84 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Adresse de réponse" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Répondre aux demandeurs" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "Répondre aux tickets" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "RépondreTicket" -#: etc/initialdata:44 html/Ticket/Update.html:39 lib/RT/ACE_Overlay.pm:86 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Demandeur" -#: html/Search/Elements/PickRestriction:37 -msgid "Requestor email address" -msgstr "Adresse email du demandeur" - -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "Demandeur(s)" - -#: NOT FOUND IN SOURCE -msgid "RequestorAddresses" -msgstr "AdresseDuDemandeur" - -#: html/SelfService/Create.html:40 html/Ticket/Create.html:55 html/Ticket/Elements/EditPeople:47 html/Ticket/Elements/ShowPeople:30 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Demandeurs" -#: html/Admin/Elements/ModifyQueue:60 html/Admin/Queues/Modify.html:74 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "Le demande doit être résolue dans" -#: html/Elements/Submit:61 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Le paramètre requis '%1' n'est pas spécifié" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Remise à zéro" -#: html/Admin/Users/Modify.html:158 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Domicile" -#: html/Ticket/Elements/Tabs:131 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "Résoudre" -#: html/Ticket/Update.html:137 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" -msgstr "Résoudre ticket n°%1 (%2)" +msgstr "Résoudre le ticket n°%1 (%2)" -#: etc/initialdata:308 html/Elements/SelectDateType:27 lib/RT/Ticket_Overlay.pm:1206 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "Résolu" -#: html/Search/Bulk.html:132 html/Ticket/ModifyAll.html:72 html/Ticket/Update.html:71 -msgid "Response to requestors" -msgstr "Réponse aux demandeurs" - -#: html/Elements/ListActions:25 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Résultats" -#: html/Search/Elements/PickRestriction:104 -msgid "Results per page" -msgstr "Nb tickets par page" - -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:99 html/User/Prefs.html:71 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "Saisissez à nouveau votre mot de passe" -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" -msgstr "Le droit %1 introuvable pour %2 %3 dans le périmètre %4 (%5)\\n" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Annuler" -#: lib/RT/ACE_Overlay.pm:612 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Droit délégué" -#: lib/RT/ACE_Overlay.pm:302 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Droit accordé" -#: lib/RT/ACE_Overlay.pm:160 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Droit activé" -#: lib/RT/ACE_Overlay.pm:677 lib/RT/ACE_Overlay.pm:692 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "Droit irrévocable" -#: html/User/Delegation.html:63 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Droit inconnu" -#: lib/RT/ACE_Overlay.pm:542 lib/RT/ACE_Overlay.pm:637 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." -msgstr "Droit non activé" +msgstr "Droit non activé." -#: lib/RT/ACE_Overlay.pm:688 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "Droit révoqué" -#: html/Admin/Elements/UserTabs:40 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Droits" -#: lib/RT/Interface/Web.pm:794 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" -msgstr "Les droits n'on pas pu être attribués à %1" +msgstr "Les droits n'ont pas pu être attribués à %1" -#: lib/RT/Interface/Web.pm:827 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "Les droits n'ont pas pu être révoqués pour %1" -#: html/Admin/Global/GroupRights.html:50 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Rôles" -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "ApprobationDeRoot" +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Lignes par pages" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "Sam." -#: html/Admin/Queues/People.html:104 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyLinks.html:38 html/Ticket/ModifyPeople.html:37 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Sauver" + +#: 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 msgid "Save Changes" msgstr "Enregistrer les modifications" -#: NOT FOUND IN SOURCE +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Sauvegarder les préférences" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Enregistrer les modifications" -#: html/Admin/Global/Scrip.html:48 html/Admin/Queues/Scrip.html:54 -#. ($QueueObj->id) +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "Recherche %1 sauvée" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Recherches sauvées" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "Scrip n°%1" -#: lib/RT/Scrip_Overlay.pm:175 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "Scrip ajouté" -#: html/Admin/Elements/EditScrips:83 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Champs de scrip" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "Scrip supprimé" -#: html/Admin/Elements/QueueTabs:45 html/Admin/Elements/SystemTabs:32 html/Admin/Global/index.html:40 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "Scrips" -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" -msgstr "Scrips pour %1\\n" - -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" -msgstr "Scrips s'appliquant à toutes les queues" +msgstr "Scrips s'appliquant à toutes les files" -#: html/Elements/SimpleSearch:26 html/Search/Elements/PickRestriction:125 html/Ticket/Elements/Tabs:158 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "Rechercher" -#: NOT FOUND IN SOURCE -msgid "Search Criteria" -msgstr "Critère de recherche" +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "Impossible de charger les attributs de recherche" -#: html/Approvals/Elements/PendingMyApproval:38 +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" -msgstr "Chercher des approbations" +msgstr "Rechercher des approbations" -#: bin/rt-crontool:187 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "Mise à jour de la recherche %1" + +#: bin/rt-crontool:213 msgid "Security:" -msgstr "Sécurité:" +msgstr "Sécurité :" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "Voir les champs personnalisés" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "Voir les mails sortant et leurs destinataires" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "Voir les commentaires privés du ticket" -#: lib/RT/Queue_Overlay.pm:66 +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "Vue récapitulative des tickets" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "VoirChampPersonnalisé" + +#: lib/RT/Group_Overlay.pm:169 +msgid "SeeGroup" +msgstr "VoirGroupe" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" -msgstr "VoirQueue" +msgstr "VoirFile" -#: html/Admin/Groups/index.html:39 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "Choisissez un champ personnalisé" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" -msgstr "Sélectionner un groupe" +msgstr "Choisir un groupe" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" -msgstr "Choisir une queue" +msgstr "Choisir une file" + +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "Choisir une file pour votre nouveau ticket" -#: html/Admin/Users/index.html:24 html/Admin/Users/index.html:27 +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" -msgstr "Sélectionner un utilisateur" +msgstr "Choisir un utilisateur" -#: html/Admin/Global/CustomField.html:37 html/Admin/Global/CustomFields.html:35 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" -msgstr "Selectionner le champ personnalisé" +msgstr "Choisir le champ personnalisé" + +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "Choisir des champs personnalisés pour tous les groupes d'utilisateurs" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "Choisir des champs personnalisés pour tous les utilisateurs" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "Choisir des champs personnalisés pour toutes les files" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "Choisir des champs personnalisés pour les opération sur les tickets de toutes les files" -#: html/Admin/Elements/GroupTabs:51 html/User/Elements/GroupTabs:49 +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" -msgstr "Sélectionner le groupe" +msgstr "Choisir le groupe" -#: lib/RT/CustomField_Overlay.pm:421 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "Choisir plusieurs valeurs" -#: lib/RT/CustomField_Overlay.pm:418 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "Choisir une valeur" -#: html/Admin/Elements/QueueTabs:66 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" -msgstr "Selectionner la queue" +msgstr "Choisir la file" -#: html/Admin/Global/Scrip.html:36 html/Admin/Global/Scrips.html:35 html/Admin/Queues/Scrip.html:39 html/Admin/Queues/Scrips.html:51 +#: 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 "Selectionner le scrip" +msgstr "Choisir le scrip" -#: html/Admin/Global/Template.html:56 html/Admin/Global/Templates.html:35 html/Admin/Queues/Template.html:54 html/Admin/Queues/Templates.html:46 +#: 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 "Selectionner le modèle" +msgstr "Choisir le modèle" -#: html/Admin/Elements/UserTabs:48 -msgid "Select user" -msgstr "Selectionner l'utilisateur" +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Choisir au plus %1 valeurs" -#: lib/RT/CustomField_Overlay.pm:35 -msgid "SelectMultiple" -msgstr "ChoixMultiples" +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" +msgstr "Choisir l'utilisateur" -#: lib/RT/CustomField_Overlay.pm:34 -msgid "SelectSingle" -msgstr "ChoixSimple" +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Champs personnalisés sélectionnés" -#: NOT FOUND IN SOURCE -msgid "Self Service" -msgstr "Self Service" +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Objets sélectionnés" -#: etc/initialdata:113 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "Envoyer un courrier à tous les observateurs" -#: etc/initialdata:109 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" -msgstr "Envoyer un courrier à tous les observateurs en tant que \"commentaire\"" +msgstr "Envoyer un mail de commentaire à tous les observateurs" -#: etc/initialdata:104 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "Envoyer un courrier aux demandeurs et aux CCs" -#: etc/initialdata:99 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "Envoyer un courrier aux demandeurs et aux CCs en tant que commentaire" @@ -3767,15 +3562,23 @@ msgstr "Envoyer un courrier aux demandeurs et aux CCs en tant que commentaire" msgid "Sends a message to the requestors" msgstr "Envoyer un courrier aux demandeurs" -#: etc/initialdata:117 etc/initialdata:121 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "Envoyer un courrier aux CCs et Bccs explicitement indiqués" -#: etc/initialdata:94 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "Envoyer un courriel en cc" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "Envoyer un courriel en cc pour commentaires" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "Envoyer un mail aux AdminCCs" -#: etc/initialdata:90 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "Envoyer un mail aux AdminCCs en tant que commentaire" @@ -3783,1061 +3586,984 @@ msgstr "Envoyer un mail aux AdminCCs en tant que commentaire" msgid "Sends mail to the owner" msgstr "Envoyer un courrier à l'intervenant" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Sep." -#: NOT FOUND IN SOURCE -msgid "September" -msgstr "Septembre" +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Afficher" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Afficher les approbations" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Afficher les colonnes" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "Afficher les résultats" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "Afficher les requêtes approuvées" -#: html/Ticket/Create.html:143 html/Ticket/Create.html:33 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Affichage court" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "Afficher les requêtes refusées" -#: html/Ticket/Create.html:143 html/Ticket/Create.html:33 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Affichage long" -#: html/Approvals/Elements/PendingMyApproval:42 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "Afficher les requêtes en attente" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "Afficher les requêtes attendant d'autres approbations" -#: lib/RT/Queue_Overlay.pm:80 -msgid "Show ticket private commentary" -msgstr "Afficher les commentaires privés du ticket" - -#: lib/RT/Queue_Overlay.pm:78 -msgid "Show ticket summaries" -msgstr "Afficher les résumés de tickets" - -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "AfficherACL" -#: lib/RT/Queue_Overlay.pm:77 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "VoirOngletConfiguration" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "AfficherEmailSortant" + +#: lib/RT/Group_Overlay.pm:168 +msgid "ShowSavedSearches" +msgstr "AfficherRecherchesSauvées" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "AfficherScrips" -#: lib/RT/Queue_Overlay.pm:74 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "AfficherModèle" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "AfficherTicket" -#: lib/RT/Queue_Overlay.pm:80 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "AfficherCommentairesTickets" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "S'identifier en tant que demandeur ou CC de queue ou de ticket" +msgstr "S'identifier en tant que demandeur ou CC de file ou de ticket" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" -msgstr "S'identifier en tant qu'AdminCC de ticket ou de queue" +msgstr "S'identifier en tant qu'AdminCC de ticket ou de file" -#: html/Admin/Elements/ModifyUser:38 html/Admin/Users/Modify.html:190 html/Admin/Users/Prefs.html:31 html/User/Prefs.html:111 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "Signature" -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" -msgstr "Connecté en tant que %1" - -#: html/Admin/Elements/SelectSingleOrMultiple:25 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Unique" -#: html/Elements/Header:50 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "Taille" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "Passer le menu" -#: html/Admin/Elements/AddCustomFieldValue:27 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "Petite" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 msgid "Sort" msgstr "Trier" -#: NOT FOUND IN SOURCE -msgid "Sort key" -msgstr "Ordre de tri" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "Étape" -#: html/Search/Elements/PickRestriction:108 -msgid "Sort results by" -msgstr "Trier les résultats par" - -#: NOT FOUND IN SOURCE -msgid "SortOrder" -msgstr "SortOrder" - -#: NOT FOUND IN SOURCE -msgid "Stalled" -msgstr "Bloqué" - -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "Page de début" - -#: html/Elements/SelectDateType:26 html/Ticket/Elements/EditDates:31 html/Ticket/Elements/ShowDates:34 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "Ouvert le" -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "La date de démarrage '%1' n'a pas pu être analysée" - -#: html/Elements/SelectDateType:30 html/Ticket/Create.html:165 html/Ticket/Elements/EditDates:26 html/Ticket/Elements/ShowDates:30 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "Débute" -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "Débute le" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "La date de début '%1' n'a pas pu être analysée" - -#: html/Admin/Elements/ModifyUser:81 html/Admin/Users/Modify.html:137 html/User/Prefs.html:93 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Etat" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Search/Elements/PickRestriction:73 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:30 html/Ticket/Create.html:41 html/Ticket/Elements/EditBasics:37 html/Ticket/Elements/ShowBasics:30 html/Ticket/Update.html:59 lib/RT/Ticket_Overlay.pm:1200 lib/RT/Tickets_Overlay.pm:908 +#: 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:1407 msgid "Status" msgstr "Statut" -#: etc/initialdata:294 +#: etc/initialdata:309 msgid "Status Change" msgstr "Changement de statut" -#: lib/RT/Transaction_Overlay.pm:528 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) -msgid "Status changed from %1 to %2" -msgstr "Statut modifié de %1 à %2 " - -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "ChangementDeStatut" - -#: html/Ticket/Elements/Tabs:146 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "Voler" -#: lib/RT/Queue_Overlay.pm:91 +#: lib/RT/Queue_Overlay.pm:118 msgid "Steal tickets" msgstr "Voler les tickets " -#: lib/RT/Queue_Overlay.pm:91 +#: lib/RT/Queue_Overlay.pm:118 msgid "StealTicket" msgstr "VolerTicket" -#: lib/RT/Transaction_Overlay.pm:587 +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " +msgid "Stolen from %1" msgstr "Volé à %1" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 html/Search/Bulk.html:135 html/Search/Elements/PickRestriction:42 html/SelfService/Create.html:56 html/SelfService/Elements/MyRequests:27 html/SelfService/Update.html:31 html/Ticket/Create.html:83 html/Ticket/Elements/EditBasics:27 html/Ticket/ModifyAll.html:78 html/Ticket/Update.html:75 lib/RT/Ticket_Overlay.pm:1196 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "Style" + +#: 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:1489 msgid "Subject" msgstr "Sujet" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:609 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "Sujet modifié en %1" -#: html/Elements/Submit:58 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Valider" -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "Soumettre flux de travail" - -#: lib/RT/Group_Overlay.pm:748 +#: lib/RT/Group_Overlay.pm:774 msgid "Succeeded" msgstr "Réussi" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Dim." -#: lib/RT/System.pm:53 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "SuperUtilisateur" -#: html/User/Elements/DelegateRights:76 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "Système" -#: html/Admin/Elements/SelectRights:80 lib/RT/ACE_Overlay.pm:566 lib/RT/Interface/Web.pm:793 lib/RT/Interface/Web.pm:826 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "Configuration système" + +#: 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 "Erreur système" -#: NOT FOUND IN SOURCE -msgid "System Error. Right not granted." -msgstr "Erreur Système. Droit non délégué." +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "Erreur système : %1" -#: NOT FOUND IN SOURCE -msgid "System Error. right not granted" -msgstr "Erreur Système. Droit non délégué" +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "Outils système" -#: lib/RT/ACE_Overlay.pm:615 +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "Erreur système. Droit non délégué." -#: lib/RT/ACE_Overlay.pm:145 lib/RT/ACE_Overlay.pm:222 lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:897 +#: 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 "Erreur système. Droit non accordé" - -#: NOT FOUND IN SOURCE -msgid "System error. Unable to grant rights." -msgstr "Erreur Système. Imposible de déléguer les droits" +msgstr "Erreur système. Droit non accordé." -#: html/Admin/Global/GroupRights.html:34 html/Admin/Groups/GroupRights.html:36 html/Admin/Queues/GroupRights.html:35 +#: 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 "Groupes système" +msgstr "Groupes systèmes" #: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 msgid "SystemRolegroup for internal use" msgstr "SystemRolegroup à usage interne" -#: lib/RT/CurrentUser.pm:319 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "Chaîne_de_test" -#: html/Ticket/Elements/Tabs:142 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "Prendre" -#: lib/RT/Queue_Overlay.pm:89 +#: lib/RT/Queue_Overlay.pm:116 msgid "Take tickets" msgstr "Prendre les tickets" -#: lib/RT/Queue_Overlay.pm:89 +#: lib/RT/Queue_Overlay.pm:116 msgid "TakeTicket" msgstr "PrendreTicket" -#: lib/RT/Transaction_Overlay.pm:573 +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Pris" -#: html/Admin/Elements/EditScrip:80 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Modèle" -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:89 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "Modèle n°%1" -#: html/Admin/Elements/EditTemplates:88 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "Modèle supprimé" -#: lib/RT/Scrip_Overlay.pm:152 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Modèle inconnu" -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "Modèle inconnu\\n" - -#: lib/RT/Template_Overlay.pm:352 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Modèle analysé" -#: html/Admin/Elements/QueueTabs:48 html/Admin/Elements/SystemTabs:35 html/Admin/Global/index.html:44 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Modèles" -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "Modèles pour %1\\n " - -#: lib/RT/Interface/Web.pm:894 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:932 msgid "That is already the current value" msgstr "Ceci est déjà la valeur actuelle" -#: lib/RT/CustomField_Overlay.pm:242 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" -msgstr "Valeur incorrecte pour ce champ personnalisé." +msgstr "Valeur incorrecte pour ce champ personnalisé" -#: lib/RT/Ticket_Overlay.pm:1917 +#: lib/RT/Ticket_Overlay.pm:1963 msgid "That is the same value" msgstr "Valeur identique" -#: lib/RT/ACE_Overlay.pm:287 lib/RT/ACE_Overlay.pm:596 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 msgid "That principal already has that right" msgstr "Ce groupe/utilisateur dispose déjà de ce droit" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/Queue_Overlay.pm:754 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" -msgstr "Ce groupe/utilisateur est déjà un %1 pour cette queue" +msgstr "Ce groupe/utilisateur est déjà un %1 pour cette file" -#: lib/RT/Ticket_Overlay.pm:1451 +#: lib/RT/Ticket_Overlay.pm:1404 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "Ce groupe/utilisateur est déjà un %1 pour ce ticket" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:853 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" -msgstr "Ce groupe/utilisateur n'est pas un %1 pour cette queue" +msgstr "Ce groupe/utilisateur n'est pas un %1 pour cette file" -#: lib/RT/Ticket_Overlay.pm:1568 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this ticket" -msgstr "Ce groupe/utilisateur n'est pas un %1 pour ce ticket" - -#: lib/RT/Ticket_Overlay.pm:1913 +#: lib/RT/Ticket_Overlay.pm:1959 msgid "That queue does not exist" -msgstr "Queue inconnue" +msgstr "File inconnue" -#: lib/RT/Ticket_Overlay.pm:3274 +#: lib/RT/Ticket_Overlay.pm:3197 msgid "That ticket has unresolved dependencies" msgstr "Ticket ayant des tickets fils ou dépendants non résolus" -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "Cet utilisateur possède déjà ce droit." - -#: lib/RT/Ticket_Overlay.pm:3084 +#: lib/RT/Ticket_Overlay.pm:3001 msgid "That user already owns that ticket" -msgstr "Cet utilisateur possède déjà ce ticket." +msgstr "Cet utilisateur possède déjà ce ticket" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:2973 msgid "That user does not exist" msgstr "Utilisateur inconnu" -#: lib/RT/User_Overlay.pm:376 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" -msgstr "Utilisateur possédant déjà un statut privilégié." +msgstr "Utilisateur possédant déjà un statut privilégié" -#: lib/RT/User_Overlay.pm:397 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" -msgstr "Utilisateur déjà sans privilèges." +msgstr "Utilisateur déjà sans privilèges" -#: lib/RT/User_Overlay.pm:389 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "Utilisateur bénéficiant à présent du statut privilégié" -#: lib/RT/User_Overlay.pm:410 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" -msgstr "Utilisateur à présent sans statut privilégié " +msgstr "Cet utilisateur est maintenant non privilégié" -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "Cet utilisateur a perdu ses droits" - -#: lib/RT/Ticket_Overlay.pm:3077 +#: lib/RT/Ticket_Overlay.pm:2994 msgid "That user may not own tickets in that queue" -msgstr "Cet utilisateur peut ne pas avoir de ticket dans cette queue." +msgstr "Cet utilisateur peut ne pas avoir de ticket dans cette file" -#: lib/RT/Link_Overlay.pm:205 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" -msgstr "ID non numérique" +msgstr "Identifiant non numérique" -#: html/SelfService/Display.html:31 html/Ticket/Create.html:149 html/Ticket/Elements/ShowSummary:27 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" -msgstr "Eléments de base" +msgstr "Éléments de base" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "Le CC d'un ticket" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "L'AdminCC d'un ticket" -#: lib/RT/Ticket_Overlay.pm:2244 -msgid "The comment has been recorded" -msgstr "Commentaire enregistré" - -#: bin/rt-crontool:197 +#: bin/rt-crontool:223 msgid "The following command will find all active tickets in the queue 'general' and set their priority to 99 if they haven't been touched in 4 hours:" -msgstr "Cette commande trouve tous les tickets actifs de la queue 'general' et positionne leur priorité à 99 s'ils n'ont pas été touchés depuis quatre heures:" +msgstr "Cette commande trouve tous les tickets actifs de la file 'general' et positionne leur priorité à 99 s'ils n'ont pas été touchés depuis quatre heures:" -#: bin/rt-commit-handler:755 bin/rt-commit-handler:765 -msgid "The following commands were not proccessed:\\n\\n" -msgstr "Les commandes suivantes n'ont pas été traitées :\\n\\n" - -#: lib/RT/Interface/Web.pm:897 +#: lib/RT/Record.pm:935 msgid "The new value has been set." -msgstr "La nouvelle valeur est enregistrée" +msgstr "La nouvelle valeur est enregistrée." -#: lib/RT/ACE_Overlay.pm:85 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "L'intervenant d'un ticket" -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "Le demandeur d'un ticket" -#: html/Admin/Elements/EditUserComments:25 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Ces commentaires ne sont généralement pas accessibles par l'utilisateur" -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" -msgstr "Ce ticket %1 %2 (%3)\\n " +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "Ce champ personnalisé ne s'applique pas à cet objet" -#: bin/rt-crontool:188 +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Cet possibilité n'est offerte qu'aux administrateurs systèmes" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Ce message va être envoyé à ..." + +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." -msgstr "Cet outil permet à l'utilisateur de lancer un module perl quelconque depuis RT" +msgstr "Cet outil permet à l'utilisateur de lancer un module perl quelconque depuis RT." -#: lib/RT/Transaction_Overlay.pm:251 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "Cette opération semble ne pas avoir de contenu" -#: html/Ticket/Elements/ShowRequestor:46 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" -msgstr "Les %1 tickets de plus haute priorité de cet utilisateur" - -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "Les 25 tickets prioritaires de cet utilisateur" +msgstr "Les %1 tickets prioritaires de cet utilisateur" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Jeu." -#: NOT FOUND IN SOURCE -msgid "Ticket" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "Ticket n°%1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 Jumbo update: %2" -msgstr "Ticket n°%1 Jumbo update: %2" - -#: html/Ticket/ModifyAll.html:24 html/Ticket/ModifyAll.html:28 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" -msgstr "Ticket n°%1 mise à jour globale: %2" +msgstr "Ticket n°%1 mise à jour globale : %2" -#: html/Approvals/Elements/ShowDependency:45 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "Ticket n°%1: %2" -#: lib/RT/Ticket_Overlay.pm:623 lib/RT/Ticket_Overlay.pm:644 +#: 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) +msgid "Ticket %1" +msgstr "Ticket %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" -msgstr "Ticket %1 créé dans la queue '%2'" - -#: bin/rt-commit-handler:759 -#. ($Ticket->Id) -msgid "Ticket %1 loaded\\n" -msgstr "Ticket %1 chargé\\n " +msgstr "Ticket %1 créé dans la file '%2'" -#: html/Search/Bulk.html:212 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" -msgstr "Ticket %1: %2" +msgstr "Ticket %1 : %2" -#: html/Ticket/History.html:24 html/Ticket/History.html:27 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Champs personnalisés du ticket" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" -msgstr "Historique ticket # %1 %2" - -#: NOT FOUND IN SOURCE -msgid "Ticket Id" -msgstr "N° ticket" +msgstr "Historique du ticket n°%1 %2" -#: etc/initialdata:309 +#: etc/initialdata:324 msgid "Ticket Resolved" -msgstr "Ticket résolu/clos" +msgstr "Ticket résolu" -#: html/Search/Elements/PickRestriction:62 -msgid "Ticket attachment" -msgstr "Pièce jointe au ticket" +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Transactions du ticket" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1677 msgid "Ticket content" -msgstr "Contenu du ticket." +msgstr "Contenu du ticket" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1726 msgid "Ticket content type" msgstr "Type du contenu du ticket" -#: lib/RT/Ticket_Overlay.pm:514 lib/RT/Ticket_Overlay.pm:523 lib/RT/Ticket_Overlay.pm:533 lib/RT/Ticket_Overlay.pm:633 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "Une erreur interne a empêché l'ajout du ticket" -#: lib/RT/Transaction_Overlay.pm:520 -msgid "Ticket created" -msgstr "Ticket ajouté" - -#: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "Création de ticket échouée." - -#: lib/RT/Transaction_Overlay.pm:525 -msgid "Ticket deleted" -msgstr "Ticket supprimé." +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Méta-données du ticket" -#: NOT FOUND IN SOURCE -msgid "Ticket id not found" -msgstr "Id de ticket non trouvée" - -#: NOT FOUND IN SOURCE -msgid "Ticket killed" -msgstr "Ticket effacé" - -#: NOT FOUND IN SOURCE -msgid "Ticket not found" -msgstr "Ticket non trouvé" - -#: etc/initialdata:295 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "Statut de ticket modifié" -#: html/Ticket/Update.html:38 -msgid "Ticket watchers" -msgstr "Observateurs du ticket" +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "Module de recherche TicketSQL" -#: html/Elements/Tabs:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" -msgstr "" - -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) -msgid "Tickets %1 %2" -msgstr "" - -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) -msgid "Tickets %1 by %2" -msgstr "Tickets %1 par %2" +msgstr "Tickets" -#: html/Elements/ViewUser:25 -#. ($name) -msgid "Tickets from %1" -msgstr "Tickets depuis %2" - -#: html/Approvals/Elements/ShowDependency:26 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "Tickets dépendant de cette approbation:" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:47 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "Temps estimé" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "Temps restant" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:42 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "Temps passé" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Time left" msgstr "Temps restant" -#: html/Elements/Footer:36 +#: html/Elements/Footer:67 msgid "Time to display" msgstr "Temps de calcul" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1623 msgid "Time worked" msgstr "Temps passé" -#: NOT FOUND IN SOURCE -msgid "TimeLeft" -msgstr "TempsRestant" - -#: lib/RT/Ticket_Overlay.pm:1201 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "TempsPassé" -#: bin/rt-commit-handler:401 -msgid "To generate a diff of this commit:" -msgstr "Pour conserver les modifications de cette transaction" +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "Titre" -#: bin/rt-commit-handler:390 -msgid "To generate a diff of this commit:\\n" -msgstr "Pour conserver les modifications de cette transaction :\\n" +#: html/Elements/Footer:57 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "Pour vous renseigner au sujet du support, de la formation, des développements spécifiques ou au sujet de la licence, merci de contacter en anglais %1." -#: lib/RT/Ticket_Overlay.pm:1204 +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Annoncé" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Outils" + +#: etc/initialdata:252 msgid "Transaction" msgstr "Transaction" -#: lib/RT/Transaction_Overlay.pm:691 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" -msgstr "La transaction%1 est supprimée" +msgstr "La transaction %1 est supprimée" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "Transaction ajoutée" -#: lib/RT/Transaction_Overlay.pm:88 -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "Transaction->Create n'a pas fonctionné car vous n'avez pas spécifié d'identifiant de ticket" +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Champs personnalisées de la transaction" + +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "Transation->Create a échoué car vous n'avez pas spécifié de type d'objet et d'id" -#: lib/RT/Transaction_Overlay.pm:750 +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "Les transactions ne peuvent être transférées" -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" -msgstr "Tentative de délégation d'un droit : %1" - -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Mar." -#: html/Admin/Elements/EditCustomField:43 html/Ticket/Elements/AddWatchers:32 html/Ticket/Elements/AddWatchers:43 html/Ticket/Elements/AddWatchers:53 lib/RT/Ticket_Overlay.pm:1202 lib/RT/Tickets_Overlay.pm:959 +#: 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:1461 msgid "Type" msgstr "Type" -#: lib/RT/ScripCondition_Overlay.pm:103 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Fonction non disponible" -#: html/Admin/Users/Modify.html:67 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Identifiant Unix" -#: html/Admin/Elements/ModifyUser:61 -msgid "UnixUsername" -msgstr "UnixUsername" - -#: lib/RT/Attachment_Overlay.pm:266 lib/RT/Attachment_Overlay.pm:298 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:848 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "Type d'encodage de courrier inconnu: %1" -#: html/Elements/SelectResultsPerPage:36 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "Champ inconnu : $key" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "Illimité" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Recherche non nommée" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "Non privilégié" -#: lib/RT/Transaction_Overlay.pm:569 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "Champs personnalisés non sélectionnés" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "Objets non sélectionnés" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "Non pris" -#: html/Elements/MyTickets:63 html/Search/Bulk.html:32 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Mettre à jour" -#: html/Admin/Users/Prefs.html:61 -msgid "Update ID" -msgstr "Mettre à jour l'ID" +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Tout mettre à jour" -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:65 html/Ticket/Update.html:65 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Mettre à jour le ticket" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Mettre à jour le type" -#: html/Search/Listing.html:60 -msgid "Update all these tickets at once" -msgstr "Mise à jour des tickets en masse" - -#: html/Admin/Users/Prefs.html:48 -msgid "Update email" -msgstr "Mettre à jour l'email" +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Mettre à jour plusieurs tickets" -#: html/Admin/Users/Prefs.html:54 -msgid "Update name" -msgstr "Mettre à jour le nom" - -#: lib/RT/Interface/Web.pm:409 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "Mise à jour non enregistrée" -#: html/Search/Bulk.html:80 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "Mettre à jour les tickets sélectionnés" -#: html/Admin/Users/Prefs.html:35 -msgid "Update signature" -msgstr "Mettre à jour la signature" - -#: html/Ticket/ModifyAll.html:62 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "Mettre à jour le ticket" -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "Mettre à jour le ticket n°%1" - -#: html/SelfService/Update.html:24 html/SelfService/Update.html:46 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "Mettre à jour le ticket n°%1" -#: html/Ticket/Update.html:139 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "Mettre à jour le ticket n°%1 (%2)" -#: lib/RT/Interface/Web.pm:407 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "Le type de mise à jour n'était ni un commentaire ni un courrier." -#: html/Elements/SelectDateType:32 html/Ticket/Elements/ShowDates:50 lib/RT/Ticket_Overlay.pm:1205 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Mis(e) à jour" -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" -msgstr "Utilisateur %1 %2: %3\\n" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Uploader" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Télécharger plusieurs fichiers" -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" -msgstr "Mot de passe de l'utilisateur %1 : %2\\n" +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Télécharger plusieurs images" -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" -msgstr "Utilisateur '%1' non trouvé" +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Télécharger un fichier" -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" -msgstr "Utilisateur '%1' non trouvé\\n" +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Télécharger une image" -#: etc/initialdata:124 etc/initialdata:191 +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "Télécharger un maximum de %1 fichiers" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "Télécharger au plus %1 images" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "Télécharger vos changements" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "Utiliser les autres outils d'administration de RT" + +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "L'utilisateur %1 ne peut être trouvé" + +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "Utilisateur défini" -#: html/Admin/Users/Prefs.html:58 -msgid "User ID" -msgstr "Id utilisateur" +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Conditions et actions définies par l'usager" -#: html/Elements/SelectUsers:25 -msgid "User Id" -msgstr "Id utilisateur" - -#: html/Admin/Elements/GroupTabs:46 html/Admin/Elements/QueueTabs:59 html/Admin/Elements/SystemTabs:46 html/Admin/Global/index.html:58 +#: 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 "Droits utilisateurs" -#: html/Admin/Users/Modify.html:225 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "L'utilisateur a demandé un type de mise à jour non connu pour le champ personnalisé %1 de l'objet %2 n°%3" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "Utilisateur ne peut pas être créé : %1" -#: lib/RT/User_Overlay.pm:321 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Utilisateur créé" -#: html/Admin/Global/GroupRights.html:66 html/Admin/Groups/GroupRights.html:53 html/Admin/Queues/GroupRights.html:68 +#: html/Admin/CustomFields/GroupRights.html:74 html/Admin/Global/GroupRights.html:88 html/Admin/Groups/GroupRights.html:75 html/Admin/Queues/GroupRights.html:90 msgid "User defined groups" msgstr "Groupes utilisateur" -#: lib/RT/User_Overlay.pm:575 lib/RT/User_Overlay.pm:592 +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 msgid "User loaded" msgstr "Utilisateur chargé" -#: NOT FOUND IN SOURCE -msgid "User notified" -msgstr "Utilisateur informé" +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Groupe définis par l'utilisateur" -#: html/Admin/Users/Prefs.html:24 html/Admin/Users/Prefs.html:28 -msgid "User view" -msgstr "Vue utilisateur" - -#: html/Admin/Users/Modify.html:47 html/Elements/Login:51 html/Ticket/Elements/AddWatchers:34 +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Nom d'utilisateur" -#: html/Admin/Elements/SelectNewGroupMembers:25 html/Admin/Elements/Tabs:31 html/Admin/Groups/Members.html:54 html/Admin/Queues/People.html:67 html/Admin/index.html:28 html/User/Groups/Members.html:57 +#: 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 msgid "Users" msgstr "Utilisateurs" -#: html/Admin/Users/index.html:64 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "Utilisateurs correspondants aux critères de recherche" -#: html/Search/Elements/PickRestriction:50 -msgid "ValueOfQueue" -msgstr "ValueOfQueue" +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Valider la requête" -#: html/Admin/Elements/EditCustomField:56 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Valeurs" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "Observer" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "ObserverCommeAdminCC" -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "Observateur chargé" - -#: html/Admin/Elements/QueueTabs:41 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Observateurs" -#: html/Admin/Elements/ModifyUser:55 -msgid "WebEncoding" -msgstr "WebEncoding" - -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Mer." -#: etc/initialdata:503 etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "Quand un ticket a été approuvé par tous les approbateurs, ajoute le courrier au ticket source" -#: etc/initialdata:467 etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "Quand un ticket a été approuvé par au moins un approbateur, ajoute le courrier au ticket source " -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "Quand un ticket est créé" -#: etc/initialdata:400 etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "Quand un ticket d'approbation est créé, informer l'intervenant et l'AdminCC de l'élément attendant leur approbation" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "Quand quelque chose arrive" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "Lorsqu'un ticket quelconque est résolu/clos" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "Lorsqu'un ticket quelconque change d'intervenant" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "Lorsqu'un ticket change de priorité" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" -msgstr "Lorsqu'un ticket quelconque change de queue" +msgstr "Lorsqu'un ticket quelconque change de file" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "Lorsqu'un ticket quelconque change de statut" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "Lorsqu'une condition définie par l'utilisateur est satisfaite" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "Lorsque un commentaire arrive" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "Lorsque un courrier arrive" -#: html/Admin/Users/Modify.html:163 html/User/Prefs.html:51 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Travail" -#: html/Admin/Elements/ModifyUser:69 -msgid "WorkPhone" -msgstr "Tel. bureau" +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Travail hors ligne" -#: html/Ticket/Elements/ShowBasics:34 html/Ticket/Update.html:64 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Travaillé" -#: lib/RT/Ticket_Overlay.pm:3187 +#: lib/RT/Ticket_Overlay.pm:3104 msgid "You already own this ticket" msgstr "Vous êtes déjà intervenant de ce ticket" -#: html/autohandler:122 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "Vous n'êtes pas un utilisateur autorisé" -#: lib/RT/Ticket_Overlay.pm:3069 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "You can only reassign tickets that you own or that are unowned" msgstr "Vous pouvez seulement réaffecter vos ticket ou ceux qui ne sont pas affectés" -#: NOT FOUND IN SOURCE -msgid "You don't have permission to view that ticket.\\n" -msgstr "Vous n'êtes pas autorisé à voir ce ticket.\\n" - -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" -msgstr "%1 tickets trouvés dans la queue %2" +msgstr "%1 tickets trouvés dans la file %2" -#: html/NoAuth/Logout.html:30 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "Vous avez été déconnecté de RT." -#: html/SelfService/Display.html:77 +#: html/SelfService/Display.html:133 msgid "You have no permission to create tickets in that queue." -msgstr "Vous n'avez pas l'autorisation de créer des tickets dans cette queue." +msgstr "Vous n'avez pas l'autorisation de créer des tickets dans cette file." -#: lib/RT/Ticket_Overlay.pm:1926 +#: lib/RT/Ticket_Overlay.pm:1972 msgid "You may not create requests in that queue." -msgstr "Vous ne pouvez pas créer de demandes dans cette queue." +msgstr "Vous ne pouvez pas créer de demandes dans cette file." -#: html/NoAuth/Logout.html:34 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "Vous êtes invité à vous identifier à nouveau" -#: NOT FOUND IN SOURCE -msgid "Your %1 requests" -msgstr "Vos %1 requêtes" - -#: NOT FOUND IN SOURCE -msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" -msgstr "Votre administrateur RT a mal configuré l'alias de mail qui appelle RT" - -#: etc/initialdata:484 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "Votre demande a été approuvée par %1. D'autres approbations sont peut être toujours en attente" +msgstr "Votre demande a été approuvée par %1. D'autres approbations sont peut-être toujours en attente." -#: etc/initialdata:522 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." -msgstr "Votre demande a été approuvée" +msgstr "Votre demande a été approuvée." -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "Votre demande a été rejetée" - -#: etc/initialdata:427 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "Votre demande a été rejetée." -#: html/autohandler:144 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "Votre nom d'utilisateur ou votre mot de passe est incorrect" -#: html/Admin/Elements/ModifyUser:83 html/Admin/Users/Modify.html:143 html/User/Prefs.html:95 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "Code Postal" -#: NOT FOUND IN SOURCE -msgid "[no subject]" -msgstr "[Pas de sujet]" +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "autorise la création de recherches sauvées" -#: html/User/Elements/DelegateRights:58 +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "autorise le chargement de recherches sauvées" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "comme accordé à %1" -#: html/SelfService/Closed.html:27 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "appartient à " + +#: html/SelfService/Closed.html:49 msgid "closed" msgstr "fermé" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:33 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "contient" -#: html/Elements/SelectAttachmentField:25 -msgid "content" -msgstr "Contenu" - -#: html/Elements/SelectAttachmentField:26 -msgid "content-type" -msgstr "Type de contenu" - -#: lib/RT/Ticket_Overlay.pm:2313 -msgid "correspondence (probably) not sent" -msgstr "courrier (probablement) non envoyé" - -#: lib/RT/Ticket_Overlay.pm:2323 -msgid "correspondence sent" -msgstr "courrier envoyé" - -#: html/Admin/Elements/ModifyQueue:62 html/Admin/Queues/Modify.html:76 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "jours" -#: NOT FOUND IN SOURCE -msgid "dead" -msgstr "effacé" - -#: html/Search/Listing.html:74 -msgid "delete" -msgstr "effacer" - -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "effacé" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "n'appartient pas à " + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "ne correspond pas" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:34 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "ne contient pas" -#: html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "égal à " -#: NOT FOUND IN SOURCE -msgid "false" -msgstr "faux" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "erreur : ne peut aller plus bas" -#: html/Elements/SelectAttachmentField:27 -msgid "filename" -msgstr "Nom de fichier" +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "erreur : ne peut aller à gauche" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37 +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "erreur : ne peut aller plus haut" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "erreur : rien à effacer" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "erreur : rien à déplacer" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "erreur : rien à commuter" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "supérieur à " -#: lib/RT/Group_Overlay.pm:193 +#: lib/RT/Group_Overlay.pm:214 #. ($self->Name) msgid "group '%1'" msgstr "groupe '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "heures" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "n°" -#: html/Elements/SelectBoolean:31 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:35 html/Search/Elements/PickRestriction:46 html/Search/Elements/PickRestriction:75 html/Search/Elements/PickRestriction:87 +#: 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 msgid "is" msgstr "est" -#: html/Elements/SelectBoolean:35 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "isn't" msgstr "n'est pas" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "inférieur à " -#: html/Search/Elements/PickRestriction:66 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "correspond" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "min" @@ -4845,115 +4571,102 @@ msgstr "min" msgid "minutes" msgstr "minutes" -#: bin/rt-commit-handler:764 -msgid "modifications\\n\\n" -msgstr "modifications\\n\\n" - -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "mois" -#: lib/RT/Queue_Overlay.pm:57 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "nouveau" -#: html/Admin/Elements/EditScrips:42 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "sans nom" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "Non renseigné" -#: html/Admin/Elements/EditQueueWatchers:26 html/Ticket/Elements/EditWatchers:27 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "aucun" -#: html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "différent de" -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "necontientpas" - -#: html/SelfService/Elements/MyRequests:60 lib/RT/Queue_Overlay.pm:58 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "ouvert" -#: lib/RT/Group_Overlay.pm:198 +#: lib/RT/Group_Overlay.pm:219 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "groupe personnel '%1' pour l'utilisateur '%2'" -#: lib/RT/Group_Overlay.pm:206 +#: lib/RT/Group_Overlay.pm:227 #. ($queue->Name, $self->Type) msgid "queue %1 %2" -msgstr "queue %1 %2" +msgstr "file %1 %2" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "rejeté" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "résolu" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "sec" -#: lib/RT/Queue_Overlay.pm:59 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "montrer l'onglet de configuration" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "feuille de calcul" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "bloqué" -#: lib/RT/Group_Overlay.pm:201 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Type) msgid "system %1" msgstr "système %1" -#: lib/RT/Group_Overlay.pm:212 +#: lib/RT/Group_Overlay.pm:233 #. ($self->Type) msgid "system group '%1'" msgstr "groupe système '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:41 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "le composant appelant n'a pas spécifié pourquoi" -#: lib/RT/URI/fsck_com_rt.pm:234 -#. ($self->Object->Id) -msgid "ticket #%1" -msgstr "ticket n°%1" - -#: lib/RT/Group_Overlay.pm:209 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "ticket n°%1 %2" -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "vrai" - -#: lib/RT/Group_Overlay.pm:215 +#: lib/RT/Group_Overlay.pm:236 #. ($self->Id) msgid "undescribed group %1" msgstr "Groupe %1 non décrit" -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "Groupe non décrit %1" - -#: lib/RT/Group_Overlay.pm:190 +#: lib/RT/Group_Overlay.pm:211 #. ($user->Object->Name) msgid "user %1" msgstr "utilisateur %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "semaines" -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "Avec modèle %1" - -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "années" diff --git a/rt/lib/RT/I18N/he.po b/rt/lib/RT/I18N/he.po index d3ef20e25..b3c533868 100644 --- a/rt/lib/RT/I18N/he.po +++ b/rt/lib/RT/I18N/he.po @@ -1,6 +1,5 @@ # Hebrew Translation of the RT interface by Shimi. # Comments: shimi@shimi.net - msgid "" msgstr "" "Language-Team: rt-devel <rt-devel@lists.fsck.com>\n" @@ -8,261 +7,276 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 -msgid "#" +#: 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) +msgid "#%1: %2" msgstr "" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) -msgid "#%1" +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" msgstr "" -#: html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:50 html/SelfService/Display.html:25 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->Subject) -#. ($Ticket->id, $Ticket->Subject) -#. ($ticket->Id, $ticket->Subject) -#. ($link->BaseObj->Id, $link->BaseObj->Subject) -msgid "#%1: %2" +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" msgstr "" -#: lib/RT/Date.pm:337 +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) -msgid "%1 %2 %3" -msgstr "" - -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3505 lib/RT/Transaction_Overlay.pm:557 lib/RT/Transaction_Overlay.pm:599 +#: 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) -msgid "%1 %2 הוסף" +msgid "%1 %2 added" msgstr "" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) -msgid "%1 ×œ×¤× ×™ %2 ימי×" +msgid "%1 %2 ago" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3511 lib/RT/Transaction_Overlay.pm:564 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) -msgid "%1 %2 ×©×•× ×” ל %3" +msgid "%1 %2 changed to %3" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3508 lib/RT/Transaction_Overlay.pm:560 lib/RT/Transaction_Overlay.pm:605 -#. ($cf->Name, $old_value) +#: 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) -msgid "%1 %2 × ×ž×—×§" +msgid "%1 %2 deleted" msgstr "" -#: NOT FOUND IN SOURCE -msgid "%1 %2 מקבוצה %3" +#: 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)) +msgid "%1 %2 with template %3" msgstr "" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 -#. (loc($scrip->ConditionObj->Name), loc($scrip->ActionObj->Name), loc($scrip->TemplateObj->Name)) -msgid "%1 %2 ×¢× ×ª×‘× ×™×ª %3" +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" msgstr "" -#: NOT FOUND IN SOURCE -msgid "%1 (%2) %3 ×¤× ×™×™×” זו\\n" +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" msgstr "" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) +#: NOT FOUND IN SOURCE msgid "%1 - %2 shown" msgstr "%1 - %2 מוצגי×" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") -msgid "%1 - ××¨×’×•×ž× ×˜ להעביר ×ל %2" +msgid "%1 - An argument to pass to %2" msgstr "" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) -msgid "%1 פעולת-סקריפ × ×˜×¢× ×”" +msgid "%1 ScripAction loaded" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3538 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) -msgid "%1 הוסף כערך עבור %2" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 ×›×™× ×•×™×™× ×“×•×¨×©×™× ×ž×–×”×” ×¤× ×™×™×” כדי לעבוד עליה×" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 ×›×™× ×•×™×™× ×“×•×¨×©×™× ×ž×–×”×” ×¤× ×™×™×” כדי לעבוד ×¢×œ×™×”× " -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 ×›×™× ×•×™×™× ×“×•×¨×©×™× ×ž×–×”×” ×¤× ×™×™×” כדי לעבוד ×¢×œ×™×”× (מ %2) %3" +msgid "%1 added as a value for %2" msgstr "" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) -msgid "%1 × ×¨××” כמו ×ובייקט מקומי, ×בל ×”×•× ××™× ×• × ×ž×¦× ×‘×ž×¡×“ ×”× ×ª×•× ×™×" +msgid "%1 appears to be a local object, but can't be found in the database" msgstr "" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:481 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) -msgid "%1 על ידי %2" +msgid "%1 by %2" msgstr "" -#: lib/RT/Transaction_Overlay.pm:535 lib/RT/Transaction_Overlay.pm:624 lib/RT/Transaction_Overlay.pm:633 lib/RT/Transaction_Overlay.pm:636 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) -msgid "%1 ×©×•× ×” מ %2 ל %3" +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") +msgid "%1 changed from %2 to %3" msgstr "" -#: lib/RT/Interface/Web.pm:891 -msgid "%1 could not be set to %2." +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" msgstr "" -#: NOT FOUND IN SOURCE -msgid "%1 couldn't init a transaction (%2)\\n" +#: lib/RT/Record.pm:930 +msgid "%1 could not be set to %2." msgstr "" -#: lib/RT/Ticket_Overlay.pm:2817 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "" -#: html/Elements/MyTickets:25 +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." msgstr "%1 ×”×¤× ×™×•×ª ×¢× ×”×¢×“×™×¤×•×ª הגבוהה ביותר בטיפולי..." -#: html/Elements/MyRequests:25 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." msgstr "%1 ×”×¤× ×™×•×ª ×¢× ×”×¢×“×™×¤×•×ª הגבוהה ביותר ש×× ×™ פתחתי..." -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "" -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) -msgid "%1 is no longer a %2 for this ticket." -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3594 -#. ($args{'Value'}, $cf->Name) -msgid "%1 is no longer a value for custom field %2" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 isn't a valid Queue id." +#: 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) +msgid "%1 min" msgstr "" -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) -msgid "%1 min" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" msgstr "" -#: NOT FOUND IN SOURCE -msgid "%1 not shown" +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" msgstr "" -#: html/User/Elements/DelegateRights:76 +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "זכויות" -#: NOT FOUND IN SOURCE -msgid "%1 succeeded\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for $MessageId" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "%1 type unknown for %2" +#: lib/RT/Action/ResolveMembers.pm:63 +#. (ref $self) +msgid "%1 will resolve all members of a resolved group ticket." msgstr "" -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" msgstr "" -#: lib/RT/Action/ResolveMembers.pm:42 -#. (ref $self) -msgid "%1 will resolve all members of a resolved group ticket." +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" msgstr "" -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" msgstr "" -#: lib/RT/Transaction_Overlay.pm:433 +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "" #: NOT FOUND IN SOURCE -msgid "'%1' not a recognized action. " -msgstr "" - -#: NOT FOUND IN SOURCE msgid "(Check box to delete group member)" msgstr "(סמן תיבה כדי למחוק חבר בקבוצה)" @@ -270,7 +284,7 @@ msgstr "(סמן תיבה כדי למחוק חבר בקבוצה)" msgid "(Check box to delete scrip)" msgstr "(סמן תיבה כדי למחוק סקריפ)" -#: html/Admin/Elements/EditCustomFieldValues:25 html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(סמן תיבה כדי למחוק)" @@ -278,414 +292,366 @@ msgstr "(סמן תיבה כדי למחוק)" msgid "(Check boxes to delete)" msgstr "(סמן תיבות כדי למחוק)" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" msgstr "" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" msgstr "" -#: NOT FOUND IN SOURCE -msgid "(No Value)" +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" msgstr "" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 +#. ($RT::CorrespondAddress) +#. ($RT::CommentAddress) +msgid "(If left blank, will default to %1)" +msgstr "" + +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "" -#: html/Ticket/Update.html:85 -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.)" +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" msgstr "" -#: NOT FOUND IN SOURCE -msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +#: 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/Create.html:79 +#: 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/Update.html:81 +#: 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 "" -#: NOT FOUND IN SOURCE -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +#: 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:69 -msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. These people <b>will</b> receive future updates.)" +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" msgstr "" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 -msgid "(no subject)" +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 +msgid "(no value)" msgstr "" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:534 -msgid "(no value)" +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" msgstr "" -#: html/Ticket/Elements/EditLinks:116 +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(רק ×¤× ×™×™×” ×חת)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 -msgid "(pending other tickets)" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "(requestor's group)" +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" msgstr "" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "" -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I own..." +#: html/Ticket/Elements/ShowBasics:53 +msgid "<% $Ticket->Status%>" msgstr "" -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." +#: html/Elements/SelectTicketTypes:48 +msgid "<% $_ %>" msgstr "" -#: html/Ticket/Elements/ShowBasics:32 -msgid "<% $Ticket->Status%>" +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" msgstr "" -#: html/Elements/SelectTicketTypes:27 -msgid "<% $_ %>" +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"×¤× ×™×™×” חדשה ב\"> %1" -#: NOT FOUND IN SOURCE -msgid "??????" -msgstr "" - -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE Deleted" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be deleted" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE could not be found" -msgstr "" - -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "" -#: bin/rt-commit-handler:755 -msgid "Aborting to avoid unintended ticket modifications.\\n" +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" msgstr "" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "מידע ×ודותי" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "" -#: bin/rt-crontool:123 -msgid "Action committed." +#: bin/rt-crontool:148 +msgid "Action committed.\\n" msgstr "" -#: bin/rt-crontool:119 +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "" -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "הוסף העתק × ×™×”×•×œ×™" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "הוסף העתק" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 -msgid "Add More Files" -msgstr "הוסף עוד קבצי×" +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "Add Next State" +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" msgstr "" -#: html/Search/Bulk.html:88 +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "הוסף עוד קבצי×" + +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "הוסף מבקש" -#: html/Admin/Elements/AddCustomFieldValue:26 +#: html/Admin/Elements/AddCustomFieldValue:46 msgid "Add Value" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Add a Scrip to this queue" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a Scrip which will apply to all queues" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" +#: html/Admin/Global/Scrip.html:76 +msgid "Add a scrip which will apply to all queues" msgstr "" -#: html/Admin/Global/Scrip.html:55 -msgid "Add a scrip which will apply to all queues" +#: html/Search/Build.html:85 +msgid "Add additional criteria" msgstr "" -#: html/Search/Bulk.html:118 +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "הוסף הערות ×ו תגובות ×œ×¤× ×™×•×ª ×”× ×‘×—×¨×•×ª" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "הוסף ×¦×•×¤×™× ×—×“×©×™×" -#: NOT FOUND IN SOURCE -msgid "AddNextState" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" msgstr "" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "כתובת1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "כתובת2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "" -#: etc/initialdata:280 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "" -#: etc/initialdata:259 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Admin users" -msgstr "" - -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Admin/Groups" -msgstr "" - -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 -msgid "Admin/Queue/Basics" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "העתק × ×™×”×•×œ×™" -#: NOT FOUND IN SOURCE -msgid "AdminComment" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:72 -msgid "AdminCustomFields" +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" msgstr "" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "העתק × ×™×”×•×œ×™" -#: NOT FOUND IN SOURCE -msgid "Admins" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Advanced Search" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" msgstr "" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "×חרי" -#: NOT FOUND IN SOURCE -msgid "Age" +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Alias" +#: etc/initialdata:363 +msgid "All Approvals Passed" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Alias for" +#: html/Admin/Queues/index.html:75 +msgid "All Queues" msgstr "" -#: html/Admin/Elements/EditCustomFields:96 -msgid "All Custom Fields" +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" msgstr "" -#: html/Admin/Queues/index.html:53 -msgid "All Queues" +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" msgstr "" -#: html/Elements/Tabs:56 +#: html/Elements/Tabs:74 msgid "Approval" msgstr "×ישור" -#: html/Approvals/Display.html:46 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: 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) msgid "Approval #%1: %2" msgstr "" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Approval Details" +#: etc/initialdata:351 +msgid "Approval Passed" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Approval diagram" +#: etc/initialdata:374 +msgid "Approval Rejected" msgstr "" -#: html/Approvals/Elements/Approve:44 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "" -#: etc/initialdata:437 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "×פריל" @@ -693,39 +659,52 @@ msgstr "×פריל" msgid "April" msgstr "×פריל" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "עולה" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:33 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "צרף" -#: html/SelfService/Create.html:65 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "קובץ מצורף" -#: NOT FOUND IN SOURCE +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "" -#: lib/RT/Transaction_Overlay.pm:441 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "קובץ צורף" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "×©× ×§×•×‘×¥ מצורף" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "×§×‘×¦×™× ×ž×¦×•×¨×¤×™×" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "×וגוסט" @@ -733,11 +712,7 @@ msgstr "×וגוסט" msgid "August" msgstr "×וגוסט" -#: html/Admin/Elements/ModifyUser:66 -msgid "AuthSystem" -msgstr "" - -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "" @@ -745,460 +720,393 @@ msgstr "" msgid "Autoreply To Requestors" msgstr "" -#: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad PGP Signature: %1\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "" - -#: bin/rt-commit-handler:827 -#. ($val) -msgid "Bad data in %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Bad transaction number for attachment. %1 should be %2\\n" -msgstr "" - -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "בסיסי" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "×ל תשכח לשמור ×ת ×”×©×™× ×•×™×™×" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:320 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "×œ×¤× ×™" -#: NOT FOUND IN SOURCE -msgid "Begin Approval" +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" msgstr "" -#: etc/initialdata:202 +#: etc/initialdata:217 msgid "Blank" msgstr "" -#: html/Search/Listing.html:79 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "הוסף כתובת זו לספר הכתובות כדי לחזור על ×ותו חיפוש" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "תקציר כותרי×" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "עדכון ×¤× ×™×•×ª מרוכז" -#: lib/RT/User_Overlay.pm:1352 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "" -#: lib/RT/CustomField_Overlay.pm:206 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2794 -msgid "Can't merge into a merged ticket. You should never get this error" +#: html/Search/Build.html:766 +msgid "Can't save this search" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2612 lib/RT/Ticket_Overlay.pm:2681 +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "" -#: html/autohandler:99 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:49 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "העתק" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "סמן תיבה כדי למחוק" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "סמן תיבה כדי לבטל זכות" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:57 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "ילדי×" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "עיר" -#: html/Ticket/Elements/ShowDates:47 -msgid "Closed" -msgstr "× ×¡×’×¨" - -#: html/SelfService/Closed.html:25 -msgid "Closed Tickets" +#: html/Elements/Submit:102 +msgid "Clear All" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Closed requests" -msgstr "" +#: html/Ticket/Elements/ShowDates:68 +msgid "Closed" +msgstr "× ×¡×’×¨" -#: html/SelfService/Elements/Tabs:45 +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 msgid "Closed tickets" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Code" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Command not understood!\\n" -msgstr "" - -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "הערה" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Comment not recorded" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "" -#: html/Admin/Elements/ModifyUser:35 -msgid "Comments" -msgstr "" - -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "הערות (×œ× × ×©×œ×—×•×ª ×ל המבקשי×)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "הערות (×œ× × ×©×œ×—×•×ª ×ל המבקשי×)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "הערות לגבי %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "הערות לגבי משתמש ×–×”" -#: lib/RT/Transaction_Overlay.pm:543 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "הערות × ×•×¡×¤×•" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Compile Restrictions" -msgstr "" - -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "" -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "" -#: html/Elements/Tabs:50 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "הגדרות" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "" -#: html/Admin/Elements/ModifyUser:60 -msgid "ContactInfoSystem" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Contacted date '%1' could not be parsed" -msgstr "" - -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "תוכן" -#: NOT FOUND IN SOURCE -msgid "Coould not create group" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" msgstr "" -#: etc/initialdata:271 -msgid "Correspondence" +#: html/Search/Elements/EditSearches:64 +msgid "Copy" msgstr "" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 -msgid "Correspondence Address" +#: etc/initialdata:286 +msgid "Correspondence" msgstr "" -#: lib/RT/Transaction_Overlay.pm:539 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Correspondence not recorded" +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " msgstr "" -#: lib/RT/Ticket_Overlay.pm:3525 -msgid "Could not add new custom field value for ticket. " -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. %1 " +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " msgstr "" -#: lib/RT/Ticket_Overlay.pm:3031 lib/RT/Ticket_Overlay.pm:3039 lib/RT/Ticket_Overlay.pm:3055 +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "" -#: html/Admin/Elements/EditCustomField:85 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:334 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:422 +#: 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 "" -#: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Could not find a ticket with id %1" +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 +msgid "Could not find or create that user" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Could not find group %1." +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 +msgid "Could not find that principal" msgstr "" -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 -msgid "Could not find or create that user" +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" msgstr "" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 -msgid "Could not find that principal" +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 +msgid "Could not load group" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Could not find user %1." +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" msgstr "" -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 -msgid "Could not load group" +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" msgstr "" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) -msgid "Could not remove that principal as a %1 for this ticket" +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" msgstr "" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3535 lib/RT/Ticket_Overlay.pm:3591 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find group\\n" -msgstr "" - -#: lib/RT/Interface/Web.pm:900 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "" -#: lib/RT/CustomField_Overlay.pm:240 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't find user\\n" -msgstr "" - -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Couldn't load KeywordSelects." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Couldn't load RT config file '%1' %2" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Couldn't load Scrips." +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" msgstr "" -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 #. ($id) -msgid "Couldn't load queue" +msgid "Couldn't load object %1" msgstr "" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/People.html:142 #. ($id) -msgid "Couldn't load queue %1" +msgid "Couldn't load queue" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Couldn't load scrip" +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 +#. ($id) +msgid "Couldn't load queue %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Couldn't load template" +#: html/SelfService/Display.html:156 +#. ($id) +msgid "Couldn't load ticket '%1'" msgstr "" -#: html/Admin/Users/Prefs.html:79 -#. ($id) -msgid "Couldn't load that user (%1)" +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." msgstr "" -#: html/SelfService/Display.html:109 -#. ($id) -msgid "Couldn't load ticket '%1'" +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." msgstr "" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "×רץ" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "צור" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "צור ×¤× ×™×•×ª" -#: html/Admin/Elements/EditCustomField:75 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "" -#: html/Admin/Global/CustomField.html:48 -msgid "Create a CustomField which applies to all queues" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new Custom Field" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new global Scrip" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "" - -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "צור קבוצה פרטית חדשה" @@ -1214,15 +1122,15 @@ msgstr "צור סקריפ חדש" msgid "Create a new template" msgstr "צור ×ª×‘× ×™×ª חדשה" -#: html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "צור ×¤× ×™×™×” חדשה" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "צור משתמש חדש" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "צור תור חדש" @@ -1234,183 +1142,154 @@ msgstr "צור תור ×©× ×§×¨×" msgid "Create a request" msgstr "צור בקשה" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "" -#: html/SelfService/Create.html:25 +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 msgid "Create a ticket" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Create failed: %1 / %2 / %3 " -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "" - -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "" -#: html/SelfService/Create.html:78 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "" - -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "× ×•×¦×¨" -#: html/Admin/Elements/EditCustomField:88 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Created template %1" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" msgstr "" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "×™×—×¡×™× × ×•×›×—×™×™×" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" msgstr "×§×¨×™×˜×¨×™×•× ×™ החיפוש ×”× ×•×›×—×™×™×" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "×¦×•×¤×™× × ×•×›×—×™×™×" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) -msgid "Custom Field #%1" +#: 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 +msgid "Custom Fields" msgstr "" -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:36 -msgid "Custom Fields" +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" msgstr "" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) -msgid "Custom field %1 %2 %3" -msgstr "" - -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "" -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "" -#: lib/RT/Ticket_Overlay.pm:3427 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "" -#: html/Admin/Elements/EditCustomFields:197 -msgid "Custom field deleted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3577 -msgid "Custom field not found" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:350 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Custom field value changed from %1 to %2" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:250 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "" -#: lib/RT/CustomField_Overlay.pm:356 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "" -#: lib/RT/CustomField_Overlay.pm:248 lib/RT/CustomField_Overlay.pm:358 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "" -#: lib/RT/Transaction_Overlay.pm:548 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Data error" -msgstr "" - -#: html/SelfService/Display.html:39 html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:55 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "ת×ריכי×" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "דצמבר" @@ -1418,112 +1297,128 @@ msgstr "דצמבר" msgid "December" msgstr "דצמבר" -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" +#: etc/initialdata:222 +msgid "Default Autoresponse template" msgstr "" -#: etc/initialdata:207 -msgid "Default Autoresponse template" +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" msgstr "" -#: etc/initialdata:281 +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "" -#: etc/initialdata:260 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "" -#: etc/initialdata:272 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "" -#: lib/RT/Transaction_Overlay.pm:643 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "" - -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "דלגציות" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "מחק" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "" -#: lib/RT/Transaction_Overlay.pm:187 -msgid "Deleting this object could break referential integrity" +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" msgstr "" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "" -#: lib/RT/User_Overlay.pm:438 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity." +#: html/Approvals/Elements/Approve:66 +msgid "Deny" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity. That's bad." +#: 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 +msgid "Depended on by" +msgstr "×ª×œ×•×™×™× ×‘×•" + +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" msgstr "" -#: html/Approvals/Elements/Approve:45 -msgid "Deny" +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" msgstr "" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:37 -msgid "Depended on by" -msgstr "×ª×œ×•×™×™× ×‘×•" +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "Dependencies: \\n" +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" msgstr "" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 +#: 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 msgid "Depends on" msgstr "תלוי ב" -#: NOT FOUND IN SOURCE -msgid "DependsOn" -msgstr "" - -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "יורד" -#: html/SelfService/Create.html:73 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "" -#: html/Admin/Elements/AddCustomFieldValue:37 html/Admin/Elements/EditCustomField:39 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "תי×ור" @@ -1531,242 +1426,257 @@ msgstr "תי×ור" msgid "Details" msgstr "פרטי×" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "הצג" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "" -#: lib/RT/Queue_Overlay.pm:75 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "מצב תצוגה" +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "הצג ×¤× ×™×™×” #%1" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "" -#: html/Elements/Refresh:30 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "×ל ×ª×¨×¢× ×Ÿ דף ×–×”." -#: html/Search/Elements/PickRestriction:114 +#: NOT FOUND IN SOURCE msgid "Don't show search results" msgstr "×ל תר××” ×ת תוצ×ות החיפוש" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "הורד" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 msgid "Due" msgstr "ת×ריך יעד" -#: NOT FOUND IN SOURCE -msgid "Due date '%1' could not be parsed" +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" msgstr "" -#: bin/rt-commit-handler:754 -#. ($1, $msg) -msgid "ERROR: Couldn't load ticket '%1': %2.\\n" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Edit" +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Edit Conditions" +#: 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 "" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) -msgid "Edit Custom Fields for %1" +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Search/Edit.html:68 +msgid "Edit Query" msgstr "" -#: html/Admin/Queues/Templates.html:42 +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Edit keywords" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Edit scrips" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" msgstr "" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Edit templates for %1" +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" msgstr "" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:118 +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) -msgid "Editing Configuration for user %1" -msgstr "" - -#: html/Admin/Elements/EditCustomField:91 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Editing template %1" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2622 lib/RT/Ticket_Overlay.pm:2690 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "××™-מייל" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "" -#: html/Admin/Elements/ModifyUser:42 -msgid "EmailAddress" -msgstr "" - -#: html/Admin/Elements/ModifyUser:54 -msgid "EmailEncoding" -msgstr "" - -#: html/Admin/Elements/EditCustomField:51 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "מופעל (מחיקת סימון תיבה זו מבטלת ×ת קבוצה זו)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "" -#: html/Admin/Elements/EditCustomFields:99 -msgid "Enabled Custom Fields" -msgstr "" - -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "" -#: html/Admin/Elements/EditCustomField:107 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:140 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "" -#: lib/RT/CustomField_Overlay.pm:428 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "" -#: lib/RT/CustomField_Overlay.pm:425 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." msgstr "×”×›× ×¡ ×¤× ×™×•×ª ×ו כתובות כדי לקשר ×¤× ×™×•×ª ×ליהן. הפרד ×¢×¨×›×™× ×¨×‘×™× ×‘×מצעות רווחי×." -#: html/Elements/Login:39 html/SelfService/Error.html:25 html/SelfService/Error.html:26 -msgid "Error" +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 +msgid "Error" msgstr "" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "" -#: lib/RT/Queue_Overlay.pm:713 -msgid "Error in parameters to Queue->DelWatcher" +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1532 -msgid "Error in parameters to Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" msgstr "" -#: etc/initialdata:20 -msgid "Everyone" +#: bin/rt-crontool:233 +msgid "Escalate tickets" msgstr "" -#: bin/rt-crontool:194 -msgid "Example:" +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" msgstr "" -#: html/Admin/Elements/ModifyUser:64 -msgid "ExternalAuthId" +#: etc/initialdata:20 +msgid "Everyone" msgstr "" -#: html/Admin/Elements/ModifyUser:58 -msgid "ExternalContactInfoId" +#: bin/rt-crontool:219 +msgid "Example:" msgstr "" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "" -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "פברו×ר" @@ -1774,134 +1684,134 @@ msgstr "פברו×ר" msgid "February" msgstr "פברו×ר" -#: NOT FOUND IN SOURCE -msgid "Fin" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" msgstr "" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "עדיפות סופית" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 -msgid "Find group whose" +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Find new/open tickets" -msgstr "" - -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "×ž×¦× ×× ×©×™× ×©" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "×ž×¦× ×¤× ×™×•×ª" -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "" - -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "עמוד ר×שון" -#: docs/design_docs/string-extraction-guide.txt:33 +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 msgid "Foo Bar Baz" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:24 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "הכרח ×©×™× ×•×™" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "× ×ž×¦×ו %1 ×¤× ×™×•×ª" -#: lib/RT/Interface/Web.pm:902 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "" -#: html/Admin/Elements/ModifyUser:44 -msgid "FreeformContactInfo" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:38 -msgid "FreeformMultiple" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:37 -msgid "FreeformSingle" -msgstr "" - -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "שישי" -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "×›×•×ª×¨×™× ×ž×œ××™×" -#: NOT FOUND IN SOURCE -msgid "Getting the current user from a pgp sig\\n" +#: html/Tools/Offline.html:87 +msgid "Get template from file" msgstr "" -#: lib/RT/Transaction_Overlay.pm:593 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "גלוב×לי" -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Global Scrips" +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" msgstr "" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 -msgid "Go!" -msgstr "חפש" - -#: NOT FOUND IN SOURCE -msgid "Good pgp sig from %1\\n" +#: html/Tools/Offline.html:91 +msgid "Go" msgstr "" -#: html/Search/Listing.html:50 -msgid "Goto page" -msgstr "" +#: 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 +msgid "Go!" +msgstr "חפש" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "" - -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "קבוצה" @@ -1909,204 +1819,210 @@ msgstr "קבוצה" msgid "Group %1 %2: %3" msgstr "קבוצה %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "זכויות קבוצה" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Group could not be created." -msgstr "" - -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Group not found.\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Group not specified.\\n" -msgstr "" - -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "קבוצות" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "הסטוריה" -#: html/Admin/Elements/ModifyUser:68 -msgid "HomePhone" +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" msgstr "" -#: html/Elements/Tabs:44 +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "דף הבית" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "" -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." +#: html/Search/Build.html:637 +msgid "I'm lost" msgstr "" -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "זהות" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "" -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "" + +#: 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 "" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "×× ×¢×“×›× ×ª משהו לעיל, ×ל תשכח ל" -#: lib/RT/Interface/Web.pm:894 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "" -#: lib/RT/Interface/Web.pm:897 +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "" -#: html/Admin/Elements/EditCustomFields:74 -msgid "Include disabled custom fields in listing." +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." msgstr "" -#: html/Admin/Queues/index.html:43 +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "" -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Interest noted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3796 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "" - -#: lib/RT/Interface/Web.pm:899 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "" -#: lib/RT/Ticket_Overlay.pm:439 -msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "" - -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3434 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "" -#: lib/RT/Ticket_Overlay.pm:346 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "" -#: bin/rt-crontool:192 +#: 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 "" -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" msgstr "" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "×™× ×•×ר" @@ -2114,11 +2030,11 @@ msgstr "×™× ×•×ר" msgid "January" msgstr "×™× ×•×ר" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "יולי" @@ -2126,11 +2042,11 @@ msgstr "יולי" msgid "July" msgstr "יולי" -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "×’'מבו" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "×™×•× ×™" @@ -2138,172 +2054,197 @@ msgstr "×™×•× ×™" msgid "June" msgstr "×™×•× ×™" -#: NOT FOUND IN SOURCE -msgid "Keyword" +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" msgstr "" -#: html/Admin/Elements/ModifyUser:52 -msgid "Lang" +#: html/Search/Elements/EditFormat:79 +msgid "Large" msgstr "" -#: html/Ticket/Elements/Tabs:73 +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "מגע ×חרון" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "קשר ×חרון" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" msgstr "× ×•×“×¢ ל××—×¨×•× ×”" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "עדכון ×חרון" -#: NOT FOUND IN SOURCE -msgid "LastUpdated" +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "× ×•×ª×¨×”" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "תן למשתמש ×–×” לגשת ל R" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "תן ×פשרות ×œ×”×¢× ×™×§ זכויות למשתמש ×–×”" -#: NOT FOUND IN SOURCE -msgid "Limiting owner to %1 %2" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Limiting queue to %1 %2" +#: html/Search/Elements/EditFormat:68 +msgid "Link" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2704 +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2716 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2724 lib/RT/Ticket_Overlay.pm:2734 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2645 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2651 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "" - -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "קישורי×" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "מיקו×" -#: lib/RT.pm:159 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "" -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "מחובר ×› %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:35 html/Elements/Login:44 html/Elements/Login:54 +#: 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 msgid "Login" msgstr "×›× ×™×¡×”" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "יצי××”" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "×©× ×” בעלות ל" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "×©× ×” סטטוס" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "×©× ×” ת×ריך יעד" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "×©× ×” ת×ריך פתרון" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "×©× ×” ת×ריך 'הותחל'" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "×©× ×” ת×ריך התחלה" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "×©× ×¢ ת×ריך מגע ×חרון" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "×©× ×” עדיפות" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "×©× ×” תור" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "×©× ×” × ×•×©×" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "× ×”×œ קבוצות וחברות בקבוצות" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "× ×”×œ מ××¤×™×™× ×™× ×•×”×’×“×¨×•×ª ×©×ª×§×¤×™× ×œ×›×œ התורות" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "× ×”×œ תורות ומ××¤×™×™× ×™× ×¡×¤×¦×™×¤×™×™× ×œ×ª×•×¨×•×ª" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "× ×”×œ ×ž×©×ª×ž×©×™× ×•×¡×¤×¨×™×•×ª" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "מרץ" @@ -2315,298 +2256,357 @@ msgstr "מרץ" msgid "May" msgstr "מ××™" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "מ××™" -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "חבר הוסף" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "חבר × ×ž×—×§" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "חבר ×œ× × ×ž×—×§" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "חבר ב" -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "" - -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "חברי×" -#: lib/RT/Ticket_Overlay.pm:2891 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "מיזוג הצליח" -#: lib/RT/Ticket_Overlay.pm:2811 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "מיזוג × ×›×©×œ. ×œ× ×™×›×•×œ×ª×™ להגדיר מזהה ×פקטיבי" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "מזג לתוך" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "הודעה" -#: lib/RT/Interface/Web.pm:901 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "חסר מפתח ר×שי?: %1" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "× ×™×™×“" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "טלפון × ×™×™×“" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "×©× ×” רשימת בקרת גישה" -#: NOT FOUND IN SOURCE -msgid "Modify Custom Field %1" +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" msgstr "" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 -msgid "Modify Custom Fields which apply to all queues" +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 -msgid "Modify Scrip templates for this queue" +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" msgstr "" -#: lib/RT/Queue_Overlay.pm:76 -msgid "Modify Scrips for this queue" +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify System ACLS" +#: html/User/Delegation.html:58 +msgid "Modify Rights" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" msgstr "" -#: html/Admin/Queues/CustomField.html:45 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" msgstr "" -#: html/Admin/Global/CustomField.html:53 -msgid "Modify a CustomField which applies to all queues" +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" msgstr "" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" +msgstr "" + +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify dates for # %1" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" msgstr "" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 -msgid "Modify global group rights" -msgstr "" - -#: html/Admin/Global/GroupRights.html:33 -msgid "Modify global group rights." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" +#: 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 "" -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" +#: html/Admin/Global/GroupRights.html:54 +msgid "Modify global group rights." msgstr "" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "×©× ×” ×¤× ×™×™×” מספר %1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "×©×™× ×•×™ ×¤× ×•×™×™×” מספר %1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "×©×™× ×•×™ ×¤× ×™×•×ª" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify watchers for queue '%1'" +#: lib/RT/Queue_Overlay.pm:95 +msgid "ModifyACL" msgstr "" -#: lib/RT/Queue_Overlay.pm:70 -msgid "ModifyACL" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" msgstr "" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "×©× ×™" -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "עוד לגבי %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "" -#: html/SelfService/Elements/MyRequests:49 +#: html/SelfService/Elements/MyRequests:70 #. ($friendly_status) msgid "My %1 tickets" msgstr "" @@ -2615,63 +2615,67 @@ msgstr "" msgid "My Approvals" msgstr "×”××™×©×•×¨×™× ×©×œ×™" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "×”××™×©×•×¨×™× ×©×œ×™" -#: html/Admin/Elements/AddCustomFieldValue:33 html/Admin/Elements/EditCustomField:34 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "" + +#: 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 msgid "Name" msgstr "ש×" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "×©× ×‘×©×™×ž×•×©" -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "" - -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "חדש" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "×™×—×¡×™× ×—×“×©×™×" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "×¡×™×¡×ž× ×—×“×©×”" -#: etc/initialdata:317 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "×™×—×¡×™× ×—×“×©×™×" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "" -#: html/Ticket/Elements/Tabs:36 +#: NOT FOUND IN SOURCE msgid "New Search" msgstr "חיפוש חדש" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "קבוצה חדשה" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "×¡×™×¡×ž× ×—×“×©×”" -#: lib/RT/User_Overlay.pm:647 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "תור חדש" @@ -2679,11 +2683,11 @@ msgstr "תור חדש" msgid "New request" msgstr "בקשה חדשה" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "זכויות חדשות" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "סקריפ חדש" @@ -2691,185 +2695,185 @@ msgstr "סקריפ חדש" msgid "New search" msgstr "חיפוש חדש" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:50 +#: 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 "×ª×‘× ×™×ª חדשה" -#: html/SelfService/Elements/Tabs:48 +#: html/SelfService/Elements/Tabs:69 msgid "New ticket" msgstr "×¤× ×™×™×” חדשה" -#: lib/RT/Ticket_Overlay.pm:2778 +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "×¤× ×™×™×” חדשה ×œ× ×§×™×™×ž×ª" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "משתמש חדש" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "משתמש חדש ×©× ×§×¨×" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "×¦×•×¤×™× ×—×“×©×™×" -#: html/Admin/Users/Prefs.html:42 -msgid "New window setting" -msgstr "" - -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "הב×" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "דף הב×" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "×›×™× ×•×™" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "×›×™× ×•×™" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 -msgid "No Group defined" +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" msgstr "" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 -msgid "No Queue defined" +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 +msgid "No Group defined" msgstr "" -#: bin/rt-crontool:56 -msgid "No RT user found. Please consult your RT administrator.\\n" +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" msgstr "" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 -msgid "No Template" +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 +msgid "No Queue defined" msgstr "" -#: bin/rt-commit-handler:764 -msgid "No Ticket specified. Aborting ticket " +#: bin/rt-crontool:73 +msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "" -#: NOT FOUND IN SOURCE -msgid "No Ticket specified. Aborting ticket modifications\\n\\n" +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 +msgid "No Template" msgstr "" -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "" -#: lib/RT/Interface/Web.pm:896 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "" -#: NOT FOUND IN SOURCE -msgid "No command found\\n" -msgstr "" - -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 -msgid "No correspondence attached" -msgstr "" - -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "" -#: lib/RT/Users_Overlay.pm:145 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "" -#: lib/RT/User_Overlay.pm:865 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "" -#: lib/RT/Ticket_Overlay.pm:342 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "" -#: lib/RT/User_Overlay.pm:152 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "" -#: html/SelfService/Display.html:118 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "" -#: html/SelfService/Update.html:52 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "" -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "" -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "" -#: html/Search/Bulk.html:149 -msgid "No search to operate on." +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" msgstr "" -#: NOT FOUND IN SOURCE -msgid "No ticket id specified" +#: html/Search/Bulk.html:194 +msgid "No search to operate on." msgstr "" -#: lib/RT/Transaction_Overlay.pm:478 lib/RT/Transaction_Overlay.pm:516 -msgid "No transaction type specified" +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" msgstr "" -#: NOT FOUND IN SOURCE -msgid "No user or email address specified" +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 +msgid "No transaction type specified" msgstr "" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "" -#: bin/rt-commit-handler:644 -msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" -msgstr "" - -#: lib/RT/Interface/Web.pm:893 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "××£ ×חד" -#: lib/RT/Interface/Web.pm:898 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "" @@ -2877,79 +2881,95 @@ msgstr "" msgid "Not logged in" msgstr "×œ× ×‘×ª×•×š המערכת" -#: html/Elements/Header:59 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "×œ× ×‘×ª×•×š המערכת." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "×œ× ×”×•×–×Ÿ" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "" -#: NOT FOUND IN SOURCE -msgid "Not yet implemented...." -msgstr "" - -#: html/Approvals/Elements/Approve:49 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "" -#: lib/RT/User_Overlay.pm:650 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "" -#: etc/initialdata:319 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "× ×•×‘×ž×‘×¨" @@ -2957,15 +2977,37 @@ msgstr "× ×•×‘×ž×‘×¨" msgid "November" msgstr "× ×•×‘×ž×‘×¨" -#: lib/RT/Record.pm:157 +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "×וקטובר" @@ -2973,247 +3015,272 @@ msgstr "×וקטובר" msgid "October" msgstr "×וקטובר" -#: html/Elements/SelectDateRelation:35 +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "ב" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "הצג רק ××™×©×•×¨×™× ×¢×‘×•×¨ בקשות ×©× ×•×¦×¨×• ×חרי %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "הצג רק ××™×©×•×¨×™× ×¢×‘×•×¨ בקשות ×©× ×•×¦×¨×• ×œ×¤× ×™ %1" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "פתוח" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "פתח" -#: NOT FOUND IN SOURCE -msgid "Open requests" -msgstr "" - -#: html/SelfService/Elements/Tabs:42 +#: html/SelfService/Elements/Tabs:63 msgid "Open tickets" msgstr "" -#: html/Admin/Users/Prefs.html:41 -msgid "Open tickets (from listing) in a new window" +#: etc/initialdata:140 +msgid "Open tickets on correspondence" msgstr "" -#: html/Admin/Users/Prefs.html:40 -msgid "Open tickets (from listing) in another window" +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" msgstr "" -#: etc/initialdata:133 -msgid "Open tickets on correspondence" -msgstr "" - -#: html/Search/Elements/PickRestriction:101 +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "סידור ומיון" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "×רגון" -#: html/Approvals/Elements/Approve:33 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "בעלי×" -#: lib/RT/Ticket_Overlay.pm:3071 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) -msgid "Owner changed from %1 to %2" +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." msgstr "" -#: lib/RT/Transaction_Overlay.pm:582 +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "הבעלי×" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 -msgid "Pager" -msgstr "ביפר" - -#: html/Admin/Elements/ModifyUser:74 -msgid "PagerPhone" +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Parent" -msgstr "" +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 +msgid "Pager" +msgstr "ביפר" -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:47 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "הורי×" -#: html/Elements/Login:52 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "סיסמ×" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "מזכיר סיסמ×" -#: lib/RT/User_Overlay.pm:169 lib/RT/User_Overlay.pm:868 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "×¡×™×¡×ž× ×§×¦×¨×” מדי" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "סיסמ×: %1" -#: html/Admin/Users/Modify.html:293 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 msgid "Passwords do not match." msgstr "הסיסמ×ות ××™× ×Ÿ תו×מות" -#: html/User/Prefs.html:174 +#: html/User/Prefs.html:234 msgid "Passwords do not match. Your password has not been changed" msgstr "" -#: html/Ticket/Elements/ShowSummary:45 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "×× ×©×™×" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:101 lib/RT/CustomField_Overlay.pm:202 lib/RT/CustomField_Overlay.pm:234 lib/RT/CustomField_Overlay.pm:511 lib/RT/CustomField_Overlay.pm:91 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2603 lib/RT/Ticket_Overlay.pm:2675 lib/RT/Ticket_Overlay.pm:2769 lib/RT/Ticket_Overlay.pm:2784 lib/RT/Ticket_Overlay.pm:2978 lib/RT/Ticket_Overlay.pm:3206 lib/RT/Ticket_Overlay.pm:3404 lib/RT/Ticket_Overlay.pm:3566 lib/RT/Ticket_Overlay.pm:3618 lib/RT/Ticket_Overlay.pm:3783 lib/RT/Transaction_Overlay.pm:466 lib/RT/Transaction_Overlay.pm:473 lib/RT/Transaction_Overlay.pm:502 lib/RT/Transaction_Overlay.pm:509 lib/RT/User_Overlay.pm:1355 lib/RT/User_Overlay.pm:570 lib/RT/User_Overlay.pm:605 lib/RT/User_Overlay.pm:861 lib/RT/User_Overlay.pm:962 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "" + +#: 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 msgid "Permission Denied" msgstr "" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "קבוצות ×ישיות" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "קבוצות ×ישיות" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "קבוצות ×ישיות" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "מספרי טלפון" -#: NOT FOUND IN SOURCE -msgid "Placeholder" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Pref" -msgstr "" - -#: html/Elements/Header:52 html/Elements/Tabs:53 html/SelfService/Elements/Tabs:51 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "מ××¤×™×™× ×™×" -#: NOT FOUND IN SOURCE -msgid "Prefs" -msgstr "" - -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "הקוד×" -#: html/Search/Listing.html:44 -msgid "Previous page" -msgstr "דף קוד×" +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "" #: NOT FOUND IN SOURCE -msgid "Pri" -msgstr "" +msgid "Previous page" +msgstr "דף קוד×" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "" -#: html/Search/Elements/PickRestriction:54 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "עדיפות" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "" + #: etc/initialdata:25 msgid "Privileged" msgstr "" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "" @@ -3221,243 +3288,181 @@ msgstr "" msgid "Pseudogroup for internal use" msgstr "" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:33 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "" + +#: 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 msgid "Queue" msgstr "תור" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:44 +#: 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) msgid "Queue %1 not found" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Queue '%1' not found\\n" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "" - -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Queue Scrips" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "" -#: html/Ticket/Create.html:205 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "" - -#: html/SelfService/Display.html:71 lib/RT/CustomField_Overlay.pm:98 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "תורי×" -#: html/Elements/Quicksearch:25 +#: html/Elements/Quicksearch:46 msgid "Quick search" msgstr "חיפוש מהיר" -#: html/Elements/Login:44 -#. ($RT::VERSION) -msgid "RT %1" +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:70 -#. ($RT::VERSION, $RT::rtname) -msgid "RT %1 for %2" +#: html/Search/Results.html:83 +msgid "RSS" msgstr "" -#: html/Elements/Footer:32 +#: html/Elements/Login:66 #. ($RT::VERSION) -msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" +msgid "RT %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 +#. ($RT::VERSION, $RT::rtname) +msgid "RT %1 for %2" msgstr "" -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "× ×™×”×•×œ RT" -#: NOT FOUND IN SOURCE -msgid "RT Authentication error." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT Bounce: %1" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT Configuration error" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT Critical error. Message not recorded!" -msgstr "" - -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT Received mail (%1) from itself." +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT Self Service / Closed Tickets" -msgstr "" - -#: html/index.html:25 html/index.html:28 +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT ממבט כולל" -#: NOT FOUND IN SOURCE -msgid "RT couldn't authenticate you" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find requestor via its external database lookup" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RT couldn't find the queue: %1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT couldn't validate this PGP signature. \\n" -msgstr "" - -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT / %1" -#: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "" +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 +msgid "Real Name" +msgstr "×©× ×מיתי" #: NOT FOUND IN SOURCE -msgid "RT has proccessed your commands" -msgstr "" - -#: html/Elements/Login:92 -#. ('2003') -msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "" +msgid "RealName" +msgstr "×©× ×מיתי" -#: NOT FOUND IN SOURCE -msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT thinks this message may be a bounce" +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT will process this message as if it were unsigned.\\n" +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" msgstr "" -#: NOT FOUND IN SOURCE -msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" msgstr "" -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 -msgid "Real Name" -msgstr "×©× ×מיתי" - -#: html/Admin/Elements/ModifyUser:48 -msgid "RealName" -msgstr "×©× ×מיתי" - -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:71 +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "×ž×ª×™×™×—×¡×™× ×ליו" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:61 +#: 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 msgid "Refers to" msgstr "מתייחס ל" #: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Refine" -msgstr "" - -#: html/Search/Elements/PickRestriction:27 msgid "Refine search" msgstr "חדד ×ת החיפוש" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "×¨×¢× ×Ÿ דף ×–×” כל %1 דקות." -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:62 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "×™×—×¡×™× ×¢× ×¤× ×™×•×ª ×חרות" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "הסר העתק × ×™×”×•×œ×™" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "הסר העתק" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "הסר מבקש" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "הגב" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "×ž×¢× ×” ×œ×¤× ×™×™×”" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "מבקש" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "כתובת ×”××™-מייל של המבקש" @@ -3469,255 +3474,340 @@ msgstr "מבקש(×™×)" msgid "RequestorAddresses" msgstr "כתובת ×”×¤×•× ×”" -#: html/SelfService/Create.html:41 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "מבקשי×" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "×פס × ×ª×•× ×™×" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "בית" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "פתור" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "פתור ×¤× ×™×™×” #%1 (%2)" -#: etc/initialdata:308 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "× ×¤×ª×¨" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "תגובה למבקשי×" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "תוצ×ות" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "תוצ×ות לעמוד" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "הקלד ×©× ×™×ª:" -#: NOT FOUND IN SOURCE -msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" msgstr "" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "" -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "" -#: lib/RT/Interface/Web.pm:792 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "" -#: lib/RT/Interface/Web.pm:825 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "" -#: NOT FOUND IN SOURCE -msgid "RootApproval" +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" msgstr "" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "שבת" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyLinks.html:39 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "" + +#: 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 msgid "Save Changes" msgstr "שמור ×©×™× ×•×™×™×" -#: NOT FOUND IN SOURCE +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "שמור ×©×™× ×•×™×™×" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "" -#: html/Admin/Elements/EditScrips:84 -msgid "Scrip deleted" +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" msgstr "" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 -msgid "Scrips" +#: html/Admin/Elements/EditScrips:107 +msgid "Scrip deleted" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Scrips for %1\\n" +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 +msgid "Scrips" msgstr "" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "חיפוש" -#: NOT FOUND IN SOURCE -msgid "Search Criteria" +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:39 +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "בחר קבוצה" -#: lib/RT/CustomField_Overlay.pm:422 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "" -#: lib/RT/CustomField_Overlay.pm:419 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 html/Admin/Queues/Templates.html:47 +#: 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 "" -#: html/Admin/Elements/UserTabs:49 -msgid "Select user" +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" msgstr "" -#: lib/RT/CustomField_Overlay.pm:36 -msgid "SelectMultiple" +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" msgstr "" -#: lib/RT/CustomField_Overlay.pm:35 -msgid "SelectSingle" +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Self Service" +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" msgstr "" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "ספטמבר" @@ -3725,218 +3815,222 @@ msgstr "ספטמבר" msgid "September" msgstr "ספטמבר" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "הצג בקשות ש×ושרו" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "הצג בקשות ×©× ×“×—×•" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "הצג בקשות ×ž×ž×ª×™× ×•×ª" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "הצג בקשות ×©×ž×ž×ª×™× ×•×ª ל××™×©×•×¨×™× ×חרי×" -#: lib/RT/Queue_Overlay.pm:81 -msgid "Show ticket private commentary" +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" msgstr "" -#: lib/RT/Queue_Overlay.pm:79 -msgid "Show ticket summaries" +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" msgstr "" -#: lib/RT/Queue_Overlay.pm:69 -msgid "ShowACL" +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" msgstr "" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "חתימה" -#: NOT FOUND IN SOURCE -msgid "Signed in as %1" +#: html/Admin/Elements/SelectSingleOrMultiple:47 +msgid "Single" msgstr "" -#: html/Admin/Elements/SelectSingleOrMultiple:26 -msgid "Single" +#: html/Search/Elements/EditFormat:75 +msgid "Size" msgstr "" -#: html/Elements/Header:51 +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "" -#: html/Admin/Elements/AddCustomFieldValue:29 -msgid "Sort" +#: html/Search/Elements/EditFormat:78 +msgid "Small" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Sort key" +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" msgstr "" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "סדר תוצ×ות על פי" -#: NOT FOUND IN SOURCE -msgid "SortOrder" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" msgstr "" #: NOT FOUND IN SOURCE msgid "Stalled" msgstr "מושהה" -#: NOT FOUND IN SOURCE -msgid "Start page" -msgstr "" - -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "התחיל" -#: NOT FOUND IN SOURCE -msgid "Started date '%1' could not be parsed" -msgstr "" - -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "מתחיל ב" -#: NOT FOUND IN SOURCE -msgid "Starts By" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Starts date '%1' could not be parsed" -msgstr "" - -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "×ž×“×™× ×”" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "מצב" -#: etc/initialdata:294 +#: etc/initialdata:309 msgid "Status Change" msgstr "" -#: lib/RT/Transaction_Overlay.pm:528 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) -msgid "Status changed from %1 to %2" -msgstr "" +#: html/Ticket/Elements/Tabs:170 +msgid "Steal" +msgstr "×’× ×•×‘" -#: NOT FOUND IN SOURCE -msgid "StatusChange" +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" msgstr "" -#: html/Ticket/Elements/Tabs:147 -msgid "Steal" -msgstr "×’× ×•×‘" +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "" -#: lib/RT/Transaction_Overlay.pm:587 +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " +msgid "Stolen from %1" msgstr "× ×’× ×‘ מ %1" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:57 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:32 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: NOT FOUND IN SOURCE +msgid "Stolen from %1 " +msgstr "× ×’× ×‘ מ %1 " + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "× ×•×©×" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:609 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "× ×•×©× ×©×•× ×” ל %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "שלח" -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "" - -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "הצליח" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "ר×שון" -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "סופר-משתמש" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "מערכת" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:791 lib/RT/Interface/Web.pm:824 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "" + +#: 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 "" -#: NOT FOUND IN SOURCE -msgid "System Error. Right not granted." +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "System Error. right not granted" +#: html/Admin/Tools/index.html:47 +msgid "System Tools" msgstr "" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "" -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "" -#: NOT FOUND IN SOURCE -msgid "System error. Unable to grant rights." -msgstr "" - -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "" @@ -3944,197 +4038,180 @@ msgstr "" msgid "SystemRolegroup for internal use" msgstr "" -#: lib/RT/CurrentUser.pm:318 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "×§×—" -#: lib/RT/Transaction_Overlay.pm:573 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "× ×œ×§×—×”" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Template not found\\n" -msgstr "" - -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Templates for %1\\n" -msgstr "" - -#: lib/RT/Interface/Web.pm:892 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "" -#: lib/RT/CustomField_Overlay.pm:243 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 msgid "That principal already has that right" msgstr "" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) -msgid "That principal is not a %1 for this ticket" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3210 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "" -#: NOT FOUND IN SOURCE -msgid "That user already has that right" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3020 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2986 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "" -#: lib/RT/User_Overlay.pm:336 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "" -#: lib/RT/User_Overlay.pm:328 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "" -#: lib/RT/User_Overlay.pm:349 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "" -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3012 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "" -#: html/SelfService/Display.html:32 html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "מידע בסיסי" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2213 -msgid "The comment has been recorded" -msgstr "" - -#: bin/rt-crontool:198 +#: 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 "" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 -msgid "The following commands were not proccessed:\\n\\n" -msgstr "" - -#: lib/RT/Interface/Web.pm:895 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "" -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "" -#: NOT FOUND IN SOURCE -msgid "This ticket %1 %2 (%3)\\n" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" msgstr "" -#: bin/rt-crontool:189 +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "" + +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "" -#: lib/RT/Transaction_Overlay.pm:251 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "" -#: NOT FOUND IN SOURCE -msgid "This user's 25 highest priority tickets" -msgstr "" - -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "חמישי" @@ -4143,80 +4220,78 @@ msgid "Ticket" msgstr "×¤× ×™×™×”" #: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Ticket # %1 Jumbo update: %2" msgstr "×¤× ×™×™×” מספר %1 עדכון ×’'מבו: %2" -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "×¤× ×™×™×” מספר %1 עדכון ×’'מבו: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "" -#: lib/RT/Ticket_Overlay.pm:587 lib/RT/Ticket_Overlay.pm:608 -#. ($self->Id, $QueueObj->Name) -msgid "Ticket %1 created in queue '%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) +msgid "Ticket %1" msgstr "" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) -msgid "Ticket %1 loaded\\n" +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 +#. ($self->Id, $QueueObj->Name) +msgid "Ticket %1 created in queue '%2'" msgstr "" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Ticket Id" +#: etc/initialdata:324 +msgid "Ticket Resolved" msgstr "" -#: etc/initialdata:309 -msgid "Ticket Resolved" +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" msgstr "" -#: html/Search/Elements/PickRestriction:63 +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "מצורף ×œ×¤× ×™×™×”" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "" -#: lib/RT/Ticket_Overlay.pm:496 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "" -#: lib/RT/Transaction_Overlay.pm:520 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "×¤× ×™×™×” × ×•×¦×¨×”" #: NOT FOUND IN SOURCE -msgid "Ticket creation failed" -msgstr "" - -#: lib/RT/Transaction_Overlay.pm:525 msgid "Ticket deleted" msgstr "×¤× ×™×™×” × ×ž×—×§×”" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" msgstr "מזהה ×¤× ×™×™×” ×œ× × ×ž×¦×" @@ -4224,375 +4299,421 @@ msgstr "מזהה ×¤× ×™×™×” ×œ× × ×ž×¦×" msgid "Ticket killed" msgstr "×¤× ×™×™×” × ×ž×—×§×”" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "×¤× ×™×™×” ×œ× × ×ž×¦××”" -#: etc/initialdata:295 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "סטטוס ×¤× ×™×™×” ×©×•× ×”" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "צופי ×”×¤× ×™×™×”" -#: html/Elements/Tabs:47 -msgid "Tickets" -msgstr "×¤× ×™×•×ª" - -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) -msgid "Tickets %1 %2" +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) -msgid "Tickets %1 by %2" -msgstr "" +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "×¤× ×™×•×ª" -#: html/Elements/ViewUser:26 -#. ($name) -msgid "Tickets from %1" +#: html/Approvals/Elements/ShowDependency:48 +msgid "Tickets which depend on this approval:" msgstr "" -#: html/Approvals/Elements/ShowDependency:27 -msgid "Tickets which depend on this approval:" +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" msgstr "" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "זמן × ×•×ª×¨" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "זמן עבודה" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "זמן × ×•×ª×¨" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "זמן להציג" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "זמן עבודה" -#: NOT FOUND IN SOURCE -msgid "TimeLeft" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "" -#: bin/rt-commit-handler:402 -msgid "To generate a diff of this commit:" +#: html/Search/Elements/EditFormat:74 +msgid "Title" msgstr "" -#: bin/rt-commit-handler:391 -msgid "To generate a diff of this commit:\\n" +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." msgstr "" -#: lib/RT/Ticket_Overlay.pm:1168 +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "" + +#: etc/initialdata:252 msgid "Transaction" msgstr "" -#: lib/RT/Transaction_Overlay.pm:640 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "" -#: lib/RT/Transaction_Overlay.pm:89 -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" msgstr "" -#: lib/RT/Transaction_Overlay.pm:699 -msgid "Transactions are immutable" +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Trying to delete a right: %1" +#: lib/RT/Transaction_Overlay.pm:838 +msgid "Transactions are immutable" msgstr "" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "שלישי" -#: html/Admin/Elements/EditCustomField:44 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "סוג" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "×œ× ×ž×™×™×•×©×" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "" -#: html/Admin/Elements/ModifyUser:62 -msgid "UnixUsername" -msgstr "" - -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "×œ× ×ž×•×’×‘×œ" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "" -#: lib/RT/Transaction_Overlay.pm:569 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "עדכן" -#: html/Admin/Users/Prefs.html:62 -msgid "Update ID" +#: html/Search/Bulk.html:178 +msgid "Update All" msgstr "" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "סוג עדכון" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "עדכן ×ת כל ×”×¤× ×™×•×ª לעיל בבת ×חת" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "עדכן ××™-מייל" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "עדכן ש×" -#: lib/RT/Interface/Web.pm:409 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "" -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "עדכן ×¤× ×™×•×ª × ×‘×—×¨×•×ª" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "עדכן חתימה" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "עדכן ×¤× ×™×™×”" -#: NOT FOUND IN SOURCE -msgid "Update ticket # %1" -msgstr "" - -#: html/SelfService/Update.html:25 html/SelfService/Update.html:47 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "" -#: lib/RT/Interface/Web.pm:407 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "" -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "עודכן" -#: NOT FOUND IN SOURCE -msgid "User %1 %2: %3\\n" +#: html/Tools/Offline.html:95 +msgid "Upload" msgstr "" -#: NOT FOUND IN SOURCE -msgid "User %1 Password: %2\\n" +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" msgstr "" -#: NOT FOUND IN SOURCE -msgid "User '%1' not found" +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" msgstr "" -#: NOT FOUND IN SOURCE -msgid "User '%1' not found\\n" +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" msgstr "" -#: etc/initialdata:125 etc/initialdata:191 +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "" + +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "מזהה המשתמש" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "מזהה המשתמש" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "זכויות המשתמש" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "" -#: NOT FOUND IN SOURCE -msgid "User notified" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" msgstr "" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 -msgid "User view" +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" msgstr "" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:51 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "×©× ×ž×©×ª×ž×©" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "משתמשי×" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "" -#: html/Search/Elements/PickRestriction:51 -msgid "ValueOfQueue" +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" msgstr "" -#: html/Admin/Elements/EditCustomField:57 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "" -#: NOT FOUND IN SOURCE -msgid "VrijevormEnkele" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "" - -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "" -#: html/Admin/Elements/ModifyUser:56 -msgid "WebEncoding" -msgstr "" - -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "רביעי" -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "בכל ×¤×¢× ×©×“×‘×¨ ×›×œ×©×”×•× ×§×•×¨×”" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "בכל ×¤×¢× ×©×¤× ×™×™×” × ×¡×’×¨×ª" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "בכל ×¤×¢× ×©×‘×¢×œ×™ ×”×¤× ×™×™×” ×ž×©×ª× ×”" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "בכל מצב שתור ×”×¤× ×™×™×” ×ž×©×ª× ×”" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "בכל ×¤×¢× ×©×ž×¦×‘ ×”×¤× ×™×™×” ×ž×©×ª× ×”" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "בכל ×¤×¢× ×©×ž×¦×‘ מוגדר על ידי משתמש קורה" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "בכל ×¤×¢× ×©×”×¢×¨×” מגיעה ב" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "בכל ×¤×¢× ×©×ª×›×ª×•×‘×ª מגיעה ב" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "עבודה" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "טלפון בעבודה" -#: html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "זמן טיפול" -#: lib/RT/Ticket_Overlay.pm:3123 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "×תה כבר ×”×‘×¢×œ×™× ×©×œ ×¤× ×™×™×” זו" -#: html/autohandler:108 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "××™× ×š משתמש מורשה" -#: lib/RT/Ticket_Overlay.pm:2998 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "×תה יכול להציב ×¤× ×™×” רק ×× ×תה ×”×‘×¢×œ×™× ×©×œ×”, ×ו ש×ין לה בעלי×" @@ -4600,24 +4721,24 @@ msgstr "×תה יכול להציב ×¤× ×™×” רק ×× ×תה ×”×‘×¢×œ×™× ×©×œ×” msgid "You don't have permission to view that ticket.\\n" msgstr "×ין לך הרש××” כדי לר×ות ×ת ×¤× ×™×™×” זו.\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "מצ×ת %1 ×¤× ×™×•×ª בתור %2" -#: html/NoAuth/Logout.html:31 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "×”×ª× ×ª×§×ª מהמערכת." -#: html/SelfService/Display.html:78 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "×ין לך הרש×ות ליצור ×¤× ×™×•×ª בתור ×–×”." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "××™× ×š מורשה ליצור ×¤× ×™×•×ª בתור ×–×”." -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "×”× ×š מוזמן ×œ×”×™×›× ×¡ ×©× ×™×ª" @@ -4629,11 +4750,11 @@ msgstr "%1 הבקשות שלך" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "×ž× ×”×œ המערכת ×œ× ×”×’×“×™×¨ ×ת כתובות הדו×ר שמפעילות ×ת ×”×ª×•×›× ×” כמו שצריך" -#: etc/initialdata:435 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "בקשתך ×ושרה על ידי %1. ייתכן ש××™×©×•×¨×™× × ×•×¡×¤×™× ×¢×“×™×™×Ÿ ×ž×ž×ª×™× ×™×." -#: etc/initialdata:469 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "בקשתך ×ושרה." @@ -4641,15 +4762,15 @@ msgstr "בקשתך ×ושרה." msgid "Your request was rejected" msgstr "בקשתך × ×“×—×ª×”" -#: etc/initialdata:390 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "בקשתך × ×“×—×ª×”." -#: html/autohandler:127 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "×©× ×”×ž×©×ª×ž×© ו/×ו ×”×¡×™×¡×ž× ××™× × × ×›×•× ×™×" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "מיקוד" @@ -4657,215 +4778,240 @@ msgstr "מיקוד" msgid "[no subject]" msgstr "[×œ×œ× × ×•×©×]" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "×©×”×•×¢× ×§ ל%1" -#: html/SelfService/Closed.html:28 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 msgid "closed" msgstr "סגור" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "מכיל" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" msgstr "תוכן" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "סוג התוכן" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "התכתבות (×›× ×¨××”) ×œ× × ×©×œ×—×”" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "התכתבות × ×©×œ×—×”" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "ימי×" #: NOT FOUND IN SOURCE -msgid "dead" -msgstr "" - -#: html/Search/Listing.html:75 msgid "delete" msgstr "מחק" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "מחוק" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "×œ× ×ž×›×™×œ" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "×œ× ×ž×›×™×œ" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "שווה ל" -#: NOT FOUND IN SOURCE -msgid "false" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" msgstr "" -#: html/Elements/SelectAttachmentField:28 +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "filename" msgstr "×©× ×§×•×‘×¥" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "גדול מ" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "קבוצה %1" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "שעות" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "מזהה" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "הו×" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "×”×•× ×œ×" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "פחות מ" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "מכיל" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "דקות" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "דקות" -#: bin/rt-commit-handler:765 -msgid "modifications\\n\\n" -msgstr "" - -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "חודשי×" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "חדש" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "×ין ערך" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "×ין" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "×œ× ×©×•×•×” ל" -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "" - -#: html/SelfService/Elements/MyRequests:61 lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "פתוח" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "× ×“×—×”" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "פתור" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "מושהה" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "" -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "" - -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "" -#: NOT FOUND IN SOURCE -msgid "with template %1" -msgstr "" - -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "" + diff --git a/rt/lib/RT/I18N/hu.po b/rt/lib/RT/I18N/hu.po new file mode 100644 index 000000000..857350841 --- /dev/null +++ b/rt/lib/RT/I18N/hu.po @@ -0,0 +1,4721 @@ +msgid "" +msgstr "" +"Project-Id-Version: RT 3.0.7\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2002-06-22 06:06+0200\n" +"PO-Revision-Date: 2003-12-01 11:26+0100\n" +"Last-Translator: Attila K. Mergl <mergl@astron.hu>\n" +"Language-Team: Hungarian <hu@gnome.hu>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit" + +#: 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) +msgid "#%1: %2" +msgstr "#%1: %2" + +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "" + +#: lib/RT/Date.pm:361 +#. ($s, $time_unit) +msgid "%1 %2" +msgstr "%1 %2" + +#: NOT FOUND IN SOURCE +msgid "%1 %2 %3" +msgstr "%1 %2 %3" + +#: lib/RT/Date.pm:397 +#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) +msgid "%1 %2 %3 %4:%5:%6 %7" +msgstr "%1 %7. %2 %3 %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) +msgid "%1 %2 added" +msgstr "[%1] mezõbe '%2' érték felvétele" + +#: lib/RT/Date.pm:358 +#. ($s, $time_unit) +msgid "%1 %2 ago" +msgstr "%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) +msgid "%1 %2 changed to %3" +msgstr "%1 változtatása: '%2' --> '%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) +msgid "%1 %2 deleted" +msgstr "%1 %2 törölve" + +#: 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)) +msgid "%1 %2 with template %3" +msgstr "%1 %2 a %3 sablonnal" + +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "" + +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (változatlan)" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 +#. ("--search-argument", "--search") +#. ("--condition-argument", "--condition") +#. ("--action-argument", "--action") +msgid "%1 - An argument to pass to %2" +msgstr "%1 - %2-nek átadandó argumentum" + +#: bin/rt-crontool:210 +#. ("--verbose") +msgid "%1 - Output status updates to STDOUT" +msgstr "%1 - StátuszfrissÃtés kiÃratása a STDOUT-ra" + +# msgstr "%1 - Schreibe Statusupdates nach STDOUT" +#: bin/rt-crontool:204 +#. ("--action") +msgid "%1 - Specify the action module you want to use" +msgstr "%1 - Adja meg a használandó akciómodult!" + +#: bin/rt-crontool:198 +#. ("--condition") +msgid "%1 - Specify the condition module you want to use" +msgstr "%1 - Adja meg a használandó kondiciómodult!" + +#: bin/rt-crontool:191 +#. ("--search") +msgid "%1 - Specify the search module you want to use" +msgstr "%1 - Adja meg a használandó keres?modult!" + + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 +#. ($self->Id) +msgid "%1 ScripAction loaded" +msgstr "ScripAction %1 betöltve" + +#: lib/RT/Record.pm:1708 +#. ($args{'Value'}, $cf->Name) +msgid "%1 added as a value for %2" +msgstr "%1 értéke hozzáadva %2 höz" + +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 +#. ($args{'Base'}) +#. ($args{'Target'}) +msgid "%1 appears to be a local object, but can't be found in the database" +msgstr "%1 nem találhato az adatbázisban, pedig helyi objektumnak látszik" + +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 +#. ($self->BriefDescription , $self->CreatorObj->Name) +#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) +msgid "%1 by %2" +msgstr "%1 (%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."'") +msgid "%1 changed from %2 to %3" +msgstr "%1 változtatása: '%2' --> '%3'" + +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "" + +#: lib/RT/Record.pm:930 +msgid "%1 could not be set to %2." +msgstr "%1 nem állÃtható %2 re." + +#: lib/RT/Ticket_Overlay.pm:2743 +#. ($self) +msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." +msgstr "" +"%1 nem tudta a státuszt lezártra állÃtani. Az RT adatbázisa talán " +"inkonzisztens." + +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "%1 létrehozva" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "%1 törölve" + +#: html/Elements/MyTickets:47 +#. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "A %1 nekem kiosztott, legsürgõsebb probléma..." + +#: bin/rt-crontool:186 +#. ($0) +msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." +msgstr "" + +#: lib/RT/Queue_Overlay.pm:860 +#. ($principal->Object->Name, $args{'Type'}) +msgid "%1 is no longer a %2 for this queue." +msgstr "Ennek a sornak %1 már nem %2-je." + +#: 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) +msgid "%1 min" +msgstr "%1 perc" + +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "%1 legújabb gazdátlan probléma" + +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "" + +#: html/User/Elements/DelegateRights:97 +#. (loc($ObjectType =~ /^RT::(.*)$/)) +msgid "%1 rights" +msgstr "%1 jogok" + +#: lib/RT/Action/ResolveMembers.pm:63 +#. (ref $self) +msgid "%1 will resolve all members of a resolved group ticket." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:470 +#. ($self) +msgid "%1: no attachment specified" +msgstr "%1: Nincs melléklet megadva!" + +#: html/Ticket/Elements/ShowTransactionAttachments:78 +#. ($size) +msgid "%1b" +msgstr "%1b" + +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) +msgid "%1k" +msgstr "%1k" + +#: lib/RT/Ticket_Overlay.pm:1118 +#. ($args{'Status'}) +msgid "'%1' is an invalid value for status" +msgstr "'%1' nem lehet státusz érték" + +#: 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 "(Törléshez kiválasztandó!)" + +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(Szóközökkel elválasztva adható meg a problémák sorszáma vagy URL-je.)" + +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 +#. ($RT::CorrespondAddress) +#. ($RT::CommentAddress) +msgid "(If left blank, will default to %1)" +msgstr "(Ha üresen marad: %1)" + +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 +msgid "(No custom fields)" +msgstr "(Nincs egyéni mezõ)" + +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 +msgid "(No members)" +msgstr "(Nincsenek tagok)" + +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 +msgid "(No scrips)" +msgstr "(Nincs Scrip)" + +#: html/Admin/Elements/EditTemplates:52 +msgid "(No templates)" +msgstr "(Nincs sablon)" + +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(nincs név)" + +#: 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/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/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/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/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 +msgid "(empty)" +msgstr "(üres)" + +#: html/Admin/Users/index.html:60 +msgid "(no name listed)" +msgstr "(Nincs név a listában)" + +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 +msgid "(no value)" +msgstr "(nincs adat)" + +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(nincs adat)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 +msgid "(only one ticket)" +msgstr "<br>(Csak egy probléma adható meg!)" + +#: html/Elements/RT__Ticket/ColumnMap:146 +msgid "(pending approval)" +msgstr "" + +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "" + +#: html/Admin/Users/Modify.html:71 +msgid "(required)" +msgstr "(szükséges)" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "(untitled)" +msgstr "(névtelen)" + +#: html/Ticket/Elements/ShowBasics:53 +msgid "<% $Ticket->Status%>" +msgstr "" + +#: html/Elements/SelectTicketTypes:48 +msgid "<% $_ %>" +msgstr "" + +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<input type=\"submit\" value=\"Új probléma\"> %1" + +#: etc/initialdata:218 +msgid "A blank template" +msgstr "Üres sablon" + +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 +msgid "ACE not found" +msgstr "ACE nem található" + +#: lib/RT/ACE_Overlay.pm:854 +msgid "ACEs can only be created and deleted." +msgstr "ACE-k csak létrehozhatók és törölhetõk." + +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "ÉS" + +#: html/User/Elements/Tabs:53 +msgid "About me" +msgstr "Magamról" + +#: html/Admin/Users/Modify.html:106 +msgid "Access control" +msgstr "Hozzáférés ellenõrzése" + +#: html/Admin/Elements/EditScrip:71 +msgid "Action" +msgstr "Akció" + +#: lib/RT/Scrip_Overlay.pm:173 +#. ($args{'ScripAction'}) +msgid "Action %1 not found" +msgstr "%1 akció nem található" + +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "Akció végrehajtva.\\n" + +#: bin/rt-crontool:144 +msgid "Action prepared..." +msgstr "Akció elõkészÃtve..." + +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Hozzáad" + +#: html/Search/Bulk.html:114 +msgid "Add AdminCc" +msgstr "AdminisztratÃv tájékotatást kapó hozzáadása" + +#: html/Search/Bulk.html:110 +msgid "Add Cc" +msgstr "Tájékotatást kapó hozzáadása" + +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "Mezõk hozzáadása" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "BõvÃtett keresési feltételek" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "További fájlok csatolása" + +#: html/Search/Bulk.html:106 +msgid "Add Requestor" +msgstr "Beküldõ hozáadása" + +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "Értékek hozzáadása" + +#: html/Admin/Global/Scrip.html:76 +msgid "Add a scrip which will apply to all queues" +msgstr "Minden sorra vonatkozó Scrip hozzáadása" + +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "További feltételek hozzáadása" + +#: html/Search/Bulk.html:146 +msgid "Add comments or replies to selected tickets" +msgstr "A kiválasztott problémákhoz válasz vagy kiegészÃtés hozzáadása" + +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 +msgid "Add members" +msgstr "Tagfelvétel" + +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 +msgid "Add new watchers" +msgstr "Új résztvevõk hozzáadása" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "Egyéni mezõk lehetséges értékeinek létrehozása, módosÃtása, törlése" + +#: lib/RT/Queue_Overlay.pm:760 +#. ($args{'Type'}) +msgid "Added principal as a %1 for this queue" +msgstr "Hozzendelt egy vezetõt mint %1 ehhez a sorhoz" + +#: lib/RT/Ticket_Overlay.pm:1416 +#. ($self->loc($args{'Type'})) +msgid "Added principal as a %1 for this ticket" +msgstr "Hozzárendelt egy vezetõt mint %1 ehhez a problémához" + +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 +msgid "Address1" +msgstr "Utca, házszám" + +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 +msgid "Address2" +msgstr "Postafiók" + +#: html/Ticket/Create.html:95 +msgid "Admin Cc" +msgstr "AdminisztratÃv tájékoztatást kap" + +#: etc/initialdata:295 +msgid "Admin Comment" +msgstr "AdminisztratÃv megjegyzés" + +#: etc/initialdata:274 +msgid "Admin Correspondence" +msgstr "" + +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 +msgid "Admin queues" +msgstr "Válasszon sort!" + +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 +msgid "Admin/Global configuration" +msgstr "Konfiguráció / Ãltalános beállÃtások" + +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 +msgid "AdminCc" +msgstr "AdminisztratÃv tájékoztatást kap" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:171 +msgid "AdminGroup" +msgstr "" + +#: lib/RT/Group_Overlay.pm:173 +msgid "AdminGroupMembership" +msgstr "" + +#: lib/RT/System.pm:81 +msgid "AdminOwnPersonalGroups" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "AdminQueue" +msgstr "" + +#: lib/RT/System.pm:82 +msgid "AdminUsers" +msgstr "" + +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 +msgid "Administrative Cc" +msgstr "AdminisztratÃv tájékoztatást kap" + +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Kézi lekérdezés" + +#: html/Elements/SelectDateRelation:57 +msgid "After" +msgstr "után" + +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "" + +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "" + +#: html/Admin/Queues/index.html:75 +msgid "All Queues" +msgstr "Minden sor" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "ÉS/VAGY" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Mentés" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "A változtatás mentése" + +#: html/Elements/Tabs:74 +msgid "Approval" +msgstr "Lezárás" + +#: 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) +msgid "Approval #%1: %2" +msgstr "Engedélyezés #%1: %2" + +#: html/Approvals/index.html:75 +#. ($ticket->Id) +msgid "Approval #%1: Notes not recorded due to a system error" +msgstr "Engedélyezés #%1: A megjegyzés rendszerhiba miatt nem rögzÃthetõ" + +#: html/Approvals/index.html:73 +#. ($ticket->Id) +msgid "Approval #%1: Notes recorded" +msgstr "Engedélyezés #%1: Megjegyzés rögzÃtve" + +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Lezárás rendben" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Lezárás visszautasÃtva" + +#: html/Approvals/Elements/Approve:65 +msgid "Approve" +msgstr "Lezár" + +#: etc/initialdata:504 +msgid "Approver's notes: %1" +msgstr "Az engedélyezõ megjegyzése: %1" + +#: lib/RT/Date.pm:440 +msgid "Apr." +msgstr "ápr." + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 +msgid "Ascending" +msgstr "növekvõ" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Egyéni mezõ hozzárendelése vagy törlése" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 +msgid "Attach" +msgstr "Csatol" + +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 +msgid "Attach file" +msgstr "Fájl csatolása" + +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 +msgid "Attached file" +msgstr "Csatolt fájl" + +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) +msgid "Attachment '%1' could not be loaded" +msgstr "A csatolt '%1' nem betölthetõ" + +#: lib/RT/Transaction_Overlay.pm:478 +msgid "Attachment created" +msgstr "Csatolt fájl létrehozva" + +#: lib/RT/Tickets_Overlay.pm:1673 +msgid "Attachment filename" +msgstr "Csatolt fájl neve" + +#: html/Ticket/Elements/ShowAttachments:47 +msgid "Attachments" +msgstr "Csatolt fájlok" + +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "" + +#: lib/RT/Date.pm:444 +msgid "Aug." +msgstr "aug." + +#: etc/initialdata:221 +msgid "Autoreply" +msgstr "Automatikus válasz" + +#: etc/initialdata:72 +msgid "Autoreply To Requestors" +msgstr "Automatikus válasz a beküldõnek" + +#: 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 "Alapadatok módosÃtása" + +#: html/Ticket/Update.html:86 +msgid "Bcc" +msgstr "BCC" + +#: 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 "" +"Ha valamit módosÃtott ne felejtsen el ide kattintani, hogy megtörténjen a" + +# ## wieder - Duzen??? +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 +msgid "Before" +msgstr "elõtt" + +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: etc/initialdata:217 +msgid "Blank" +msgstr "Üres" + +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "Félkövér" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 +msgid "Brief headers" +msgstr "Tömör fejléc" + +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 +msgid "Bulk ticket update" +msgstr "Tömeges problémafrissÃtés" + +#: lib/RT/User_Overlay.pm:1722 +msgid "Can not modify system users" +msgstr "Rendszerfelhasználó nem módosÃtható" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "Can this principal see this queue" +msgstr "Ez a vezetõ nem láthatja ezt a sort" + +#: lib/RT/CustomField_Overlay.pm:370 +msgid "Can't add a custom field value without a name" +msgstr "Egyéni mehzõ név nélkül nem hozzáadható" + +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 +msgid "Can't link a ticket to itself" +msgstr "A problémát nem lehet önmagához kapcsolni!" + +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Ezt a lekérdezést nem lehet lementeni" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 +msgid "Can't specifiy both base and target" +msgstr "Nem adhat meg egyszerre bázist és célt" + +#: html/autohandler:148 +#. ($msg) +msgid "Cannot create user: %1" +msgstr "A felhasználó nem hozható létre: %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 +msgid "Cc" +msgstr "Tájékoztatást kap" + +#: html/SelfService/Prefs.html:52 +msgid "Change password" +msgstr "Jelszó-változtatás" + +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 +msgid "Check box to delete" +msgstr "Törléshez bejelölni" + +#: html/Admin/Elements/SelectRights:55 +msgid "Check box to revoke right" +msgstr "Jog megvonásához megjelölni" + +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 +msgid "Children" +msgstr "Leszármazottak" + +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 +msgid "City" +msgstr "Város" + +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "" + +#: html/Ticket/Elements/ShowDates:68 +msgid "Closed" +msgstr "Lezárva" + +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "Lezárt problémák" + +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 +msgid "Comment" +msgstr "KiegészÃt" + +#: html/Admin/Queues/Modify.html:79 +msgid "Comment Address" +msgstr "KiegészitõcÃm" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "Comment on tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "CommentOnTicket" +msgstr "" + +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 +msgid "Comments (Not sent to requestors)" +msgstr "KiegészÃtés (a beküldõ nem kapja meg!))" + +#: html/Search/Bulk.html:150 +msgid "Comments (not sent to requestors)" +msgstr "KiegészÃtés (a beküldõ nem kapja meg!)" + +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 +msgid "Comments about this user" +msgstr "KiegészÃtés ehhez a felhasználóhoz" + +#: lib/RT/Transaction_Overlay.pm:623 +msgid "Comments added" +msgstr "KiegészÃtés hozzáfûzése" + +#: lib/RT/Action/Generic.pm:176 +msgid "Commit Stubbed" +msgstr "" + +#: html/Admin/Elements/EditScrip:63 +msgid "Condition" +msgstr "Feltétel" + +#: bin/rt-crontool:131 +msgid "Condition matches..." +msgstr "" + +#: lib/RT/Scrip_Overlay.pm:189 +msgid "Condition not found" +msgstr "A feltétel nem található" + +#: html/Elements/Tabs:81 +msgid "Configuration" +msgstr "Konfiguráció" + +#: html/SelfService/Prefs.html:54 +msgid "Confirm" +msgstr "Igazolás" + +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 +msgid "Content" +msgstr "Tartalom" + +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "Másol" + +#: etc/initialdata:286 +msgid "Correspondence" +msgstr "Válasz" + +#: lib/RT/Transaction_Overlay.pm:619 +msgid "Correspondence added" +msgstr "Válasz hozzáfûzése" + +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "Az egyéni mezõt nem sikerült hozzáadni." + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "Az egyéni mezõértéket nem sikerült hozzáadni a #%1 problémához" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 +msgid "Could not change owner. " +msgstr "Nem sikerült a tulajdonost megváltoztatni! " + +#: html/Admin/CustomFields/Modify.html:119 +#. ($msg) +msgid "Could not create CustomField" +msgstr "Nem sikerült létrehozni az egyéni mezõt" + +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "Nem sikerült létrehozni a(z) %1 egyéni mezõt" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 +msgid "Could not create group" +msgstr "Nem sikerült létrehozni a csoportot" + +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 +#. ($msg) +msgid "Could not create template: %1" +msgstr "A sablom nem jött létre: %1" + +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 +msgid "Could not create ticket. Queue not set" +msgstr "Nem jött létre a probléma. A sor nincs meghatározva" + +#: 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 "A felhasználó nem jött létre" + +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 +msgid "Could not find or create that user" +msgstr "A felhasználót nem sikerült megtalálni vagy létrehozni" + +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 +msgid "Could not find that principal" +msgstr "A vezetõ nem található" + +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "A(z) %1 egyéni mezõ nem betölthetõ" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 +msgid "Could not load group" +msgstr "A csoport nem betölthetõ" + +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 +#. ($args{'Type'}) +msgid "Could not make that principal a %1 for this queue" +msgstr "A vezetõ nem lehet %1-e a sornak" + +#: lib/RT/Ticket_Overlay.pm:1405 +#. ($self->loc($args{'Type'})) +msgid "Could not make that principal a %1 for this ticket" +msgstr "A vezetõ nem lehet %1-e a problémának" + +#: lib/RT/Queue_Overlay.pm:857 +#. ($args{'Type'}) +msgid "Could not remove that principal as a %1 for this queue" +msgstr "A vezetõt nem lehet mint a sor %1-ét eltávolÃtani" + +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "A felhasználó adatait nem sikerült elmenteni" + +#: lib/RT/Group_Overlay.pm:1011 +msgid "Couldn't add member to group" +msgstr "A tagot nem lehet a csoporthoz adni" + +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 +#. ($Msg) +msgid "Couldn't create a transaction: %1" +msgstr "A tanzakció nem létrehozható: %1" + +#: lib/RT/Record.pm:939 +msgid "Couldn't find row" +msgstr "A sor nem található" + +#: lib/RT/Group_Overlay.pm:985 +msgid "Couldn't find that principal" +msgstr "A csoport/felhasználó nem található" + +#: lib/RT/CustomField_Overlay.pm:404 +msgid "Couldn't find that value" +msgstr "Az érték nem található" + +#: lib/RT/CurrentUser.pm:146 +#. ($self->Id) +msgid "Couldn't load %1 from the users database.\\n" +msgstr "" + +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "A(z) %1 egyéni mezõ nem betölthetõ" + +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 +#. ($id) +msgid "Couldn't load group %1" +msgstr "%1 csoport nem betölthetõ" + +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 +msgid "Couldn't load link" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "%1 objektum nem betölthetõ" + +#: html/Admin/Queues/People.html:142 +#. ($id) +msgid "Couldn't load queue" +msgstr "A sor nem betölthetõ" + +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 +#. ($id) +msgid "Couldn't load queue %1" +msgstr "%1 sor nem betölthetõ" + +#: html/SelfService/Display.html:156 +#. ($id) +msgid "Couldn't load ticket '%1'" +msgstr "A(z) '%1' nem betölthetõ" + +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 +msgid "Country" +msgstr "Ország" + +#: 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 +msgid "Create" +msgstr "Felvesz" + +#: etc/initialdata:135 +msgid "Create Tickets" +msgstr "Probléma megadása" + +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 +msgid "Create a CustomField" +msgstr "Hozzon létre egy új egyéni mezõt!" + +#: html/Admin/Queues/CustomField.html:69 +#. ($QueueObj->Name()) +msgid "Create a CustomField for queue %1" +msgstr "Hozzon létre egy egyéni mezõt a(z) %1 sorhoz" + +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 +msgid "Create a new group" +msgstr "Hozzon létre új csoportot!" + +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 +msgid "Create a new personal group" +msgstr "Hozzon létre egy új saját csoportot!" + +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 +msgid "Create a new ticket" +msgstr "Új probléma felvétele" + +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 +msgid "Create a new user" +msgstr "Hozzon létre egy új felhasználót!" + +#: html/Admin/Queues/Modify.html:125 +msgid "Create a queue" +msgstr "Hozzon létre egy sort!" + +#: html/Admin/Queues/Scrip.html:80 +#. ($QueueObj->Name) +msgid "Create a scrip for queue %1" +msgstr "Hozzon létre egy scrip-et a(z) %1 sorhoz!" + +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 +msgid "Create a template" +msgstr "Hozzon létre egy sablont!" + +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "Új probléma" + +#: etc/initialdata:137 +msgid "Create new tickets based on this scrip's template" +msgstr "Hozzon létre egy új problémát ennek a sablonnak scripjeire alapozva" + +#: html/SelfService/Create.html:105 +msgid "Create ticket" +msgstr "Létrehozás" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "Create tickets in this queue" +msgstr "Hozzon létre problémákat ebben a sorban!" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "Create, delete and modify custom fields" +msgstr "Egyéni mezõk létrehozása, módosÃtása, törlése" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "Create, delete and modify queues" +msgstr "Sor létrehozása, módosÃtása, törlése" + +#: lib/RT/System.pm:81 +msgid "Create, delete and modify the members of personal groups" +msgstr "" + +#: lib/RT/System.pm:82 +msgid "Create, delete and modify users" +msgstr "Felhasználók létrehozása, módosÃtása, törlése" + +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "CreateTicket" +msgstr "" + +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 +msgid "Created" +msgstr "Felvéve" + +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 +#. ($CustomFieldObj->Name()) +msgid "Created CustomField %1" +msgstr "" + +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Létrehozó" + +#: html/Elements/EditLinks:49 +msgid "Current Links" +msgstr "Jelenlegi kapcsolatok" + +#: html/Admin/Elements/EditScrips:51 +msgid "Current Scrips" +msgstr "Jelenlegi Scripek" + +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 +msgid "Current members" +msgstr "Jelenlegi tagok" + +#: html/Admin/Elements/SelectRights:51 +msgid "Current rights" +msgstr "Jelenlegi jogok" + +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 +msgid "Current watchers" +msgstr "Jelenlegi résztvevõk" + +#: 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 +msgid "Custom Fields" +msgstr "Egyéni mezõk" + +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "%1 egyéni mezõi" + +#: html/Admin/Elements/EditScrip:123 +msgid "Custom action cleanup code" +msgstr "Az akcióhoz rendelt egyéni lezáró kód" + +#: html/Admin/Elements/EditScrip:115 +msgid "Custom action preparation code" +msgstr "Az akcióhoz rendelt egyéni elõkészÃtõ kód" + +#: html/Admin/Elements/EditScrip:107 +msgid "Custom condition" +msgstr "Egyéni feltétel" + +#: NOT FOUND IN SOURCE +msgid "Custom field %1 %2 %3" +msgstr "Egyéni mezõ %1 %2 %3" + +#: lib/RT/Tickets_Overlay.pm:2147 +#. ($CF->Name) +msgid "Custom field %1 has a value." +msgstr "[%1] egyéni mezõnek van értéke." + +#: lib/RT/Tickets_Overlay.pm:2143 +#. ($CF->Name) +msgid "Custom field %1 has no value." +msgstr "[%1] egyéni mezõnek nincs értéke." + +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 +#. ($args{'Field'}) +msgid "Custom field %1 not found" +msgstr "[%1] egyéni mezõ nem található" + +#: NOT FOUND IN SOURCE +msgid "Custom field not found" +msgstr "Egyéni mezõ nem található" + +#: lib/RT/CustomField_Overlay.pm:1041 +#. ($args{'Content'}, $self->Name) +msgid "Custom field value %1 could not be found for custom field %2" +msgstr "A(z) %2 egyéni mezõ %1értéke nem található" + +#: lib/RT/CustomField_Overlay.pm:414 +msgid "Custom field value could not be deleted" +msgstr "Az egyéni mezõ értéke nem található" + +#: lib/RT/CustomField_Overlay.pm:1047 +msgid "Custom field value could not be found" +msgstr "Az egyéni mezõ értéke nem található" + +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 +msgid "Custom field value deleted" +msgstr "Az egyéni mezõ értéke törölve" + +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 +msgid "CustomField" +msgstr "" + +#: 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 +msgid "Dates" +msgstr "Idõpontok" + +#: lib/RT/Date.pm:448 +msgid "Dec." +msgstr "dec." + +#: etc/initialdata:222 +msgid "Default Autoresponse template" +msgstr "" + +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "Alapértlemezett sor" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Alapértelmezett beküldõ" + +#: etc/initialdata:296 +msgid "Default admin comment template" +msgstr "" + +#: etc/initialdata:275 +msgid "Default admin correspondence template" +msgstr "" + +#: etc/initialdata:287 +msgid "Default correspondence template" +msgstr "" + +#: etc/initialdata:253 +msgid "Default transaction template" +msgstr "" + +#: html/User/Delegation.html:46 html/User/Delegation.html:49 +msgid "Delegate rights" +msgstr "Jogok továbbadása" + +#: lib/RT/System.pm:85 +msgid "Delegate specific rights which have been granted to you." +msgstr "" + +#: lib/RT/System.pm:85 +msgid "DelegateRights" +msgstr "" + +#: html/User/Elements/Tabs:59 +msgid "Delegation" +msgstr "Jogok továbbadása" + +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 +msgid "Delete" +msgstr "Töröl" + +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Sablon törlése" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Kiválasztott Scrip törlése" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "Delete tickets" +msgstr "Problémák törlése" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "DeleteTicket" +msgstr "" + +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:391 +msgid "Deleting this object would break referential integrity" +msgstr "" + +#: lib/RT/User_Overlay.pm:513 +msgid "Deleting this object would violate referential integrity" +msgstr "" + +#: html/Approvals/Elements/Approve:66 +msgid "Deny" +msgstr "ElutasÃtva" + +#: 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 +msgid "Depended on by" +msgstr "Ettõl függnek" + +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "" + +#: 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 +msgid "Depends on" +msgstr "A következõktõl függ" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 +msgid "Descending" +msgstr "csökkenõ" + +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 +msgid "Describe the issue below" +msgstr "A probléma szabatos leÃrása" + +#: 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 "LeÃrás" + +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 +msgid "Display" +msgstr "Mutat" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "Display Access Control List" +msgstr "" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Mezõk kiválasztása" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "Display Scrip templates for this queue" +msgstr "Láthatóak legyenek az ehhez a sorhoz tartozó scrip sablonok" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "Display Scrips for this queue" +msgstr "Láthatóak legyen a sorhoz tartozó scripek" + +#: html/Ticket/Elements/ShowHistory:56 +msgid "Display mode" +msgstr "MegjelenÃtési mód" + +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 +msgid "Do anything and everything" +msgstr "" + +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "Keresés indÃtása" + +#: html/Elements/Refresh:51 +msgid "Don't refresh this page." +msgstr "Ne frissÃtse ezt az oldalt." + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "Download" +msgstr "Letölt" + +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 +msgid "Due" +msgstr "Határidõ" + +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" +msgstr "MódosÃtsa %1 egyéni mezõit!" + +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" +msgstr "Kapcsolatok módosÃtása" + +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Lekérdezés szerkesztése kézzel" + +#: html/Admin/Queues/Templates.html:63 +#. ($QueueObj->Name) +msgid "Edit Templates for queue %1" +msgstr "MódosÃtsa a(z) %1 sor sablonjait!" + +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 +msgid "Edit system templates" +msgstr "MódosÃtsa a rendszersablonokat!" + +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "" + +#: html/Admin/Queues/Modify.html:140 +#. ($QueueObj->Name) +msgid "Editing Configuration for queue %1" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 +#. ($CustomFieldObj->Name()) +msgid "Editing CustomField %1" +msgstr "" + +#: html/Admin/Groups/Members.html:53 +#. ($Group->Name) +msgid "Editing membership for group %1" +msgstr "MódosÃtsa a(z) %1 csoport tagságát!" + +#: html/User/Groups/Members.html:150 +#. ($Group->Name) +msgid "Editing membership for personal group %1" +msgstr "" + +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 +msgid "Either base or target must be specified" +msgstr "Meg kell adni a bázist vagy a célt" + +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 +msgid "Email" +msgstr "E-mail cÃm" + +#: lib/RT/User_Overlay.pm:236 +msgid "Email address in use" +msgstr "E-Mail-cÃm már foglalt" + +# ## muss das überhaupt übersetzt werden??? +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 +msgid "Enabled (Unchecking this box disables this custom field)" +msgstr "Aktivált (kiválasztása letiltja ezt az egyéni mezõt)" + +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 +msgid "Enabled (Unchecking this box disables this group)" +msgstr "Aktivált (Kiválasztása letiltja ezt a csoportot)" + +#: html/Admin/Queues/Modify.html:105 +msgid "Enabled (Unchecking this box disables this queue)" +msgstr "Aktivált (Kiválasztása letiltja ezt a sort)" + +#: html/Admin/Queues/index.html:78 +msgid "Enabled Queues" +msgstr "AktÃv sorok" + +#: 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)) +msgid "Enabled status %1" +msgstr "Status %1 aktiviert" + +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 +msgid "Enter multiple values" +msgstr "Adjon meg több értéket!" + +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Objektum vagy URI. Szóközzel elválasztva több is megadható" + +#: lib/RT/CustomField_Overlay.pm:65 +msgid "Enter one value" +msgstr "Adjon meg egy értéket!" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Sor vagy URI. Szóközzel elválasztva több is megadható" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Probléma szám vagy URI. Szóközzel elválasztva több is megadható" + +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "Adjon meg egy értéket!" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 +msgid "Error" +msgstr "Hiba" + +#: lib/RT/Queue_Overlay.pm:669 +msgid "Error in parameters to Queue->AddWatcher" +msgstr "Hiba a sor paraméterezésében ->AddWatcher" + +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Hiba a sor paraméterezésében->DelWatcher" + +#: lib/RT/Ticket_Overlay.pm:1333 +msgid "Error in parameters to Ticket->AddWatcher" +msgstr "Hiba a probléma paraméterezésében -> AddWatcher" + +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Hiba a probléma paraméterezésében->DelWatcher" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Becsült" + +#: etc/initialdata:20 +msgid "Everyone" +msgstr "Mindenki" + +#: bin/rt-crontool:219 +msgid "Example:" +msgstr "Például:" + +#: html/Admin/Users/Modify.html:99 +msgid "Extra info" +msgstr "KiegészÃtõ információk" + +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 +msgid "Failed to find 'Privileged' users pseudogroup." +msgstr "" + +#: lib/RT/User_Overlay.pm:384 +msgid "Failed to find 'Unprivileged' users pseudogroup" +msgstr "" + +#: bin/rt-crontool:163 +#. ($modname, $@) +msgid "Failed to load module %1. (%2)" +msgstr "A %1 Modul nem betölthetõ. (%2)" + +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 +msgid "Feb." +msgstr "feb." + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "fájlnév" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 +msgid "Final Priority" +msgstr "Végsõ prioritás" + +#: lib/RT/Ticket_Overlay.pm:1140 +msgid "FinalPriority" +msgstr "" + +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "Találjon olyan csoportot, amelyiknél a" + +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 +msgid "Find people whose" +msgstr "Találj olyan embereket, akiknél a" + +#: html/Search/Results.html:109 +msgid "Find tickets" +msgstr "Problémák keresése" + +#: html/Ticket/Elements/Tabs:81 +msgid "First" +msgstr "Elsõ" + +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 +msgid "Foo Bar Baz" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 +msgid "Foo!" +msgstr "" + +#: html/Search/Bulk.html:105 +msgid "Force change" +msgstr "A változtatás kikényszerÃtése" + +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 +#. ($ticketcount) +msgid "Found %quant(%1,ticket)" +msgstr "%quant(%1) problémát találtam" + +#: lib/RT/Record.pm:942 +msgid "Found Object" +msgstr "" + +#: lib/RT/Date.pm:417 +msgid "Fri." +msgstr "P" + +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 +msgid "Full headers" +msgstr "Teljes fejléc" + +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:673 +#. ($New->Name) +msgid "Given to %1" +msgstr "%1 felhasználónak adva" + +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 +msgid "Global" +msgstr "Ãltalános" + +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Globális egyéni mezõ" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "Egyéni mezõk általános beállÃtásai" + +#: html/Admin/Elements/SelectTemplate:59 +#. (loc($Template->Name)) +msgid "Global template: %1" +msgstr "Ãltalános probléma: %1" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Hajrá!" + +#: 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 +msgid "Go!" +msgstr "Hajrá!" + +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 +msgid "Goto ticket" +msgstr "Mutassa a problémát" + +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 +msgid "Group" +msgstr "Csoport" + +#: 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 "Csoportjogok" + +#: lib/RT/Group_Overlay.pm:991 +msgid "Group already has member" +msgstr "Csoportnak már vannak tagjai" + +#: html/Admin/Groups/Modify.html:109 +#. ($create_msg) +msgid "Group could not be created: %1" +msgstr "A csoportot nem lehetett létrehozni: %1" + +#: lib/RT/Group_Overlay.pm:529 +msgid "Group created" +msgstr "Csoport létrehozva" + +#: lib/RT/Group_Overlay.pm:1163 +msgid "Group has no such member" +msgstr "A csoportnak már van ilyen tagja" + +#: 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 +msgid "Group not found" +msgstr "Csoport nem található" + +#: 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 +msgid "Groups" +msgstr "Csoportok" + +#: lib/RT/Group_Overlay.pm:997 +msgid "Groups can't be members of their members" +msgstr "Csoportok nem lehetnek a saját tagjaik tagjai!" + +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "A keresési feltételeknek megfeleõ csoportok" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: 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) +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 +msgid "History" +msgstr "Részletes történet" + +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "A %1 csoport története" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "%1 felhasználó története" + +#: html/Elements/Tabs:65 +msgid "Homepage" +msgstr "Kezdõlap" + +#: lib/RT/Base.pm:110 +#. (6) +msgid "I have %quant(%1,concrete mixer)." +msgstr "" + +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 +msgid "Id" +msgstr "Sorszám" + +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 +msgid "Identity" +msgstr "Személy" + +#: etc/initialdata:429 +msgid "If an approval is rejected, reject the original and delete pending approvals" +msgstr "" + +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "Ha a beküldõ ismeretlen, ezzel legyen az új probléma beküldõje" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "Ha nincs megadva sor, ebbe a sorba kerüljenek az új problémák" + +#: 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 "" + +#: 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 "" +"Ha valamit módosÃtott, ne felejtsen el ide kattintani, hogy megtörténjen a" + +#: lib/RT/Record.pm:933 +msgid "Illegal value for %1" +msgstr "Érvénytelen érték %1-nek" + +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Kép" + +#: lib/RT/Record.pm:936 +msgid "Immutable field" +msgstr "Nem változtatható mezõ" + +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Láthatóak legyenek a letiltott sorok is." + +#: html/Admin/Queues/index.html:65 +msgid "Include disabled queues in listing." +msgstr "Láthatóak legyenek a letiltott sorok is." + +#: html/Admin/Users/index.html:71 +msgid "Include disabled users in search." +msgstr "Keresés a letiltott felhasználók között is." + +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 +msgid "Initial Priority" +msgstr "Kezdõ prioritás" + +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 +msgid "InitialPriority" +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:134 +msgid "Input error" +msgstr "Input hiba" + +#: lib/RT/Ticket_Overlay.pm:3454 +msgid "Internal Error" +msgstr "Belsõ hiba" + +#: lib/RT/Record.pm:305 +#. ($id->{error_message}) +msgid "Internal Error: %1" +msgstr "Belsõ hiba: %1" + +#: lib/RT/Group_Overlay.pm:676 +msgid "Invalid Group Type" +msgstr "Érvénytelen csoportfajta" + +#: lib/RT/Principal_Overlay.pm:161 +msgid "Invalid Right" +msgstr "Érvénytelen jog" + +#: lib/RT/Record.pm:938 +msgid "Invalid data" +msgstr "Érvénytelen dátum" + +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 +msgid "Invalid queue" +msgstr "Érvénytelen sor" + +#: 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 "Érvénytelen jog" + +#: lib/RT/Record.pm:280 +#. ($key) +msgid "Invalid value for %1" +msgstr "Érvénytelen érték %1-nek" + +#: lib/RT/Record.pm:1597 +msgid "Invalid value for custom field" +msgstr "Érvénytelen érték az egyéni mezõhöz" + +#: lib/RT/Ticket_Overlay.pm:413 +msgid "Invalid value for status" +msgstr "Érvénytelen státuszérték" + +#: bin/rt-crontool:216 +msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." +msgstr "" + +#: 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 "" + +#: bin/rt-crontool:188 +msgid "It takes several arguments:" +msgstr "" + +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + +#: lib/RT/Date.pm:437 +msgid "Jan." +msgstr "jan." + +#: lib/RT/Group_Overlay.pm:174 +msgid "Join or leave this group" +msgstr "" + +#: lib/RT/Date.pm:443 +msgid "Jul." +msgstr "júl." + +#: html/Ticket/Elements/Tabs:122 +msgid "Jumbo" +msgstr "Minden módosÃtása" + +#: lib/RT/Date.pm:442 +msgid "Jun." +msgstr "jún." + +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "Nyelv" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "Nagy" + +#: html/Ticket/Elements/Tabs:96 +msgid "Last" +msgstr "Utolsó" + +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 +msgid "Last Contact" +msgstr "Utolsó kapcsolat" + +#: html/Elements/SelectDateType:50 +msgid "Last Contacted" +msgstr "Utoljára foglalkoztak vele" + +#: html/Elements/SelectDateType:51 +msgid "Last Updated" +msgstr "Utoljára aktualizálva" + +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "Utoljára aktualizálta" + +#: html/Ticket/Elements/ShowBasics:68 +msgid "Left" +msgstr "" + +#: html/Admin/Users/Modify.html:109 +msgid "Let this user access RT" +msgstr "Felhasználónak RT-hozzáférés engedélyezése" + +#: html/Admin/Users/Modify.html:113 +msgid "Let this user be granted rights" +msgstr "Felhasználónak több jog engedélyezése" + +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 +msgid "Link already exists" +msgstr "Kapcsolat már létezik" + +#: lib/RT/Record.pm:1306 +msgid "Link could not be created" +msgstr "Kapcsolat nem hozható létre" + +#: lib/RT/Record.pm:1312 +#. ($TransString) +msgid "Link created (%1)" +msgstr "Kapcsolat létrehozva (%1)" + +#: lib/RT/Record.pm:1373 +#. ($TransString) +msgid "Link deleted (%1)" +msgstr "Kapcsolat törölve (%1)" + +#: lib/RT/Record.pm:1379 +msgid "Link not found" +msgstr "Kapcsolat nem található" + +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 +#. ($Ticket->Id) +msgid "Link ticket #%1" +msgstr "%1. számú probléma kapcsolatainak módosÃtása" + +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 +msgid "Links" +msgstr "Kapcsolatok módosÃtása" + +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "Lekérdezés betöltése" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 +msgid "Location" +msgstr "CÃm" + +#: lib/RT.pm:212 +#. ($RT::LogDir) +msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." +msgstr "" +"Log-könyvtár %1 nem található, vagy nincs Ãrási joga.\\n Az RT tud elindulni." + +#: html/Elements/Header:94 +#. ("<b>".$session{'CurrentUser'}->Name."</b>") +msgid "Logged in as %1" +msgstr "%1-ként van bejelentkezve" + +#: 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 +msgid "Login" +msgstr "Bejelentkezés" + +#: html/Elements/Header:91 +msgid "Logout" +msgstr "Kijelentkezés" + +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 +msgid "Make Owner" +msgstr "Legyen a tulajdonos" + +#: html/Search/Bulk.html:128 +msgid "Make Status" +msgstr "Státusz változtatása" + +#: html/Search/Bulk.html:136 +msgid "Make date Due" +msgstr "Határidõ változtatása" + +#: html/Search/Bulk.html:138 +msgid "Make date Resolved" +msgstr "Megoldási dátum változtatása" + +#: html/Search/Bulk.html:132 +msgid "Make date Started" +msgstr "Hozzáfogás dátumának változtatása" + +#: html/Search/Bulk.html:130 +msgid "Make date Starts" +msgstr "Kiosztás dátumának változtatása" + +#: html/Search/Bulk.html:134 +msgid "Make date Told" +msgstr "Bejelentés dátumának változtatása" + +#: html/Search/Bulk.html:124 +msgid "Make priority" +msgstr "Prioritás állÃtása" + +#: html/Search/Bulk.html:126 +msgid "Make queue" +msgstr "Sor változtatása" + +#: html/Search/Bulk.html:122 +msgid "Make subject" +msgstr "Tárgy változtatása" + +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "" + +#: html/Admin/index.html:69 +msgid "Manage groups and group membership" +msgstr "Csoportok és tagjaik kezelése" + +#: html/Admin/index.html:85 +msgid "Manage properties and configuration which apply to all queues" +msgstr "Minden sorra vonatkozó tulajdonságok és beállÃtások kezelése" + +#: html/Admin/index.html:74 +msgid "Manage queues and queue-specific properties" +msgstr "Sorok és a sorokra jellemzõ beállÃtások kezelése" + +#: html/Admin/index.html:64 +msgid "Manage users and passwords" +msgstr "Felhasználók és jelszavaik kezelése" + +#: lib/RT/Date.pm:439 +msgid "Mar." +msgstr "már." + +#: lib/RT/Date.pm:441 +msgid "May." +msgstr "máj." + +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "Tag hozzáadva" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "Tag törölve" + +#: lib/RT/Group_Overlay.pm:1008 +msgid "Member added" +msgstr "Tag hozzáadva" + +#: lib/RT/Group_Overlay.pm:1170 +msgid "Member deleted" +msgstr "Tag törölve" + +#: lib/RT/Group_Overlay.pm:1174 +msgid "Member not deleted" +msgstr "Tag nincs törölve" + +#: html/Elements/SelectLinkType:47 +msgid "Member of" +msgstr "Tagja a" + +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 +msgid "Members" +msgstr "Tagok" + +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "%1 tag hozzáadva" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "%1-beli tagság törölve" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "Tagságok" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "%1 felhasználó tagságai" + +#: lib/RT/Ticket_Overlay.pm:2849 +msgid "Merge Successful" +msgstr "Beolvasztás sikeres" + +#: lib/RT/Ticket_Overlay.pm:2736 +msgid "Merge failed. Couldn't set EffectiveId" +msgstr "Beolvasztás sikertelen Konnte EffectiveId nicht setztn" + +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "Beolvasztás sikertelen Konnte EffectiveId nicht setztn" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 +msgid "Merge into" +msgstr "Beolvasztani ebbe" + +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Beolvasztva %1-be" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 +msgid "Message" +msgstr "Üzenet szövege" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "A sor nem hozható létre" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Üzenet rögzÃtve" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 +msgid "Missing a primary key?: %1" +msgstr "" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 +msgid "Mobile" +msgstr "Mobil" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "Modify Access Control List" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Változtassa meg a %1-re vonatkozó egyéni mezõket!" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Csoportjogok módosÃtása" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Tagok módosÃtása" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Jogok módosÃtása" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" +msgstr "" + +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Felhasználói jogok módosÃtása" + +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" +msgstr "Változtassa meg a(z) %1 sor egyéni mezõjét!" + +#: html/Admin/Queues/Scrip.html:75 +#. ($QueueObj->Name) +msgid "Modify a scrip for queue %1" +msgstr "" + +#: html/Admin/Global/Scrip.html:69 +msgid "Modify a scrip which applies to all queues" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "" + +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 +#. ($TicketObj->Id) +msgid "Modify dates for #%1" +msgstr "%1. számú probléma idõadatainak módosÃtása" + +#: html/Ticket/ModifyDates.html:56 +#. ($TicketObj->Id) +msgid "Modify dates for ticket # %1" +msgstr "%1. számú probléma idõadatainak módosÃtása" + +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Változtassa meg az általános csoportjogokat!" + +#: html/Admin/Global/GroupRights.html:54 +msgid "Modify global group rights." +msgstr "Változtassa meg az általános csoportjogokat!" + +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 +msgid "Modify global user rights" +msgstr "Változtassa meg az általános felhasználói jogokat!" + +#: html/Admin/Global/UserRights.html:54 +msgid "Modify global user rights." +msgstr "Változtassa meg az általános felhasználói jogokat!" + +#: lib/RT/Group_Overlay.pm:171 +msgid "Modify group metadata or delete group" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Változztassa meg a(z) %1 sor csoportjogait!" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 +#. ($GroupObj->Name) +msgid "Modify group rights for group %1" +msgstr "MódosÃtsa a(z) %1 csoport jogait" + +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 +#. ($QueueObj->Name) +msgid "Modify group rights for queue %1" +msgstr "Változtassa meg a %1 sor csoportjogait!" + +#: lib/RT/Group_Overlay.pm:173 +msgid "Modify membership roster for this group" +msgstr "" + +#: lib/RT/System.pm:83 +msgid "Modify one's own RT account" +msgstr "" + +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 +#. ($QueueObj->Name) +msgid "Modify people related to queue %1" +msgstr "Változtassa meg a %1 sorhoz tarozó részvevõket!" + +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 +#. ($Ticket->id) +#. ($Ticket->Id) +msgid "Modify people related to ticket #%1" +msgstr "A %1. számú problémában érintett személyek változtatása" + +#: html/Admin/Queues/Scrips.html:67 +#. ($QueueObj->Name) +msgid "Modify scrips for queue %1" +msgstr "Változtassa meg a(z) %1 sor Scripjeit" + +#: 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 "Változtassa meg a minden sorra vonatkozó scripeket!" + +#: 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) +msgid "Modify template %1" +msgstr "Hozzon létre egy sablont!" + +#: html/Admin/Global/Templates.html:65 +msgid "Modify templates which apply to all queues" +msgstr "Változtassa meg az általános sablonokat!" + +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 +#. ($Group->Name) +msgid "Modify the group %1" +msgstr "A %1 csoport módosÃtása" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "Modify the queue watchers" +msgstr "" + +#: html/Admin/Users/Modify.html:301 +#. ($UserObj->Name) +msgid "Modify the user %1" +msgstr "%1 felhasználó módosÃtása" + +#: html/Ticket/ModifyAll.html:58 +#. ($Ticket->Id) +msgid "Modify ticket # %1" +msgstr "%1. számú probléma adatainak módosÃtása" + +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 +#. ($TicketObj->Id) +msgid "Modify ticket #%1" +msgstr "%1. számú probléma alapadatainak módosÃtása" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "Modify tickets" +msgstr "" + +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 +#. ($GroupObj->Name) +msgid "Modify user rights for group %1" +msgstr "Változtassa meg a(z) %1 csoport jogait!" + +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 +#. ($QueueObj->Name) +msgid "Modify user rights for queue %1" +msgstr "Változtassa meg a(z) %1 sor felhasználói jogait!" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "ModifyACL" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 +msgid "ModifyOwnMembership" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "ModifyQueueWatchers" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "ModifyScrips" +msgstr "" + +#: lib/RT/System.pm:83 +msgid "ModifySelf" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "ModifyTemplate" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "ModifyTicket" +msgstr "" + +#: lib/RT/Date.pm:413 +msgid "Mon." +msgstr "H" + +#: html/Ticket/Elements/ShowRequestor:62 +#. ($name) +msgid "More about %1" +msgstr "További részletek %1 felhasználóról" + +#: html/Admin/Elements/PickCustomFields:83 +msgid "Move down" +msgstr "Lefelé mozgatni" + +#: html/Admin/Elements/PickCustomFields:75 +msgid "Move up" +msgstr "Felfelé mozgatni" + +#: html/Admin/Elements/SelectSingleOrMultiple:48 +msgid "Multiple" +msgstr "" + +#: lib/RT/User_Overlay.pm:227 +msgid "Must specify 'Name' attribute" +msgstr "" + +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "%1 problémáim" + +#: html/Approvals/index.html:46 html/Approvals/index.html:47 +msgid "My approvals" +msgstr "Lezárás" + +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Saját lekérdezések" + +#: 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 +msgid "Name" +msgstr "Név" + +#: lib/RT/User_Overlay.pm:234 +msgid "Name in use" +msgstr "A felhasználói név már foglalt" + +#: html/Ticket/Elements/ShowDates:73 +msgid "Never" +msgstr "Soha" + +#: html/Elements/Quicksearch:51 +msgid "New" +msgstr "Új" + +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Új kapcsolatok" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 +msgid "New Password" +msgstr "Új jelszó" + +#: etc/initialdata:332 +msgid "New Pending Approval" +msgstr "" + +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Új lekérdezés" + +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 +msgid "New custom field" +msgstr "Új egyéni mezõ" + +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 +msgid "New group" +msgstr "Új csoport" + +#: html/SelfService/Prefs.html:53 +msgid "New password" +msgstr "Új jelszó" + +#: lib/RT/User_Overlay.pm:817 +msgid "New password notification sent" +msgstr "" + +#: html/Admin/Elements/QueueTabs:95 +msgid "New queue" +msgstr "Új sor" + +#: html/Admin/Elements/SelectRights:65 +msgid "New rights" +msgstr "Új jogok" + +#: 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 "Új 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 +msgid "New template" +msgstr "Új sablon" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Új probléma" + +#: lib/RT/Ticket_Overlay.pm:2713 +msgid "New ticket doesn't exist" +msgstr "Az új probléma nem létezik" + +#: html/Admin/Elements/UserTabs:78 +msgid "New user" +msgstr "Új felhasználó" + +#: html/Admin/Elements/CreateUserCalled:47 +msgid "New user called" +msgstr "" + +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 +msgid "New watchers" +msgstr "Új résztvevõk" + +#: html/Ticket/Elements/Tabs:92 +msgid "Next" +msgstr "Következõ" + +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "Következõ oldal" + +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 +msgid "Nickname" +msgstr "Becenév" + +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 +msgid "No CustomField" +msgstr "Nincs egyéni mezõ" + +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Nincs egyéni mezõ meghatározva" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 +msgid "No Group defined" +msgstr "Nincs csoport meghatározva" + +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 +msgid "No Queue defined" +msgstr "Nincs sor meghatározva" + +#: bin/rt-crontool:73 +msgid "No RT user found. Please consult your RT administrator.\\n" +msgstr "" +"RT-felhasználó nem található. Vegyew fel a kapcsolatot az RT-" +"adminisztrátorral.\\n" + +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 +msgid "No Template" +msgstr "Nincs sablon" + +#: html/Approvals/Elements/Approve:67 +msgid "No action" +msgstr "" + +#: lib/RT/Record.pm:935 +msgid "No column specified" +msgstr "Nincs <b>sor</b> megadva!" + +#: html/Ticket/Elements/ShowRequestor:68 +msgid "No comment entered about this user" +msgstr "Nincs kiegészÃtés tárolva" + +#: 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) +msgid "No description for %1" +msgstr "Nincs leÃrás a(z) %1-hez" + +#: lib/RT/Users_Overlay.pm:185 +msgid "No group specified" +msgstr "Nincs <b>csoport</b> megadva!" + +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Nincs a keresési feltételeknek megfeleõ csoport." + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 +msgid "No password set" +msgstr "Nincs jelszó megadva" + +#: lib/RT/Queue_Overlay.pm:358 +msgid "No permission to create queues" +msgstr "Nincs joga sort létrehozni" + +#: lib/RT/Ticket_Overlay.pm:409 +#. ($QueueObj->Name) +msgid "No permission to create tickets in the queue '%1'" +msgstr "Nincs joga a(z) '%1' sorban problémát létrehozni" + +#: lib/RT/User_Overlay.pm:187 +msgid "No permission to create users" +msgstr "Nincs joga felhasználót létrehozni" + +#: html/SelfService/Display.html:165 +msgid "No permission to display that ticket" +msgstr "" + +#: html/SelfService/Update.html:117 +msgid "No permission to view update ticket" +msgstr "Nincs joga ezt a problémát aktualizálni" + +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 +msgid "No principal specified" +msgstr "Nincs <b>felelõs</b> megadva!" + +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 +msgid "No principals selected." +msgstr "Nincs vezetõ kiválasztva." + +#: html/Admin/Queues/index.html:57 +msgid "No queues matching search criteria found." +msgstr "Nem található a keresési fletételeknek megfelelõ sor" + +#: html/Admin/Elements/SelectRights:106 +msgid "No rights found" +msgstr "Nem találhatók jogok" + +#: html/Admin/Elements/SelectRights:53 +msgid "No rights granted." +msgstr "Nincsenek jogok engedélyezve." + +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 +msgid "No search to operate on." +msgstr "Nincs feldolgozható keresési lista." + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "(nincs tárgy)" + +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 +msgid "No transaction type specified" +msgstr "Nincs <b>értesÃtési tÃpus</b> megadva!" + +#: html/Admin/Users/index.html:55 +msgid "No users matching search criteria found." +msgstr "Nincs a keresési feltételeknek megfeleõ felhasználó." + +#: lib/RT/Record.pm:932 +msgid "No value sent to _Set!\\n" +msgstr "" + +#: html/Elements/QuickCreate:61 +msgid "Nobody" +msgstr "Senki" + +#: lib/RT/Record.pm:937 +msgid "Nonexistant field?" +msgstr "Nem létezõ mezõ?" + +#: html/Elements/Header:96 +msgid "Not logged in." +msgstr "Nincs bejelentkezve." + +#: lib/RT/Date.pm:393 +msgid "Not set" +msgstr "Nincs megadva" + +#: html/NoAuth/Reminder.html:48 +msgid "Not yet implemented." +msgstr "" + +#: html/Approvals/Elements/Approve:70 +msgid "Notes" +msgstr "Megjegyzések" + +#: lib/RT/User_Overlay.pm:820 +msgid "Notification could not be sent" +msgstr "ÉrtesÃtést nem sikerült elküldeni." + +#: etc/initialdata:101 +msgid "Notify AdminCcs" +msgstr "AdminCCs értesÃtése" + +#: etc/initialdata:97 +msgid "Notify AdminCcs as Comment" +msgstr "AdminCCs értesÃtése kiegészÃtésként" + +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 +msgid "Notify Other Recipients" +msgstr "Más cÃmzettek értesÃtése" + +#: etc/initialdata:124 +msgid "Notify Other Recipients as Comment" +msgstr "Más cÃmzettek értesÃtése kiegészÃtésként" + +#: etc/initialdata:85 +msgid "Notify Owner" +msgstr "A tulajdonos értesÃtése" + +#: etc/initialdata:81 +msgid "Notify Owner as Comment" +msgstr "A tulajdonos értesÃtése kiegészÃtésként" + +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 +msgid "Notify Owners and AdminCcs of new items pending their approval" +msgstr "" + +#: etc/initialdata:77 +msgid "Notify Requestors" +msgstr "Beküldõ értesÃtése" + +#: etc/initialdata:111 +msgid "Notify Requestors and Ccs" +msgstr "A beküldõ és a tájékoztatást kapó értesÃtése" + +#: etc/initialdata:106 +msgid "Notify Requestors and Ccs as Comment" +msgstr "A beküldõ és a tájékoztatást kapó értesÃtése kiegészÃtésként" + +#: etc/initialdata:120 +msgid "Notify Requestors, Ccs and AdminCcs" +msgstr "Minden résztvevõ tájékozatatása" + +#: etc/initialdata:116 +msgid "Notify Requestors, Ccs and AdminCcs as Comment" +msgstr "Minden résztvevõ értesÃtése kiegészÃtésként" + +#: lib/RT/Date.pm:447 +msgid "Nov." +msgstr "nov." + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "VAGY" + +#: lib/RT/Record.pm:319 +msgid "Object could not be created" +msgstr "Objekum nem hozható létre" + +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "Az objekumot nem sikerült törölni" + +#: lib/RT/Record.pm:338 +msgid "Object created" +msgstr "Objektum létehozva" + +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "Objektum törölve" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 +msgid "Oct." +msgstr "okt." + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "" + +#: html/Elements/SelectDateRelation:56 +msgid "On" +msgstr "e napon" + +#: etc/initialdata:163 +msgid "On Comment" +msgstr "KiegészÃtéskor" + +#: etc/initialdata:156 +msgid "On Correspond" +msgstr "Válaszoláskor" + +#: etc/initialdata:145 +msgid "On Create" +msgstr "Létrehozáskor" + +#: etc/initialdata:184 +msgid "On Owner Change" +msgstr "Tulajdonos változásakor" + +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "Prioritás változásakor" + +#: etc/initialdata:192 +msgid "On Queue Change" +msgstr "Sor megváltozásakor" + +#: etc/initialdata:198 +msgid "On Resolve" +msgstr "Megoldáskor" + +#: etc/initialdata:169 +msgid "On Status Change" +msgstr "Státusz megváltozásakor" + +#: etc/initialdata:150 +msgid "On Transaction" +msgstr "Tranzakciónál" + +#: html/Approvals/Elements/PendingMyApproval:71 +#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") +msgid "Only show approvals for requests created after %1" +msgstr "Csak a(z) %1 után létrejött poblémák engedélyezései legyenek láthatóak" + +#: html/Approvals/Elements/PendingMyApproval:69 +#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") +msgid "Only show approvals for requests created before %1" +msgstr "" +"Csak a(z) %1 elõtt létrejött problémák engedélyezései legyenek láthatóak" + +#: html/Elements/Quicksearch:52 +msgid "Open" +msgstr "Nyitott" + +#: html/Ticket/Elements/Tabs:159 +msgid "Open it" +msgstr "Megnyit" + +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "Nyitott problémák" + +#: etc/initialdata:140 +msgid "Open tickets on correspondence" +msgstr "" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Rendezés" + +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 +msgid "Organization" +msgstr "Cég, szervezet" + +#: html/Approvals/Elements/Approve:54 +#. ($approving->Id, $approving->Subject) +msgid "Originating ticket: #%1" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "" + +#: html/Admin/Queues/Modify.html:90 +msgid "Over time, priority moves toward" +msgstr "Prioritás idõvel emelkedik" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "Own tickets" +msgstr "Saját problémák" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "OwnTicket" +msgstr "" + +#: 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 +msgid "Owner" +msgstr "Tulajdonos" + +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:661 +#. ($Old->Name , $New->Name) +msgid "Owner forcibly changed from %1 to %2" +msgstr "Erõszakos tulajdonosváltás: %1 --> %2" + +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "%1/%2 oldal" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 +msgid "Pager" +msgstr "" + +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 +msgid "Parents" +msgstr "Felmenõk" + +#: html/Elements/Login:74 html/User/Prefs.html:105 +msgid "Password" +msgstr "Jelszó" + +#: html/NoAuth/Reminder.html:46 +msgid "Password Reminder" +msgstr "Jelszó-emlékeztetõ" + +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "Jelszó megváltoztatva" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Password too short" +msgstr "A jelszó túl rövid!" + +#: html/User/Prefs.html:232 +#. (loc_fuzzy($msg)) +msgid "Password: %1" +msgstr "Jelszó: %1" + +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "A jelszavak nem egyeznek." + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 +msgid "People" +msgstr "Résztvevõk" + +#: etc/initialdata:133 +msgid "Perform a user-defined action" +msgstr "" + +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Perl konfiguráció" + +#: 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 +msgid "Permission Denied" +msgstr "Hozzáférés visszautasÃtva" + +#: html/User/Elements/Tabs:56 +msgid "Personal Groups" +msgstr "Saját Csoportok" + +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 +msgid "Personal groups" +msgstr "Saját csoportok" + +#: html/User/Elements/DelegateRights:58 +msgid "Personal groups:" +msgstr "Saját csoportok:" + +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 +msgid "Phone numbers" +msgstr "Telefonszámok" + +#: 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 +msgid "Preferences" +msgstr "BeállÃtásaim" + +#: lib/RT/Action/Generic.pm:196 +msgid "Prepare Stubbed" +msgstr "" + +#: html/Ticket/Elements/Tabs:84 +msgid "Prev" +msgstr "Elõzõ" + +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "Elõzõ oldal" + +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 +#. ($args{'PrincipalId'}) +msgid "Principal %1 not found." +msgstr "%1 vezetõ nem található." + +#: 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 +msgid "Priority" +msgstr "Prioritás" + +#: html/Admin/Queues/Modify.html:86 +msgid "Priority starts at" +msgstr "Prioritás kezdõ értéke" + +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "" + +#: etc/initialdata:25 +msgid "Privileged" +msgstr "Kiemelt" + +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 +#. (loc_fuzzy($msg)) +msgid "Privileged status: %1" +msgstr "" + +#: html/Admin/Users/index.html:102 +msgid "Privileged users" +msgstr "Kiemelt felhasználók:" + +#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 +msgid "Pseudogroup for internal use" +msgstr "" + +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Lekérdezés" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "Lekérdezésszerkesztõ" + +#: 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 +msgid "Queue" +msgstr "Sor" + +#: 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) +msgid "Queue %1 not found" +msgstr "%2 sor nem található" + +#: html/Admin/Queues/Modify.html:64 +msgid "Queue Name" +msgstr "A sor neve" + +#: lib/RT/Queue_Overlay.pm:362 +msgid "Queue already exists" +msgstr "Sor már létezik" + +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 +msgid "Queue could not be created" +msgstr "A sor nem hozható létre" + +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 +msgid "Queue could not be loaded." +msgstr "a sor nem tölthetõ be." + +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 +msgid "Queue created" +msgstr "A sor létrehozva" + +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 +msgid "Queue not found" +msgstr "A sor nem található" + +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 +msgid "Queues" +msgstr "Sorok" + +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "Gyors lekérdezés" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Probléma felvétele (gyors)" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 +#. ($RT::VERSION) +msgid "RT %1" +msgstr "RT %1" + +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 +#. ($RT::VERSION, $RT::rtname) +msgid "RT %1 for %2" +msgstr "RT %1 %2-nek" + +#: html/Admin/index.html:46 html/Admin/index.html:47 +msgid "RT Administration" +msgstr "Konfiguráció" + +#: html/Elements/Error:65 html/SelfService/Error.html:62 +msgid "RT Error" +msgstr "RT Hiba" + +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "" + +#: html/index.html:72 html/index.html:75 +msgid "RT at a glance" +msgstr "Ãttekintés" + +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + +#: html/Elements/PageLayout:108 +#. ($RT::rtname) +msgid "RT for %1" +msgstr " %1 -- Request Tracker " + +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 +msgid "Real Name" +msgstr "Valódi név" + +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "%1 hivatkozás törölve" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 +msgid "Referred to by" +msgstr "A következõk kapcsolódnak hozzá" + +#: 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 +msgid "Refers to" +msgstr "A következõkhöz kapcsolódik" + +#: html/Elements/Refresh:57 +#. ($value/60) +msgid "Refresh this page every %1 minutes." +msgstr "%1 percenként frissÃtse ezt az oldalt." + +#: html/Search/Bulk.html:116 +msgid "Remove AdminCc" +msgstr "AdminisztratÃv tájékoztatást kapó eltávolÃtása" + +#: html/Search/Bulk.html:112 +msgid "Remove Cc" +msgstr "Tájékoztatást kapó eltávolÃtása" + +#: html/Search/Bulk.html:108 +msgid "Remove Requestor" +msgstr "Beküldõ eltávolÃtása" + +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 +msgid "Reply" +msgstr "Válaszol" + +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "VálaszcÃm" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Válasz a beküldõknek" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "Reply to tickets" +msgstr "Válasz a problémákra" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "ReplyToTicket" +msgstr "" + +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 +msgid "Requestor" +msgstr "Beküldõ" + +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 +msgid "Requestors" +msgstr "Beküldõ" + +#: html/Admin/Queues/Modify.html:96 +msgid "Requests should be due in" +msgstr "A problémát meg kell oldani" + +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "" + +#: html/Elements/Submit:104 +msgid "Reset" +msgstr "VisszaállÃt" + +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 +msgid "Residence" +msgstr "Otthoni" + +#: html/Ticket/Elements/Tabs:155 +msgid "Resolve" +msgstr "Megold" + +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Resolve ticket #%1 (%2)" +msgstr "%1. (%2) probléma lezárása" + +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 +msgid "Resolved" +msgstr "Megoldva" + +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 +msgid "Results" +msgstr "Változtatások eredménye" + +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 +msgid "Retype Password" +msgstr "Jelszó megismételve" + +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "" + +#: lib/RT/ACE_Overlay.pm:631 +msgid "Right Delegated" +msgstr "" + +#: lib/RT/ACE_Overlay.pm:321 +msgid "Right Granted" +msgstr "A jog megosztva" + +#: lib/RT/ACE_Overlay.pm:179 +msgid "Right Loaded" +msgstr "A jog betöltve" + +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 +msgid "Right could not be revoked" +msgstr "A jog nem vonnható vissza" + +#: html/User/Delegation.html:85 +msgid "Right not found" +msgstr "A jog nem található" + +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 +msgid "Right not loaded." +msgstr "A jog nem található." + +#: lib/RT/ACE_Overlay.pm:713 +msgid "Right revoked" +msgstr "Jog visszavonva" + +#: html/Admin/Elements/UserTabs:67 +msgid "Rights" +msgstr "Jogok" + +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 +#. ($object_type) +msgid "Rights could not be granted for %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 +#. ($object_type) +msgid "Rights could not be revoked for %1" +msgstr " %1 jogai nem vonhatók vissza" + +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 +msgid "Roles" +msgstr "Szerepek" + +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Sorok száma oldalanként" + +#: lib/RT/Date.pm:418 +msgid "Sat." +msgstr "Szo" + +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Mentés" + +#: 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 +msgid "Save Changes" +msgstr "Változtatások mentése" + +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "BeállÃtások mentése" + +#: html/Ticket/Elements/PreviewScrips:124 +msgid "Save changes" +msgstr "Változtatások mentése" + +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Elmentett lekérdezés" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) +#. ($ARGS{'id'}) +msgid "Scrip #%1" +msgstr "" + +#: lib/RT/Scrip_Overlay.pm:205 +msgid "Scrip Created" +msgstr "Scrip létrehozva" + +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Scrip mezök" + +#: html/Admin/Elements/EditScrips:107 +msgid "Scrip deleted" +msgstr "Scrip törölve" + +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 +msgid "Scrips" +msgstr "Scrips" + +#: html/Admin/Queues/Scrips.html:55 +msgid "Scrips which apply to all queues" +msgstr "Minden sorhoz érvényes Scripek" + +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 +msgid "Search" +msgstr "Keresés" + +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 +msgid "Search for approvals" +msgstr "Engedélyezések keresése" + +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 +msgid "Security:" +msgstr "Biztonság:" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "Eyéni mezõk" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "SeeQueue" +msgstr "" + +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "Válasszon egy egyéni mezõt!" + +#: html/Admin/Groups/index.html:78 +msgid "Select a group" +msgstr "Válasszon csoportot!" + +#: html/Admin/Queues/index.html:54 +msgid "Select a queue" +msgstr "" + +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 +msgid "Select a user" +msgstr "Válasszon felhasználót!" + +#: html/Admin/Elements/CustomFieldTabs:90 +msgid "Select custom field" +msgstr "Válasszon egy egyéni mezõt!" + +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "Válasszon egy egyéni mezõt!" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 +msgid "Select group" +msgstr "Válasszon csoportot!" + +#: lib/RT/CustomField_Overlay.pm:59 +msgid "Select multiple values" +msgstr "Válasszon több értéket!" + +#: lib/RT/CustomField_Overlay.pm:60 +msgid "Select one value" +msgstr "Válasszon értéket!" + +#: html/Admin/Elements/QueueTabs:92 +msgid "Select queue" +msgstr "Válasszon sort!" + +#: 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 "Válasszon Scripet!" + +#: 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 "Válasszon sablont!" + +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Válasszon (legfeljebb %1) értéket!" + +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" +msgstr "Válasszon felhasználót" + +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Kiválasztott egy egyéni mezõk" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Kiválasztott problémák" + +#: etc/initialdata:121 +msgid "Send mail to all watchers" +msgstr "" + +#: etc/initialdata:117 +msgid "Send mail to all watchers as a \"comment\"" +msgstr "" + +#: etc/initialdata:112 +msgid "Send mail to requestors and Ccs" +msgstr "" + +#: etc/initialdata:107 +msgid "Send mail to requestors and Ccs as a comment" +msgstr "" + +#: etc/initialdata:78 +msgid "Sends a message to the requestors" +msgstr "" + +#: etc/initialdata:125 etc/initialdata:129 +msgid "Sends mail to explicitly listed Ccs and Bccs" +msgstr "" + +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 +msgid "Sends mail to the administrative Ccs" +msgstr "" + +#: etc/initialdata:98 +msgid "Sends mail to the administrative Ccs as a comment" +msgstr "" + +#: etc/initialdata:82 etc/initialdata:86 +msgid "Sends mail to the owner" +msgstr "" + +#: lib/RT/Date.pm:445 +msgid "Sep." +msgstr "szep." + +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Lezárások" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Látható mezõk" + +#: html/Ticket/Elements/Tabs:201 +msgid "Show Results" +msgstr "Lekérdezés eredménye" + +#: html/Approvals/Elements/PendingMyApproval:65 +msgid "Show approved requests" +msgstr "Láthatóak legyenek a felszabadÃtott problémák" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show basics" +msgstr "ProblémaleÃrás" + +#: html/Approvals/Elements/PendingMyApproval:66 +msgid "Show denied requests" +msgstr "láthatóak legyenek az elutasÃtott problémák" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show details" +msgstr "Attribútumok" + +#: html/Approvals/Elements/PendingMyApproval:64 +msgid "Show pending requests" +msgstr "Láthatóak legyenek a folyamatban levõ problémák" + +#: html/Approvals/Elements/PendingMyApproval:67 +msgid "Show requests awaiting other approvals" +msgstr "Láthatóak legyenek a mások engedélyezésére váró problémák" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" +msgstr "" + +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "ShowScrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "ShowTemplate" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "ShowTicket" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "ShowTicketComments" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Sign up as a ticket Requestor or ticket or queue Cc" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "Sign up as a ticket or queue AdminCc" +msgstr "" + +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 +msgid "Signature" +msgstr "AláÃrás (e-mail-hez)" + +#: html/Admin/Elements/SelectSingleOrMultiple:47 +msgid "Single" +msgstr "" + +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 +msgid "Skip Menu" +msgstr "" + +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "Kicsi" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "Rendezés" + +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "" + +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 +msgid "Started" +msgstr "Elkezdve" + +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 +msgid "Starts" +msgstr "Kiosztva" + +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 +msgid "State" +msgstr "Ãllam" + +#: 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 +msgid "Status" +msgstr "Státusz" + +#: etc/initialdata:309 +msgid "Status Change" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Status changed from %1 to %2" +msgstr "Státusz változtatása: '%1' --> '%2'" + +#: html/Ticket/Elements/Tabs:170 +msgid "Steal" +msgstr "Elcsen" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Problémák elcsenése" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:667 +#. ($Old->Name) +msgid "Stolen from %1" +msgstr "Probléma elcsenése %1 tulajdonostól" + +#: NOT FOUND IN SOURCE +msgid "Stolen from %1 " +msgstr "Probléma elcsenése %1 tulajdonostól " + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 +msgid "Subject" +msgstr "Tárgy" + +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 +#. ($self->Data) +msgid "Subject changed to %1" +msgstr "" + +#: html/Elements/Submit:97 +msgid "Submit" +msgstr "Mentés" + +#: lib/RT/Group_Overlay.pm:782 +msgid "Succeeded" +msgstr "Sikerült" + +#: lib/RT/Date.pm:419 +msgid "Sun." +msgstr "V" + +#: lib/RT/System.pm:76 +msgid "SuperUser" +msgstr "" + +#: html/User/Elements/DelegateRights:98 +msgid "System" +msgstr "Rendszer" + +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "Rendszerkonfiguráció" + +#: 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 "Rendszerhiba" + +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "Rendszerkonfiguráció" + +#: lib/RT/ACE_Overlay.pm:634 +msgid "System error. Right not delegated." +msgstr "Rendszerhiba. Jog nem delegálható ." + +#: 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 "Rendszerhiba. Jog nem adható." + +#: 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 "Rendszercsoportok" + +#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 +msgid "SystemRolegroup for internal use" +msgstr "" + +#: lib/RT/CurrentUser.pm:358 +msgid "TEST_STRING" +msgstr "" + +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 +msgid "Take" +msgstr "Atvesz" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "Problémák átvétele" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:652 +msgid "Taken" +msgstr "Ãtvéve" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 +msgid "Template" +msgstr "Sablon" + +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 +#. ($TemplateObj->Id()) +msgid "Template #%1" +msgstr "Sablon #%1" + +#: html/Admin/Elements/EditTemplates:110 +msgid "Template deleted" +msgstr "Sablon törölve" + +#: lib/RT/Scrip_Overlay.pm:181 +msgid "Template not found" +msgstr "Sablon nem található" + +#: lib/RT/Template_Overlay.pm:376 +msgid "Template parsed" +msgstr "Sablon beolvasva" + +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 +msgid "Templates" +msgstr "Sablonok" + +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "Szöveg" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 +msgid "That is already the current value" +msgstr "Már ez az aktuális érték" + +#: lib/RT/CustomField_Overlay.pm:407 +msgid "That is not a value for this custom field" +msgstr "Egyéni mezõhöz érvénytelen értek" + +#: lib/RT/Ticket_Overlay.pm:1955 +msgid "That is the same value" +msgstr "Ez ugyanaz az érték" + +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "A felhasználónak/csoportnak mát van ilyen joga" + +#: lib/RT/Queue_Overlay.pm:750 +#. ($args{'Type'}) +msgid "That principal is already a %1 for this queue" +msgstr "A vezetõ már %1-a a sornak" + +#: lib/RT/Ticket_Overlay.pm:1396 +#. ($self->loc($args{'Type'})) +msgid "That principal is already a %1 for this ticket" +msgstr "A vezetõ már %1-a a problémának" + +#: lib/RT/Queue_Overlay.pm:849 +#. ($args{'Type'}) +msgid "That principal is not a %1 for this queue" +msgstr "A vezetõ már nem %1-a a sornak" + +#: lib/RT/Ticket_Overlay.pm:1951 +msgid "That queue does not exist" +msgstr "Ez a sor nem létezik" + +#: lib/RT/Ticket_Overlay.pm:3189 +msgid "That ticket has unresolved dependencies" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2993 +msgid "That user already owns that ticket" +msgstr "Már ez a felhasználó a tulajdonos!" + +#: lib/RT/Ticket_Overlay.pm:2965 +msgid "That user does not exist" +msgstr "Ilyen felhasználó nem létezik" + +#: lib/RT/User_Overlay.pm:390 +msgid "That user is already privileged" +msgstr "A felhasználó már kiemelt" + +#: lib/RT/User_Overlay.pm:411 +msgid "That user is already unprivileged" +msgstr "A felhasználó már nem kiemelt" + +#: lib/RT/User_Overlay.pm:403 +msgid "That user is now privileged" +msgstr "A felhasználó mostantól kiemelt" + +#: lib/RT/User_Overlay.pm:424 +msgid "That user is now unprivileged" +msgstr "A felhasználó mostantól nem kiemelt" + +#: lib/RT/Ticket_Overlay.pm:2986 +msgid "That user may not own tickets in that queue" +msgstr "a felhasználóhoz nem tartozhatnak problémák ebbõl a sorból" + +#: lib/RT/Link_Overlay.pm:234 +msgid "That's not a numerical id" +msgstr "" + +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 +msgid "The Basics" +msgstr "Alapadatok" + +#: lib/RT/ACE_Overlay.pm:113 +msgid "The CC of a ticket" +msgstr "" + +#: lib/RT/ACE_Overlay.pm:114 +msgid "The administrative CC of a ticket" +msgstr "" + +#: 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 "" + +#: lib/RT/Record.pm:934 +msgid "The new value has been set." +msgstr "" + +#: lib/RT/ACE_Overlay.pm:111 +msgid "The owner of a ticket" +msgstr "" + +#: lib/RT/ACE_Overlay.pm:112 +msgid "The requestor of a ticket" +msgstr "" + +#: html/Admin/Elements/EditUserComments:47 +msgid "These comments aren't generally visible to the user" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "" + +#: bin/rt-crontool:214 +msgid "This tool allows the user to run arbitrary perl modules from within RT." +msgstr "" + +#: 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) +msgid "This user's %1 highest priority tickets" +msgstr "A felhasználó által felvetett %1 legsürgõsebb probléma" + +#: lib/RT/Date.pm:416 +msgid "Thu." +msgstr "Cs" + +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket #%1 Jumbo update: %2" +msgstr "%1. számú (%2) probléma jellemzõinek módosÃtása" + +#: html/Approvals/Elements/ShowDependency:67 +#. ($link->BaseObj->Id, $link->BaseObj->Subject) +msgid "Ticket #%1: %2" +msgstr "Probléma. %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) +msgid "Ticket %1" +msgstr "%1. probléma" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 +#. ($self->Id, $QueueObj->Name) +msgid "Ticket %1 created in queue '%2'" +msgstr "" + +#: html/Search/Bulk.html:269 +#. ($Ticket->Id,$_) +msgid "Ticket %1: %2" +msgstr "Probléma %1: %2" + +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Probléma egyéni mezõi" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket History # %1 %2" +msgstr "" + +#: etc/initialdata:324 +msgid "Ticket Resolved" +msgstr "Pobléma megoldva" + +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Probléma tranzakciói" + +#: lib/RT/Tickets_Overlay.pm:1648 +msgid "Ticket content" +msgstr "A probléma tartalma" + +#: lib/RT/Tickets_Overlay.pm:1697 +msgid "Ticket content type" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 +msgid "Ticket could not be created due to an internal error" +msgstr "" + +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Probléma metadata" + +#: etc/initialdata:310 +msgid "Ticket status changed" +msgstr "" + +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "Problémák" + +#: html/Approvals/Elements/ShowDependency:48 +msgid "Tickets which depend on this approval:" +msgstr "" + +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 +msgid "Time Left" +msgstr "Maradék idõ" + +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 +msgid "Time Worked" +msgstr "RáfordÃtott munkaidõ" + +#: lib/RT/Tickets_Overlay.pm:1619 +msgid "Time left" +msgstr "Maradék idõ" + +#: html/Elements/Footer:71 +msgid "Time to display" +msgstr "" + +#: lib/RT/Tickets_Overlay.pm:1594 +msgid "Time worked" +msgstr "Munkaidõ" + +#: lib/RT/Ticket_Overlay.pm:1143 +msgid "TimeWorked" +msgstr "RáfordÃtott munkaidõ" + +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1146 +msgid "Told" +msgstr "Beérkezett" + +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Eszközök" + +#: etc/initialdata:252 +msgid "Transaction" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:794 +#. ($self->Data) +msgid "Transaction %1 purged" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:174 +msgid "Transaction Created" +msgstr "" + +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Tranzakció egyéni mezõi" + +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:838 +msgid "Transactions are immutable" +msgstr "" + +#: lib/RT/Date.pm:414 +msgid "Tue." +msgstr "K" + +#: 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 +msgid "Type" +msgstr "TÃpus" + +#: lib/RT/ScripCondition_Overlay.pm:129 +msgid "Unimplemented" +msgstr "" + +#: html/Admin/Users/Modify.html:89 +msgid "Unix login" +msgstr "" + +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 +#. ($self->ContentEncoding) +#. ($ContentEncoding) +msgid "Unknown ContentEncoding %1" +msgstr "" + +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 +msgid "Unlimited" +msgstr "korlátlan" + +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Névtelen lekérdezés" + +#: etc/initialdata:32 +msgid "Unprivileged" +msgstr "Nem kiemelt" + +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "InaktÃv egyéni mezõk" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "InaktÃv objektumok" + +#: lib/RT/Transaction_Overlay.pm:648 +msgid "Untaken" +msgstr "Probléma visszaadása" + +#: html/Search/Bulk.html:54 +msgid "Update" +msgstr "FrissÃt" + +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Mindet frissÃti" + +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Probléma frissÃtése" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 +msgid "Update Type" +msgstr "FrissÃtés tÃpusa" + +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "A kiválasztott problémák frissÃtése" + +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 +msgid "Update not recorded." +msgstr "" + +#: html/Search/Bulk.html:99 +msgid "Update selected tickets" +msgstr "A kiválasztott problémák frissÃtése" + +#: html/Ticket/ModifyAll.html:84 +msgid "Update ticket" +msgstr "" + +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 +#. ($Ticket->id) +msgid "Update ticket #%1" +msgstr "" + +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Update ticket #%1 (%2)" +msgstr "%1. számú (%2) probléma aktualizálása" + +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 +msgid "Update type was neither correspondence nor comment." +msgstr "" + +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 +msgid "Updated" +msgstr "FrissÃtve" + +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Feltöltés" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Több fájl feltöltése egyszerre" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Több kép feltöltése egyszerre" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Egy fájl feltöltése" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Egy kép feltöltése" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "MódosÃtások feltöltése" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "'%1' felhasználó nem található" + +#: etc/initialdata:132 etc/initialdata:206 +msgid "User Defined" +msgstr "Felhasználó által meghatározott" + +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: 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 "Felhasználói jogok" + +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 +#. ($msg) +msgid "User could not be created: %1" +msgstr "" + +#: lib/RT/User_Overlay.pm:331 +msgid "User created" +msgstr "Felhasználó létrehozva" + +#: 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 "Felhasználó által definiált csoport" + +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Felhasználó betöltve" + +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Felhasználó által definiált csoportok" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 +msgid "Username" +msgstr "Felhasználó" + +#: 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 +msgid "Users" +msgstr "Felhasználók" + +#: html/Admin/Users/index.html:85 +msgid "Users matching search criteria" +msgstr "" + +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 +msgid "Values" +msgstr "Értékek" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Watch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "WatchAsAdminCc" +msgstr "" + +#: html/Admin/Elements/QueueTabs:63 +msgid "Watchers" +msgstr "Résztvevõk" + +#: lib/RT/Date.pm:415 +msgid "Wed." +msgstr "Sze" + +#: etc/initialdata:521 +msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" +msgstr "" + +#: etc/initialdata:485 +msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" +msgstr "" + +#: etc/initialdata:146 +msgid "When a ticket is created" +msgstr "" + +#: etc/initialdata:418 +msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" +msgstr "" + +#: etc/initialdata:151 +msgid "When anything happens" +msgstr "" + +#: etc/initialdata:199 +msgid "Whenever a ticket is resolved" +msgstr "" + +#: etc/initialdata:185 +msgid "Whenever a ticket's owner changes" +msgstr "" + +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 +msgid "Whenever a ticket's queue changes" +msgstr "" + +#: etc/initialdata:170 +msgid "Whenever a ticket's status changes" +msgstr "" + +#: etc/initialdata:207 +msgid "Whenever a user-defined condition occurs" +msgstr "" + +#: etc/initialdata:164 +msgid "Whenever comments come in" +msgstr "" + +#: etc/initialdata:157 +msgid "Whenever correspondence comes in" +msgstr "" + +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 +msgid "Work" +msgstr "Munkahelyi" + +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 +msgid "Worked" +msgstr "Munkaidõ" + +#: lib/RT/Ticket_Overlay.pm:3096 +msgid "You already own this ticket" +msgstr "Már az öné ez a probléma" + +#: html/autohandler:158 html/autohandler:166 +msgid "You are not an authorized user" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2978 +msgid "You can only reassign tickets that you own or that are unowned" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 +#. ($num, $queue) +msgid "You found %1 tickets in queue %2" +msgstr "%1 Problémát talált a %2 sorban" + +#: html/NoAuth/Logout.html:52 +msgid "You have been logged out of RT." +msgstr "Kilépett a Request Tracker programból." + +#: html/SelfService/Display.html:109 +msgid "You have no permission to create tickets in that queue." +msgstr "Nincs joga létrehozni problémákat ebben a sorban" + +#: lib/RT/Ticket_Overlay.pm:1964 +msgid "You may not create requests in that queue." +msgstr "Nem hozhat létre problémákat ebben a sorban" + +#: html/NoAuth/Logout.html:56 +msgid "You're welcome to login again" +msgstr "Itt ismét bejelentkezhetsz!" + +#: etc/initialdata:502 +msgid "Your request has been approved by %1. Other approvals may still be pending." +msgstr "" + +#: etc/initialdata:540 +msgid "Your request has been approved." +msgstr "A problémája engedélyezve." + +#: etc/initialdata:445 +msgid "Your request was rejected." +msgstr "A problémája elutasÃtva." + +#: html/autohandler:193 +msgid "Your username or password is incorrect" +msgstr "A begépelt felhasználói név vagy jelszó hibás!" + +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 +msgid "Zip" +msgstr "IrányÃtószám" + +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "létrehozhat saját lekérdezéseket" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "betölthet saját lekérdezéseket" + +#: html/User/Elements/DelegateRights:80 +#. ($right->PrincipalObj->Object->SelfDescription) +msgid "as granted to %1" +msgstr "%1nak engedélyezve" + +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "Lezárt" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 +msgid "contains" +msgstr "tartalmazza" + +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 +msgid "days" +msgstr "napja" + +#: lib/RT/Queue_Overlay.pm:88 +msgid "deleted" +msgstr "törölve" + +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 +msgid "does not match" +msgstr "nem" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 +msgid "doesn't contain" +msgstr "nem tartalmazza" + +#: html/Elements/SelectEqualityOperator:59 +msgid "equal to" +msgstr "egyenlõ" + +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "hiba: nincs mit törölni" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "greater than" +msgstr "nagyobb mint" + +#: lib/RT/Group_Overlay.pm:222 +#. ($self->Name) +msgid "group '%1'" +msgstr " '%1' csopot" + +#: lib/RT/Date.pm:338 +msgid "hours" +msgstr "órája" + +#: html/Search/Elements/PickBasics:48 +msgid "id" +msgstr "Sorszám" + +#: 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 +msgid "is" +msgstr " == " + +#: 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 +msgid "isn't" +msgstr " nem " + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "less than" +msgstr "kisebb mint" + +#: html/Search/Elements/PickBasics:60 +msgid "matches" +msgstr "==" + +#: lib/RT/Date.pm:334 +msgid "min" +msgstr "perce" + +#: html/Ticket/Update.html:64 +msgid "minutes" +msgstr "perc" + +#: lib/RT/Date.pm:350 +msgid "months" +msgstr "hónapja" + +#: lib/RT/Queue_Overlay.pm:83 +msgid "new" +msgstr "új" + +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "(nincs név)" + +#: html/Admin/Elements/EditScrips:64 +msgid "no value" +msgstr "Nincs érték" + +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 +msgid "none" +msgstr "senki" + +#: html/Elements/SelectEqualityOperator:59 +msgid "not equal to" +msgstr "nem egyenlõ" + +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 +msgid "open" +msgstr "Nyitott" + +#: lib/RT/Group_Overlay.pm:227 +#. ($self->Name, $user->Name) +msgid "personal group '%1' for user '%2'" +msgstr "" + +#: lib/RT/Group_Overlay.pm:235 +#. ($queue->Name, $self->Type) +msgid "queue %1 %2" +msgstr "Stapel %1 %2" + +#: lib/RT/Queue_Overlay.pm:87 +msgid "rejected" +msgstr "elutasÃtva" + +#: lib/RT/Queue_Overlay.pm:86 +msgid "resolved" +msgstr "megoldva" + +#: lib/RT/Date.pm:330 +msgid "sec" +msgstr "sec" + +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 +msgid "stalled" +msgstr "várakozik" + +#: lib/RT/Group_Overlay.pm:230 +#. ($self->Type) +msgid "system %1" +msgstr "rendszer %1" + +#: lib/RT/Group_Overlay.pm:241 +#. ($self->Type) +msgid "system group '%1'" +msgstr "" + +#: html/Elements/Error:66 html/SelfService/Error.html:63 +msgid "the calling component did not specify why" +msgstr "" + +#: lib/RT/Group_Overlay.pm:238 +#. ($self->Instance, $self->Type) +msgid "ticket #%1 %2" +msgstr "probléma #%1 %2" + +#: lib/RT/Group_Overlay.pm:244 +#. ($self->Id) +msgid "undescribed group %1" +msgstr "" + +#: lib/RT/Group_Overlay.pm:219 +#. ($user->Object->Name) +msgid "user %1" +msgstr "felhasználó %1" + +#: lib/RT/Date.pm:346 +msgid "weeks" +msgstr "hete" + +#: lib/RT/Date.pm:354 +msgid "years" +msgstr "éve" + diff --git a/rt/lib/RT/I18N/i_default.pm b/rt/lib/RT/I18N/i_default.pm index 154702656..28082afad 100644 --- a/rt/lib/RT/I18N/i_default.pm +++ b/rt/lib/RT/I18N/i_default.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::I18N::i_default; use strict; diff --git a/rt/lib/RT/I18N/id.po b/rt/lib/RT/I18N/id.po new file mode 100644 index 000000000..f53284800 --- /dev/null +++ b/rt/lib/RT/I18N/id.po @@ -0,0 +1,5047 @@ +# Copyright (c) 2002 Jesse Vincent <jesse@bestpractical.com> +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: 2005-06-03\n" +"Last-Translator: James <james@actionmessage.com>\n" +"Language-Team: rt-devel <rt-devel@lists.fsck.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=US-ASCII\n" +"Content-Transfer-Encoding: 7bit\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) +msgid "#%1: %2" +msgstr "#%1: %2" + +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "$Awalan %1" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 #%2" + +#: lib/RT/Date.pm:361 +#. ($s, $time_unit) +msgid "%1 %2" +msgstr "%1 %2" + +#: NOT FOUND IN SOURCE +msgid "%1 %2 %3" +msgstr "%1 %2 %3" + +#: lib/RT/Date.pm:397 +#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) +msgid "%1 %2 %3 %4:%5:%6 %7" +msgstr "%1 %2 %3 %4:%5:%6 %7" + +#: 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) +msgid "%1 %2 added" +msgstr "%1 %2 sudah ditambah" + +#: lib/RT/Date.pm:358 +#. ($s, $time_unit) +msgid "%1 %2 ago" +msgstr "%1 %2 yang lalu" + +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) +#. ($field, $self->OldValue, $self->NewValue) +msgid "%1 %2 changed to %3" +msgstr "%1 %2 diganti menjadi %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) +msgid "%1 %2 deleted" +msgstr "%1 %2 sudah dihapus" + +#: 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)) +msgid "%1 %2 with template %3" +msgstr "%1 %2 gunakan template %3" + +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) oleh %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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "(Belum diubah)" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 +#. ("--search-argument", "--search") +#. ("--condition-argument", "--condition") +#. ("--action-argument", "--action") +msgid "%1 - An argument to pass to %2" +msgstr "%1 - Sebuah penjelasan untuk dilewati ke %2" + +#: bin/rt-crontool:210 +#. ("--verbose") +msgid "%1 - Output status updates to STDOUT" +msgstr "%1 - status Output diperbaharui menjadi STDOUT" + +#: bin/rt-crontool:204 +#. ("--action") +msgid "%1 - Specify the action module you want to use" +msgstr "%1 - menetapkan modul aksi yang ingin digunakan oleh anda" + +#: bin/rt-crontool:198 +#. ("--condition") +msgid "%1 - Specify the condition module you want to use" +msgstr "%1 - menetapkan moduk kondisi yang ingin digunakan oleh anda" + +#: bin/rt-crontool:191 +#. ("--search") +msgid "%1 - Specify the search module you want to use" +msgstr "%1 - menetapkan modul pencarian yang ingin digunakan oleh anda" + + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "%1 RT %2 Hak Cipta 1996-%3 %4." + +#: lib/RT/ScripAction_Overlay.pm:151 +#. ($self->Id) +msgid "%1 ScripAction loaded" +msgstr "%1 Memanggil AksiScrip" + +#: lib/RT/Record.pm:1708 +#. ($args{'Value'}, $cf->Name) +msgid "%1 added as a value for %2" +msgstr "%1 ditambahkan sebagai nilai untuk %2" + +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 +#. ($args{'Base'}) +#. ($args{'Target'}) +msgid "%1 appears to be a local object, but can't be found in the database" +msgstr "%1 ditampilkan sebagai objek lokal, tetapi tidak dapat ditemukan di dalam database" + +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 +#. ($self->BriefDescription , $self->CreatorObj->Name) +#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) +msgid "%1 by %2" +msgstr "%1 oleh %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."'") +msgid "%1 changed from %2 to %3" +msgstr "%1 sudah diganti dari %2 ke %3" + +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "%1 ditiru" + +#: lib/RT/Record.pm:930 +msgid "%1 could not be set to %2." +msgstr "%1 tidak bisa diatur ke %2." + +#: lib/RT/Ticket_Overlay.pm:2743 +#. ($self) +msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." +msgstr "%1 tidak dapat mengatur status untuk diselesaikan. Database RT's mungkin tidak konsisten." + +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "%1 sudah dibuat" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "%1 sudah dihapus" + +#: html/Elements/MyTickets:47 +#. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "%1 Tiket dengan prioritas paling tinggi yang saya miliki" + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I requested..." +msgstr "%1 Tiket dengan prioritas paling tinggi yang saya minta..." + +#: bin/rt-crontool:186 +#. ($0) +msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." +msgstr "%1 adalah sebuah alat yang berfungsi pada tiket dari alat penjadwalan eksternal, seperti Cron." + +#: lib/RT/Queue_Overlay.pm:860 +#. ($principal->Object->Name, $args{'Type'}) +msgid "%1 is no longer a %2 for this queue." +msgstr "%1 tidak lagi menjadi %2 untuk antrian ini." + +#: NOT FOUND IN SOURCE +msgid "%1 is no longer a value for custom field %2" +msgstr "%1 tidak lagi menjadi nilai untuk kolom kustom %2" + +#: 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) +msgid "%1 min" +msgstr "%1 menit" + +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "%1 tiket terbaru yang belum dimiliki" + +#: NOT FOUND IN SOURCE +msgid "%1 newest unowned tickets..." +msgstr "%1 tiket terbaru yang belum dimiliki..." + +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 objek" + +#: html/User/Elements/DelegateRights:97 +#. (loc($ObjectType =~ /^RT::(.*)$/)) +msgid "%1 rights" +msgstr "hak-hak %1" + +#: lib/RT/Action/ResolveMembers.pm:63 +#. (ref $self) +msgid "%1 will resolve all members of a resolved group ticket." +msgstr "%1 akan memecahkan semua anggota dari grup tiket yang dipecahkan." + +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%1's %2 objek" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "%1's %2's %3 objek" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "%1's pencarian disimpan" + +#: lib/RT/Transaction_Overlay.pm:470 +#. ($self) +msgid "%1: no attachment specified" +msgstr "%1: tidak ada lampiran yang ditentukan" + +#: html/Ticket/Elements/ShowTransactionAttachments:78 +#. ($size) +msgid "%1b" +msgstr "%1b" + +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) +msgid "%1k" +msgstr "%1k" + +#: lib/RT/Ticket_Overlay.pm:1118 +#. ($args{'Status'}) +msgid "'%1' is an invalid value for status" +msgstr "'%1' adalah nilai yang tidak valid untuk 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 +msgid "(Check box to delete)" +msgstr "(Klik kotak ini untuk hapus)" + +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(Klik kotak ini untuk menon-aktifkan pemberitahuan kepada penerima yang sudah terdaftar)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(Klik kotak ini untuk mengaktifkan pemberitahuan kepada penerima yang sudah terdaftar)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(Masukkan ID Tiket atau URL, dipisahkan dengan spasi)" + +#: NOT FOUND IN SOURCE +msgid "(If left blank, will default to %1" +msgstr "(Jika ditinggalkan kosong, default akan diatur menjadi %1" + +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 +#. ($RT::CorrespondAddress) +#. ($RT::CommentAddress) +msgid "(If left blank, will default to %1)" +msgstr "(Jika ditinggalkan kosong, default akan menjadi %1)" + +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 +msgid "(No custom fields)" +msgstr "(Tidak ada kolom kustom)" + +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 +msgid "(No members)" +msgstr "(Tidak ada anggota)" + +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 +msgid "(No scrips)" +msgstr "(Tidak ada scrip)" + +#: html/Admin/Elements/EditTemplates:52 +msgid "(No templates)" +msgstr "(Tidak ada template)" + +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(Tidak satu pun)" + +#: 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat email yang dibatasi dengan koma. <b>Tidak</b> akan mengubah siapakah yang akan menerima pembaharuan di masa datang.)" + +#: 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat administrasi email. Orang-orang ini <b>akan</b> menerima pembaharuan di masa datang.)" + +#: 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat email. <b>Tidak</b> akan mengubah siapakah yang akan menerima pembaharuan di masa datang.)" + +#: 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 "(Kirim salinan tembusan untuk memperbaharui daftar alamat email. Orang-orang ini <b>akan</b> menerima pembaharuan di masa datang.)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "Gunakan kolom ini ketika anda memilih 'Definisikan Pengguna' untuk sebuah kondisi atau aksi" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 +msgid "(empty)" +msgstr "(kosong)" + +#: html/Admin/Users/index.html:60 +msgid "(no name listed)" +msgstr "(tidak ada nama yang terdaftar)" + +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 +msgid "(no value)" +msgstr "(Tidak ada nilai)" + +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(Tidak ada nilai-nilai)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 +msgid "(only one ticket)" +msgstr "(hanya satu Tiket)" + +#: html/Elements/RT__Ticket/ColumnMap:146 +msgid "(pending approval)" +msgstr "(izin ditunda)" + +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(Koleksi yang lain ditunda)" + +#: html/Admin/Users/Modify.html:71 +msgid "(required)" +msgstr "(diperlukan)" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "(untitled)" +msgstr "(tidak ada judul)" + +#: html/Ticket/Elements/ShowBasics:53 +msgid "<% $Ticket->Status%>" +msgstr "<% $Tiket->Status%>" + +#: html/Elements/SelectTicketTypes:48 +msgid "<% $_ %>" +msgstr "<% $_ %>" + +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "<%$_%>" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "<%$kolom%>" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<Tipe input=\"submit\" nilai=\"Tiket Baru di dalam \"> %1" + +#: etc/initialdata:218 +msgid "A blank template" +msgstr "Template kosong" + +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 +msgid "ACE not found" +msgstr "ACE tidak ditemukan" + +#: lib/RT/ACE_Overlay.pm:854 +msgid "ACEs can only be created and deleted." +msgstr "ACE hanya dapat dibuat dan dihapus." + +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "DAN" + +#: NOT FOUND IN SOURCE +msgid "Aborting to avoid unintended ticket modifications.\\n" +msgstr "Dibatalkan untuk menghindari modifikasi tiket yang tidak diharapkan.\\n" + +#: html/User/Elements/Tabs:53 +msgid "About me" +msgstr "Tentang Aku" + +#: html/Admin/Users/Modify.html:106 +msgid "Access control" +msgstr "Kontrol Akses" + +#: html/Admin/Elements/EditScrip:71 +msgid "Action" +msgstr "Aksi" + +#: lib/RT/Scrip_Overlay.pm:173 +#. ($args{'ScripAction'}) +msgid "Action %1 not found" +msgstr "Aksi %1 tidak ditemukan" + +#: NOT FOUND IN SOURCE +msgid "Action committed." +msgstr "Aksi dijalankan." + +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "Aksi dijalankan." + +#: bin/rt-crontool:144 +msgid "Action prepared..." +msgstr "Aksi disiapkan..." + +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Tambah" + +#: html/Search/Bulk.html:114 +msgid "Add AdminCc" +msgstr "Tambah AdminCc" + +#: html/Search/Bulk.html:110 +msgid "Add Cc" +msgstr "Tambah Cc" + +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "Tambah Kolom" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "Tambah Kriteria" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "Tambah File Lagi" + +#: html/Search/Bulk.html:106 +msgid "Add Requestor" +msgstr "Tambah Pemohon" + +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "Tambah Nilai" + +#: html/Admin/Global/Scrip.html:76 +msgid "Add a scrip which will apply to all queues" +msgstr "Tambah scrip yang akan digunakan di semua antrian" + +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "Tambahkan kriteria tambahan" + +#: html/Search/Bulk.html:146 +msgid "Add comments or replies to selected tickets" +msgstr "Tambah Komentar atau balas ke tiket yang sudah dipilih" + +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 +msgid "Add members" +msgstr "Tambah Anggota" + +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 +msgid "Add new watchers" +msgstr "Tambah Pengamat Baru" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "Tambah, hapus dan ubah nilai kolom kustom untuk objek" + +#: lib/RT/Queue_Overlay.pm:760 +#. ($args{'Type'}) +msgid "Added principal as a %1 for this queue" +msgstr "Tambahkan prinsipal sebagai %1 untuk antrian ini" + +#: lib/RT/Ticket_Overlay.pm:1416 +#. ($self->loc($args{'Type'})) +msgid "Added principal as a %1 for this ticket" +msgstr "Tambahkan prinsipal sebagai %1 untuk Tiket ini" + +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 +msgid "Address1" +msgstr "Alamat1" + +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 +msgid "Address2" +msgstr "Alamat2" + +#: html/Ticket/Create.html:95 +msgid "Admin Cc" +msgstr "Admin Cc" + +#: etc/initialdata:295 +msgid "Admin Comment" +msgstr "Komentar Admin" + +#: etc/initialdata:274 +msgid "Admin Correspondence" +msgstr "Korespondensi Admin" + +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 +msgid "Admin queues" +msgstr "Antrian Admin" + +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 +msgid "Admin/Global configuration" +msgstr "Konfigurasi Admin/Global" + +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 +msgid "AdminCc" +msgstr "AdminCc" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "Kolom Kustom Admin" + +#: lib/RT/Group_Overlay.pm:171 +msgid "AdminGroup" +msgstr "Grup Admin" + +#: lib/RT/Group_Overlay.pm:173 +msgid "AdminGroupMembership" +msgstr "Keanggotaan Grup Admin" + +#: lib/RT/System.pm:81 +msgid "AdminOwnPersonalGroups" +msgstr "Milik Grup Pribadi Admin" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "AdminQueue" +msgstr "Antrian Admin" + +#: lib/RT/System.pm:82 +msgid "AdminUsers" +msgstr "Pengguna Admin" + +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 +msgid "Administrative Cc" +msgstr "Cc Administrasi" + +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Lanjutan" + +#: html/Elements/SelectDateRelation:57 +msgid "After" +msgstr "Setelah" + +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "Kumpulan" + +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "Semua Izin terlewati" + +#: html/Admin/Queues/index.html:75 +msgid "All Queues" +msgstr "Semua Antrian" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "Dan/Atau" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "Digunakan untuk" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Digunakan" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Digunakan untuk perubahan anda" + +#: html/Elements/Tabs:74 +msgid "Approval" +msgstr "Izin" + +#: 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) +msgid "Approval #%1: %2" +msgstr "Izin #%1: %2" + +#: html/Approvals/index.html:75 +#. ($ticket->Id) +msgid "Approval #%1: Notes not recorded due to a system error" +msgstr "Izin #%1: Catatan yang tidak dicatat karena kesalahan sistem" + +#: html/Approvals/index.html:73 +#. ($ticket->Id) +msgid "Approval #%1: Notes recorded" +msgstr "Izin #%1: Catatan yang dicatat" + +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Izin dilewati" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Izin ditolak" + +#: html/Approvals/Elements/Approve:65 +msgid "Approve" +msgstr "Disetujui" + +#: etc/initialdata:504 +msgid "Approver's notes: %1" +msgstr "Catatan Pemberi Persetujuan: %1" + +#: lib/RT/Date.pm:440 +msgid "Apr." +msgstr "Apr." + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 +msgid "Ascending" +msgstr "Naik" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Menentukan dan memindahkan kolom kustom" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "Menentukan Kolom Kustom" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 +msgid "Attach" +msgstr "Melampirkan" + +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 +msgid "Attach file" +msgstr "Melampirkan file" + +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 +msgid "Attached file" +msgstr "File dilampirkan" + +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) +msgid "Attachment '%1' could not be loaded" +msgstr "Lampiran '%1' tidak dapat dipanggil" + +#: lib/RT/Transaction_Overlay.pm:478 +msgid "Attachment created" +msgstr "Lampiran dibuat" + +#: lib/RT/Tickets_Overlay.pm:1673 +msgid "Attachment filename" +msgstr "Nama File Lampiran" + +#: html/Ticket/Elements/ShowAttachments:47 +msgid "Attachments" +msgstr "Lampiran-lampiran" + +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Attribut sudah dihapus" + +#: lib/RT/Date.pm:444 +msgid "Aug." +msgstr "Agst." + +#: NOT FOUND IN SOURCE +msgid "AuthSystem" +msgstr "Sistem Otorisasi" + +#: etc/initialdata:221 +msgid "Autoreply" +msgstr "Balas Otomatis" + +#: etc/initialdata:72 +msgid "Autoreply To Requestors" +msgstr "Balas Otomatis ke Pemohon" + +#: NOT FOUND IN SOURCE +msgid "Available Columns" +msgstr "Kolom Tersedia " + +#: NOT FOUND IN SOURCE +msgid "Bad data in %1" +msgstr "Data buruk di dalam %1" + +#: 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 "Dasar-dasar" + +#: html/Ticket/Update.html:86 +msgid "Bcc" +msgstr "Bcc" + +#: 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 "Pastikanlah untuk menyimpan setiap perubahan anda" + +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 +msgid "Before" +msgstr "Sebelum" + +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "Pemecahan Praktis yang terbaik, Logo bisnis LLC" + +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "Binary" + +#: etc/initialdata:217 +msgid "Blank" +msgstr "Kosong" + +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "Diberi huruf tebal" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "Menyimpan penunjuk link" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 +msgid "Brief headers" +msgstr "Catatan Atas Singkat" + +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 +msgid "Bulk ticket update" +msgstr "Memperbaharui tiket dengan jumlah banyak pada waktu yang sama" + +#: lib/RT/User_Overlay.pm:1722 +msgid "Can not modify system users" +msgstr "Tidak dapat mengubah sistem pengguna" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "Can this principal see this queue" +msgstr "Dapatkah prinsipal melihat antrian ini" + +#: lib/RT/CustomField_Overlay.pm:370 +msgid "Can't add a custom field value without a name" +msgstr "Tidak dapat menambah nilai kolom kustom tanpa nama" + +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "Tidak dapat menemukan kelas koleksi untuk '%'" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Tidak dapat menemukan pencarian yang disimpan untuk bekerja dengan" + +#: lib/RT/Link_Overlay.pm:160 +msgid "Can't link a ticket to itself" +msgstr "Tidak dapat menghubungkan tiket tersebut dengan dirinya sendiri" + +#: NOT FOUND IN SOURCE +msgid "Can't merge into a merged ticket. You should never get this error" +msgstr "Tidak dapat digabungkan ke dalam tiket gabungan. Anda seharusnya tidak pernah mendapatkan kesalahan ini." + +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Tidak dapat menyimpan pencarian ini" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 +msgid "Can't specifiy both base and target" +msgstr "Tidak dapat menentukan baik dasar dan sasaran" + +#: html/autohandler:148 +#. ($msg) +msgid "Cannot create user: %1" +msgstr "Tidak dapat membuat pengguna: %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 +msgid "Cc" +msgstr "Cc" + +#: html/SelfService/Prefs.html:52 +msgid "Change password" +msgstr "Ubah Sandi" + +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Periksa Semua" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 +msgid "Check box to delete" +msgstr "Klik kotak ini untuk hapus" + +#: html/Admin/Elements/SelectRights:55 +msgid "Check box to revoke right" +msgstr "Klik kotak ini untuk menghilangkan hak-hak" + +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 +msgid "Children" +msgstr "Anak" + +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 +msgid "City" +msgstr "Kota" + +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "Hapus Semua" + +#: html/Ticket/Elements/ShowDates:68 +msgid "Closed" +msgstr "Ditutup" + +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "Tiket sudah ditutup" + +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 +msgid "Comment" +msgstr "Komentar" + +#: html/Admin/Queues/Modify.html:79 +msgid "Comment Address" +msgstr "Alamat Komentar" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "Comment on tickets" +msgstr "Komentar pada Tiket" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "CommentOnTicket" +msgstr "Komentar Pada Tiket" + +#: NOT FOUND IN SOURCE +msgid "Comments" +msgstr "Komentar" + +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 +msgid "Comments (Not sent to requestors)" +msgstr "Komentar (Tidak dikirim ke pemohon)" + +#: html/Search/Bulk.html:150 +msgid "Comments (not sent to requestors)" +msgstr "Komentar (tidak dikirim ke pemohon)" + +#: NOT FOUND IN SOURCE +msgid "Comments about %1" +msgstr "Komentar mengenai %1" + +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 +msgid "Comments about this user" +msgstr "Komentar tentang pengguna ini" + +#: lib/RT/Transaction_Overlay.pm:623 +msgid "Comments added" +msgstr "Komentar sudah ditambahkan" + +#: lib/RT/Action/Generic.pm:176 +msgid "Commit Stubbed" +msgstr "Potongan Tiket Dijalankan" + +#: html/Admin/Elements/EditScrip:63 +msgid "Condition" +msgstr "Kondisi" + +#: bin/rt-crontool:131 +msgid "Condition matches..." +msgstr "Kondisi sesuai dengan ..." + +#: lib/RT/Scrip_Overlay.pm:189 +msgid "Condition not found" +msgstr "Kondisi tidak ditemukan" + +#: html/Elements/Tabs:81 +msgid "Configuration" +msgstr "Konfigurasi" + +#: html/SelfService/Prefs.html:54 +msgid "Confirm" +msgstr "Konfirmasi" + +#: NOT FOUND IN SOURCE +msgid "ContactInfoSystem" +msgstr "Hubungi Sistem Info" + +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 +msgid "Content" +msgstr "Isi" + +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "Tipe - Isi" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "Tiru" + +#: etc/initialdata:286 +msgid "Correspondence" +msgstr "Korespondensi" + +#: lib/RT/Transaction_Overlay.pm:619 +msgid "Correspondence added" +msgstr "Korespondensi sudah ditambah" + +#: NOT FOUND IN SOURCE +msgid "Could not add new custom field value for ticket. " +msgstr "Tidak dapat menambah nilai kolom kustom baru untuk tiket." + +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "Tidak dapat menambah nilai kolom kustom baru" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "Tidak dapat menambah nilai kolom kustom baru" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 +msgid "Could not change owner. " +msgstr "Tidak dapat mengubah pemilik tiket. " + +#: html/Admin/CustomFields/Modify.html:119 +#. ($msg) +msgid "Could not create CustomField" +msgstr "Tidak dapat membuat Kolom Kustom" + +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "Tidak dapat membuat Kolom Kustom:%1 " + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 +msgid "Could not create group" +msgstr "Tidak dapat membuat grup" + +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 +#. ($msg) +msgid "Could not create template: %1" +msgstr "Tidak dapat membuat template: %1" + +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 +msgid "Could not create ticket. Queue not set" +msgstr "Tidak dapat membuat tiket. Antrian tidak dapat diatur" + +#: 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 "Tidak dapat membuat pengguna" + +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 +msgid "Could not find or create that user" +msgstr "Tidak dapat menemukan atau membuat pengguna tersebut" + +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 +msgid "Could not find that principal" +msgstr "Tidak dapat menemukan prinsipal tersebut" + +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Tidak dapat memanggil KolomKustom %1" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 +msgid "Could not load group" +msgstr "Tidak dapat memanggil grup" + +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "Tidak dapat memanggil objek untuk %1" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "Tidak dapat memanggil attribut pencarian" + +#: lib/RT/Queue_Overlay.pm:758 +#. ($args{'Type'}) +msgid "Could not make that principal a %1 for this queue" +msgstr "Tidak dapat membuat prinsipal tersebut %1 untuk antrian ini" + +#: lib/RT/Ticket_Overlay.pm:1405 +#. ($self->loc($args{'Type'})) +msgid "Could not make that principal a %1 for this ticket" +msgstr "Tidak dapat membuat prinsipal tersebut %1 untuk Tiket ini" + +#: lib/RT/Queue_Overlay.pm:857 +#. ($args{'Type'}) +msgid "Could not remove that principal as a %1 for this queue" +msgstr "Tidak dapat menghapus prinsipal tersebut sebagai %1 untuk antrian ini" + +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Tidak dapat mengatur informasi pengguna" + +#: lib/RT/Group_Overlay.pm:1011 +msgid "Couldn't add member to group" +msgstr "Tidak dapat menambah anggota ke grup" + +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 +#. ($Msg) +msgid "Couldn't create a transaction: %1" +msgstr "Tidak dapat membuat transaksi: %1" + +#: lib/RT/Record.pm:939 +msgid "Couldn't find row" +msgstr "Tidak dapat menemukan baris" + +#: lib/RT/Group_Overlay.pm:985 +msgid "Couldn't find that principal" +msgstr "Tidak dapat menemukan prinsipal tersebut" + +#: lib/RT/CustomField_Overlay.pm:404 +msgid "Couldn't find that value" +msgstr "Tidak dapat menemukan nilai tersebut" + +#: lib/RT/CurrentUser.pm:146 +#. ($self->Id) +msgid "Couldn't load %1 from the users database.\\n" +msgstr "Tidak dapat memanggil %1 dari database pengguna.\\n" + +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "Tidak dapat memanggil Kelas %1" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "Tidak dapat memanggil Kolom Kustom %1" + +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 +#. ($id) +msgid "Couldn't load group %1" +msgstr "Tidak dapat memanggil grup %1" + +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 +msgid "Couldn't load link" +msgstr "Tidak dapat memanggil link" + +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "Tidak dapat memanggil objek %1" + +#: html/Admin/Queues/People.html:142 +#. ($id) +msgid "Couldn't load queue" +msgstr "Tidak dapat memanggil antrian" + +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 +#. ($id) +msgid "Couldn't load queue %1" +msgstr "Tidak dapat memanggil antrian %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load that user (%1)" +msgstr "Tidak dapat memanggil pengguna tersebut (%1)" + +#: html/SelfService/Display.html:156 +#. ($id) +msgid "Couldn't load ticket '%1'" +msgstr "Tidak dapat memanggil Tiket '%1'" + +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 +msgid "Country" +msgstr "Negara" + +#: 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 +msgid "Create" +msgstr "Dibuat" + +#: etc/initialdata:135 +msgid "Create Tickets" +msgstr "Buat Tiket" + +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 +msgid "Create a CustomField" +msgstr "Buat Kolom Kustom" + +#: html/Admin/Queues/CustomField.html:69 +#. ($QueueObj->Name()) +msgid "Create a CustomField for queue %1" +msgstr "Buat Kolom Kustom untuk antrian %1" + +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 +msgid "Create a new group" +msgstr "Buat grup baru" + +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 +msgid "Create a new personal group" +msgstr "Buat grup pribadi baru" + +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 +msgid "Create a new ticket" +msgstr "Buat tiket baru" + +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 +msgid "Create a new user" +msgstr "Buat pengguna baru" + +#: html/Admin/Queues/Modify.html:125 +msgid "Create a queue" +msgstr "Buat antrian" + +#: html/Admin/Queues/Scrip.html:80 +#. ($QueueObj->Name) +msgid "Create a scrip for queue %1" +msgstr "Buat scrip untuk antrian %1" + +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 +msgid "Create a template" +msgstr "Buat template" + +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "Buat Tiket" + +#: etc/initialdata:137 +msgid "Create new tickets based on this scrip's template" +msgstr "Buat Tiket baru berdasarkan pada template scrip ini" + +#: html/SelfService/Create.html:105 +msgid "Create ticket" +msgstr "Buat Tiket" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "Create tickets in this queue" +msgstr "Buat tiket untuk antrian ini" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "Create, delete and modify custom fields" +msgstr "Buat, hapus dan ubah kolom kustom" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "Create, delete and modify queues" +msgstr "Buat, hapus dan ubah antrian" + +#: lib/RT/System.pm:81 +msgid "Create, delete and modify the members of personal groups" +msgstr "Buat, hapus dan ubah anggota dari grup pribadi" + +#: lib/RT/System.pm:82 +msgid "Create, delete and modify users" +msgstr "Buat, hapus dan ubah pengguna" + +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "Buat Pencarian yang Disimpan" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "CreateTicket" +msgstr "Buat Tiket" + +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 +msgid "Created" +msgstr "sudah Dibuat" + +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 +#. ($CustomFieldObj->Name()) +msgid "Created CustomField %1" +msgstr "Kolom Kustom sudah dibuat %1" + +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Pencipta" + +#: html/Elements/EditLinks:49 +msgid "Current Links" +msgstr "Link yang sekarang" + +#: NOT FOUND IN SOURCE +msgid "Current Relationships" +msgstr "Hubungan Sekarang" + +#: html/Admin/Elements/EditScrips:51 +msgid "Current Scrips" +msgstr "Scrips Sekarang " + +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 +msgid "Current members" +msgstr "Anggota Sekarang" + +#: html/Admin/Elements/SelectRights:51 +msgid "Current rights" +msgstr "Hak-hak Sekarang" + +#: NOT FOUND IN SOURCE +msgid "Current search criteria" +msgstr "Kriteria pencarian sekarang" + +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 +msgid "Current watchers" +msgstr "Pengamat sekarang" + +#: 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 +msgid "Custom Fields" +msgstr "Kolom Kustom" + +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Kolom Kustom untuk %1" + +#: html/Admin/Elements/EditScrip:123 +msgid "Custom action cleanup code" +msgstr "Aksi kustom membersihkan kode" + +#: html/Admin/Elements/EditScrip:115 +msgid "Custom action preparation code" +msgstr "Aksi kustom menyiapkan kode" + +#: html/Admin/Elements/EditScrip:107 +msgid "Custom condition" +msgstr "Kondisi kustom" + +#: NOT FOUND IN SOURCE +msgid "Custom field %1 %2 %3" +msgstr "Kolom kustom %1 %2 %3" + +#: NOT FOUND IN SOURCE +msgid "Custom field %1 does not apply to this object" +msgstr "Kolom kustom %1 tidak dapat digunakan untuk objek ini" + +#: lib/RT/Tickets_Overlay.pm:2147 +#. ($CF->Name) +msgid "Custom field %1 has a value." +msgstr "Kolom kustom %1 memiliki nilai." + +#: lib/RT/Tickets_Overlay.pm:2143 +#. ($CF->Name) +msgid "Custom field %1 has no value." +msgstr "Kolom kustom %1 tidak memiliki nilai." + +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 +#. ($args{'Field'}) +msgid "Custom field %1 not found" +msgstr "Kolom kustom %1 tidak ditemukan" + +#: NOT FOUND IN SOURCE +msgid "Custom field not found" +msgstr "Kolom kustom tidak ditemukan" + +#: lib/RT/CustomField_Overlay.pm:1041 +#. ($args{'Content'}, $self->Name) +msgid "Custom field value %1 could not be found for custom field %2" +msgstr "Nilai kolom kustom %1 tidak dapat ditemukan untuk kolom kustom %2" + +#: lib/RT/CustomField_Overlay.pm:414 +msgid "Custom field value could not be deleted" +msgstr "Nilai kolom kustom tidak dapat dihapus" + +#: lib/RT/CustomField_Overlay.pm:1047 +msgid "Custom field value could not be found" +msgstr "Nilai kolom kustom tidak dapat ditemukan" + +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 +msgid "Custom field value deleted" +msgstr "Nilai kolom kustom sudah dihapus" + +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 +msgid "CustomField" +msgstr "Kolom kustom" + +#: 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 +msgid "Dates" +msgstr "Tanggal" + +#: lib/RT/Date.pm:448 +msgid "Dec." +msgstr "Des." + +#: etc/initialdata:222 +msgid "Default Autoresponse template" +msgstr "Default template Balas Otomatis" + +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "Default Antrian" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Default Pemohon" + +#: etc/initialdata:296 +msgid "Default admin comment template" +msgstr "Default template komentar admin" + +#: etc/initialdata:275 +msgid "Default admin correspondence template" +msgstr "Default template korespondensi admin" + +#: etc/initialdata:287 +msgid "Default correspondence template" +msgstr "Default template korespondensi" + +#: etc/initialdata:253 +msgid "Default transaction template" +msgstr "Default template transaksi" + +#: NOT FOUND IN SOURCE +msgid "Default: %1/%2 changed from %3 to %4" +msgstr "Default: %1/%2 diganti dari %3 ke %4" + +#: html/User/Delegation.html:46 html/User/Delegation.html:49 +msgid "Delegate rights" +msgstr "Hak-hak Utusan" + +#: lib/RT/System.pm:85 +msgid "Delegate specific rights which have been granted to you." +msgstr "Hak-hak spesifik utusan yang sudah diberikan kepada anda." + +#: lib/RT/System.pm:85 +msgid "DelegateRights" +msgstr "Hak-hak Utusan" + +#: html/User/Elements/Tabs:59 +msgid "Delegation" +msgstr "Delegasi" + +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 +msgid "Delete" +msgstr "Hapus" + +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Hapus Template" + +#: NOT FOUND IN SOURCE +msgid "Delete article #%1" +msgstr "Hapus artikel #%1" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "Gagal dihapus: %1" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Hapus scrip yang sudah dipilih" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "Delete tickets" +msgstr "Hapus tiket" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "DeleteTicket" +msgstr "Hapus tiket" + +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "Pencarian dihapus" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object could break referential integrity" +msgstr "Menghapuskan objek ini dapat memutuskan integrasi referensial" + +#: lib/RT/Queue_Overlay.pm:391 +msgid "Deleting this object would break referential integrity" +msgstr "Menghapuskan objek ini dapat memutuskan integrasi referensial" + +#: lib/RT/User_Overlay.pm:513 +msgid "Deleting this object would violate referential integrity" +msgstr "Menghapuskan objek ini dapat melanggar integrasi referensial" + +#: html/Approvals/Elements/Approve:66 +msgid "Deny" +msgstr "Ditolak" + +#: 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 +msgid "Depended on by" +msgstr "Bergantung oleh" + +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "Ketergantungan oleh %1 sudah ditambah" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "Ketergantungan oleh %1 sudah dihapus" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "Ketergantungan oleh %1 sudah dihapus" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "Ketergantungan oleh %1 sudah dihapus" + +#: 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 +msgid "Depends on" +msgstr "Bergantung pada" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 +msgid "Descending" +msgstr "Turun" + +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 +msgid "Describe the issue below" +msgstr "Gambarkan persoalan dibawah ini" + +#: 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 "Deskripsi" + +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 +msgid "Display" +msgstr "Tampilkan" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "Display Access Control List" +msgstr "Tampilkan Daftar Kontrol Akses" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Tampilkan Kolom" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "Display Scrip templates for this queue" +msgstr "Tampilkan template Scrip untuk antrian ini" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "Display Scrips for this queue" +msgstr "Tampilkan Scrip untuk antrian ini" + +#: html/Ticket/Elements/ShowHistory:56 +msgid "Display mode" +msgstr "Tampilkan mode" + +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "Tampilkan pencarian yang disimpan untuk grup ini" + +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "Didistribusikan dibawah versi 2 dari <a href=\"http://www.gnu.org/copyleft/gpl.html\"> GNU GPL.</a>" + +#: lib/RT/System.pm:76 +msgid "Do anything and everything" +msgstr "Lakukan apa saja dan semuanya" + +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "Lakukan Pencarian" + +#: html/Elements/Refresh:51 +msgid "Don't refresh this page." +msgstr "Jangan refresh halaman ini." + +#: NOT FOUND IN SOURCE +msgid "Don't show search results" +msgstr "Jangan tampilkan hasil pencarian" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "Download" +msgstr "Download" + +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "Download sebagai file yang dibatasi dengan tab" + +#: 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 +msgid "Due" +msgstr "Batas Waktu" + +#: NOT FOUND IN SOURCE +msgid "ERROR: Couldn't load ticket '%1': %2.\\n" +msgstr "KESALAHAN: Tidak dapat memanggil Tiket '%1': %2.\\n" + +#: NOT FOUND IN SOURCE +msgid "Edit" +msgstr "Ubah" + +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" +msgstr "Ubah Kolom Kustom untuk %1" + +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "Ubah Kolom Kustom untuk semua grup" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "Ubah Kolom Kustom untuk semua pengguna" + +#: 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 "Ubah Kolom Kustom untuk tiket di dalam semua antrian" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" +msgstr "Ubah Link" + +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Ubah Query" + +#: NOT FOUND IN SOURCE +msgid "Edit Relationships" +msgstr "Ubah Hubungan" + +#: html/Admin/Queues/Templates.html:63 +#. ($QueueObj->Name) +msgid "Edit Templates for queue %1" +msgstr "Ubah Templates untuk antrian %1" + +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "Ubah pencarian yang disimpan untuk grup ini" + +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 +msgid "Edit system templates" +msgstr "Ubah template sistem" + +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "Ubah Pencarian yang Disimpan" + +#: html/Admin/Queues/Modify.html:140 +#. ($QueueObj->Name) +msgid "Editing Configuration for queue %1" +msgstr "Mengubah Konfigurasi untuk antrian %1" + +#: NOT FOUND IN SOURCE +msgid "Editing Configuration for user %1" +msgstr "Mengubah Konfigurasi untuk pengguna %1" + +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 +#. ($CustomFieldObj->Name()) +msgid "Editing CustomField %1" +msgstr "Mengubah Kolom Kustom %1" + +#: html/Admin/Groups/Members.html:53 +#. ($Group->Name) +msgid "Editing membership for group %1" +msgstr "Mengubah keanggotaan untuk grup ini %1" + +#: html/User/Groups/Members.html:150 +#. ($Group->Name) +msgid "Editing membership for personal group %1" +msgstr "Mengubah keanggotaan untuk grup pribadi %1" + +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 +msgid "Either base or target must be specified" +msgstr "Baik dasar ataupun sasaran harus ditentukan" + +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 +msgid "Email" +msgstr "Email" + +#: lib/RT/User_Overlay.pm:236 +msgid "Email address in use" +msgstr "Alamat Email yang digunakan" + +#: NOT FOUND IN SOURCE +msgid "EmailAddress" +msgstr "Alamat Email" + +#: NOT FOUND IN SOURCE +msgid "EmailEncoding" +msgstr "Set Karakter Email" + +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 +msgid "Enabled (Unchecking this box disables this custom field)" +msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan kolom kustom)" + +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 +msgid "Enabled (Unchecking this box disables this group)" +msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan grup ini)" + +#: html/Admin/Queues/Modify.html:105 +msgid "Enabled (Unchecking this box disables this queue)" +msgstr "Mengaktifkan (Klik kotak ini untuk menon-aktifkan antrian ini)" + +#: html/Admin/Queues/index.html:78 +msgid "Enabled Queues" +msgstr "Mengaktifkan Antrian" + +#: 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)) +msgid "Enabled status %1" +msgstr "Mengaktifkan status %1" + +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "Mengaktifkan status: %1" + +#: lib/RT/CustomField_Overlay.pm:64 +msgid "Enter multiple values" +msgstr "Masukkan beberapa nilai" + +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Masukan objek atau URI untuk menghubungkan object tersebut. Pisahkan beberapa input tersebut dengan spasi." + +#: lib/RT/CustomField_Overlay.pm:65 +msgid "Enter one value" +msgstr "Masukkan satu nilai" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Masukkan antrian atau URIs untuk menghubungkan antrian tersebut. Pisahkan beberapa input dengan spasi." + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Masukkan tiket atau URIs untuk menghubungkan Tiket tersebut. Pisahkan beberapa input dengan spasi." + +#: NOT FOUND IN SOURCE +msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +msgstr "Masukkan tiket atau URIs untuk menghubungkan Tiket tersebut. Pisahkan beberapa input dengan spasi." + +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "Masukkan sampai %1 nilai" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 +msgid "Error" +msgstr "Kesalahan" + +#: lib/RT/Queue_Overlay.pm:669 +msgid "Error in parameters to Queue->AddWatcher" +msgstr "Kesalahan di dalam parameter ke Antrian->Tambah Pengamat" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Queue->DelWatcher" +msgstr "Kesalahan di dalam parameter Ke Antrian->Hapus Pengamat" + +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Kesalahan di dalam parameter ke Antrian->Hapus Pengamat" + +#: lib/RT/Ticket_Overlay.pm:1333 +msgid "Error in parameters to Ticket->AddWatcher" +msgstr "Kesalahan di dalam parameter ke Tiket->Tambah Pengamat" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Ticket->DelWatcher" +msgstr "Kesalahan di dalam parameter ke Tiket->Hapus Pengamat" + +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Kesalahan di dalam parameter ke Ticket->Hapus Pengamat" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "Meningkatkan Prioritas Tiket" + +#: NOT FOUND IN SOURCE +msgid "Estimate" +msgstr "Perkiraan" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Diperkirakan" + +#: etc/initialdata:20 +msgid "Everyone" +msgstr "Setiap Orang" + +#: bin/rt-crontool:219 +msgid "Example:" +msgstr "Contoh:" + +#: NOT FOUND IN SOURCE +msgid "ExternalAuthId" +msgstr "AuthID Eksternal" + +#: NOT FOUND IN SOURCE +msgid "ExternalContactInfoId" +msgstr " Kontak Info ID Eksternal" + +#: html/Admin/Users/Modify.html:99 +msgid "Extra info" +msgstr "Info Tambahan" + +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "Gagal untuk membuat atribut pencarian" + +#: lib/RT/User_Overlay.pm:377 +msgid "Failed to find 'Privileged' users pseudogroup." +msgstr "Gagal untuk menemukan pengguna pseudogroup yang memiliki 'Hak-hak Istimewa'." + +#: lib/RT/User_Overlay.pm:384 +msgid "Failed to find 'Unprivileged' users pseudogroup" +msgstr "Gagal untuk menemukan pengguna pseudogroup yang tidak memiliki 'Hak-Hak Istimewa.'" + +#: bin/rt-crontool:163 +#. ($modname, $@) +msgid "Failed to load module %1. (%2)" +msgstr "Gagal untuk memanggil modul %1. (%2)" + +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "Gagal memanggil objek untuk %1" + +#: lib/RT/Date.pm:438 +msgid "Feb." +msgstr "Feb." + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Nama File" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "Isilah di dalam beberapa area teks" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "Isilah di dalam beberapa area wikiteks" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "Isilah di dalam satu area teks" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "Isilah di dalam satu area wikiteks" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "Isilah sampai %1 area teks" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "Isilah sampai %1 area wikiteks" + +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 +msgid "Final Priority" +msgstr "Prioritas Akhir" + +#: lib/RT/Ticket_Overlay.pm:1140 +msgid "FinalPriority" +msgstr "Prioritas Akhir" + +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "Cari grup yang" + +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 +msgid "Find people whose" +msgstr "Cari orang yang" + +#: html/Search/Results.html:109 +msgid "Find tickets" +msgstr "Cari tiket" + +#: html/Ticket/Elements/Tabs:81 +msgid "First" +msgstr "Pertama" + +#: 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 +msgid "Foo!" +msgstr "Foo!" + +#: html/Search/Bulk.html:105 +msgid "Force change" +msgstr "Diubah dengan paksa" + +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "Format" + +#: html/Search/Results.html:107 +#. ($ticketcount) +msgid "Found %quant(%1,ticket)" +msgstr "Ditemukan % quant(%1,tiket)" + +#: lib/RT/Record.pm:942 +msgid "Found Object" +msgstr "Objek ditemukan" + +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "Freeform" + +#: NOT FOUND IN SOURCE +msgid "FreeformContactInfo" +msgstr "FreeformContactInfo" + +#: lib/RT/Date.pm:417 +msgid "Fri." +msgstr "Jum." + +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 +msgid "Full headers" +msgstr "Catatan Atas Lengkap" + +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "Ambil template dari file" + +#: lib/RT/Transaction_Overlay.pm:673 +#. ($New->Name) +msgid "Given to %1" +msgstr "Berikan ke %1" + +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 +msgid "Global" +msgstr "Global" + +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Kolom Kustom Global" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "Konfigurasi kolom kustom global" + +#: html/Admin/Elements/SelectTemplate:59 +#. (loc($Template->Name)) +msgid "Global template: %1" +msgstr "Template Global: %1" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Ambil" + +#: 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 +msgid "Go!" +msgstr "Ambil!" + +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 +msgid "Goto ticket" +msgstr "Ambil tiket" + +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 +msgid "Group" +msgstr "Grup" + +#: 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 "Hak Grup" + +#: lib/RT/Group_Overlay.pm:991 +msgid "Group already has member" +msgstr "Grup sudah memiliki anggota" + +#: html/Admin/Groups/Modify.html:109 +#. ($create_msg) +msgid "Group could not be created: %1" +msgstr "Grup tidak dapat dibuat: %1" + +#: lib/RT/Group_Overlay.pm:529 +msgid "Group created" +msgstr "Grup sudah dibuat" + +#: lib/RT/Group_Overlay.pm:1163 +msgid "Group has no such member" +msgstr "Grup tidak memiliki anggota terseperti ini" + +#: 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 +msgid "Group not found" +msgstr "Grup tidak ditemukan" + +#: 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 +msgid "Groups" +msgstr "Grup" + +#: lib/RT/Group_Overlay.pm:997 +msgid "Groups can't be members of their members" +msgstr "Grup tidak bisa menjadi anggota dari mereka" + +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "Grup sesuai dengan kriteria pencarian" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "Pengguna ini milik grup" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 +msgid "Hello!" +msgstr "Halo!" + +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 +#. ($name) +msgid "Hello, %1" +msgstr "Halo, %1" + +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 +msgid "History" +msgstr "Historis" + +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "Historis grup %1" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "Historis pengguna %1" + +#: NOT FOUND IN SOURCE +msgid "HomePhone" +msgstr "Telepon Rumah" + +#: html/Elements/Tabs:65 +msgid "Homepage" +msgstr "Homepage" + +#: lib/RT/Base.pm:110 +#. (6) +msgid "I have %quant(%1,concrete mixer)." +msgstr "Saya memiliki %quant (%1,concrete mixer)." + +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "Saya tersesat" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 +msgid "Id" +msgstr "Id" + +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 +msgid "Identity" +msgstr "Identitas" + +#: etc/initialdata:429 +msgid "If an approval is rejected, reject the original and delete pending approvals" +msgstr "Jika izin ditolak, tolak izin yang asli dan hapus izin yang masih ditunda" + +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "Jika tidak ada pemohon yang ditentukan, buat tiket dengan pemohon ini." + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "Jika tidak ada antrian yang ditentukan, buat tiket untuk antrian ini." + +#: 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 "Jika alat ini adalah setgid, hostile local user dapat menggunakan alat ini untuk mendapatkan akses administrasi ke RT." + +#: 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 "Jika anda memperbaharui apapun diatas, pastikanlah untuk" + +#: lib/RT/Record.pm:933 +msgid "Illegal value for %1" +msgstr "Nilai Ilegal untuk %1" + +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Gambar" + +#: lib/RT/Record.pm:936 +msgid "Immutable field" +msgstr "Kolom yang tetap" + +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Termasuk menon-aktifkan grup di dalam daftar." + +#: html/Admin/Queues/index.html:65 +msgid "Include disabled queues in listing." +msgstr "Termasuk menon-aktifkan antrian di dalam daftar." + +#: html/Admin/Users/index.html:71 +msgid "Include disabled users in search." +msgstr "Termasuk menon-aktifkan pengguna di dalam pencarian." + +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "Query tidak lengkap" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "query tidak lengkap" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 +msgid "Initial Priority" +msgstr "Prioritas Awal" + +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 +msgid "InitialPriority" +msgstr "Prioritas Awal" + +#: lib/RT/ScripAction_Overlay.pm:134 +msgid "Input error" +msgstr "Kesalahan Input" + +#: lib/RT/Ticket_Overlay.pm:3454 +msgid "Internal Error" +msgstr "Kesalahan Internal" + +#: lib/RT/Record.pm:305 +#. ($id->{error_message}) +msgid "Internal Error: %1" +msgstr "Kesalahan Internal: %1" + +#: lib/RT/Group_Overlay.pm:676 +msgid "Invalid Group Type" +msgstr "Tipe Grup tidak valid" + +#: lib/RT/Principal_Overlay.pm:161 +msgid "Invalid Right" +msgstr "Hak-hak tidak valid" + +#: lib/RT/Record.pm:938 +msgid "Invalid data" +msgstr "Data tidak valid" + +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 +msgid "Invalid queue" +msgstr "Antrian tidak valid" + +#: 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 "Hak tidak valid" + +#: lib/RT/Record.pm:280 +#. ($key) +msgid "Invalid value for %1" +msgstr "Nilai tidak valid untuk %1" + +#: lib/RT/Record.pm:1597 +msgid "Invalid value for custom field" +msgstr "Nilai tidak valid untuk kolom kustom" + +#: lib/RT/Ticket_Overlay.pm:413 +msgid "Invalid value for status" +msgstr "Nilai tidak valid untuk status" + +#: bin/rt-crontool:216 +msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." +msgstr "Hal ini sangat penting bahwa pengguna yang tidak memiliki hak-hak istimewa tidak dapat diizinkan untuk menjalankan program ini." + +#: 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 "Sangat disarankan bahwa anda membuat pengguna unix yang tidak memiliki hak-hak istimewa dengan keanggotaan grup yang benar dan akses RT untuk menjalankan alat ini." + +#: bin/rt-crontool:188 +msgid "It takes several arguments:" +msgstr "Hal ini memerlukan beberapa penjelasan:" + +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "Diberi huruf miring" + +#: lib/RT/Date.pm:437 +msgid "Jan." +msgstr "Jan." + +#: lib/RT/Group_Overlay.pm:174 +msgid "Join or leave this group" +msgstr "Bergabung atau tinggalkan grup ini" + +#: lib/RT/Date.pm:443 +msgid "Jul." +msgstr "Jul." + +#: html/Ticket/Elements/Tabs:122 +msgid "Jumbo" +msgstr "Jumbo" + +#: lib/RT/Date.pm:442 +msgid "Jun." +msgstr "Jun." + +#: NOT FOUND IN SOURCE +msgid "Lang" +msgstr "Bhs" + +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "Bahasa" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "Besar" + +#: html/Ticket/Elements/Tabs:96 +msgid "Last" +msgstr "Akhir" + +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 +msgid "Last Contact" +msgstr "Kontak Terakhir" + +#: html/Elements/SelectDateType:50 +msgid "Last Contacted" +msgstr "Kontak Terakhir" + +#: NOT FOUND IN SOURCE +msgid "Last Notified" +msgstr "Pemberitahuan Terakhir" + +#: html/Elements/SelectDateType:51 +msgid "Last Updated" +msgstr "Pembaharuan Terakhir" + +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "Pembaharuan Terakhir Oleh" + +#: html/Ticket/Elements/ShowBasics:68 +msgid "Left" +msgstr "Kirim" + +#: html/Admin/Users/Modify.html:109 +msgid "Let this user access RT" +msgstr "Biarkan pengguna ini mengakses RT" + +#: html/Admin/Users/Modify.html:113 +msgid "Let this user be granted rights" +msgstr "Biarlah pengguna ini diberi hak-hak" + +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "Link" + +#: lib/RT/Record.pm:1292 +msgid "Link already exists" +msgstr "Link sudah ada" + +#: lib/RT/Record.pm:1306 +msgid "Link could not be created" +msgstr "Link tidak dapat dibuat" + +#: lib/RT/Record.pm:1312 +#. ($TransString) +msgid "Link created (%1)" +msgstr "Link sudah dibuat (%1)" + +#: lib/RT/Record.pm:1373 +#. ($TransString) +msgid "Link deleted (%1)" +msgstr "Link sudah dihapus (%1)" + +#: lib/RT/Record.pm:1379 +msgid "Link not found" +msgstr "Link tidak ditemukan" + +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 +#. ($Ticket->Id) +msgid "Link ticket #%1" +msgstr "Link tiket #%1" + +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 +msgid "Links" +msgstr "Link-link" + +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "Memanggil" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "Memanggil pencarian yang disimpan:" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "Memanggil pencarian yang disimpan" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "Memanggil modul perl" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "Memanggil pencarian %1" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 +msgid "Location" +msgstr "Lokasi" + +#: lib/RT.pm:212 +#. ($RT::LogDir) +msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." +msgstr "Direktori Log %1 tidak ditemukan atau tidak dapat ditulis.\\n RT tidak dapat dijalankan." + +#: html/Elements/Header:94 +#. ("<b>".$session{'CurrentUser'}->Name."</b>") +msgid "Logged in as %1" +msgstr "Masuk sebagai %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 +msgid "Login" +msgstr "Login" + +#: html/Elements/Header:91 +msgid "Logout" +msgstr "Logout" + +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "Mencari tipe yang tidak sesuai (mismatch)" + +#: html/Search/Bulk.html:104 +msgid "Make Owner" +msgstr "Buat Pemilik" + +#: html/Search/Bulk.html:128 +msgid "Make Status" +msgstr "Buat Status" + +#: html/Search/Bulk.html:136 +msgid "Make date Due" +msgstr "Buat Tanggal Batas Waktu" + +#: html/Search/Bulk.html:138 +msgid "Make date Resolved" +msgstr "Buat Tanggal Penyelesaian" + +#: html/Search/Bulk.html:132 +msgid "Make date Started" +msgstr "Buat Tanggal Mulai" + +#: html/Search/Bulk.html:130 +msgid "Make date Starts" +msgstr "Buat Tanggal Mulai" + +#: html/Search/Bulk.html:134 +msgid "Make date Told" +msgstr "Buat Tanggal Pemberitahuan" + +#: html/Search/Bulk.html:124 +msgid "Make priority" +msgstr "Buat prioritas" + +#: html/Search/Bulk.html:126 +msgid "Make queue" +msgstr "Buat antrian" + +#: html/Search/Bulk.html:122 +msgid "Make subject" +msgstr "Buat subjek" + +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "Buat agar grup ini terlihat pada sisi pengguna" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "Mengatur kolom kustom dan nilai kolom kustom" + +#: html/Admin/index.html:69 +msgid "Manage groups and group membership" +msgstr "Mengatur grup dan keanggotaan grup" + +#: html/Admin/index.html:85 +msgid "Manage properties and configuration which apply to all queues" +msgstr "Mengatur propertis dan konfigurasi yang akan digunakan di setiap antrian" + +#: html/Admin/index.html:74 +msgid "Manage queues and queue-specific properties" +msgstr "Mengatur antrian dan propertis antrian tertentu" + +#: html/Admin/index.html:64 +msgid "Manage users and passwords" +msgstr "Mengatur pengguna dan sandi" + +#: lib/RT/Date.pm:439 +msgid "Mar." +msgstr "Mar." + +#: lib/RT/Date.pm:441 +msgid "May." +msgstr "Mei." + +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "Anggota %1 sudah ditambah" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "Anggota %1 sudah dihapus" + +#: lib/RT/Group_Overlay.pm:1008 +msgid "Member added" +msgstr "Anggota sudah ditambah" + +#: lib/RT/Group_Overlay.pm:1170 +msgid "Member deleted" +msgstr "Anggota sudah dihapus" + +#: lib/RT/Group_Overlay.pm:1174 +msgid "Member not deleted" +msgstr "Anggota tidak dihapus" + +#: html/Elements/SelectLinkType:47 +msgid "Member of" +msgstr "Anggota dari" + +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 +msgid "Members" +msgstr "Anggota-anggota" + +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "Keanggotaan di dalam %1 sudah ditambah" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "Keanggotaan di dalam %1 sudah dihapus" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "Keanggotaan" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "Keanggotaan dari pengguna %1" + +#: lib/RT/Ticket_Overlay.pm:2849 +msgid "Merge Successful" +msgstr "Penggabungan Berhasil" + +#: lib/RT/Ticket_Overlay.pm:2736 +msgid "Merge failed. Couldn't set EffectiveId" +msgstr "Penggabungan gagal. Tidak dapat mengatur EffectiveId" + +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "Penggabungan gagal. Tidak dapat mengatur Status" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 +msgid "Merge into" +msgstr "Bergabung ke dalam" + +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Bergabung ke dalam %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 +msgid "Message" +msgstr "Pesan" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "Pesan tidak dapat dicatat" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Pesan sudah dicatat" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "Pesan mengenai Tiket ini tidak akan dikirim ke..." + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "tanda kurung tidak sama" + +#: lib/RT/Record.pm:940 +msgid "Missing a primary key?: %1" +msgstr "Kunci utama tidak ditemukan?: %1" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 +msgid "Mobile" +msgstr "Hp" + +#: NOT FOUND IN SOURCE +msgid "MobilePhone" +msgstr "Handphone" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "Modify Access Control List" +msgstr "Mengubah Daftar Kontrol Akses" + +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "Ubah Kolom Kustom yang digunakan untuk %1 untuk semua %2" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Mengatur Kolom Kustom yang dapat digunakan untuk seluruh %1" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Fields which apply to all queues" +msgstr "Mengatur Kolom Kustom yang dapat digunakan di seluruh antrian" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Ubah Hak Grup" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Ubah Anggota" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Ubah Hak-hak" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" +msgstr "Mengubah template Scrip untuk antrian ini" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" +msgstr "Mengubah Scrip untuk antrian ini" + +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Ubah Hak Pengguna" + +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" +msgstr "Mengubah Kolom Kustom untuk antrian %1" + +#: html/Admin/Queues/Scrip.html:75 +#. ($QueueObj->Name) +msgid "Modify a scrip for queue %1" +msgstr "Mengubah scrip untuk antrian %1" + +#: html/Admin/Global/Scrip.html:69 +msgid "Modify a scrip which applies to all queues" +msgstr "Mengubah scrip yang dapat digunakan di seluruh antrian" + +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Mengubah objek-objek yang berhubungan untuk %1" + +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 +#. ($TicketObj->Id) +msgid "Modify dates for #%1" +msgstr "Mengubah tanggal untuk #%1" + +#: html/Ticket/ModifyDates.html:56 +#. ($TicketObj->Id) +msgid "Modify dates for ticket # %1" +msgstr "Mengubah tanggal untuk tiket # %1" + +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "Mengubah kolom kustom global" + +#: 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 "Mengubah hak grup global" + +#: html/Admin/Global/GroupRights.html:54 +msgid "Modify global group rights." +msgstr "Mengubah hak grup global." + +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 +msgid "Modify global user rights" +msgstr "Mengubah hak pengguna global" + +#: html/Admin/Global/UserRights.html:54 +msgid "Modify global user rights." +msgstr "Mengubah hak pengguna global." + +#: lib/RT/Group_Overlay.pm:171 +msgid "Modify group metadata or delete group" +msgstr "Mengubah grup metadata atau menghapus grup" + +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Mengubah hak grup untuk kolom kustom %1" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 +#. ($GroupObj->Name) +msgid "Modify group rights for group %1" +msgstr "Mengubah hak grup untuk grup %1" + +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 +#. ($QueueObj->Name) +msgid "Modify group rights for queue %1" +msgstr "Mengubah hak grup untuk antrian %1" + +#: lib/RT/Group_Overlay.pm:173 +msgid "Modify membership roster for this group" +msgstr "Mengubah daftar nama keanggotaan untuk grup ini" + +#: lib/RT/System.pm:83 +msgid "Modify one's own RT account" +msgstr "Mengubah pemilik account RT" + +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 +#. ($QueueObj->Name) +msgid "Modify people related to queue %1" +msgstr "Mengubah orang-orang yang berhubungan dengan antrian %1" + +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 +#. ($Ticket->id) +#. ($Ticket->Id) +msgid "Modify people related to ticket #%1" +msgstr "Mengubah orang-orang yang berhubungan dengan tiket #%1" + +#: html/Admin/Queues/Scrips.html:67 +#. ($QueueObj->Name) +msgid "Modify scrips for queue %1" +msgstr "Mengubah scrip untuk antrian %1" + +#: 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 "Mengubah scrip yang dapat digunakan di seluruh antrian" + +#: 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) +msgid "Modify template %1" +msgstr "Mengubah template %1" + +#: html/Admin/Global/Templates.html:65 +msgid "Modify templates which apply to all queues" +msgstr "Mengubah template yang dapat digunakan di seluruh antrian" + +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 +#. ($Group->Name) +msgid "Modify the group %1" +msgstr "Mengubah grup %1" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "Modify the queue watchers" +msgstr "Mengubah pengamat antrian" + +#: html/Admin/Users/Modify.html:301 +#. ($UserObj->Name) +msgid "Modify the user %1" +msgstr "Mengubah pengguna %1" + +#: html/Ticket/ModifyAll.html:58 +#. ($Ticket->Id) +msgid "Modify ticket # %1" +msgstr "Mengubah tiket # %1" + +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 +#. ($TicketObj->Id) +msgid "Modify ticket #%1" +msgstr "Mengubah tiket #%1" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "Modify tickets" +msgstr "Mengubah tiket-tiket" + +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Mengubah hak pengguna untuk kolom kustom %1" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 +#. ($GroupObj->Name) +msgid "Modify user rights for group %1" +msgstr "Mengubah hak pengguna untuk grup %1" + +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 +#. ($QueueObj->Name) +msgid "Modify user rights for queue %1" +msgstr "Mengubah hak pengguna untuk antrian %1" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "ModifyACL" +msgstr "Mengubah ACL" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "Mengubah Kolom Kustom" + +#: lib/RT/Group_Overlay.pm:174 +msgid "ModifyOwnMembership" +msgstr "Mengubah Milik Keanggotaan" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "ModifyQueueWatchers" +msgstr "Mengubah Pengamat Antrian" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "ModifyScrips" +msgstr "Mengubah Scrip" + +#: lib/RT/System.pm:83 +msgid "ModifySelf" +msgstr "Mengubah Sendiri" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "ModifyTemplate" +msgstr "Mengubah Template" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "ModifyTicket" +msgstr "Mengubah Tiket" + +#: lib/RT/Date.pm:413 +msgid "Mon." +msgstr "Sen." + +#: html/Ticket/Elements/ShowRequestor:62 +#. ($name) +msgid "More about %1" +msgstr "Lebih mengenai %1" + +#: NOT FOUND IN SOURCE +msgid "Move" +msgstr "Pindah" + +#: html/Admin/Elements/PickCustomFields:83 +msgid "Move down" +msgstr "Pindah ke bawah" + +#: html/Admin/Elements/PickCustomFields:75 +msgid "Move up" +msgstr "Pindah ke atas" + +#: html/Admin/Elements/SelectSingleOrMultiple:48 +msgid "Multiple" +msgstr "Beberapa" + +#: lib/RT/User_Overlay.pm:227 +msgid "Must specify 'Name' attribute" +msgstr "Harus menentukan 'Nama' attribut" + +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "%1 tiketku" + +#: html/Approvals/index.html:46 html/Approvals/index.html:47 +msgid "My approvals" +msgstr "Izinku" + +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Pencarian yang kusimpan" + +#: 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 +msgid "Name" +msgstr "Nama" + +#: lib/RT/User_Overlay.pm:234 +msgid "Name in use" +msgstr "Nama yang digunakan" + +#: html/Ticket/Elements/ShowDates:73 +msgid "Never" +msgstr "Tidak pernah" + +#: html/Elements/Quicksearch:51 +msgid "New" +msgstr "Baru" + +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Link Baru" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 +msgid "New Password" +msgstr "Sandi Baru" + +#: etc/initialdata:332 +msgid "New Pending Approval" +msgstr "Izin Baru yang Ditunda" + +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Query Baru" + +#: NOT FOUND IN SOURCE +msgid "New Relationships" +msgstr "Hubungan Baru" + +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 +msgid "New custom field" +msgstr "Kolom Kustom Baru" + +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 +msgid "New group" +msgstr "Grup Baru" + +#: html/SelfService/Prefs.html:53 +msgid "New password" +msgstr "Sandi Baru" + +#: lib/RT/User_Overlay.pm:817 +msgid "New password notification sent" +msgstr "Kirim Pemberitahuan Sandi Baru" + +#: html/Admin/Elements/QueueTabs:95 +msgid "New queue" +msgstr "Antrian Baru" + +#: html/Admin/Elements/SelectRights:65 +msgid "New rights" +msgstr "Hak-hak Baru" + +#: 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 "Scrip Baru" + +#: 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 "Template Baru" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Tiket Baru" + +#: lib/RT/Ticket_Overlay.pm:2713 +msgid "New ticket doesn't exist" +msgstr "Tidak ada Tiket baru" + +#: html/Admin/Elements/UserTabs:78 +msgid "New user" +msgstr "Pengguna Baru" + +#: html/Admin/Elements/CreateUserCalled:47 +msgid "New user called" +msgstr "Pengguna Baru disebut" + +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 +msgid "New watchers" +msgstr "Pengamat Baru" + +#: NOT FOUND IN SOURCE +msgid "New window setting" +msgstr "Setting Window Baru" + +#: html/Ticket/Elements/Tabs:92 +msgid "Next" +msgstr "Berikutnya" + +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "Halaman Berikutnya" + +#: NOT FOUND IN SOURCE +msgid "NickName" +msgstr "Nama Panggilan" + +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 +msgid "Nickname" +msgstr "Nama Panggilan" + +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "Tidak ada Kelas yang didefinisikan" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 +msgid "No CustomField" +msgstr "Tidak ada Kolom Kustom" + +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Tidak ada Kolom Kustom yang didefinisikan" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 +msgid "No Group defined" +msgstr "Tidak ada Grup yang didefinisikan" + +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Tidak ada Query" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 +msgid "No Queue defined" +msgstr "Tidak ada Antrian yang didefinisikan" + +#: bin/rt-crontool:73 +msgid "No RT user found. Please consult your RT administrator.\\n" +msgstr "Tidak ada pengguna RT yang ditemukan. Silakan berkonsultasi dengan administrator RT anda.\\n" + +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 +msgid "No Template" +msgstr "Tidak ada Template" + +#: NOT FOUND IN SOURCE +msgid "No Ticket specified. Aborting ticket " +msgstr "Tidak ada Tiket yang ditentukan. Batalkan tiket " + +#: html/Approvals/Elements/Approve:67 +msgid "No action" +msgstr "Tidak ada aksi" + +#: lib/RT/Record.pm:935 +msgid "No column specified" +msgstr "Tidak ada kolom yang ditentukan" + +#: html/Ticket/Elements/ShowRequestor:68 +msgid "No comment entered about this user" +msgstr "Tidak ada komentar yang dimasukkan mengenai pengguna ini" + +#: 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) +msgid "No description for %1" +msgstr "Tidak ada deskripsi untuk %1" + +#: lib/RT/Users_Overlay.pm:185 +msgid "No group specified" +msgstr "Tidak ada grup yang ditentukan" + +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Grup yang sesuai dengan kriteria pencarian tidak ditemukan." + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "Tidak ada pesan yang dilampirkan" + +#: lib/RT/User_Overlay.pm:1035 +msgid "No password set" +msgstr "Tidak ada pengaturan Sandi" + +#: lib/RT/Queue_Overlay.pm:358 +msgid "No permission to create queues" +msgstr "Tidak ada izin untuk membuat antrian" + +#: lib/RT/Ticket_Overlay.pm:409 +#. ($QueueObj->Name) +msgid "No permission to create tickets in the queue '%1'" +msgstr "Tidak ada izin untuk membuat tiket ini di dalam antrian '%1'" + +#: lib/RT/User_Overlay.pm:187 +msgid "No permission to create users" +msgstr "Tidak ada izin untuk membuat pengguna" + +#: html/SelfService/Display.html:165 +msgid "No permission to display that ticket" +msgstr "Tidak ada izin untuk menampilkan tiket tersebut" + +#: html/SelfService/Update.html:117 +msgid "No permission to view update ticket" +msgstr "Tidak ada izin untuk menampilkan tiket yang sudah diperbaharui" + +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 +msgid "No principal specified" +msgstr "Tidak ada prinsipal yang ditentukan" + +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 +msgid "No principals selected." +msgstr "Tidak ada prinsipal yang dipilih." + +#: html/Admin/Queues/index.html:57 +msgid "No queues matching search criteria found." +msgstr "Antrian yang sesuai dengan kriteria pencarian tidak ditemukan." + +#: html/Admin/Elements/SelectRights:106 +msgid "No rights found" +msgstr "Tidak ada hak-hak yang ditemukan" + +#: html/Admin/Elements/SelectRights:53 +msgid "No rights granted." +msgstr "Tidak ada hak-hak yang diberikan." + +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "Tidak ada pencarian yang dipanggil" + +#: html/Search/Bulk.html:194 +msgid "No search to operate on." +msgstr "Tidak ada pencarian untuk dijalankan di." + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Tidak ada subjek" + +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 +msgid "No transaction type specified" +msgstr "Tidak ada tipe transaksi yang ditentukan" + +#: html/Admin/Users/index.html:55 +msgid "No users matching search criteria found." +msgstr "Pengguna yang sesuai dengan kriteria pencarian tidak ditemukan." + +#: NOT FOUND IN SOURCE +msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" +msgstr "Tidak ada pengguna RT yang valid ditemukan. RT cvs handler dilepaskan. Silakan berkonsultasi dengan administrator RT anda.\\n" + +#: lib/RT/Record.pm:932 +msgid "No value sent to _Set!\\n" +msgstr "Tidak ada nilai yang dikirim ke _Set!\\n" + +#: html/Elements/QuickCreate:61 +msgid "Nobody" +msgstr "Tidak seorangpun" + +#: lib/RT/Record.pm:937 +msgid "Nonexistant field?" +msgstr "Kolom kosong?" + +#: html/Elements/Header:96 +msgid "Not logged in." +msgstr "Belum log in" + +#: lib/RT/Date.pm:393 +msgid "Not set" +msgstr "Belum diatur" + +#: html/NoAuth/Reminder.html:48 +msgid "Not yet implemented." +msgstr "Belum diimplementasikan." + +#: html/Approvals/Elements/Approve:70 +msgid "Notes" +msgstr "Catatan" + +#: lib/RT/User_Overlay.pm:820 +msgid "Notification could not be sent" +msgstr "Pemberitahuan tidak dapat dikirimkan" + +#: etc/initialdata:101 +msgid "Notify AdminCcs" +msgstr "Beritahu AdminCcs" + +#: etc/initialdata:97 +msgid "Notify AdminCcs as Comment" +msgstr "Beritahu AdminCcs dengan komentar" + +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "Beritahu Ccs" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "Beritahu Ccs dengan komentar" + +#: etc/initialdata:128 +msgid "Notify Other Recipients" +msgstr "Beritahu Penerima Lain" + +#: etc/initialdata:124 +msgid "Notify Other Recipients as Comment" +msgstr "Beritahu Penerima Lain dengan komentar" + +#: etc/initialdata:85 +msgid "Notify Owner" +msgstr "Beritahu Pemilik" + +#: etc/initialdata:81 +msgid "Notify Owner as Comment" +msgstr "Beritahu Pemilik dengan komentar" + +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "Beritahu pemilik bahwa tiketnya ditolak" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "Beritahu Pemilik bahwa tiketnya sudah disetujui oleh seluruh pemberi persetujuan" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "Beritahu Pemilik bahwa tiketnya sudah disetujui oleh beberapa pemberi persetujuan" + +#: etc/initialdata:334 +msgid "Notify Owners and AdminCcs of new items pending their approval" +msgstr "Beritahu Pemilik dan AdminCcs mengenai izin item baru yang ditunda" + +#: etc/initialdata:77 +msgid "Notify Requestors" +msgstr "Beritahu Pemohon" + +#: etc/initialdata:111 +msgid "Notify Requestors and Ccs" +msgstr "Beritahu Pemohon dan Ccs" + +#: etc/initialdata:106 +msgid "Notify Requestors and Ccs as Comment" +msgstr "Beritahu Pemohon dan Ccs dengan komentar" + +#: etc/initialdata:120 +msgid "Notify Requestors, Ccs and AdminCcs" +msgstr "Beritahu Pemohon, Ccs dan AdminCcs" + +#: etc/initialdata:116 +msgid "Notify Requestors, Ccs and AdminCcs as Comment" +msgstr "Beritahu Pemohon, Ccs dan AdminCcs dengan komentar" + +#: lib/RT/Date.pm:447 +msgid "Nov." +msgstr "Nop." + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "ATAU" + +#: lib/RT/Record.pm:319 +msgid "Object could not be created" +msgstr "Objek tidak dapat dibuat" + +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "Objek tidak dapat dihapus" + +#: lib/RT/Record.pm:338 +msgid "Object created" +msgstr "Object sudah dibuat" + +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "Objek sudah dihapus" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "Tipe Objek %1 tidak dapat mengambil kolom kustom" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "Tipe Objek tidak sesuai (mismatch)" + +#: lib/RT/Date.pm:446 +msgid "Oct." +msgstr "Okt." + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Offline" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Ubah Offline" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "Upload Offline" + +#: html/Elements/SelectDateRelation:56 +msgid "On" +msgstr "Pada" + +#: etc/initialdata:163 +msgid "On Comment" +msgstr "Pada Komentar" + +#: etc/initialdata:156 +msgid "On Correspond" +msgstr "Pada Hubungan" + +#: etc/initialdata:145 +msgid "On Create" +msgstr "Pada Pembuatan" + +#: etc/initialdata:184 +msgid "On Owner Change" +msgstr "Pada Perubahan Pemilik" + +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "Pada Perubahan Prioritas" + +#: etc/initialdata:192 +msgid "On Queue Change" +msgstr "Pada Perubahan Antrian" + +#: etc/initialdata:198 +msgid "On Resolve" +msgstr "Pada Penyelesaian" + +#: etc/initialdata:169 +msgid "On Status Change" +msgstr "Pada Perubahan Status" + +#: etc/initialdata:150 +msgid "On Transaction" +msgstr "Pada Transaksi" + +#: html/Approvals/Elements/PendingMyApproval:71 +#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") +msgid "Only show approvals for requests created after %1" +msgstr "Hanya menampilkan izin untuk permintaan yang dibuat sesudah %1" + +#: html/Approvals/Elements/PendingMyApproval:69 +#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") +msgid "Only show approvals for requests created before %1" +msgstr "Hanya menampilkan izin untuk permintaan yang dibuat sebelum %1" + +#: html/Elements/Quicksearch:52 +msgid "Open" +msgstr "Buka" + +#: html/Ticket/Elements/Tabs:159 +msgid "Open it" +msgstr "Buka ini" + +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "Buka tiket" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in a new window" +msgstr "Buka tiket (dari daftar) di window yang baru" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in another window" +msgstr "Buka tiket (dari daftar) di window yang lain" + +#: etc/initialdata:140 +msgid "Open tickets on correspondence" +msgstr "Buka tiket pada korespondensi" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Diurutkan sesuai" + +#: NOT FOUND IN SOURCE +msgid "Ordering and sorting" +msgstr "Diurutkan dan disortir" + +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 +msgid "Organization" +msgstr "Organisasi" + +#: html/Approvals/Elements/Approve:54 +#. ($approving->Id, $approving->Subject) +msgid "Originating ticket: #%1" +msgstr "Tiket Awal: #%1" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "Email yang keluar mengenai komentar yang dicatat" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "Email keluar yang dicatat" + +#: html/Admin/Queues/Modify.html:90 +msgid "Over time, priority moves toward" +msgstr "Lewat Batas waktu, prioritas pindah ke arah" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "Own tickets" +msgstr "Memiliki tiket-tiket" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "OwnTicket" +msgstr "Memiliki tiket" + +#: 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 +msgid "Owner" +msgstr "Pemilik" + +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "Pemilik tidak dapat diatur." + +#: lib/RT/Transaction_Overlay.pm:661 +#. ($Old->Name , $New->Name) +msgid "Owner forcibly changed from %1 to %2" +msgstr "Pemilik secara paksa digantikan dari %1 ke %2" + +#: NOT FOUND IN SOURCE +msgid "Owner is" +msgstr "Pemilik adalah" + +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Halaman %1 dari %2" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 +msgid "Pager" +msgstr "Pager" + +#: NOT FOUND IN SOURCE +msgid "PagerPhone" +msgstr "Pager" + +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 +msgid "Parents" +msgstr "Induk " + +#: html/Elements/Login:74 html/User/Prefs.html:105 +msgid "Password" +msgstr "Sandi" + +#: html/NoAuth/Reminder.html:46 +msgid "Password Reminder" +msgstr "Pengingat Sandi" + +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "Sandi sudah diubah" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "Minimal sandi memerlukan paling sedikit %1 karakter" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Password too short" +msgstr "Sandi terlalu singkat" + +#: html/User/Prefs.html:232 +#. (loc_fuzzy($msg)) +msgid "Password: %1" +msgstr "Sandi: %1" + +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "Sandi tidak sesuai." + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "Sandi tidak sesuai. Sandi anda belum diganti" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 +msgid "People" +msgstr "Orang-Orang" + +#: etc/initialdata:133 +msgid "Perform a user-defined action" +msgstr "Menampilkan aksi pengguna yang belum didefinisikan" + +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Konfigurasi Perl" + +#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm: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 +msgid "Permission Denied" +msgstr "Izin ditolak" + +#: html/User/Elements/Tabs:56 +msgid "Personal Groups" +msgstr "Grup Pribadi" + +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 +msgid "Personal groups" +msgstr "Grup pribadi" + +#: html/User/Elements/DelegateRights:58 +msgid "Personal groups:" +msgstr "Grup pribadi:" + +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 +msgid "Phone numbers" +msgstr "Nomor Telepon" + +#: 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 +msgid "Preferences" +msgstr "Pilihan" + +#: lib/RT/Action/Generic.pm:196 +msgid "Prepare Stubbed" +msgstr "Siapkan Potongan Tiket" + +#: html/Ticket/Elements/Tabs:84 +msgid "Prev" +msgstr "Sebelumnya" + +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "Halaman Sebelumnya" + +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 +#. ($args{'PrincipalId'}) +msgid "Principal %1 not found." +msgstr "Prinsipal %1 tidak ditemukan." + +#: 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 +msgid "Priority" +msgstr "Prioritas" + +#: html/Admin/Queues/Modify.html:86 +msgid "Priority starts at" +msgstr "Prioritas dimulai pada" + +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "Pribadi:" + +#: etc/initialdata:25 +msgid "Privileged" +msgstr "Hak-hak Istimewa" + +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 +#. (loc_fuzzy($msg)) +msgid "Privileged status: %1" +msgstr "Status Hak-hak Istimewa: %1" + +#: html/Admin/Users/index.html:102 +msgid "Privileged users" +msgstr "Pengguna Hak-hak Istimewa" + +#: NOT FOUND IN SOURCE +msgid "Projects" +msgstr "Proyek-Proyek" + +#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 +msgid "Pseudogroup for internal use" +msgstr "Pseudogroup digunakan untuk internal" + +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Query" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "Pembuat Query" + +#: 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 +msgid "Queue" +msgstr "Antrian" + +#: 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) +msgid "Queue %1 not found" +msgstr "Antrian %1 tidak ditemukan" + +#: html/Admin/Queues/Modify.html:64 +msgid "Queue Name" +msgstr "Nama Antrian" + +#: lib/RT/Queue_Overlay.pm:362 +msgid "Queue already exists" +msgstr "Antrian sudah ada" + +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 +msgid "Queue could not be created" +msgstr "Antrian tidak dapat dibuat" + +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 +msgid "Queue could not be loaded." +msgstr "Antrian tidak dapat dipanggil." + +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 +msgid "Queue created" +msgstr "Antrian sudah dibuat" + +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 +msgid "Queue not found" +msgstr "Antrian tidak dapat ditemukan" + +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 +msgid "Queues" +msgstr "Antrian-antrian" + +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "Pencarian Cepat" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Pembuatan Tiket Cepat" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS" + +#: html/Elements/Login:66 +#. ($RT::VERSION) +msgid "RT %1" +msgstr "RT %1" + +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 +#. ($RT::VERSION, $RT::rtname) +msgid "RT %1 for %2" +msgstr "RT %1 untuk %2" + +#: html/Admin/index.html:46 html/Admin/index.html:47 +msgid "RT Administration" +msgstr "Administrasi RT" + +#: html/Elements/Error:65 html/SelfService/Error.html:62 +msgid "RT Error" +msgstr "Kesalahan RT" + +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "Variable RT " + +#: html/index.html:72 html/index.html:75 +msgid "RT at a glance" +msgstr "Sekilas RT" + +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "RT tidak dapat menyimpan sesi anda" + +#: html/Elements/PageLayout:108 +#. ($RT::rtname) +msgid "RT for %1" +msgstr "RT untuk %1" + +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 +msgid "Real Name" +msgstr "Nama Asli" + +#: NOT FOUND IN SOURCE +msgid "RealName" +msgstr "Nama Asli" + +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "Referensi oleh %1 sudah ditambah" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "Referensi oleh %1 sudah dihapus" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "Referensi ke %1 sudah ditambah" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "Referensi ke %1 sudah dihapus" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 +msgid "Referred to by" +msgstr "Diserahkan oleh" + +#: 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 +msgid "Refers to" +msgstr "Diserahkan ke" + +#: NOT FOUND IN SOURCE +msgid "Refine search" +msgstr "Membersihkan pencarian" + +#: html/Elements/Refresh:57 +#. ($value/60) +msgid "Refresh this page every %1 minutes." +msgstr "Refresh halaman ini setiap %1 menit." + +#: NOT FOUND IN SOURCE +msgid "Relationships" +msgstr "Hubungan" + +#: html/Search/Bulk.html:116 +msgid "Remove AdminCc" +msgstr "Hapus AdminCc" + +#: html/Search/Bulk.html:112 +msgid "Remove Cc" +msgstr "Hapus Cc" + +#: html/Search/Bulk.html:108 +msgid "Remove Requestor" +msgstr "Hapus Pemohon" + +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 +msgid "Reply" +msgstr "Balas" + +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Balas ke Alamat" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Balas ke Pemohon" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "Reply to tickets" +msgstr "Balas ke tiket" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "ReplyToTicket" +msgstr "Balas ke Tiket" + +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 +msgid "Requestor" +msgstr "Pemohon" + +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 +msgid "Requestors" +msgstr "Pemohon" + +#: html/Admin/Queues/Modify.html:96 +msgid "Requests should be due in" +msgstr "permintaan akan melewati batas waktu dalam" + +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Parameter yang diperlukan '%1' tidak didefinisikan" + +#: html/Elements/Submit:104 +msgid "Reset" +msgstr "Ulangi" + +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 +msgid "Residence" +msgstr "Tempat Tinggal" + +#: html/Ticket/Elements/Tabs:155 +msgid "Resolve" +msgstr "Penyelesaian" + +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Resolve ticket #%1 (%2)" +msgstr "Penyelesaian tiket #%1 (%2)" + +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 +msgid "Resolved" +msgstr "Sudah Diselesaikan" + +#: NOT FOUND IN SOURCE +msgid "Response to requestors" +msgstr "Balas ke pemohon" + +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 +msgid "Results" +msgstr "Hasil" + +#: NOT FOUND IN SOURCE +msgid "Results per page" +msgstr "Hasil per halaman" + +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 +msgid "Retype Password" +msgstr "Ketik Ulang Sandi" + +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Kembali pada" + +#: lib/RT/ACE_Overlay.pm:631 +msgid "Right Delegated" +msgstr "Hak-hak Utusan" + +#: lib/RT/ACE_Overlay.pm:321 +msgid "Right Granted" +msgstr "Memberikan Hak-hak" + +#: lib/RT/ACE_Overlay.pm:179 +msgid "Right Loaded" +msgstr "Memanggil Hak-hak" + +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 +msgid "Right could not be revoked" +msgstr "Hak-hak tidak dapat dihilangkan" + +#: html/User/Delegation.html:85 +msgid "Right not found" +msgstr "Hak-hak tidak ditemukan" + +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 +msgid "Right not loaded." +msgstr "Hak-hak tidak dapat dipanggil." + +#: lib/RT/ACE_Overlay.pm:713 +msgid "Right revoked" +msgstr "Hak-hak tidak dapat dihilangkan" + +#: html/Admin/Elements/UserTabs:67 +msgid "Rights" +msgstr "Hak-hak" + +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 +#. ($object_type) +msgid "Rights could not be granted for %1" +msgstr "Hak-hak tidak dapat diberikan untuk %1" + +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 +#. ($object_type) +msgid "Rights could not be revoked for %1" +msgstr "Hak-hak tidak dapat dihilangkan untuk %1" + +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 +msgid "Roles" +msgstr "Aturan" + +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Baris per halaman" + +#: lib/RT/Date.pm:418 +msgid "Sat." +msgstr "Sab." + +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Simpan" + +#: 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 +msgid "Save Changes" +msgstr "Simpan Perubahan" + +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Simpan Pilihan" + +#: html/Ticket/Elements/PreviewScrips:124 +msgid "Save changes" +msgstr "Simpan perubahaan" + +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "Simpan pencarian %1" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Simpan pencarian" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) +#. ($ARGS{'id'}) +msgid "Scrip #%1" +msgstr "Scrip #%1" + +#: lib/RT/Scrip_Overlay.pm:205 +msgid "Scrip Created" +msgstr "Scrip sudah dibuat" + +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Kolom Scrip" + +#: html/Admin/Elements/EditScrips:107 +msgid "Scrip deleted" +msgstr "Scrip sudah dihapus" + +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 +msgid "Scrips" +msgstr "Scrip" + +#: html/Admin/Queues/Scrips.html:55 +msgid "Scrips which apply to all queues" +msgstr "Scrip yang digunakan di seluruh antrian" + +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 +msgid "Search" +msgstr "Pencarian" + +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "Gagal memanggil atribut pencarian" + +#: html/Approvals/Elements/PendingMyApproval:60 +msgid "Search for approvals" +msgstr "Pencarian untuk izin" + +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "Perbaharui Pencarian: %1" + +#: NOT FOUND IN SOURCE +msgid "Searches can't be associated with that kind of object" +msgstr "Pencarian tidak dapat dihubungkan dengan objek yang seperti ini" + +#: bin/rt-crontool:213 +msgid "Security:" +msgstr "Keamanan:" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "Lihat kolom kustom" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "Lihat pesan email yang keluar dan semua penerimanya dengan tepat" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "Lihat Penjelasan Tiket Pribadi" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "Lihat Ringkasan Tiket" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "Lihat Kolom Kustom" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "Lihat Grup" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "SeeQueue" +msgstr "Lihat Antrian" + +#: NOT FOUND IN SOURCE +msgid "Select" +msgstr "Pilih" + +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "Pilih Kolom Kustom" + +#: html/Admin/Groups/index.html:78 +msgid "Select a group" +msgstr "Pilih grup" + +#: html/Admin/Queues/index.html:54 +msgid "Select a queue" +msgstr "Pilih antrian" + +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "Pilih antrian untuk tiket baru anda" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 +msgid "Select a user" +msgstr "Pilih Pengguna" + +#: html/Admin/Elements/CustomFieldTabs:90 +msgid "Select custom field" +msgstr "Pilih kolom kustom" + +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "Pilih kolom kustom untuk seluruh grup pengguna" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "Pilih kolom kustom untuk seluruh pengguna" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "Pilih kolom kustom untuk tiket di seluruh antrian" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "Pilih kolom kustom untuk transaksi pada tiket di dalam seluruh antrian" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 +msgid "Select group" +msgstr "Pilih grup" + +#: lib/RT/CustomField_Overlay.pm:59 +msgid "Select multiple values" +msgstr "Pilih beberapa nilai" + +#: lib/RT/CustomField_Overlay.pm:60 +msgid "Select one value" +msgstr "Pilih satu nilai" + +#: html/Admin/Elements/QueueTabs:92 +msgid "Select queue" +msgstr "Pilih antrian" + +#: 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 "Pilih scrip" + +#: 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 "Pilih template" + +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Pilih sampai %1 nilai" + +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" +msgstr "Pilih pengguna" + +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Kolom Kustom yang dipilih" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Objek yang dipilih" + +#: etc/initialdata:121 +msgid "Send mail to all watchers" +msgstr "Kirim pesan ke seluruh pengamat" + +#: etc/initialdata:117 +msgid "Send mail to all watchers as a \"comment\"" +msgstr "Kirim pesan ke seluruh pengamat dengan \"komentar\"" + +#: etc/initialdata:112 +msgid "Send mail to requestors and Ccs" +msgstr "Kirim pesan ke pemohon dan Ccs" + +#: etc/initialdata:107 +msgid "Send mail to requestors and Ccs as a comment" +msgstr "Kirim pesan ke pemohon dan Ccs dengan komentar" + +#: etc/initialdata:78 +msgid "Sends a message to the requestors" +msgstr "Kirim pesan ke pemohon" + +#: etc/initialdata:125 etc/initialdata:129 +msgid "Sends mail to explicitly listed Ccs and Bccs" +msgstr "Kirim pesan ke Ccs and Bccs yang terdaftar dengan jelas" + +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "Kirim pesan ke Ccs" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "Kirim pesan ke Ccs dengan komentar" + +#: etc/initialdata:102 +msgid "Sends mail to the administrative Ccs" +msgstr "Kirim pesan ke Ccs administrasi" + +#: etc/initialdata:98 +msgid "Sends mail to the administrative Ccs as a comment" +msgstr "Kirim pesan ke Ccs administrasi dengan komentar" + +#: etc/initialdata:82 etc/initialdata:86 +msgid "Sends mail to the owner" +msgstr "Kirim pesan ke pemilik" + +#: lib/RT/Date.pm:445 +msgid "Sep." +msgstr "Sep." + +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Tampilkan" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Tampilkan Izin" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Tampilkan Kolom" + +#: html/Ticket/Elements/Tabs:201 +msgid "Show Results" +msgstr "Tampilkan Hasil" + +#: html/Approvals/Elements/PendingMyApproval:65 +msgid "Show approved requests" +msgstr "Tamplikan permintaan yang disetujui" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show basics" +msgstr "Tampilkan dasar-dasar" + +#: html/Approvals/Elements/PendingMyApproval:66 +msgid "Show denied requests" +msgstr "Tampilkan permintaan yang ditolak" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show details" +msgstr "Tampilkan detil" + +#: html/Approvals/Elements/PendingMyApproval:64 +msgid "Show pending requests" +msgstr "Tampilkan permintaan yang ditunda" + +#: html/Approvals/Elements/PendingMyApproval:67 +msgid "Show requests awaiting other approvals" +msgstr "Tampilkan permintaan izin lain yang ditunggu" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" +msgstr "Tampilkan ACL" + +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "Tampilkan Tab Config" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "Tampilkan Email yang Keluar" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "Tampilkan Pencarian yang Disimpan" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "ShowScrips" +msgstr "Tampilkan Scrip" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "ShowTemplate" +msgstr "Tampilkan Template" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "ShowTicket" +msgstr "Tampilkan Tiket" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "ShowTicketComments" +msgstr "Tampilkan Komentar Tiket" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Sign up as a ticket Requestor or ticket or queue Cc" +msgstr "Daftar sebagai pemohon tiket atau tiket atau antrian Cc" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "Sign up as a ticket or queue AdminCc" +msgstr "Daftar sebagai tiket atau antrian AdminCc" + +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 +msgid "Signature" +msgstr "Tanda Tangan" + +#: html/Admin/Elements/SelectSingleOrMultiple:47 +msgid "Single" +msgstr "Tunggal" + +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "Ukuran" + +#: html/Elements/Header:85 +msgid "Skip Menu" +msgstr "Lewati Menu" + +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "Kecil" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "Sortir" + +#: NOT FOUND IN SOURCE +msgid "Sort results by" +msgstr "Sortir hasil dengan" + +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "Tingkat" + +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 +msgid "Started" +msgstr "Sudah dimulai" + +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 +msgid "Starts" +msgstr "Mulai" + +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 +msgid "State" +msgstr "Negara" + +#: 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 +msgid "Status" +msgstr "Status" + +#: etc/initialdata:309 +msgid "Status Change" +msgstr "Status Diubah" + +#: NOT FOUND IN SOURCE +msgid "Status changed from %1 to %2" +msgstr "Status diubah dari %1 ke %2" + +#: html/Ticket/Elements/Tabs:170 +msgid "Steal" +msgstr "Curi" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Curi tiket" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "Curi Tiket" + +#: lib/RT/Transaction_Overlay.pm:667 +#. ($Old->Name) +msgid "Stolen from %1" +msgstr "Dicuri dari %1" + +#: NOT FOUND IN SOURCE +msgid "Stolen from %1 " +msgstr "Dicuri dari %1 " + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "Gaya" + +#: 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 +msgid "Subject" +msgstr "Subjek" + +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 +#. ($self->Data) +msgid "Subject changed to %1" +msgstr "Subjek diganti menjadi %1" + +#: html/Elements/Submit:97 +msgid "Submit" +msgstr "Submit" + +#: lib/RT/Group_Overlay.pm:782 +msgid "Succeeded" +msgstr "Berhasil" + +#: lib/RT/Date.pm:419 +msgid "Sun." +msgstr "Min." + +#: lib/RT/System.pm:76 +msgid "SuperUser" +msgstr "PenggunaSuper" + +#: html/User/Elements/DelegateRights:98 +msgid "System" +msgstr "Sistem" + +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "Konfigurasi Sistem" + +#: 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 "Kesalahan Sistem" + +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "Kesalahan sistem: %1" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "Peralatan Sistem" + +#: lib/RT/ACE_Overlay.pm:634 +msgid "System error. Right not delegated." +msgstr "Kesalahan sistem. Hak-hak tidak dapat diserahkan." + +#: 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 "Kesalahan sistem. Hak-hak tidak dapat diberikan." + +#: 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 "Grup Sistem" + +#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 +msgid "SystemRolegroup for internal use" +msgstr " GrupAturanSistem yang digunakan untuk internal" + +#: lib/RT/CurrentUser.pm:358 +msgid "TEST_STRING" +msgstr "TES_STRING" + +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 +msgid "Take" +msgstr "Ambil" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "Ambil tiket" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "Ambil Tiket" + +#: lib/RT/Transaction_Overlay.pm:652 +msgid "Taken" +msgstr "Diambil" + +#: NOT FOUND IN SOURCE +msgid "Task" +msgstr "Tugas" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 +msgid "Template" +msgstr "Template" + +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 +#. ($TemplateObj->Id()) +msgid "Template #%1" +msgstr "Template #%1" + +#: html/Admin/Elements/EditTemplates:110 +msgid "Template deleted" +msgstr "Template sudah dihapus" + +#: lib/RT/Scrip_Overlay.pm:181 +msgid "Template not found" +msgstr "Template tidak ditemukan" + +#: lib/RT/Template_Overlay.pm:376 +msgid "Template parsed" +msgstr "Template parsed" + +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 +msgid "Templates" +msgstr "Template-template" + +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "Teks" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 +msgid "That is already the current value" +msgstr "Ini adalah nilai yang sekarang" + +#: lib/RT/CustomField_Overlay.pm:407 +msgid "That is not a value for this custom field" +msgstr "Ini bukan nilai untuk kolom kustom ini" + +#: lib/RT/Ticket_Overlay.pm:1955 +msgid "That is the same value" +msgstr "Ini adalah nilai yang sama" + +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "Prinsipal ini sudah memiliki hak-hak tersebut" + +#: lib/RT/Queue_Overlay.pm:750 +#. ($args{'Type'}) +msgid "That principal is already a %1 for this queue" +msgstr "Prinsipal ini sudah %1 untuk antrian ini" + +#: lib/RT/Ticket_Overlay.pm:1396 +#. ($self->loc($args{'Type'})) +msgid "That principal is already a %1 for this ticket" +msgstr "Prinsipal ini sudah %1 untuk tiket ini" + +#: lib/RT/Queue_Overlay.pm:849 +#. ($args{'Type'}) +msgid "That principal is not a %1 for this queue" +msgstr "Prinsipal ini bukan %1 untuk antrian ini" + +#: lib/RT/Ticket_Overlay.pm:1951 +msgid "That queue does not exist" +msgstr "Antrian ini tidak ada" + +#: lib/RT/Ticket_Overlay.pm:3189 +msgid "That ticket has unresolved dependencies" +msgstr "Tiket ini mempunyai ketergantungan yang belum dapat diselesaikan" + +#: lib/RT/Ticket_Overlay.pm:2993 +msgid "That user already owns that ticket" +msgstr "Pengguna ini sudah memiliki tiket tersebut" + +#: lib/RT/Ticket_Overlay.pm:2965 +msgid "That user does not exist" +msgstr "Pengguna ini tidak ada" + +#: lib/RT/User_Overlay.pm:390 +msgid "That user is already privileged" +msgstr "Pengguna ini sudah memiliki hak-hak istimewa" + +#: lib/RT/User_Overlay.pm:411 +msgid "That user is already unprivileged" +msgstr "Pengguna ini sudah tidak memiliki hak-hak istimewa" + +#: lib/RT/User_Overlay.pm:403 +msgid "That user is now privileged" +msgstr "Pengguna tersebut sekarang memiliki hak-hak istimewa" + +#: lib/RT/User_Overlay.pm:424 +msgid "That user is now unprivileged" +msgstr "Pengguna tersebut sekarang tidak memiliki hak-hak istimewa" + +#: lib/RT/Ticket_Overlay.pm:2986 +msgid "That user may not own tickets in that queue" +msgstr "Pengguna tersebut mungkin tidak memiliki tiket di dalam antrian tersebut" + +#: lib/RT/Link_Overlay.pm:234 +msgid "That's not a numerical id" +msgstr "Ini bukan menurut angka ID" + +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 +msgid "The Basics" +msgstr "Dasar-dasar" + +#: lib/RT/ACE_Overlay.pm:113 +msgid "The CC of a ticket" +msgstr "CC tiket" + +#: lib/RT/ACE_Overlay.pm:114 +msgid "The administrative CC of a ticket" +msgstr "CC tiket administrasi" + +#: 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 "Perintah berikut ini akan menemukan seluruh tiket yang aktif di dalam antrian 'umum' dan mengatur prioritas mereka ke 99 jika mereka tidak digunakan dalam waktu 4 jam:" + +#: NOT FOUND IN SOURCE +msgid "The following commands were not proccessed:\\n\\n" +msgstr "Perintah berikut ini tidak akan dijalankan:\\n\\n" + +#: lib/RT/Record.pm:934 +msgid "The new value has been set." +msgstr "Nilai baru sudah diatur." + +#: lib/RT/ACE_Overlay.pm:111 +msgid "The owner of a ticket" +msgstr "Pemilik tiket" + +#: lib/RT/ACE_Overlay.pm:112 +msgid "The requestor of a ticket" +msgstr "Pemohon tiket" + +#: html/Admin/Elements/EditUserComments:47 +msgid "These comments aren't generally visible to the user" +msgstr "Komentar ini umumnya tidak jelas bagi pengguna" + +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "Kolom kustom ini tidak dapat digunakan pada objek tersebut" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Fitur ini hanya tersedia untuk sistem administrator" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Pesan ini akan dikirim ke..." + +#: bin/rt-crontool:214 +msgid "This tool allows the user to run arbitrary perl modules from within RT." +msgstr "Alat ini mengijinkan pengguna untuk menjalankan modul perl yang berubah-ubah dari dalam RT." + +#: lib/RT/Transaction_Overlay.pm:288 +msgid "This transaction appears to have no content" +msgstr "Transaksi ini tampaknya tidak memiliki isi" + +#: html/Ticket/Elements/ShowRequestor:70 +#. ($rows) +msgid "This user's %1 highest priority tickets" +msgstr "Pengguna ini memiliki %1 tiket dengan prioritas tertinggi" + +#: lib/RT/Date.pm:416 +msgid "Thu." +msgstr "Kms." + +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket #%1 Jumbo update: %2" +msgstr "Tiket #%1 Perbaharui Jumbo: %2" + +#: html/Approvals/Elements/ShowDependency:67 +#. ($link->BaseObj->Id, $link->BaseObj->Subject) +msgid "Ticket #%1: %2" +msgstr "Tiket #%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) +msgid "Ticket %1" +msgstr "Tiket %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 +#. ($self->Id, $QueueObj->Name) +msgid "Ticket %1 created in queue '%2'" +msgstr "Tiket %1 sudah dibuat di dalam antrian '%2'" + +#: NOT FOUND IN SOURCE +msgid "Ticket %1 loaded\\n" +msgstr "Tiket %1 sudah dipanggil\\n" + +#: html/Search/Bulk.html:269 +#. ($Ticket->Id,$_) +msgid "Ticket %1: %2" +msgstr "Tiket %1: %2" + +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Tiket Kolom Kustom" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket History # %1 %2" +msgstr "Historis Tiket # %1 %2" + +#: etc/initialdata:324 +msgid "Ticket Resolved" +msgstr "Tiket sudah diselesaikan" + +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Transaksi Tiket" + +#: NOT FOUND IN SOURCE +msgid "Ticket attachment" +msgstr "Lampiran Tiket" + +#: lib/RT/Tickets_Overlay.pm:1648 +msgid "Ticket content" +msgstr "Isi Tiket" + +#: lib/RT/Tickets_Overlay.pm:1697 +msgid "Ticket content type" +msgstr "Tipe isi Tiket" + +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 +msgid "Ticket could not be created due to an internal error" +msgstr "Tiket tidak dapat dibuat karena ada kesalahan internal" + +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Metadata Tiket" + +#: etc/initialdata:310 +msgid "Ticket status changed" +msgstr "Status tiket sudah diubah" + +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "Pencarian modul Tiket SQL" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "Tiket-tiket" + +#: NOT FOUND IN SOURCE +msgid "Tickets %1 %2" +msgstr "Tiket %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Tickets %1 by %2" +msgstr "Tiket %1 oleh %2" + +#: NOT FOUND IN SOURCE +msgid "Tickets from %1" +msgstr "Tiket dari %1" + +#: html/Approvals/Elements/ShowDependency:48 +msgid "Tickets which depend on this approval:" +msgstr "Tiket yang bergantung dengan izin ini:" + +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "Perkiraan Waktu" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 +msgid "Time Left" +msgstr "Sisa Waktu" + +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 +msgid "Time Worked" +msgstr "Waktu Kerja" + +#: lib/RT/Tickets_Overlay.pm:1619 +msgid "Time left" +msgstr "Sisa waktu" + +#: html/Elements/Footer:71 +msgid "Time to display" +msgstr "Waktu untuk ditampilkan" + +#: lib/RT/Tickets_Overlay.pm:1594 +msgid "Time worked" +msgstr "Waktu kerja" + +#: lib/RT/Ticket_Overlay.pm:1143 +msgid "TimeWorked" +msgstr "Waktu Kerja" + +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "Judul" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:" +msgstr "To generate a diff of this commit:" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:\\n" +msgstr "To generate a diff of this commit:\\n" + +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "Untuk menanyakan tentang bantuan, latihan, perkembangan kustom atau izin, silakan hubungi %1." + +#: lib/RT/Ticket_Overlay.pm:1146 +msgid "Told" +msgstr "Memberitahukan" + +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "alat-alat" + +#: etc/initialdata:252 +msgid "Transaction" +msgstr "Transaksi" + +#: lib/RT/Transaction_Overlay.pm:794 +#. ($self->Data) +msgid "Transaction %1 purged" +msgstr "Transaksi %1 sudah dibersihkan" + +#: lib/RT/Transaction_Overlay.pm:174 +msgid "Transaction Created" +msgstr "Transaksi sudah dibuat" + +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Kolom Kustom Transaksi" + +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "Transaksi->Tidak dapat dibuat, karena anda tidak menentukan tipe objek dan id" + +#: lib/RT/Transaction_Overlay.pm:838 +msgid "Transactions are immutable" +msgstr "Transaksi yang tetap" + +#: lib/RT/Date.pm:414 +msgid "Tue." +msgstr "Sel." + +#: 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 +msgid "Type" +msgstr "Tipe" + +#: lib/RT/ScripCondition_Overlay.pm:129 +msgid "Unimplemented" +msgstr "Belum diimplementasikan" + +#: html/Admin/Users/Modify.html:89 +msgid "Unix login" +msgstr "Login Unix" + +#: NOT FOUND IN SOURCE +msgid "UnixUsername" +msgstr "Nama Pengguna Unix" + +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 +#. ($self->ContentEncoding) +#. ($ContentEncoding) +msgid "Unknown ContentEncoding %1" +msgstr "Content Encoding tidak dikenali%1" + +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "Kolom tidak dikenali: $key" + +#: html/Elements/SelectResultsPerPage:58 +msgid "Unlimited" +msgstr "Tidak terbatas" + +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Pencarian tidak dikenal" + +#: etc/initialdata:32 +msgid "Unprivileged" +msgstr "Tidak memiliki hak-hak istimewa" + +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "Kolom Kustom tidak dipilih" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "Objek tidak dipilih" + +#: lib/RT/Transaction_Overlay.pm:648 +msgid "Untaken" +msgstr "Belum diambil" + +#: NOT FOUND IN SOURCE +msgid "Untitled search" +msgstr "Pencarian yang tidak memiliki judul" + +#: html/Search/Bulk.html:54 +msgid "Update" +msgstr "Perbaharui" + +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Perbahurui Semua" + +#: NOT FOUND IN SOURCE +msgid "Update ID" +msgstr "Perbaharui ID" + +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Perbaharui Tiket" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 +msgid "Update Type" +msgstr "Perbaharui Tipe" + +#: NOT FOUND IN SOURCE +msgid "Update all these tickets at once" +msgstr "Perbaharui seluruh tiket ini pada saat yang sama" + +#: NOT FOUND IN SOURCE +msgid "Update email" +msgstr "Perbaharui email" + +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Perbaharui beberapa tiket" + +#: NOT FOUND IN SOURCE +msgid "Update name" +msgstr "Perbaharui nama" + +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 +msgid "Update not recorded." +msgstr "Perbaharui tidak dicatat." + +#: html/Search/Bulk.html:99 +msgid "Update selected tickets" +msgstr "Perbaharui tiket yang terpilih" + +#: NOT FOUND IN SOURCE +msgid "Update signature" +msgstr "Perbaharui tanda tangan" + +#: html/Ticket/ModifyAll.html:84 +msgid "Update ticket" +msgstr "Perbaharui tiket" + +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 +#. ($Ticket->id) +msgid "Update ticket #%1" +msgstr "Perbaharui tiket #%1" + +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Update ticket #%1 (%2)" +msgstr "Perbaharui tiket #%1 (%2)" + +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 +msgid "Update type was neither correspondence nor comment." +msgstr " Memperbarui tipe baik korespondensi ataupun penjelasan." + +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 +msgid "Updated" +msgstr "Sudah diperbaharui" + +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Upload" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Upload beberapa file" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Upload beberapa gambar" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Upload satu file" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Upload satu gambar" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "Upload sampai %1 file" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "Upload sampai %1 gambar" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "Upload perubahan anda" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "Gunakan alat administrative RT yang lain" + +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "Pengguna '%1' tidak dapat ditemukan." + +#: etc/initialdata:132 etc/initialdata:206 +msgid "User Defined" +msgstr "Pengguna didefinisikan" + +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Pengguna mendefinisikan kondisi dan aksi" + +#: NOT FOUND IN SOURCE +msgid "User ID" +msgstr "ID Pengguna" + +#: 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 "Hak Pengguna" + +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "Pengguna akan ditanya mengenai tipe pembaharuan yang tidak dikenal untuk kolom kustom %1 untuk %2 objek #%3" + +#: html/Admin/Users/Modify.html:293 +#. ($msg) +msgid "User could not be created: %1" +msgstr "Pengguna tidak dapat dibuat: %1" + +#: lib/RT/User_Overlay.pm:331 +msgid "User created" +msgstr "Pengguna sudah dibuat" + +#: 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 "Pengguna mendefinisikan grup" + +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Pengguna sudah dipanggil" + +#: NOT FOUND IN SOURCE +msgid "User view" +msgstr "Lihat Pengguna" + +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Definisi Grup Pengguna" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 +msgid "Username" +msgstr "Nama Pengguna" + +#: 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 +msgid "Users" +msgstr "Pengguna" + +#: html/Admin/Users/index.html:85 +msgid "Users matching search criteria" +msgstr "Pengguna sesuai dengan kriteria pencarian" + +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Query yang valid" + +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 +msgid "Values" +msgstr "Nilai-nilai" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Watch" +msgstr "Amati" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "WatchAsAdminCc" +msgstr "Amati Sebagai AdminCc" + +#: html/Admin/Elements/QueueTabs:63 +msgid "Watchers" +msgstr "Pengamat" + +#: NOT FOUND IN SOURCE +msgid "WebEncoding" +msgstr "WebEncoding" + +#: lib/RT/Date.pm:415 +msgid "Wed." +msgstr "Rabu." + +#: etc/initialdata:521 +msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" +msgstr "Kalau tiket sudah disetujui oleh semua pemberi persetujuan, tambahkan korespondesi ke tiket yang asli" + +#: etc/initialdata:485 +msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" +msgstr "Kalau tiket sudah disetujui oleh beberapa pemberi persetujuan, tambahkan korespondensi ke tiket yang asli" + +#: etc/initialdata:146 +msgid "When a ticket is created" +msgstr "Kalau tiket sudah dibuat" + +#: etc/initialdata:418 +msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" +msgstr "Kalau tiket persetujuan sudah dibuat, beritahukan pemilik dan AdminCc dari item yang sedang ditunggu persetujuannya" + +#: etc/initialdata:151 +msgid "When anything happens" +msgstr "Kalau sesuatu terjadi" + +#: etc/initialdata:199 +msgid "Whenever a ticket is resolved" +msgstr "Setiap saat tiket dapat diselesaikan" + +#: etc/initialdata:185 +msgid "Whenever a ticket's owner changes" +msgstr "Setiap saat pemilik tiket dapat diubah" + +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "Setiap saat prioritas tiket dapat diubah" + +#: etc/initialdata:193 +msgid "Whenever a ticket's queue changes" +msgstr "Setiap saat antrian tiket dapat diubah" + +#: etc/initialdata:170 +msgid "Whenever a ticket's status changes" +msgstr "Setiap saat status tiket dapat diubah" + +#: etc/initialdata:207 +msgid "Whenever a user-defined condition occurs" +msgstr "Setiap saat kondisi yang didefinisikan oleh pengguna terjadi" + +#: etc/initialdata:164 +msgid "Whenever comments come in" +msgstr "Setiap saat komentar dapat masuk" + +#: etc/initialdata:157 +msgid "Whenever correspondence comes in" +msgstr "Setiap saat korespondensi dapat masuk" + +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 +msgid "Work" +msgstr "Bekerja" + +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Bekerja offline" + +#: NOT FOUND IN SOURCE +msgid "WorkPhone" +msgstr "Telepon Kantor" + +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 +msgid "Worked" +msgstr "Sedang Bekerja" + +#: lib/RT/Ticket_Overlay.pm:3096 +msgid "You already own this ticket" +msgstr "Anda sudah memiliki tiket ini" + +#: html/autohandler:158 html/autohandler:166 +msgid "You are not an authorized user" +msgstr "Anda bukanlah pengguna yang sah" + +#: lib/RT/Ticket_Overlay.pm:2978 +msgid "You can only reassign tickets that you own or that are unowned" +msgstr "Anda hanya bisa menugaskan kembali tiket yang anda miliki atau yang belum anda miliki" + +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 +#. ($num, $queue) +msgid "You found %1 tickets in queue %2" +msgstr "Anda menemukan %1 tiket di dalam antrian ini %2" + +#: html/NoAuth/Logout.html:52 +msgid "You have been logged out of RT." +msgstr "Anda sudah log out dari RT." + +#: html/SelfService/Display.html:109 +msgid "You have no permission to create tickets in that queue." +msgstr "Anda tidak memiliki izin untuk membuat tiket di dalam antrian tersebut." + +#: lib/RT/Ticket_Overlay.pm:1964 +msgid "You may not create requests in that queue." +msgstr "Anda mungkin tidak akan membuat permintaan di dalam antrian ini." + +#: html/NoAuth/Logout.html:56 +msgid "You're welcome to login again" +msgstr "Anda dapat login kembali" + +#: etc/initialdata:502 +msgid "Your request has been approved by %1. Other approvals may still be pending." +msgstr "Permintaan anda sudah disetujui oleh. Persetujuan yang lain mungkin masih ditunda." + +#: etc/initialdata:540 +msgid "Your request has been approved." +msgstr "Permintaan anda sudah disetujui." + +#: etc/initialdata:445 +msgid "Your request was rejected." +msgstr "Permintaan anda sudah ditolak." + +#: html/autohandler:193 +msgid "Your username or password is incorrect" +msgstr "Nama pengguna dan sandi anda tidak sama" + +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 +msgid "Zip" +msgstr "Zip" + +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "mengijinkan pembuatan pencarian yang disimpan" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "mengijinkan memanggil pencarian yang disimpan" + +#: html/User/Elements/DelegateRights:80 +#. ($right->PrincipalObj->Object->SelfDescription) +msgid "as granted to %1" +msgstr "sudah diberikan ke %1" + +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "Milik" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "sudah ditutup" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 +msgid "contains" +msgstr "berisi" + +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 +msgid "days" +msgstr "hari" + +#: lib/RT/Queue_Overlay.pm:88 +msgid "deleted" +msgstr "sudah dihapus" + +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "Bukan milik" + +#: html/Search/Elements/PickBasics:61 +msgid "does not match" +msgstr "tidak sama" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 +msgid "doesn't contain" +msgstr "tidak berisi" + +#: NOT FOUND IN SOURCE +msgid "email address" +msgstr "alamat email" + +#: html/Elements/SelectEqualityOperator:59 +msgid "equal to" +msgstr "sama dengan" + +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "kesalahan: tidak dapat dipindahkan ke bawah" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "kesalahan: tidak dapat dipindahkan ke kiri" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "kesalahan: tidak dapat dipindahkan ke atas" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "kesalahan: tidak ada apapun yang dapat dihapus" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "kesalahan: tidak ada apapun yang dapat dipindahkan" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "kesalahan: tidak ada apapun yang dapat dihubungkan" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "greater than" +msgstr "lebih dari" + +#: lib/RT/Group_Overlay.pm:222 +#. ($self->Name) +msgid "group '%1'" +msgstr "grup '%1'" + +#: lib/RT/Date.pm:338 +msgid "hours" +msgstr "jam" + +#: html/Search/Elements/PickBasics:48 +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 +msgid "is" +msgstr "adalah" + +#: 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 +msgid "isn't" +msgstr "tidak" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "less than" +msgstr "kurang dari" + +#: html/Search/Elements/PickBasics:60 +msgid "matches" +msgstr "sama" + +#: lib/RT/Date.pm:334 +msgid "min" +msgstr "mnt" + +#: html/Ticket/Update.html:64 +msgid "minutes" +msgstr "menit" + +#: NOT FOUND IN SOURCE +msgid "modifications\\n\\n" +msgstr "perubahan\\n\\n" + +#: lib/RT/Date.pm:350 +msgid "months" +msgstr "bulan" + +#: lib/RT/Queue_Overlay.pm:83 +msgid "new" +msgstr "baru" + +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "tidak ada nama" + +#: html/Admin/Elements/EditScrips:64 +msgid "no value" +msgstr "tidak ada nilai" + +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 +msgid "none" +msgstr "tidak satupun" + +#: html/Elements/SelectEqualityOperator:59 +msgid "not equal to" +msgstr "tidak sama dengan" + +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 +msgid "open" +msgstr "buka" + +#: lib/RT/Group_Overlay.pm:227 +#. ($self->Name, $user->Name) +msgid "personal group '%1' for user '%2'" +msgstr "grup pribadi '%1' untuk pengguna '%2'" + +#: lib/RT/Group_Overlay.pm:235 +#. ($queue->Name, $self->Type) +msgid "queue %1 %2" +msgstr "antrian %1 %2" + +#: lib/RT/Queue_Overlay.pm:87 +msgid "rejected" +msgstr "sudah ditolak" + +#: lib/RT/Queue_Overlay.pm:86 +msgid "resolved" +msgstr "sudah diselesaikan" + +#: lib/RT/Date.pm:330 +msgid "sec" +msgstr "dtk" + +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "tampilkan tab konfigurasi" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "lembar kerja" + +#: lib/RT/Queue_Overlay.pm:85 +msgid "stalled" +msgstr "alasan" + +#: lib/RT/Group_Overlay.pm:230 +#. ($self->Type) +msgid "system %1" +msgstr "sistem %1" + +#: lib/RT/Group_Overlay.pm:241 +#. ($self->Type) +msgid "system group '%1'" +msgstr "grup sistem '%1'" + +#: html/Elements/Error:66 html/SelfService/Error.html:63 +msgid "the calling component did not specify why" +msgstr "Pemanggilan komponent tidak menetapkan mengapa" + +#: lib/RT/Group_Overlay.pm:238 +#. ($self->Instance, $self->Type) +msgid "ticket #%1 %2" +msgstr "tiket #%1 %2" + +#: lib/RT/Group_Overlay.pm:244 +#. ($self->Id) +msgid "undescribed group %1" +msgstr "grup yang belum dijelaskan %1" + +#: lib/RT/Group_Overlay.pm:219 +#. ($user->Object->Name) +msgid "user %1" +msgstr "pengguna %1" + +#: lib/RT/Date.pm:346 +msgid "weeks" +msgstr "minggu" + +#: lib/RT/Date.pm:354 +msgid "years" +msgstr "tahun" + diff --git a/rt/lib/RT/I18N/it.po b/rt/lib/RT/I18N/it.po new file mode 100644 index 000000000..95d8c18c1 --- /dev/null +++ b/rt/lib/RT/I18N/it.po @@ -0,0 +1,6189 @@ +msgid "" +msgstr "" +"Project-Id-Version: RT 3.4.1\n" +"POT-Creation-Date: 2002-05-02 11:36+0800\n" +"PO-Revision-Date: 2005-02-12 02:00+0800\n" +"Last-Translator: Angelo Turetta <aturetta@bestunion.it>\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-Transfer-Encoding: 8bit\n" + +#: NOT FOUND IN SOURCE +msgid "#" +msgstr "n°" + +#: NOT FOUND IN SOURCE +msgid "#%1" +msgstr "n°%1" + +#: 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) +msgid "#%1: %2" +msgstr "n°%1: %2" + +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 n°%2" + +#: lib/RT/Date.pm:361 +#. ($s, $time_unit) +msgid "%1 %2" +msgstr "%1 %2" + +#: NOT FOUND IN SOURCE +msgid "%1 %2 %3" +msgstr "%1 %2 %3" + +#: lib/RT/Date.pm:397 +#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) +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) +msgid "%1 %2 added" +msgstr "Aggiunto %1 %2" + +#: lib/RT/Date.pm:358 +#. ($s, $time_unit) +msgid "%1 %2 ago" +msgstr "%1 %2 fa" + +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) +#. ($field, $self->OldValue, $self->NewValue) +msgid "%1 %2 changed to %3" +msgstr "%1 %2 cambiato 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) +msgid "%1 %2 deleted" +msgstr "%1 %2 eliminato" + +#: NOT FOUND IN SOURCE +msgid "%1 %2 of group %3" +msgstr "%1 %2 del gruppo %3" + +#: 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)) +msgid "%1 %2 with template %3" +msgstr "%1 %2 con il modello %3" + +#: NOT FOUND IN SOURCE +msgid "%1 (%2) %3 this ticket\\n" +msgstr "%1 (%2) %3 questo ticket\\n" + +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) da %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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (invariato)" + +#: NOT FOUND IN SOURCE +msgid "%1 - %2 shown" +msgstr "Mostrati da %1 a %2" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 +#. ("--search-argument", "--search") +#. ("--condition-argument", "--condition") +#. ("--action-argument", "--action") +msgid "%1 - An argument to pass to %2" +msgstr "%1 - Un parametro da passare a %2" + +#: bin/rt-crontool:210 +#. ("--verbose") +msgid "%1 - Output status updates to STDOUT" +msgstr "%1 - Visualizza aggiornamenti dello stato su STDOUT" + +#: bin/rt-crontool:204 +#. ("--action") +msgid "%1 - Specify the action module you want to use" +msgstr "%1 - Specificare l'azione che si vuole eseguire" + +#: bin/rt-crontool:198 +#. ("--condition") +msgid "%1 - Specify the condition module you want to use" +msgstr "%1 - Specificare la condizione che si vuole utilizzare" + +#: bin/rt-crontool:191 +#. ("--search") +msgid "%1 - Specify the search module you want to use" +msgstr "%1 - Specificare la ricerca che si vuole utilizzare" + + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 +#. ($self->Id) +msgid "%1 ScripAction loaded" +msgstr "ScripAction %1 caricato" + +#: lib/RT/Record.pm:1708 +#. ($args{'Value'}, $cf->Name) +msgid "%1 added as a value for %2" +msgstr "%1 aggiunto come valore di %2" + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on" +msgstr "gli alias %1 necessitano di un TicketId su cui lavorare" + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on " +msgstr "gli alias %1 necessitano di un TicketId su cui lavorare" + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on (from %2) %3" +msgstr "gli alias %1 necessitano di un TicketId per lavorare con (da %2) %3" + +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 +#. ($args{'Base'}) +#. ($args{'Target'}) +msgid "%1 appears to be a local object, but can't be found in the database" +msgstr "%1 sembra essere un oggetto locale, ma non è presente nel database" + +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 +#. ($self->BriefDescription , $self->CreatorObj->Name) +#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) +msgid "%1 by %2" +msgstr "%1 da %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."'") +msgid "%1 changed from %2 to %3" +msgstr "%1 cambiato da %2 a %3" + +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "copia di %1" + +#: lib/RT/Record.pm:930 +msgid "%1 could not be set to %2." +msgstr "%1 non può essere impostato a %2" + +#: NOT FOUND IN SOURCE +msgid "%1 couldn't init a transaction (%2)\\n" +msgstr "%1 non ha potuto iniziare una transazione (%2)\\n" + +#: lib/RT/Ticket_Overlay.pm:2743 +#. ($self) +msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." +msgstr "%1 non ho potuto mettere lo stato a risolto. Il database RT potrebbe essere corrotto." + +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "creato %1" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "eliminato %1" + +#: html/Elements/MyTickets:47 +#. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "I %1 ticket a maggior priorità che ho in carico" + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I own..." +msgstr "I %1 ticket a maggior priorità che ho in carico..." + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I requested..." +msgstr "I %1 ticket a maggior priorità  che ho richiesto..." + +#: bin/rt-crontool:186 +#. ($0) +msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." +msgstr "%1 è uno strumento per agire sui ticket da uno schedulatore esterno, per esempio cron." + +#: lib/RT/Queue_Overlay.pm:860 +#. ($principal->Object->Name, $args{'Type'}) +msgid "%1 is no longer a %2 for this queue." +msgstr "%1 non è più un %2 per questa coda." + +#: NOT FOUND IN SOURCE +msgid "%1 is no longer a %2 for this ticket." +msgstr "%1 non è più un %2 per questo ticket." + +#: NOT FOUND IN SOURCE +msgid "%1 is no longer a value for custom field %2" +msgstr "%1 non è più un valore per il campo personalizzato %2" + +#: NOT FOUND IN SOURCE +msgid "%1 isn't a valid Queue id." +msgstr "%1 non è un identificativo di coda valido" + +#: 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) +msgid "%1 min" +msgstr "%1 min" + +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "I %1 ticket più recenti non ancora assegnati" + +#: NOT FOUND IN SOURCE +msgid "%1 not shown" +msgstr "%1 non mostrato" + +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 oggetti" + +#: html/User/Elements/DelegateRights:97 +#. (loc($ObjectType =~ /^RT::(.*)$/)) +msgid "%1 rights" +msgstr "Diritti su %1" + +#: NOT FOUND IN SOURCE +msgid "%1 succeeded\\n" +msgstr "%1 riuscito\\n" + +#: NOT FOUND IN SOURCE +msgid "%1 type unknown for $MessageId" +msgstr "Tipo %1 sconosciuto per $MessageId" + +#: NOT FOUND IN SOURCE +msgid "%1 type unknown for %2" +msgstr "Tipo %1 sconosciuto per %2" + +#: NOT FOUND IN SOURCE +msgid "%1 was created without a CurrentUser\\n" +msgstr "%1 è stato creato senza un CurrentUser\\n" + +#: lib/RT/Action/ResolveMembers.pm:63 +#. (ref $self) +msgid "%1 will resolve all members of a resolved group ticket." +msgstr "%1 risolverà  tutti i membri di un gruppo di ticket risolto." + +#: NOT FOUND IN SOURCE +msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." +msgstr "%1 bloccherà una BASE [locale] se dipende da [o è membro di] una richiesta collegata." + +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%2 oggetti di %1" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "%3 oggetti di %2 di %1" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "ricerche salvate di %1" + +#: lib/RT/Transaction_Overlay.pm:470 +#. ($self) +msgid "%1: no attachment specified" +msgstr "%1: nessun allegato specificato" + +#: html/Ticket/Elements/ShowTransactionAttachments:78 +#. ($size) +msgid "%1b" +msgstr "%1b" + +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) +msgid "%1k" +msgstr "%1k" + +#: lib/RT/Ticket_Overlay.pm:1118 +#. ($args{'Status'}) +msgid "'%1' is an invalid value for status" +msgstr "'%1' è uno stato non valido" + +#: NOT FOUND IN SOURCE +msgid "'%1' not a recognized action. " +msgstr "'%1' non è un'azione conosciuta. " + +#: NOT FOUND IN SOURCE +msgid "(Check box to delete group member)" +msgstr "(spunta la casella per rimuovere un appartenente dal gruppo)" + +#: NOT FOUND IN SOURCE +msgid "(Check box to delete scrip)" +msgstr "(spunta la casella per cancellare uno scrip)" + +#: 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 "(spunta la casella per cancellare)" + +#: NOT FOUND IN SOURCE +msgid "(Check boxes to delete)" +msgstr "(spunta le caselle per cancellare)" + +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(i destinatari con la casella spuntata non ricevono la notifica)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(solo i destinatari con la casella spuntata ricevono la notifica)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(inserire i numeri o gli URL dei ticket, separati da spazi)" + +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 +#. ($RT::CorrespondAddress) +#. ($RT::CommentAddress) +msgid "(If left blank, will default to %1)" +msgstr "(se non specificato usa: %1)" + +#: NOT FOUND IN SOURCE +msgid "(No Value)" +msgstr "(nessun valore)" + +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 +msgid "(No custom fields)" +msgstr "(nessun campo personalizzato)" + +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 +msgid "(No members)" +msgstr "(nessun appartenente)" + +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 +msgid "(No scrips)" +msgstr "(nessuno Scrip)" + +#: html/Admin/Elements/EditTemplates:52 +msgid "(No templates)" +msgstr "(nessun modello)" + +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(nessuno)" + +#: 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 "(invia copia silente di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà </b> i destinatari dei successivi aggiornamenti.)" + +#: NOT FOUND IN SOURCE +msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +msgstr "(invia copia silente di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierò</b> i destinatari dei successivi aggiornamenti.)" + +#: 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 "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email amministrativi separati da virgole. Queste persone <b>riceveranno</b> i successivi aggiornamenti.)" + +#: 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 "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà </b> i destinatari dei successivi aggiornamenti.)" + +#: NOT FOUND IN SOURCE +msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +msgstr "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Ciò <b>non cambierà </b> i destinatari dei successivi aggiornamenti.)" + +#: 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 "(invia copia per conoscenza di questo aggiornamento ad una lista di indirizzi email separati da virgole. Queste persone <b>riceveranno</b> i successivi aggiornamenti.)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(usa questi campi se si sceglie 'Definito dall'utente' come condizione o azione)" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 +msgid "(empty)" +msgstr "(vuoto)" + +#: html/Admin/Users/index.html:60 +msgid "(no name listed)" +msgstr "(nessun nome in elenco)" + +#: NOT FOUND IN SOURCE +msgid "(no subject)" +msgstr "(nessun oggetto)" + +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 +msgid "(no value)" +msgstr "(nessun valore)" + +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(nessun valore)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 +msgid "(only one ticket)" +msgstr "(un solo ticket)" + +#: html/Elements/RT__Ticket/ColumnMap:146 +msgid "(pending approval)" +msgstr "(in attesa di approvazione)" + +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(in attesa di un'altra Raccolta)" + +#: NOT FOUND IN SOURCE +msgid "(pending other ticket)" +msgstr "(in attesa di altri ticket)" + +#: NOT FOUND IN SOURCE +msgid "(requestor's group)" +msgstr "(gruppo del richiedente)" + +#: html/Admin/Users/Modify.html:71 +msgid "(required)" +msgstr "(richiesto)" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "(untitled)" +msgstr "(senza titolo)" + +#: NOT FOUND IN SOURCE +msgid "25 highest priority tickets I own..." +msgstr "I 25 ticket con priorità più alta che ho in carico..." + +#: NOT FOUND IN SOURCE +msgid "25 highest priority tickets I requested..." +msgstr "I 25 ticket con priorità più alta da me richiesti..." + +#: html/Ticket/Elements/ShowBasics:53 +msgid "<% $Ticket->Status%>" +msgstr "" + +#: html/Elements/SelectTicketTypes:48 +msgid "<% $_ %>" +msgstr "" + +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<input type=\"submit\" value=\"Crea un ticket in\"> %1" + +#: etc/initialdata:218 +msgid "A blank template" +msgstr "Un modello vuoto" + +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "ACE Deleted" +msgstr "ACE eliminata" + +#: NOT FOUND IN SOURCE +msgid "ACE Loaded" +msgstr "ACE caricata" + +#: NOT FOUND IN SOURCE +msgid "ACE could not be deleted" +msgstr "impossibile eliminare l'ACE" + +#: NOT FOUND IN SOURCE +msgid "ACE could not be found" +msgstr "impossibile trovare l'ACE" + +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 +msgid "ACE not found" +msgstr "ACE non trovata" + +#: lib/RT/ACE_Overlay.pm:854 +msgid "ACEs can only be created and deleted." +msgstr "Le ACE possono essere solo create e cancellate." + +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Aborting to avoid unintended ticket modifications.\\n" +msgstr "Interruzione per evitare modifiche di ticket involontarie.\\n" + +#: html/User/Elements/Tabs:53 +msgid "About me" +msgstr "Informazioni personali" + +#: html/Admin/Users/Modify.html:106 +msgid "Access control" +msgstr "Controllo di Accesso" + +#: html/Admin/Elements/EditScrip:71 +msgid "Action" +msgstr "Azione" + +#: lib/RT/Scrip_Overlay.pm:173 +#. ($args{'ScripAction'}) +msgid "Action %1 not found" +msgstr "Azione %1 non trovata" + +#: NOT FOUND IN SOURCE +msgid "Action committed." +msgstr "Azione eseguita." + +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "Azione eseguita.\\n" + +#: bin/rt-crontool:144 +msgid "Action prepared..." +msgstr "Azione preparata..." + +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Aggiungi" + +#: html/Search/Bulk.html:114 +msgid "Add AdminCc" +msgstr "Aggiungi AdminCc" + +#: html/Search/Bulk.html:110 +msgid "Add Cc" +msgstr "Aggiungi Cc" + +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "Aggiungi colonne" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "Aggiungi criterio" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "Aggiungi altri file" + +#: NOT FOUND IN SOURCE +msgid "Add Next State" +msgstr "Aggiungi prossimo stato" + +#: html/Search/Bulk.html:106 +msgid "Add Requestor" +msgstr "Aggiungi il richiedente" + +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "Aggiungi un valore" + +#: NOT FOUND IN SOURCE +msgid "Add a keyword selection to this queue" +msgstr "Aggiungi una selezione di parole chiave a questa coda" + +#: NOT FOUND IN SOURCE +msgid "Add a new a global scrip" +msgstr "Aggiungi un nuovo scrip globale" + +#: NOT FOUND IN SOURCE +msgid "Add a scrip to this queue" +msgstr "Aggiungi uno scrip a questa coda" + +#: html/Admin/Global/Scrip.html:76 +msgid "Add a scrip which will apply to all queues" +msgstr "Aggiungi uno scrip da applicare a tutte le code" + +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "Aggiungi criteri addizionali" + +#: html/Search/Bulk.html:146 +msgid "Add comments or replies to selected tickets" +msgstr "Aggiungere commenti o repliche ai ticket selezionati" + +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 +msgid "Add members" +msgstr "Aggiungi appartenenti" + +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 +msgid "Add new watchers" +msgstr "Aggiungi nuovi osservatori" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "Aggiungi, cancella o modifica il valore dei campi personalizzati per gli oggetti" + +#: NOT FOUND IN SOURCE +msgid "AddNextState" +msgstr "AggiunguProssimoStato" + +#: lib/RT/Queue_Overlay.pm:760 +#. ($args{'Type'}) +msgid "Added principal as a %1 for this queue" +msgstr "Aggiunto gruppo/utente come %1 per questa coda" + +#: lib/RT/Ticket_Overlay.pm:1416 +#. ($self->loc($args{'Type'})) +msgid "Added principal as a %1 for this ticket" +msgstr "Aggiunto gruppo/utente come %1 per questo ticket" + +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 +msgid "Address1" +msgstr "Indirizzo1" + +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 +msgid "Address2" +msgstr "Indirizzo2" + +#: html/Ticket/Create.html:95 +msgid "Admin Cc" +msgstr "Cc amministrativo" + +#: etc/initialdata:295 +msgid "Admin Comment" +msgstr "Commento Amministrativo" + +#: etc/initialdata:274 +msgid "Admin Correspondence" +msgstr "Corrispondenza Amministrativa" + +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 +msgid "Admin queues" +msgstr "Gestione delle code" + +#: NOT FOUND IN SOURCE +msgid "Admin users" +msgstr "Gestione degli utenti" + +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 +msgid "Admin/Global configuration" +msgstr "Amministra/Configurazione globale" + +#: NOT FOUND IN SOURCE +msgid "Admin/Groups" +msgstr "Gestione/Gruppi" + +#: NOT FOUND IN SOURCE +msgid "Admin/Queue/Basics" +msgstr "Gestione/Code/Base" + +#: NOT FOUND IN SOURCE +msgid "AdminAllPersonalGroups" +msgstr "GestisciTuttiGruppiPersonali" + +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 +msgid "AdminCc" +msgstr "AdminCc" + +#: NOT FOUND IN SOURCE +msgid "AdminComment" +msgstr "GestisciCommenti" + +#: NOT FOUND IN SOURCE +msgid "AdminCorrespondence" +msgstr "GestisciCorrispondenza" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "GestisciCampoPers." + +#: NOT FOUND IN SOURCE +msgid "AdminCustomFields" +msgstr "GestisciCampiPers." + +#: lib/RT/Group_Overlay.pm:171 +msgid "AdminGroup" +msgstr "GestisciGruppo" + +#: lib/RT/Group_Overlay.pm:173 +msgid "AdminGroupMembership" +msgstr "GestisciAppartenenzaGruppo" + +#: lib/RT/System.pm:81 +msgid "AdminOwnPersonalGroups" +msgstr "GestisciGruppiPersonali" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "AdminQueue" +msgstr "GestisciCoda" + +#: lib/RT/System.pm:82 +msgid "AdminUsers" +msgstr "GestisciUtenti" + +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 +msgid "Administrative Cc" +msgstr "AdminCc" + +#: NOT FOUND IN SOURCE +msgid "Admins" +msgstr "Amministratori" + +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Avanzata" + +#: NOT FOUND IN SOURCE +msgid "Advanced Search" +msgstr "Ricerca avanzata" + +#: html/Elements/SelectDateRelation:57 +msgid "After" +msgstr "dopo il" + +#: NOT FOUND IN SOURCE +msgid "Age" +msgstr "Età " + +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "Aggregatore" + +#: NOT FOUND IN SOURCE +msgid "Alias for" +msgstr "Alias per" + +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "Ottenute tutte le approvazioni" + +#: NOT FOUND IN SOURCE +msgid "All Custom Fields" +msgstr "Tutti i campi personalizzati" + +#: html/Admin/Queues/index.html:75 +msgid "All Queues" +msgstr "Tutte le code" + +#: NOT FOUND IN SOURCE +msgid "Always sends a message to the requestors independent of message sender" +msgstr "Invia comunque un messaggio al richiedente, anche se è lui stesso il mittente" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "Si applica a" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Applica" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Applica modifiche" + +#: html/Elements/Tabs:74 +msgid "Approval" +msgstr "Approvazione" + +#: 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) +msgid "Approval #%1: %2" +msgstr "Approvazione n°%1: %2" + +#: html/Approvals/index.html:75 +#. ($ticket->Id) +msgid "Approval #%1: Notes not recorded due to a system error" +msgstr "Approvazione n°%1: Note non registrate a causa di un errore di sistema" + +#: html/Approvals/index.html:73 +#. ($ticket->Id) +msgid "Approval #%1: Notes recorded" +msgstr "Approvazione n°%1: Note registrate" + +#: NOT FOUND IN SOURCE +msgid "Approval Details" +msgstr "Dettagli dell'approvazione" + +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Approvazione ottenuta" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Approvazione rifiutata" + +#: NOT FOUND IN SOURCE +msgid "Approval diagram" +msgstr "Diagramma dell'approvazione" + +#: html/Approvals/Elements/Approve:65 +msgid "Approve" +msgstr "Approva" + +#: etc/initialdata:504 +msgid "Approver's notes: %1" +msgstr "Note dell'approvatore: %1" + +#: lib/RT/Date.pm:440 +msgid "Apr." +msgstr "Apr." + +#: NOT FOUND IN SOURCE +msgid "April" +msgstr "Aprile" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 +msgid "Ascending" +msgstr "Crescente" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Assegna e rimuovi campi personalizzati" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "AssegnaCampiPers." + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 +msgid "Attach" +msgstr "Allega" + +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 +msgid "Attach file" +msgstr "Allega un file" + +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 +msgid "Attached file" +msgstr "File allegato" + +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) +msgid "Attachment '%1' could not be loaded" +msgstr "Impossibile caricare l'allegato '%1'" + +#: lib/RT/Transaction_Overlay.pm:478 +msgid "Attachment created" +msgstr "Allegato creato" + +#: lib/RT/Tickets_Overlay.pm:1673 +msgid "Attachment filename" +msgstr "Nome file dell'allegato" + +#: html/Ticket/Elements/ShowAttachments:47 +msgid "Attachments" +msgstr "Allegati" + +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Attributo cancellato" + +#: lib/RT/Date.pm:444 +msgid "Aug." +msgstr "Ago." + +#: NOT FOUND IN SOURCE +msgid "August" +msgstr "Agosto" + +#: NOT FOUND IN SOURCE +msgid "AuthSystem" +msgstr "SistemaAutorizzazioni" + +#: etc/initialdata:221 +msgid "Autoreply" +msgstr "RispostaAutomatica" + +#: etc/initialdata:72 +msgid "Autoreply To Requestors" +msgstr "Risposta automatica ai richiedenti" + +#: NOT FOUND IN SOURCE +msgid "AutoreplyToRequestors" +msgstr "RispostaAutomaticaAiRichiedenti" + +#: NOT FOUND IN SOURCE +msgid "Bad PGP Signature: %1\\n" +msgstr "Firma PGP invalida: %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Bad attachment id. Couldn't find attachment '%1'\\n" +msgstr "Identificativo allegato errato. Impossibile trovare l'allegato '%1'\\n" + +#: NOT FOUND IN SOURCE +msgid "Bad data in %1" +msgstr "Dati incorretti in %1" + +#: NOT FOUND IN SOURCE +msgid "Bad transaction number for attachment. %1 should be %2\\n" +msgstr "Numero di transazione incorretto per l'allegato. %1 dovrebbe essere %2\\n" + +#: 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 "Dati base" + +#: html/Ticket/Update.html:86 +msgid "Bcc" +msgstr "Bcc" + +#: 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 "Se hai aggiornato qualche impostazione, assicurati di premere" + +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 +msgid "Before" +msgstr "prima del" + +#: NOT FOUND IN SOURCE +msgid "Begin Approval" +msgstr "Inizia approvazione" + +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "Logo Best Practical Solutions, LLC" + +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "Binario" + +#: etc/initialdata:217 +msgid "Blank" +msgstr "Vuoto" + +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "Grassetto" + +#: NOT FOUND IN SOURCE +msgid "Bookmarkable URL for this search" +msgstr "URL assoluto per questa ricerca" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "Link assoluto" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 +msgid "Brief headers" +msgstr "Intestazione breve" + +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 +msgid "Bulk ticket update" +msgstr "Modifica di ticket in blocco" + +#: lib/RT/User_Overlay.pm:1722 +msgid "Can not modify system users" +msgstr "Gli utenti di sistema non possono essere modificati" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "Can this principal see this queue" +msgstr "Può il gruppo/utente vedere questa coda" + +#: lib/RT/CustomField_Overlay.pm:370 +msgid "Can't add a custom field value without a name" +msgstr "Impossibile aggiungere un valore di campo personalizzato senza un nome" + +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "Impossibile trovare una classe collection per '%1'" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Impossibile trovare una ricerca salvata su cui lavorare" + +#: lib/RT/Link_Overlay.pm:160 +msgid "Can't link a ticket to itself" +msgstr "Non è possibile collegare un ticket a se stesso" + +#: NOT FOUND IN SOURCE +msgid "Can't merge into a merged ticket. You should never get this error" +msgstr "Impossibile unire un ticket ad un ticket già unito. Questo errore non dovrebbe mai verificarsi" + +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Impossibile salvare questa ricerca" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 +msgid "Can't specifiy both base and target" +msgstr "Impossibile specificare sia la base che il target" + +#: html/autohandler:148 +#. ($msg) +msgid "Cannot create user: %1" +msgstr "Impossibile creare l'utente: %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 +msgid "Cc" +msgstr "Cc" + +#: html/SelfService/Prefs.html:52 +msgid "Change password" +msgstr "Cambia la password" + +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Spunta tutte le caselle" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 +msgid "Check box to delete" +msgstr "Spunta la casella per cancellare" + +#: html/Admin/Elements/SelectRights:55 +msgid "Check box to revoke right" +msgstr "Spunta la casella per revocare i diritti" + +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 +msgid "Children" +msgstr "Derivati" + +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 +msgid "City" +msgstr "Città " + +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "Azzera" + +#: html/Ticket/Elements/ShowDates:68 +msgid "Closed" +msgstr "Chiuso" + +#: NOT FOUND IN SOURCE +msgid "Closed Tickets" +msgstr "Ticket chiusi" + +#: NOT FOUND IN SOURCE +msgid "Closed requests" +msgstr "Richieste chiuse" + +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "Ticket chiusi" + +#: NOT FOUND IN SOURCE +msgid "Command not understood!\\n" +msgstr "Comando non riconosciuto!\\n" + +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 +msgid "Comment" +msgstr "Commento" + +#: html/Admin/Queues/Modify.html:79 +msgid "Comment Address" +msgstr "Inidirizzo per i commenti" + +#: NOT FOUND IN SOURCE +msgid "Comment not recorded" +msgstr "Commento non registrato" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "Comment on tickets" +msgstr "Aggiunta di commenti ai ticket" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "CommentOnTicket" +msgstr "AggiungiCommentiAlTicket" + +#: NOT FOUND IN SOURCE +msgid "Comments" +msgstr "Commenti" + +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 +msgid "Comments (Not sent to requestors)" +msgstr "Commenti (non inviati ai richiedenti)" + +#: html/Search/Bulk.html:150 +msgid "Comments (not sent to requestors)" +msgstr "Commenti (non inviati ai richiedenti)" + +#: NOT FOUND IN SOURCE +msgid "Comments about %1" +msgstr "Commenti su %1" + +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 +msgid "Comments about this user" +msgstr "Commenti su questo utente" + +#: lib/RT/Transaction_Overlay.pm:623 +msgid "Comments added" +msgstr "Aggiunto commento" + +#: lib/RT/Action/Generic.pm:176 +msgid "Commit Stubbed" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Compile Restrictions" +msgstr "Restrizioni di compilazione" + +#: html/Admin/Elements/EditScrip:63 +msgid "Condition" +msgstr "Condizione" + +#: bin/rt-crontool:131 +msgid "Condition matches..." +msgstr "La condizione è soddisfatta..." + +#: lib/RT/Scrip_Overlay.pm:189 +msgid "Condition not found" +msgstr "Condizione non trovata" + +#: html/Elements/Tabs:81 +msgid "Configuration" +msgstr "Configurazione" + +#: html/SelfService/Prefs.html:54 +msgid "Confirm" +msgstr "Conferma" + +#: NOT FOUND IN SOURCE +msgid "ContactInfoSystem" +msgstr "ContactInfoSystem" + +#: NOT FOUND IN SOURCE +msgid "Contacted date '%1' could not be parsed" +msgstr "Impossibile interpretare la data di contatto '%1'" + +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 +msgid "Content" +msgstr "Contenuto" + +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Coould not create group" +msgstr "Impossibile creare il gruppo" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "Copia" + +#: etc/initialdata:286 +msgid "Correspondence" +msgstr "Corrispondenza" + +#: NOT FOUND IN SOURCE +msgid "Correspondence Address" +msgstr "Inidirizzo di corrispondenza" + +#: lib/RT/Transaction_Overlay.pm:619 +msgid "Correspondence added" +msgstr "Aggiunta corrispondenza" + +#: NOT FOUND IN SOURCE +msgid "Correspondence not recorded" +msgstr "Corrispondenza non registrata" + +#: NOT FOUND IN SOURCE +msgid "Could not add new custom field value for ticket. " +msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato al ticket. " + +#: NOT FOUND IN SOURCE +msgid "Could not add new custom field value for ticket. %1 " +msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato al ticket. %1 " + +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato. " + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "Impossibile aggiungere un nuovo valore di campo personalizzato. %1 " + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 +msgid "Could not change owner. " +msgstr "Impossibile cambiare l'incaricato. " + +#: html/Admin/CustomFields/Modify.html:119 +#. ($msg) +msgid "Could not create CustomField" +msgstr "Impossibile creare il campo personalizzato" + +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "Impossibile creare il campo personalizzato: %1" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 +msgid "Could not create group" +msgstr "Impossibile creare il gruppo" + +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 +#. ($msg) +msgid "Could not create template: %1" +msgstr "Impossibile creare il modello: %1" + +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 +msgid "Could not create ticket. Queue not set" +msgstr "Impossibile creare il ticket. Queue non impostata" + +#: 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 "Impossibile creare l'utente" + +#: NOT FOUND IN SOURCE +msgid "Could not create watcher for requestor" +msgstr "Impossibile creare l'osservatore per il richiedente" + +#: NOT FOUND IN SOURCE +msgid "Could not find a ticket with id %1" +msgstr "Impossibile trovare il ticket numero %1" + +#: NOT FOUND IN SOURCE +msgid "Could not find group %1." +msgstr "Impossibile trovare il gruppo %1." + +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 +msgid "Could not find or create that user" +msgstr "Impossibile trovare o creare questo utente" + +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 +msgid "Could not find that principal" +msgstr "Impossibile trovare questo gruppo/utente" + +#: NOT FOUND IN SOURCE +msgid "Could not find user %1." +msgstr "Impossibile trovare l'utente %1." + +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Impossibile caricare il campo personalizzato %1" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 +msgid "Could not load group" +msgstr "Impossibile caricare questo gruppo" + +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "Impossibile caricare l'oggetto per %1" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "Impossibile caricare un attributo della ricerca" + +#: lib/RT/Queue_Overlay.pm:758 +#. ($args{'Type'}) +msgid "Could not make that principal a %1 for this queue" +msgstr "Impossibile rendere questo gruppo/utente un %1 per questa coda" + +#: lib/RT/Ticket_Overlay.pm:1405 +#. ($self->loc($args{'Type'})) +msgid "Could not make that principal a %1 for this ticket" +msgstr "Impossibile rendere questo gruppo/utente un %1 per questo ticket" + +#: lib/RT/Queue_Overlay.pm:857 +#. ($args{'Type'}) +msgid "Could not remove that principal as a %1 for this queue" +msgstr "Impossibile rimuovere questo gruppo/utente come un %1 per questa coda" + +#: NOT FOUND IN SOURCE +msgid "Could not remove that principal as a %1 for this ticket" +msgstr "Impossibile rimuovere questo gruppo/utente come un %1 per questo ticket" + +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Impossibile impostare le informazioni dell'utente" + +#: lib/RT/Group_Overlay.pm:1011 +msgid "Couldn't add member to group" +msgstr "Impossibile aggiungere un appartenente al gruppo" + +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 +#. ($Msg) +msgid "Couldn't create a transaction: %1" +msgstr "Impossibile creare una transazione: %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't figure out what to do from gpg's reply\\n" +msgstr "Impossibile capire che cosa fare con questa risposta gpg\\n" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find group\\n" +msgstr "Impossibile trovare il gruppo\\n" + +#: lib/RT/Record.pm:939 +msgid "Couldn't find row" +msgstr "Impossibile trovare la riga" + +#: lib/RT/Group_Overlay.pm:985 +msgid "Couldn't find that principal" +msgstr "Impossibile trovare questo gruppo/utente" + +#: lib/RT/CustomField_Overlay.pm:404 +msgid "Couldn't find that value" +msgstr "Impossibile trovare questo valore" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find that watcher" +msgstr "Impossibile trovare questo osservatore" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find user\\n" +msgstr "Impossibile trovare l'utente\\n" + +#: lib/RT/CurrentUser.pm:146 +#. ($self->Id) +msgid "Couldn't load %1 from the users database.\\n" +msgstr "Impossibile caricare %1 dal database degli utenti.\\n" + +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "Impossibile caricare la classe %1" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "Impossibile caricare ilcampo personalizzato %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load KeywordSelects." +msgstr "Impossibile caricare KeywordSelects" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load RT config file '%1' %2" +msgstr "Impossibile caricare il file di configurazione RT '%1' %2" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load Scrips." +msgstr "Impossibile caricare gli Scrips" + +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 +#. ($id) +msgid "Couldn't load group %1" +msgstr "Impossibile caricare il gruppo %1" + +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 +msgid "Couldn't load link" +msgstr "Impossibile caricare il collegamento" + +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "Impossibile caricare l'oggetto %1" + +#: html/Admin/Queues/People.html:142 +#. ($id) +msgid "Couldn't load queue" +msgstr "Impossibile caricare la coda" + +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 +#. ($id) +msgid "Couldn't load queue %1" +msgstr "Impossibile caricare la coda %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load scrip" +msgstr "Impossibile caricare lo Scrip" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load template" +msgstr "Impossibile caricare il modello" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load that user (%1)" +msgstr "Impossibile caricare questo utente (%1)" + +#: html/SelfService/Display.html:156 +#. ($id) +msgid "Couldn't load ticket '%1'" +msgstr "Impossibile caricare il ticket '%1'" + +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 +msgid "Country" +msgstr "Nazione" + +#: 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 +msgid "Create" +msgstr "Crea" + +#: etc/initialdata:135 +msgid "Create Tickets" +msgstr "Crea ticket" + +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 +msgid "Create a CustomField" +msgstr "Crea un campo Personalizzato" + +#: html/Admin/Queues/CustomField.html:69 +#. ($QueueObj->Name()) +msgid "Create a CustomField for queue %1" +msgstr "Crea un campo personalizzato per la coda %1" + +#: NOT FOUND IN SOURCE +msgid "Create a CustomField which applies to all queues" +msgstr "Crea un campo personalizzato valido per tutte le code" + +#: NOT FOUND IN SOURCE +msgid "Create a new Custom Field" +msgstr "Crea un nuovo campo personalizzato" + +#: NOT FOUND IN SOURCE +msgid "Create a new global scrip" +msgstr "Crea un nuovo scrip globale" + +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 +msgid "Create a new group" +msgstr "Crea un nuovo gruppo" + +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 +msgid "Create a new personal group" +msgstr "Crea un nuovo gruppo personale" + +#: NOT FOUND IN SOURCE +msgid "Create a new queue" +msgstr "Crea una nuova coda" + +#: NOT FOUND IN SOURCE +msgid "Create a new scrip" +msgstr "Crea un nuovo scrip" + +#: NOT FOUND IN SOURCE +msgid "Create a new template" +msgstr "Crea un nuovo modello" + +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 +msgid "Create a new ticket" +msgstr "Crea un nuovo ticket" + +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 +msgid "Create a new user" +msgstr "Crea un nuovo utente" + +#: html/Admin/Queues/Modify.html:125 +msgid "Create a queue" +msgstr "Crea una coda" + +#: NOT FOUND IN SOURCE +msgid "Create a queue called" +msgstr "Crea una nuova coda di nome" + +#: NOT FOUND IN SOURCE +msgid "Create a request" +msgstr "Crea una richiesta" + +#: html/Admin/Queues/Scrip.html:80 +#. ($QueueObj->Name) +msgid "Create a scrip for queue %1" +msgstr "Crea uno scrip per la coda %1" + +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 +msgid "Create a template" +msgstr "Crea un modello" + +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "Nuovo ticket" + +#: NOT FOUND IN SOURCE +msgid "Create failed: %1 / %2 / %3 " +msgstr "Creazione fallita: %1 / %2 / %3" + +#: NOT FOUND IN SOURCE +msgid "Create failed: %1/%2/%3" +msgstr "Creazione fallita: %1/%2/%3" + +#: etc/initialdata:137 +msgid "Create new tickets based on this scrip's template" +msgstr "Creare nuovi ticket basati su questo modello di scrip" + +#: html/SelfService/Create.html:105 +msgid "Create ticket" +msgstr "Crea il ticket" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "Create tickets in this queue" +msgstr "Crea nuovi ticket in questa coda" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "Create, delete and modify custom fields" +msgstr "Crea, elimina e modifica campi personalizzati" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "Create, delete and modify queues" +msgstr "Crea, elimina e modifica le code" + +#: NOT FOUND IN SOURCE +msgid "Create, delete and modify the members of any user's personal groups" +msgstr "Crea, elimina e modifica gli appartenenti ai gruppi personali di un qualunque utente" + +#: lib/RT/System.pm:81 +msgid "Create, delete and modify the members of personal groups" +msgstr "Crea, elimina e modifica gli appartenenti ai gruppi personali " + +#: lib/RT/System.pm:82 +msgid "Create, delete and modify users" +msgstr "Crea, elimina e modifica gli utenti" + +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "CreaRichiestaSalvata" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "CreateTicket" +msgstr "CreaTicket" + +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 +msgid "Created" +msgstr "Creato" + +#: NOT FOUND IN SOURCE +msgid "Created By" +msgstr "Creato da" + +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 +#. ($CustomFieldObj->Name()) +msgid "Created CustomField %1" +msgstr "Campo personalizzato %1 creato" + +#: NOT FOUND IN SOURCE +msgid "Created template %1" +msgstr "Modello %1 creato" + +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "CreatoDa" + +#: html/Elements/EditLinks:49 +msgid "Current Links" +msgstr "Collegamenti attuali" + +#: html/Admin/Elements/EditScrips:51 +msgid "Current Scrips" +msgstr "Scrips attuali" + +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 +msgid "Current members" +msgstr "Appartenenti attuali" + +#: html/Admin/Elements/SelectRights:51 +msgid "Current rights" +msgstr "Diritti attuali" + +#: NOT FOUND IN SOURCE +msgid "Current search criteria" +msgstr "Criterio di ricerca attuale" + +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 +msgid "Current watchers" +msgstr "Osservatori attuali" + +#: NOT FOUND IN SOURCE +msgid "Custom Field #%1" +msgstr "Campo personalizzato n°%1" + +#: 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 +msgid "Custom Fields" +msgstr "Campi personalizzati" + +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Campi personalizzati per %1" + +#: html/Admin/Elements/EditScrip:123 +msgid "Custom action cleanup code" +msgstr "Programma di pulizia dell'azione personalizzata" + +#: html/Admin/Elements/EditScrip:115 +msgid "Custom action preparation code" +msgstr "Programma di preparazione dell'azione personalizzata" + +#: html/Admin/Elements/EditScrip:107 +msgid "Custom condition" +msgstr "Condizione personalizzata" + +#: NOT FOUND IN SOURCE +msgid "Custom field %1 %2 %3" +msgstr "Campi personalizzati %1 %2 %3" + +#: lib/RT/Tickets_Overlay.pm:2147 +#. ($CF->Name) +msgid "Custom field %1 has a value." +msgstr "Il campo personalizzato %1 ha un valore." + +#: lib/RT/Tickets_Overlay.pm:2143 +#. ($CF->Name) +msgid "Custom field %1 has no value." +msgstr "Il campo personalizzato %1 non ha valore." + +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 +#. ($args{'Field'}) +msgid "Custom field %1 not found" +msgstr "Campo personalizzato %1 non trovato" + +#: NOT FOUND IN SOURCE +msgid "Custom field deleted" +msgstr "Campo personalizzato cancellato" + +#: NOT FOUND IN SOURCE +msgid "Custom field not found" +msgstr "Campo personalizzato %1 non trovato" + +#: lib/RT/CustomField_Overlay.pm:1041 +#. ($args{'Content'}, $self->Name) +msgid "Custom field value %1 could not be found for custom field %2" +msgstr "Impossibile trovare il valore %1 per il campo personalizzato %2" + +#: NOT FOUND IN SOURCE +msgid "Custom field value changed from %1 to %2" +msgstr "Valore del campo personalizzato cambiato da %1 a %2" + +#: lib/RT/CustomField_Overlay.pm:414 +msgid "Custom field value could not be deleted" +msgstr "Impossibile cancellare il valore del campo personalizzato" + +#: lib/RT/CustomField_Overlay.pm:1047 +msgid "Custom field value could not be found" +msgstr "Valore del campo personalizzato non trovato" + +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 +msgid "Custom field value deleted" +msgstr "Il valore del vampo personalizzato è stato eliminato" + +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 +msgid "CustomField" +msgstr "CampoPersonalizzato" + +#: NOT FOUND IN SOURCE +msgid "Data error" +msgstr "Errore nei dati" + +#: 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 +msgid "Dates" +msgstr "Date" + +#: lib/RT/Date.pm:448 +msgid "Dec." +msgstr "Dic." + +#: NOT FOUND IN SOURCE +msgid "December" +msgstr "Dicembre" + +#: NOT FOUND IN SOURCE +msgid "Default Autoresponse Template" +msgstr "Modello di default per la risposta automatica" + +#: etc/initialdata:222 +msgid "Default Autoresponse template" +msgstr "Modello di default per la risposta automatica" + +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "Coda di default" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Richiedente di default" + +#: etc/initialdata:296 +msgid "Default admin comment template" +msgstr "Modello di default per il commento amministrativo" + +#: etc/initialdata:275 +msgid "Default admin correspondence template" +msgstr "Modello di default per la corrispondenza amministrativa" + +#: etc/initialdata:287 +msgid "Default correspondence template" +msgstr "Modello di default per la corrispondenza" + +#: etc/initialdata:253 +msgid "Default transaction template" +msgstr "Modello di default per la transazione" + +#: NOT FOUND IN SOURCE +msgid "Default: %1/%2 changed from %3 to %4" +msgstr "Default: %1/%2 modificato da %3 a %4" + +#: html/User/Delegation.html:46 html/User/Delegation.html:49 +msgid "Delegate rights" +msgstr "Delega i diritti" + +#: lib/RT/System.pm:85 +msgid "Delegate specific rights which have been granted to you." +msgstr "Delega diritti specifici tra quelli che ti sono stati accordati" + +#: lib/RT/System.pm:85 +msgid "DelegateRights" +msgstr "DelegaDiritti" + +#: html/User/Elements/Tabs:59 +msgid "Delegation" +msgstr "Delega" + +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 +msgid "Delete" +msgstr "Cancella" + +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Cancella modello" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "Cancellazione fallita: %1" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Cancella gli scrips selezionati" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "Delete tickets" +msgstr "Cancella ticket" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "DeleteTicket" +msgstr "CancellaTicket" + +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "Ricerca cancellata" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object could break referential integrity" +msgstr "La cancellazione di quest'oggetto può danneggiare l'integrità referenziale" + +#: lib/RT/Queue_Overlay.pm:391 +msgid "Deleting this object would break referential integrity" +msgstr "La cancellazione di quest'oggetto danneggerebbe l'integrità referenziale" + +#: lib/RT/User_Overlay.pm:513 +msgid "Deleting this object would violate referential integrity" +msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object would violate referential integrity." +msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object would violate referential integrity. That's bad." +msgstr "La cancellazione di quest'oggetto violerebbe l'integrità referenziale. Ciò è male!" + +#: html/Approvals/Elements/Approve:66 +msgid "Deny" +msgstr "Nega" + +#: 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 +msgid "Depended on by" +msgstr "È una dipendenza per" + +#: NOT FOUND IN SOURCE +msgid "DependedOnBy" +msgstr "DipendenzaPer" + +#: NOT FOUND IN SOURCE +msgid "Dependencies: \\n" +msgstr "Dipendenze: \\n" + +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "Aggiunta dipendenza da parte di %1" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "Cancellata dipendenza da parte di %1" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "Aggiunta dipendenza da %1" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "Cancellata dipendenza da %1" + +#: 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 +msgid "Depends on" +msgstr "Dipende da" + +#: NOT FOUND IN SOURCE +msgid "DependsOn" +msgstr "DipendeDa" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 +msgid "Descending" +msgstr "Decrescente" + +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 +msgid "Describe the issue below" +msgstr "Descrivi il problema qui sotto" + +#: 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 "Descrizione" + +#: NOT FOUND IN SOURCE +msgid "Details" +msgstr "Dettagli" + +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 +msgid "Display" +msgstr "Visualizza" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "Display Access Control List" +msgstr "Visualizza la Lista Controllo Accessi (ACL)" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Visualizza colonne" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "Display Scrip templates for this queue" +msgstr "Visualizza i modelli di Scrips per questa coda" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "Display Scrips for this queue" +msgstr "Visualizza gli Scrips per questa coda" + +#: html/Ticket/Elements/ShowHistory:56 +msgid "Display mode" +msgstr "Modalità visualizzazione" + +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "Visualizza le ricerche salvate per questo gruppo" + +#: NOT FOUND IN SOURCE +msgid "Display ticket #%1" +msgstr "Visualizza il ticket n°%1" + +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "Distribuito in accordo con la versione 2 della <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU GPL</a>." + +#: lib/RT/System.pm:76 +msgid "Do anything and everything" +msgstr "Fai di tutto e di più" + +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "Esegui la ricerca" + +#: html/Elements/Refresh:51 +msgid "Don't refresh this page." +msgstr "Non aggiornare questa pagina." + +#: NOT FOUND IN SOURCE +msgid "Don't show search results" +msgstr "Non mostrare i risultati della ricerca" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "Download" +msgstr "Download" + +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "Scarica come file separato da TAB" + +#: 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 +msgid "Due" +msgstr "Scadenza" + +#: NOT FOUND IN SOURCE +msgid "Due date '%1' could not be parsed" +msgstr "Impossibile interpretare la data di scadenza '%1'" + +#: NOT FOUND IN SOURCE +msgid "ERROR: Couldn't load ticket '%1': %2.\\n" +msgstr "ERRORE: impossibile caricare il ticket '%1' : %2.\\n" + +#: NOT FOUND IN SOURCE +msgid "Edit" +msgstr "Modifica" + +#: NOT FOUND IN SOURCE +msgid "Edit Conditions" +msgstr "Modifica condizioni" + +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" +msgstr "Modifica i campi personalizzati per %1" + +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "Modifica i campi personalizzati per tutti i gruppi" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "Modifica i campi personalizzati per tutti gli utenti" + +#: 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 "Modifica i campi personalizzati per tutte le code" + +#: NOT FOUND IN SOURCE +msgid "Edit Custom Fields for transactions on tickets in all queues" +msgstr "Modifica i campi personalizzati per le transazioni sui ticket in tutte le code" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" +msgstr "Modifica collegamenti" + +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Modifica query" + +#: html/Admin/Queues/Templates.html:63 +#. ($QueueObj->Name) +msgid "Edit Templates for queue %1" +msgstr "Modifica i modelli per la coda %1" + +#: NOT FOUND IN SOURCE +msgid "Edit keywords" +msgstr "Modifica parole chiave" + +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "Modifica ricerche salvate per questo gruppo" + +#: NOT FOUND IN SOURCE +msgid "Edit scrips" +msgstr "Modifica scrips" + +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 +msgid "Edit system templates" +msgstr "Modifca i modelli di sistema" + +#: NOT FOUND IN SOURCE +msgid "Edit templates for %1" +msgstr "Modifica i modelli per %1" + +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "ModificaRicercheSalvate" + +#: html/Admin/Queues/Modify.html:140 +#. ($QueueObj->Name) +msgid "Editing Configuration for queue %1" +msgstr "Modifica della configurazione per la coda %1" + +#: NOT FOUND IN SOURCE +msgid "Editing Configuration for user %1" +msgstr "Modifica della configurazione per l'utente %1" + +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 +#. ($CustomFieldObj->Name()) +msgid "Editing CustomField %1" +msgstr "Modifica del campo personalizzato %1" + +#: html/Admin/Groups/Members.html:53 +#. ($Group->Name) +msgid "Editing membership for group %1" +msgstr "Modifica degli appartenenti al gruppo %1" + +#: html/User/Groups/Members.html:150 +#. ($Group->Name) +msgid "Editing membership for personal group %1" +msgstr "Modifica degli appartenenti al gruppo personale %1" + +#: NOT FOUND IN SOURCE +msgid "Editing template %1" +msgstr "Modifica del modello %1" + +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 +msgid "Either base or target must be specified" +msgstr "È necessario specificare base o target" + +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 +msgid "Email" +msgstr "Email" + +#: lib/RT/User_Overlay.pm:236 +msgid "Email address in use" +msgstr "Inidirizzo email in uso" + +#: NOT FOUND IN SOURCE +msgid "EmailAddress" +msgstr "IndirizzoEmail" + +#: NOT FOUND IN SOURCE +msgid "EmailEncoding" +msgstr "CodificaEmail" + +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 +msgid "Enabled (Unchecking this box disables this custom field)" +msgstr "Abilitato (togliere il segno di spunta per disabilitare questo campo personalizzato)" + +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 +msgid "Enabled (Unchecking this box disables this group)" +msgstr "Abilitato (togliere il segno di spunta per disabilitare questo gruppo)" + +#: html/Admin/Queues/Modify.html:105 +msgid "Enabled (Unchecking this box disables this queue)" +msgstr "Abilitato (togliere il segno di spunta per disabilitare questa coda)" + +#: NOT FOUND IN SOURCE +msgid "Enabled Custom Fields" +msgstr "Campi personalizzati abilitati" + +#: html/Admin/Queues/index.html:78 +msgid "Enabled Queues" +msgstr "Code abilitate" + +#: 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)) +msgid "Enabled status %1" +msgstr "Stato %1 abilitato" + +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "Stato abilitato: %1" + +#: lib/RT/CustomField_Overlay.pm:64 +msgid "Enter multiple values" +msgstr "Valori multipli" + +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Inserire, separati da spazio, gli oggetti (o URI di oggetti) da collegare." + +#: lib/RT/CustomField_Overlay.pm:65 +msgid "Enter one value" +msgstr "Valore singolo" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Inserire, separati da spazio, le code (o URI di code) da collegare." + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Inserire, separati da spazio, i ticket (o URI di ticket) da collegare." + +#: NOT FOUND IN SOURCE +msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +msgstr "Inserire, separati da spazio, i ticket (o URI di ticket) da collegare." + +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "Inserimento di un massimo di %1 valori" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 +msgid "Error" +msgstr "Errore" + +#: NOT FOUND IN SOURCE +msgid "Error adding watcher" +msgstr "Errore durante l'aggiunta di un osservatore" + +#: lib/RT/Queue_Overlay.pm:669 +msgid "Error in parameters to Queue->AddWatcher" +msgstr "Errore nei parametri passati a Queue->AddWatcher" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Queue->DelWatcher" +msgstr "Errore nei parametri passati a Queue->DelWatcher" + +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Errore nei parametri passati a Queue->DeleteWatcher" + +#: lib/RT/Ticket_Overlay.pm:1333 +msgid "Error in parameters to Ticket->AddWatcher" +msgstr "Errore nei parametri passati a Ticket->AddWatcher" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Ticket->DelWatcher" +msgstr "Errore nei parametri passati a Ticket->DelWatcher" + +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Errore nei parametri passati a Ticket->DeleteWatcher" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "Propaga ticket" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Stima" + +#: etc/initialdata:20 +msgid "Everyone" +msgstr "Chiunque" + +#: bin/rt-crontool:219 +msgid "Example:" +msgstr "Esempio:" + +#: NOT FOUND IN SOURCE +msgid "ExtendedStatus" +msgstr "StatoAggiuntivo" + +#: NOT FOUND IN SOURCE +msgid "QueueName" +msgstr "NomeCoda" + +#: NOT FOUND IN SOURCE +msgid "OwnerName" +msgstr "NomeIncaricato" + +#: NOT FOUND IN SOURCE +msgid "TimeEstimated" +msgstr "TempoStimato" + +#: NOT FOUND IN SOURCE +msgid "CreatedBy" +msgstr "CreatoDa" + +#: NOT FOUND IN SOURCE +msgid "StartsRelative" +msgstr "TempoDaInizioPrevisto" + +#: NOT FOUND IN SOURCE +msgid "StartedRelative" +msgstr "TempoDaInizio" + +#: NOT FOUND IN SOURCE +msgid "CreatedRelative" +msgstr "TempoDaCreazione" + +#: NOT FOUND IN SOURCE +msgid "LastUpdatedRelative" +msgstr "TempoDaUltimoAggiornamento" + +#: NOT FOUND IN SOURCE +msgid "ToldRelative" +msgstr "TempoDaUltimoContattoRichiedente" + +#: NOT FOUND IN SOURCE +msgid "DueRelative" +msgstr "TempoDaScadenza" + +#: NOT FOUND IN SOURCE +msgid "ResolvedRelative" +msgstr "TempoDaRisoluzione" + +#: NOT FOUND IN SOURCE +msgid "ExternalAuthId" +msgstr "IdAutorizEsterno" + +#: NOT FOUND IN SOURCE +msgid "ExternalContactInfoId" +msgstr "IdContattoEsterno" + +#: html/Admin/Users/Modify.html:99 +msgid "Extra info" +msgstr "Informazioni aggiuntive" + +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "Impossibile creare un attributo della ricerca" + +#: lib/RT/User_Overlay.pm:377 +msgid "Failed to find 'Privileged' users pseudogroup." +msgstr "Impossibile trovare il pseudogruppo di utenti 'Privilegiato'." + +#: lib/RT/User_Overlay.pm:384 +msgid "Failed to find 'Unprivileged' users pseudogroup" +msgstr "Impossibile trovare il pseudogruppo di utenti 'Non Privilegiato'." + +#: bin/rt-crontool:163 +#. ($modname, $@) +msgid "Failed to load module %1. (%2)" +msgstr "Errore nel caricamento del modulo %1. (%2)" + +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "Impossibile caricare un oggetto per %1" + +#: lib/RT/Date.pm:438 +msgid "Feb." +msgstr "Feb." + +#: NOT FOUND IN SOURCE +msgid "February" +msgstr "Febbraio" + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Nome file" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "Testi multipli" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "Testi WIKI multipli" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "Testo singolo" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "Testo WIKI singolo" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "Testi multipli (max. %1)" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "Testi WIKI multipli (max. %1)" + +#: NOT FOUND IN SOURCE +msgid "Fin" +msgstr "Fin" + +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 +msgid "Final Priority" +msgstr "Priorità finale" + +#: lib/RT/Ticket_Overlay.pm:1140 +msgid "FinalPriority" +msgstr "PrioritaFinale" + +#: NOT FOUND IN SOURCE +msgid "Find group whose" +msgstr "Cerca il gruppo in cui" + +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "Cerca i gruppi in cui" + +#: NOT FOUND IN SOURCE +msgid "Find new/open tickets" +msgstr "Cerca ticket nuovi/aperti" + +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 +msgid "Find people whose" +msgstr "Cerca le persone in cui" + +#: html/Search/Results.html:109 +msgid "Find tickets" +msgstr "Ricerca ticket" + +#: NOT FOUND IN SOURCE +msgid "Finish Approval" +msgstr "Completa approvazione" + +#: html/Ticket/Elements/Tabs:81 +msgid "First" +msgstr "Primo" + +#: NOT FOUND IN SOURCE +msgid "First page" +msgstr "Prima pagina" + +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 +msgid "Foo Bar Baz" +msgstr "Tizio Caio Sempronio" + +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 +msgid "Foo!" +msgstr "Tizio!" + +#: html/Search/Bulk.html:105 +msgid "Force change" +msgstr "Forza la modifica" + +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "Opzioni colonna" + +#: html/Search/Results.html:107 +#. ($ticketcount) +msgid "Found %quant(%1,ticket)" +msgstr "Trovati %quant(%1,ticket)" + +#: lib/RT/Record.pm:942 +msgid "Found Object" +msgstr "Trovato Oggetto" + +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "Testo libero" + +#: NOT FOUND IN SOURCE +msgid "FreeformContactInfo" +msgstr "FreeformContactInfo" + +#: NOT FOUND IN SOURCE +msgid "FreeformMultiple" +msgstr "FreeformMultiple" + +#: NOT FOUND IN SOURCE +msgid "FreeformSingle" +msgstr "FreeformSingle" + +#: lib/RT/Date.pm:417 +msgid "Fri." +msgstr "Ven." + +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 +msgid "Full headers" +msgstr "Intestazione completa" + +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "Carica da file un modello compilato" + +#: NOT FOUND IN SOURCE +msgid "Getting the current user from a pgp sig\\n" +msgstr "Sto individuando l'utente corrente da una firma pgp\\n" + +#: lib/RT/Transaction_Overlay.pm:673 +#. ($New->Name) +msgid "Given to %1" +msgstr "Assegnato a %1" + +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 +msgid "Global" +msgstr "Globale" + +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Campi personalizzati globali" + +#: NOT FOUND IN SOURCE +msgid "Global Keyword Selections" +msgstr "Selezione globale delle parole chiave" + +#: NOT FOUND IN SOURCE +msgid "Global Scrips" +msgstr "Scrips globali" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "Configurazione globale campi personalizzati" + +#: html/Admin/Elements/SelectTemplate:59 +#. (loc($Template->Name)) +msgid "Global template: %1" +msgstr "Modello globale: %1" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Vai" + +#: 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 +msgid "Go!" +msgstr "Vai!" + +#: NOT FOUND IN SOURCE +msgid "Good pgp sig from %1\\n" +msgstr "Firma pgp valida da %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Goto page" +msgstr "Vai a pagina" + +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 +msgid "Goto ticket" +msgstr "Vai al ticket" + +#: NOT FOUND IN SOURCE +msgid "Grand" +msgstr "Grand" + +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 +msgid "Group" +msgstr "Gruppo" + +#: NOT FOUND IN SOURCE +msgid "Group %1 %2: %3" +msgstr "Gruppo %1 %2: %3" + +#: 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 "Diritti di gruppo" + +#: lib/RT/Group_Overlay.pm:991 +msgid "Group already has member" +msgstr "Appartiene già al gruppo" + +#: NOT FOUND IN SOURCE +msgid "Group could not be created." +msgstr "Impossibile creare il gruppo." + +#: html/Admin/Groups/Modify.html:109 +#. ($create_msg) +msgid "Group could not be created: %1" +msgstr "Impossibile creare il gruppo: %1" + +#: lib/RT/Group_Overlay.pm:529 +msgid "Group created" +msgstr "Gruppo creato" + +#: lib/RT/Group_Overlay.pm:1163 +msgid "Group has no such member" +msgstr "Non appartiene al gruppo" + +#: 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 +msgid "Group not found" +msgstr "Gruppo non trovato" + +#: NOT FOUND IN SOURCE +msgid "Group not found.\\n" +msgstr "Gruppo non trovato.\\n" + +#: NOT FOUND IN SOURCE +msgid "Group not specified.\\n" +msgstr "Gruppo non specificato.\\n" + +#: 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 +msgid "Groups" +msgstr "Gruppi" + +#: lib/RT/Group_Overlay.pm:997 +msgid "Groups can't be members of their members" +msgstr "I gruppi non possono appartenere a gruppi che sono già loro appartenenti" + +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "Gruppi che corrispondono ai criteri di ricerca" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "L'utente appartiene ai gruppi" + +#: NOT FOUND IN SOURCE +msgid "HasMember" +msgstr "HaUnAppartenente" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 +msgid "Hello!" +msgstr "Ciao!" + +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 +#. ($name) +msgid "Hello, %1" +msgstr "Ciao, %1" + +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 +msgid "History" +msgstr "Cronologia" + +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "Cronologia del gruppo %1" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "Cronologia dell'utente %1" + +#: NOT FOUND IN SOURCE +msgid "HomePhone" +msgstr "TelefonoCasa" + +#: html/Elements/Tabs:65 +msgid "Homepage" +msgstr "Homepage" + +#: lib/RT/Base.pm:110 +#. (6) +msgid "I have %quant(%1,concrete mixer)." +msgstr "Ho %quant(%1,concrete mixer)." + +#: NOT FOUND IN SOURCE +msgid "I have [quant,_1,concrete mixer]." +msgstr "Ho [quant,_1,concrete mixer]." + +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "Mi sono perso..." + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 +msgid "Id" +msgstr "Id" + +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 +msgid "Identity" +msgstr "Identità " + +#: etc/initialdata:429 +msgid "If an approval is rejected, reject the original and delete pending approvals" +msgstr "Se un'approvazione viene negata, respingi l'originale e elimina le approvazioni accodate" + +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "(per i nuovi ticket in cui non viene specificato un richiedente)" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "(per i nuovi ticket in cui non viene specificata una coda)" + +#: 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 "Se questo strumento viene ha il flag setgid, un utente locale malintenzionato potrebbe usarlo per ottenere accesso amministrativo a RT." + +#: 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 "Se hai aggiornato qualche impostazione, assicurati di premere" + +#: lib/RT/Record.pm:933 +msgid "Illegal value for %1" +msgstr "Valore non valido per %1" + +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Immagine" + +#: lib/RT/Record.pm:936 +msgid "Immutable field" +msgstr "Campo immutabile" + +#: NOT FOUND IN SOURCE +msgid "Include disabled custom fields in listing." +msgstr "Elenca anche i campi personalizzati disabilitati." + +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Elenca anche i gruppi disabilitati." + +#: html/Admin/Queues/index.html:65 +msgid "Include disabled queues in listing." +msgstr "Elenca anche le code disabilitate." + +#: html/Admin/Users/index.html:71 +msgid "Include disabled users in search." +msgstr "Includi nella ricerca gli utenti disabilitati." + +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "Query incompleta" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "Query incompleta" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 +msgid "Initial Priority" +msgstr "Priorità iniziale" + +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 +msgid "InitialPriority" +msgstr "PrioritaIniziale" + +#: lib/RT/ScripAction_Overlay.pm:134 +msgid "Input error" +msgstr "Errore in input" + +#: NOT FOUND IN SOURCE +msgid "Interest noted" +msgstr "Interesse annotato" + +#: lib/RT/Ticket_Overlay.pm:3454 +msgid "Internal Error" +msgstr "Errore interno" + +#: lib/RT/Record.pm:305 +#. ($id->{error_message}) +msgid "Internal Error: %1" +msgstr "Errore interno: %1" + +#: lib/RT/Group_Overlay.pm:676 +msgid "Invalid Group Type" +msgstr "Tipo di gruppo non valido" + +#: lib/RT/Principal_Overlay.pm:161 +msgid "Invalid Right" +msgstr "Diritto non valido" + +#: NOT FOUND IN SOURCE +msgid "Invalid Type" +msgstr "Tipo non valido" + +#: lib/RT/Record.pm:938 +msgid "Invalid data" +msgstr "Dati non validi" + +#: NOT FOUND IN SOURCE +msgid "Invalid owner. Defaulting to 'nobody'." +msgstr "Incaricato non valido. Uso il default 'nessuno'." + +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 +msgid "Invalid queue" +msgstr "Coda non valida" + +#: 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 "Diritto non valido" + +#: lib/RT/Record.pm:280 +#. ($key) +msgid "Invalid value for %1" +msgstr "Valore non valido per %1" + +#: lib/RT/Record.pm:1597 +msgid "Invalid value for custom field" +msgstr "Valore non valido per il campo personalizzato" + +#: lib/RT/Ticket_Overlay.pm:413 +msgid "Invalid value for status" +msgstr "Valore non valido per lo stato" + +#: bin/rt-crontool:216 +msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." +msgstr "È estremamente importante che agli utenti non previlegiati non sia consentita l'esecuzione di questo strumento." + +#: 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 "Per eseguire questo strumento, si suggerisce di creare un utente unix non privilegiato appartenente al gruppo corretto e con i necessari diritti in RT." + +#: bin/rt-crontool:188 +msgid "It takes several arguments:" +msgstr "Accetta svariati argomenti:" + +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "Corsivo" + +#: NOT FOUND IN SOURCE +msgid "Items pending my approval" +msgstr "Oggetti in attesa della mia approvazione" + +#: lib/RT/Date.pm:437 +msgid "Jan." +msgstr "Gen." + +#: NOT FOUND IN SOURCE +msgid "January" +msgstr "Gennaio" + +#: lib/RT/Group_Overlay.pm:174 +msgid "Join or leave this group" +msgstr "Cambia appartenenza a questo gruppo" + +#: lib/RT/Date.pm:443 +msgid "Jul." +msgstr "Lug." + +#: NOT FOUND IN SOURCE +msgid "July" +msgstr "Luglio" + +#: html/Ticket/Elements/Tabs:122 +msgid "Jumbo" +msgstr "Jumbo" + +#: lib/RT/Date.pm:442 +msgid "Jun." +msgstr "Giu." + +#: NOT FOUND IN SOURCE +msgid "June" +msgstr "Giugno" + +#: NOT FOUND IN SOURCE +msgid "Keyword" +msgstr "Parola chiave" + +#: NOT FOUND IN SOURCE +msgid "Lang" +msgstr "Lingua" + +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "Lingua" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "Grande" + +#: html/Ticket/Elements/Tabs:96 +msgid "Last" +msgstr "Ultimo" + +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 +msgid "Last Contact" +msgstr "Ultima comunicazione a richiedenti" + +#: html/Elements/SelectDateType:50 +msgid "Last Contacted" +msgstr "Ultima comunicazione a richiedenti" + +#: NOT FOUND IN SOURCE +msgid "Last Notified" +msgstr "Ultima notifica" + +#: html/Elements/SelectDateType:51 +msgid "Last Updated" +msgstr "Ultima modifica" + +#: NOT FOUND IN SOURCE +msgid "Last Updated By" +msgstr "Modificato Da" + +#: NOT FOUND IN SOURCE +msgid "LastUpdated" +msgstr "UltimaModifica" + +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "ModificatoPerUltimoDa" + +#: html/Ticket/Elements/ShowBasics:68 +msgid "Left" +msgstr "Rimasti" + +#: html/Admin/Users/Modify.html:109 +msgid "Let this user access RT" +msgstr "Consenti a questo utente di accedere a RT" + +#: html/Admin/Users/Modify.html:113 +msgid "Let this user be granted rights" +msgstr "Consenti la concessione di diritti espliciti a questo utente" + +#: NOT FOUND IN SOURCE +msgid "Limiting owner to %1 %2" +msgstr "Limitare l'incaricato a %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Limiting queue to %1 %2" +msgstr "Limitare la coda a %1 %2" + +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "Collegamento" + +#: lib/RT/Record.pm:1292 +msgid "Link already exists" +msgstr "Il collegamento esiste già " + +#: lib/RT/Record.pm:1306 +msgid "Link could not be created" +msgstr "Il collegamento non può essere creato" + +#: lib/RT/Record.pm:1312 +#. ($TransString) +msgid "Link created (%1)" +msgstr "Collegamento creato (%1)" + +#: lib/RT/Record.pm:1373 +#. ($TransString) +msgid "Link deleted (%1)" +msgstr "Collegamento cancellato (%1)" + +#: lib/RT/Record.pm:1379 +msgid "Link not found" +msgstr "Collegamento non trovato" + +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 +#. ($Ticket->Id) +msgid "Link ticket #%1" +msgstr "Collega ticket n°%1" + +#: NOT FOUND IN SOURCE +msgid "Link ticket %1" +msgstr "Collega ticket %1" + +#: NOT FOUND IN SOURCE +msgid "LinkedTo" +msgstr "CollegatoA" + +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 +msgid "Links" +msgstr "Collegamenti" + +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "Carica" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "Carica ricerca salvata:" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "CaricaRicercheSalvate" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "Moduli perl caricati" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "Caricata ricerca %1" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 +msgid "Location" +msgstr "Domicilio" + +#: lib/RT.pm:212 +#. ($RT::LogDir) +msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." +msgstr "Impossibile trovare la directory di log %1 (oppure mancano i permessi di scrittura).\\n RT non può essere eseguito." + +#: html/Elements/Header:94 +#. ("<b>".$session{'CurrentUser'}->Name."</b>") +msgid "Logged in as %1" +msgstr "Accesso effettuato come %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 +msgid "Login" +msgstr "Accedi" + +#: html/Elements/Header:91 +msgid "Logout" +msgstr "Esci" + +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "Tipo di ricerca sbagliato" + +#: html/Search/Bulk.html:104 +msgid "Make Owner" +msgstr "Nuovo incaricato" + +#: html/Search/Bulk.html:128 +msgid "Make Status" +msgstr "Nuovo stato" + +#: html/Search/Bulk.html:136 +msgid "Make date Due" +msgstr "Nuova data scadenza" + +#: html/Search/Bulk.html:138 +msgid "Make date Resolved" +msgstr "Nuova data risoluzione" + +#: html/Search/Bulk.html:132 +msgid "Make date Started" +msgstr "Nuova data iniziato" + +#: html/Search/Bulk.html:130 +msgid "Make date Starts" +msgstr "Nuova data inizio previsto" + +#: html/Search/Bulk.html:134 +msgid "Make date Told" +msgstr "Nuova data ultimo contatto" + +#: html/Search/Bulk.html:124 +msgid "Make priority" +msgstr "Nuova priorità " + +#: html/Search/Bulk.html:126 +msgid "Make queue" +msgstr "Nuova coda" + +#: html/Search/Bulk.html:122 +msgid "Make subject" +msgstr "Nuovo oggetto" + +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "Rendi questo gruppo visibile all'utente" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "Gestione campi personalizzati e relativi valori" + +#: html/Admin/index.html:69 +msgid "Manage groups and group membership" +msgstr "Gestione di gruppi e appartenenze" + +#: html/Admin/index.html:85 +msgid "Manage properties and configuration which apply to all queues" +msgstr "Gestione di proprietà e configurazioni che si applicano a tutte le code" + +#: html/Admin/index.html:74 +msgid "Manage queues and queue-specific properties" +msgstr "Gestione delle code e delle propietà specifiche delle code" + +#: html/Admin/index.html:64 +msgid "Manage users and passwords" +msgstr "Gestione di utenti e password" + +#: lib/RT/Date.pm:439 +msgid "Mar." +msgstr "Mar." + +#: NOT FOUND IN SOURCE +msgid "March" +msgstr "Marzo" + +#: NOT FOUND IN SOURCE +msgid "May" +msgstr "Maggio" + +#: lib/RT/Date.pm:441 +msgid "May." +msgstr "Mag." + +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "Aggiunto appartenente %1" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "Rimosso appartenente %1" + +#: lib/RT/Group_Overlay.pm:1008 +msgid "Member added" +msgstr "Aggiunto appartenente" + +#: lib/RT/Group_Overlay.pm:1170 +msgid "Member deleted" +msgstr "Rimosso appartenente" + +#: lib/RT/Group_Overlay.pm:1174 +msgid "Member not deleted" +msgstr "Appartenente non rimosso" + +#: html/Elements/SelectLinkType:47 +msgid "Member of" +msgstr "Appartenente a" + +#: NOT FOUND IN SOURCE +msgid "MemberOf" +msgstr "AppartenteA" + +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 +msgid "Members" +msgstr "Appartenenti" + +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "Aggiunta appartenenza al gruppo %1" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "Rimossa appartenenza al gruppo %1" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "Appartenenza a gruppi" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "Appartenenza a gruppi per l'utente %1" + +#: lib/RT/Ticket_Overlay.pm:2849 +msgid "Merge Successful" +msgstr "Unione avvenuta con Successo" + +#: lib/RT/Ticket_Overlay.pm:2736 +msgid "Merge failed. Couldn't set EffectiveId" +msgstr "Unione fallita. Impossibile impostare EffectiveId" + +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "Unione fallita. Impossibile impostare Stato" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 +msgid "Merge into" +msgstr "Unisci a" + +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Unito a %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 +msgid "Message" +msgstr "Messaggio" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "Impossibile registrare il messaggio" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Messaggio registrato" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "I messaggi riguardanti questo ticket non saranno inviati a..." + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "Parentesi non bilanciate" + +#: lib/RT/Record.pm:940 +msgid "Missing a primary key?: %1" +msgstr "Manca una chiave primaria?: %1" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 +msgid "Mobile" +msgstr "Cellulare" + +#: NOT FOUND IN SOURCE +msgid "MobilePhone" +msgstr "TelefonoCellulare" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "Modify Access Control List" +msgstr "Modifica la Lista Controllo Accessi (ACL)" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Field %1" +msgstr "Modifica il campo personalizzato %1" + +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "Modifica campi personalizzati applicabili a %1 per ogni %2" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Modifica i campi personalizzati applicabili a tutti %1" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Fields which apply to all queues" +msgstr "Modifica i Campi Personalizzati validi per tutte le code" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Modifica diritti del gruppo" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Modifica appartenenti al gruppo" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Modifica diritti" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" +msgstr "Modifica i modelli di Scrips per questa coda" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" +msgstr "Modifica gli Scrips per questa coda" + +#: NOT FOUND IN SOURCE +msgid "Modify System ACLS" +msgstr "Modifica le ACL di Sistema" + +#: NOT FOUND IN SOURCE +msgid "Modify Template %1" +msgstr "Modifica il modello %1" + +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Modifica diritti utente" + +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" +msgstr "Modifica un campo personalizzato per la coda %1" + +#: NOT FOUND IN SOURCE +msgid "Modify a CustomField which applies to all queues" +msgstr "Modifica un campo personalizzato valido per tutte le code" + +#: html/Admin/Queues/Scrip.html:75 +#. ($QueueObj->Name) +msgid "Modify a scrip for queue %1" +msgstr "Modifica uno scrip per la coda %1" + +#: html/Admin/Global/Scrip.html:69 +msgid "Modify a scrip which applies to all queues" +msgstr "Modifica uno scrip valido per tutte le code" + +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Modifica oggetti associati a %1" + +#: NOT FOUND IN SOURCE +msgid "Modify dates for # %1" +msgstr "Modifica le date per n° %1" + +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 +#. ($TicketObj->Id) +msgid "Modify dates for #%1" +msgstr "Modifica le date per n°%1" + +#: html/Ticket/ModifyDates.html:56 +#. ($TicketObj->Id) +msgid "Modify dates for ticket # %1" +msgstr "Modifica le date per il ticket n° %1" + +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "Modifica campi personalizzati globali" + +#: 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 "Modifica i diritti di gruppo globali" + +#: html/Admin/Global/GroupRights.html:54 +msgid "Modify global group rights." +msgstr "Modifica i diritti di gruppo globali." + +#: NOT FOUND IN SOURCE +msgid "Modify global rights for groups" +msgstr "Modifica i diritti di gruppo globali" + +#: NOT FOUND IN SOURCE +msgid "Modify global rights for users" +msgstr "Modifica i diritti globali per gli utenti" + +#: NOT FOUND IN SOURCE +msgid "Modify global scrips" +msgstr "Modifica gli scrips globali" + +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 +msgid "Modify global user rights" +msgstr "Modifica i diritti globali per gli utenti" + +#: html/Admin/Global/UserRights.html:54 +msgid "Modify global user rights." +msgstr "Modifica i diritti globali per gli utenti." + +#: lib/RT/Group_Overlay.pm:171 +msgid "Modify group metadata or delete group" +msgstr "Modifica i metadati del gruppo o elimina un gruppo" + +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Modifica i diritti di gruppo per il campo personalizzato %1" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 +#. ($GroupObj->Name) +msgid "Modify group rights for group %1" +msgstr "Modifica i diritti di gruppo per il gruppo %1" + +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 +#. ($QueueObj->Name) +msgid "Modify group rights for queue %1" +msgstr "Modifica i diritti di gruppo per la coda %1" + +#: lib/RT/Group_Overlay.pm:173 +msgid "Modify membership roster for this group" +msgstr "Modifica gli appartenenti a questo gruppo" + +#: lib/RT/System.pm:83 +msgid "Modify one's own RT account" +msgstr "Modifica il proprio account RT" + +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 +#. ($QueueObj->Name) +msgid "Modify people related to queue %1" +msgstr "Modifica le persone collegate alla coda %1" + +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 +#. ($Ticket->id) +#. ($Ticket->Id) +msgid "Modify people related to ticket #%1" +msgstr "Modifica le persone collegate al ticket n°%1" + +#: html/Admin/Queues/Scrips.html:67 +#. ($QueueObj->Name) +msgid "Modify scrips for queue %1" +msgstr "Modifica gli scrips per la coda %1" + +#: 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 "Modifica gli scrips validi per tutte le code" + +#: 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) +msgid "Modify template %1" +msgstr "Modifica modello %1" + +#: html/Admin/Global/Templates.html:65 +msgid "Modify templates which apply to all queues" +msgstr "Modifica i modelli validi per tutte le code" + +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 +#. ($Group->Name) +msgid "Modify the group %1" +msgstr "Modifica il gruppo %1" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "Modify the queue watchers" +msgstr "Modifica gli osservatori della coda" + +#: html/Admin/Users/Modify.html:301 +#. ($UserObj->Name) +msgid "Modify the user %1" +msgstr "Modifica l'utente %1" + +#: html/Ticket/ModifyAll.html:58 +#. ($Ticket->Id) +msgid "Modify ticket # %1" +msgstr "Modifica il ticket n° %1" + +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 +#. ($TicketObj->Id) +msgid "Modify ticket #%1" +msgstr "Modifica il ticket n°%1" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "Modify tickets" +msgstr "Modifica i ticket" + +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Modifica i diritti utente per il il campo personalizzato %1" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 +#. ($GroupObj->Name) +msgid "Modify user rights for group %1" +msgstr "Modifica i diritti utente per il gruppo %1" + +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 +#. ($QueueObj->Name) +msgid "Modify user rights for queue %1" +msgstr "Modifica i diritti utente per la coda %1" + +#: NOT FOUND IN SOURCE +msgid "Modify watchers for queue '%1'" +msgstr "Modifica gli osservatori per la coda '%1'" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "ModifyACL" +msgstr "ModificaACL" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "ModificaCampoPers." + +#: lib/RT/Group_Overlay.pm:174 +msgid "ModifyOwnMembership" +msgstr "ModificaPropriaAppartenenzaAlGruppo" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "ModifyQueueWatchers" +msgstr "ModificaOsservatoriDellaCoda" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "ModifyScrips" +msgstr "ModificaScrips" + +#: lib/RT/System.pm:83 +msgid "ModifySelf" +msgstr "ModificaSuoiDati" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "ModifyTemplate" +msgstr "ModificaModello" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "ModifyTicket" +msgstr "ModificaTicket" + +#: lib/RT/Date.pm:413 +msgid "Mon." +msgstr "Lun." + +#: html/Ticket/Elements/ShowRequestor:62 +#. ($name) +msgid "More about %1" +msgstr "Maggiori informazioni su %1" + +#: html/Admin/Elements/PickCustomFields:83 +msgid "Move down" +msgstr "Sposta in basso" + +#: html/Admin/Elements/PickCustomFields:75 +msgid "Move up" +msgstr "Sposta in alto" + +#: html/Admin/Elements/SelectSingleOrMultiple:48 +msgid "Multiple" +msgstr "Multiplo" + +#: lib/RT/User_Overlay.pm:227 +msgid "Must specify 'Name' attribute" +msgstr "L'attributo 'name' deve essere specificato" + +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "I miei ticket in stato: %1" + +#: NOT FOUND IN SOURCE +msgid "My Approvals" +msgstr "Le mie richieste di approvazione" + +#: html/Approvals/index.html:46 html/Approvals/index.html:47 +msgid "My approvals" +msgstr "Le mie richieste di approvazione" + +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Le mie ricerche salvate" + +#: 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 +msgid "Name" +msgstr "Nome" + +#: lib/RT/User_Overlay.pm:234 +msgid "Name in use" +msgstr "Nome già usato" + +#: NOT FOUND IN SOURCE +msgid "Need approval from system administrator" +msgstr "È richiesta l'approvazione da parte del system administrator" + +#: html/Ticket/Elements/ShowDates:73 +msgid "Never" +msgstr "Mai" + +#: html/Elements/Quicksearch:51 +msgid "New" +msgstr "Nuovo" + +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nuovi collegamenti" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 +msgid "New Password" +msgstr "Nuova Password" + +#: etc/initialdata:332 +msgid "New Pending Approval" +msgstr "Nuove approvazioni pendenti" + +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Nuova query" + +#: NOT FOUND IN SOURCE +msgid "New Search" +msgstr "Nuova Ricerca" + +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 +msgid "New custom field" +msgstr "Nuovo campo personalizzato" + +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 +msgid "New group" +msgstr "Nuovo gruppo" + +#: html/SelfService/Prefs.html:53 +msgid "New password" +msgstr "Nuova password" + +#: lib/RT/User_Overlay.pm:817 +msgid "New password notification sent" +msgstr "Inviata notifica della nuova password" + +#: html/Admin/Elements/QueueTabs:95 +msgid "New queue" +msgstr "Nuova coda" + +#: NOT FOUND IN SOURCE +msgid "New request" +msgstr "Nuova richiesta" + +#: html/Admin/Elements/SelectRights:65 +msgid "New rights" +msgstr "Nuovi diritti" + +#: 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 "Nuovo scrip" + +#: NOT FOUND IN SOURCE +msgid "New search" +msgstr "Nuova ricerca" + +#: 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 "Nuovo modello" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Nuovo ticket" + +#: lib/RT/Ticket_Overlay.pm:2713 +msgid "New ticket doesn't exist" +msgstr "Il nuovo ticket non esiste" + +#: html/Admin/Elements/UserTabs:78 +msgid "New user" +msgstr "Nuovo utente" + +#: html/Admin/Elements/CreateUserCalled:47 +msgid "New user called" +msgstr "Nuovo utente di nome" + +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 +msgid "New watchers" +msgstr "Nuovo osservatore" + +#: NOT FOUND IN SOURCE +msgid "New window setting" +msgstr "Impostazioni nuova finestra" + +#: NOT FOUND IN SOURCE +msgid "NEWLINE" +msgstr "NUOVA_RIGA" + +#: html/Ticket/Elements/Tabs:92 +msgid "Next" +msgstr "Seguente" + +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "Pagina seguente" + +#: NOT FOUND IN SOURCE +msgid "Next page" +msgstr "Pagina seguente" + +#: NOT FOUND IN SOURCE +msgid "NickName" +msgstr "Nomignolo" + +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 +msgid "Nickname" +msgstr "Nomignolo" + +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "Nessuna classe definita" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 +msgid "No CustomField" +msgstr "Nessun campo personalizzato" + +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Nessun campo personalizzato definito" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 +msgid "No Group defined" +msgstr "Nessun gruppo definito" + +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Nessuna query" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 +msgid "No Queue defined" +msgstr "Nessuna coda definita" + +#: bin/rt-crontool:73 +msgid "No RT user found. Please consult your RT administrator.\\n" +msgstr "Nessun utente RT trovato. Consulta il tuo amministratore di RT.\\n" + +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 +msgid "No Template" +msgstr "Nessun Modello" + +#: NOT FOUND IN SOURCE +msgid "No Ticket specified. Aborting ticket " +msgstr "Nessun ticket specificato. Annullo il ticket" + +#: html/Approvals/Elements/Approve:67 +msgid "No action" +msgstr "Nessuna azione" + +#: lib/RT/Record.pm:935 +msgid "No column specified" +msgstr "Nessuna colonna specificata" + +#: NOT FOUND IN SOURCE +msgid "No command found\\n" +msgstr "Nessun comando trovato\\n" + +#: html/Ticket/Elements/ShowRequestor:68 +msgid "No comment entered about this user" +msgstr "Nessun commento su questo utente" + +#: NOT FOUND IN SOURCE +msgid "No correspondence attached" +msgstr "Nessuna corrispondenza allegata" + +#: 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) +msgid "No description for %1" +msgstr "Nessuna descrizione per %1" + +#: lib/RT/Users_Overlay.pm:185 +msgid "No group specified" +msgstr "Nessun gruppo specificato" + +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Nessun gruppo corrisponde ai criteri di ricerca." + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "Nessun messaggio allegato" + +#: lib/RT/User_Overlay.pm:1035 +msgid "No password set" +msgstr "Nessuna password impostata" + +#: lib/RT/Queue_Overlay.pm:358 +msgid "No permission to create queues" +msgstr "Manca il permesso per creare code" + +#: lib/RT/Ticket_Overlay.pm:409 +#. ($QueueObj->Name) +msgid "No permission to create tickets in the queue '%1'" +msgstr "Manca il permesso per creare ticket nella coda '%1'" + +#: lib/RT/User_Overlay.pm:187 +msgid "No permission to create users" +msgstr "Manca il permesso per creare utenti" + +#: html/SelfService/Display.html:165 +msgid "No permission to display that ticket" +msgstr "Manca il permesso per visualizzare il ticket" + +#: html/SelfService/Update.html:117 +msgid "No permission to view update ticket" +msgstr "Manca il permesso per aggiornare il ticket" + +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 +msgid "No principal specified" +msgstr "Nessun utente/gruppo specificato" + +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 +msgid "No principals selected." +msgstr "Nessun utente/gruppo selezionato." + +#: html/Admin/Queues/index.html:57 +msgid "No queues matching search criteria found." +msgstr "Nessuna coda soddisfa i criteri di ricerca." + +#: html/Admin/Elements/SelectRights:106 +msgid "No rights found" +msgstr "Nessun diritto trovato" + +#: html/Admin/Elements/SelectRights:53 +msgid "No rights granted." +msgstr "Nessun diritto concesso." + +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "Nessuna ricerca caricata" + +#: html/Search/Bulk.html:194 +msgid "No search to operate on." +msgstr "Nessuna ricerca su cui operare." + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Senza oggetto" + +#: NOT FOUND IN SOURCE +msgid "No ticket id specified" +msgstr "Nessun identificativo di ticket specificato" + +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 +msgid "No transaction type specified" +msgstr "Nessun tipo transazione specificato" + +#: NOT FOUND IN SOURCE +msgid "No user or email address specified" +msgstr "Nessun utente o indirizzo email specificato" + +#: html/Admin/Users/index.html:55 +msgid "No users matching search criteria found." +msgstr "Nessuna utente soddisfa i criteri di ricerca." + +#: NOT FOUND IN SOURCE +msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" +msgstr "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" + +#: lib/RT/Record.pm:932 +msgid "No value sent to _Set!\\n" +msgstr "Nessun valore inviato a _Set!\\n" + +#: html/Elements/QuickCreate:61 +msgid "Nobody" +msgstr "Nessuno" + +#: lib/RT/Record.pm:937 +msgid "Nonexistant field?" +msgstr "Campo inesistente?" + +#: NOT FOUND IN SOURCE +msgid "Not logged in" +msgstr "Accesso non effettuato" + +#: html/Elements/Header:96 +msgid "Not logged in." +msgstr "Accesso non effettuato." + +#: lib/RT/Date.pm:393 +msgid "Not set" +msgstr "Non impostato" + +#: html/NoAuth/Reminder.html:48 +msgid "Not yet implemented." +msgstr "Non ancora implementato." + +#: NOT FOUND IN SOURCE +msgid "Not yet implemented...." +msgstr "Non ancora implementato...." + +#: html/Approvals/Elements/Approve:70 +msgid "Notes" +msgstr "Note" + +#: lib/RT/User_Overlay.pm:820 +msgid "Notification could not be sent" +msgstr "Impossibile inviare la notifica" + +#: etc/initialdata:101 +msgid "Notify AdminCcs" +msgstr "invia notifica agli AdminCc" + +#: etc/initialdata:97 +msgid "Notify AdminCcs as Comment" +msgstr "invia notifica agli AdminCc come commento" + +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "invia notifica ai Cc" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "invia notifica ai Cc come commento" + +#: etc/initialdata:128 +msgid "Notify Other Recipients" +msgstr "invia notifica agli altri destinatari" + +#: etc/initialdata:124 +msgid "Notify Other Recipients as Comment" +msgstr "invia notifica agli altri destinatari come commento" + +#: etc/initialdata:85 +msgid "Notify Owner" +msgstr "invia notifica all'incaricato" + +#: etc/initialdata:81 +msgid "Notify Owner as Comment" +msgstr "invia notifica all'incaricato come commento" + +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "invia notifica all'incaricato del ticket respinto" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "invia notifica all'incaricato del ticket che tutte le approvazioni sono state concesse" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "invia notifica all'incaricato del ticket che alcune approvazioni sono state concesse" + +#: etc/initialdata:334 +msgid "Notify Owners and AdminCcs of new items pending their approval" +msgstr "invia notifica agli incaricati e AdminCc quando è necessario richiedere nuove approvazione" + +#: etc/initialdata:77 +msgid "Notify Requestors" +msgstr "invia notifica al richiedente" + +#: etc/initialdata:111 +msgid "Notify Requestors and Ccs" +msgstr "invia notifica ai richiedenti e ai Cc" + +#: etc/initialdata:106 +msgid "Notify Requestors and Ccs as Comment" +msgstr "invia notifica ai richiedenti e ai Cc come commento" + +#: etc/initialdata:120 +msgid "Notify Requestors, Ccs and AdminCcs" +msgstr "invia notifica ai richiedenti, Cc e AdminCc" + +#: etc/initialdata:116 +msgid "Notify Requestors, Ccs and AdminCcs as Comment" +msgstr "invia notifica ai richiedenti, Cc a AdminCc come commento" + +#: lib/RT/Date.pm:447 +msgid "Nov." +msgstr "Nov." + +#: NOT FOUND IN SOURCE +msgid "November" +msgstr "Novembre" + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "OR" + +#: lib/RT/Record.pm:319 +msgid "Object could not be created" +msgstr "L'oggetto non può essere creato" + +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "L'oggetto non può essere cancellato" + +#: lib/RT/Record.pm:338 +msgid "Object created" +msgstr "Oggetto creato" + +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "Oggetto cancellato" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "Oggetto di tipo %1 non accetta campi personalizzati" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "Tipo oggetto non corrisponde" + +#: lib/RT/Date.pm:446 +msgid "Oct." +msgstr "Oct." + +#: NOT FOUND IN SOURCE +msgid "October" +msgstr "Ottobre" + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Offline" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Modifiche offline" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "Upload richiesta offline" + +#: html/Elements/SelectDateRelation:56 +msgid "On" +msgstr "il" + +#: etc/initialdata:163 +msgid "On Comment" +msgstr "All'arrivo di un commento" + +#: etc/initialdata:156 +msgid "On Correspond" +msgstr "All'arrivo di una corrispondenza" + +#: etc/initialdata:145 +msgid "On Create" +msgstr "Alla creazione" + +#: etc/initialdata:184 +msgid "On Owner Change" +msgstr "Al cambio dell'incaricato" + +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "Al cambio della priorità " + +#: etc/initialdata:192 +msgid "On Queue Change" +msgstr "Al cambio di coda" + +#: etc/initialdata:198 +msgid "On Resolve" +msgstr "Alla risoluzione" + +#: etc/initialdata:169 +msgid "On Status Change" +msgstr "Al cambio di stato" + +#: etc/initialdata:150 +msgid "On Transaction" +msgstr "Ad ogni transazione" + +#: html/Approvals/Elements/PendingMyApproval:71 +#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") +msgid "Only show approvals for requests created after %1" +msgstr "Mostra le approvazioni solo per le richieste create dopo il %1" + +#: html/Approvals/Elements/PendingMyApproval:69 +#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") +msgid "Only show approvals for requests created before %1" +msgstr "Mostra le approvazioni solo per le richieste create prima del %1" + +#: html/Elements/Quicksearch:52 +msgid "Open" +msgstr "Aperto" + +#: html/Ticket/Elements/Tabs:159 +msgid "Open it" +msgstr "Apri" + +#: NOT FOUND IN SOURCE +msgid "Open requests" +msgstr "Richieste aperte" + +#: NOT FOUND IN SOURCE +msgid "Open ticket" +msgstr "Apri ticket" + +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "Ticket aperti" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in a new window" +msgstr "Apre ticket (dalla lista) in una nuova finestra" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in another window" +msgstr "Apre ticket (dalla lista) in un'altra finestra" + +#: etc/initialdata:140 +msgid "Open tickets on correspondence" +msgstr "Apri i ticket all'arrivo di corrispondenza" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Ordina per" + +#: NOT FOUND IN SOURCE +msgid "Ordering and sorting" +msgstr "Ordinamento" + +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 +msgid "Organization" +msgstr "Azienda" + +#: html/Approvals/Elements/Approve:54 +#. ($approving->Id, $approving->Subject) +msgid "Originating ticket: #%1" +msgstr "Ticket originario: n°%1" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "Registrata email in uscita riguardante un commento" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "Registrata email in uscita" + +#: html/Admin/Queues/Modify.html:90 +msgid "Over time, priority moves toward" +msgstr "Al passare del tempo, la priorità cresce fino a" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "Own tickets" +msgstr "Prende in carico ticket" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "OwnTicket" +msgstr "PrendeInCaricoTicket" + +#: 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 +msgid "Owner" +msgstr "Incaricato" + +#: NOT FOUND IN SOURCE +msgid "Owner changed from %1 to %2" +msgstr "Cambiato incaricato da %1 a %2" + +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "L'incaricato non può essere impostato." + +#: lib/RT/Transaction_Overlay.pm:661 +#. ($Old->Name , $New->Name) +msgid "Owner forcibly changed from %1 to %2" +msgstr "Cambiato forzatamente l'incaricato da %1 a %2" + +#: NOT FOUND IN SOURCE +msgid "Owner is" +msgstr "In carico a" + +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Pagina %1 di %2" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 +msgid "Pager" +msgstr "Cercapersone" + +#: NOT FOUND IN SOURCE +msgid "PagerPhone" +msgstr "Cercapersone" + +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 +msgid "Parents" +msgstr "DerivaDa" + +#: html/Elements/Login:74 html/User/Prefs.html:105 +msgid "Password" +msgstr "Password" + +#: html/NoAuth/Reminder.html:46 +msgid "Password Reminder" +msgstr "Promemoria password" + +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "Password cambiata" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "La password deve essere lunga almeno %1 caratteri" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Password too short" +msgstr "Password troppo corta" + +#: html/User/Prefs.html:232 +#. (loc_fuzzy($msg)) +msgid "Password: %1" +msgstr "Password: %1" + +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "Le passwords non corrispondono." + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "Le password non corrispondono. La password non è stata cambiata" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 +msgid "People" +msgstr "Persone" + +#: etc/initialdata:133 +msgid "Perform a user-defined action" +msgstr "Esegui un'azione personalizzata" + +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Configurazione perl" + +#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm: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 +msgid "Permission Denied" +msgstr "Operazione non consentita" + +#: html/User/Elements/Tabs:56 +msgid "Personal Groups" +msgstr "Gruppi personali" + +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 +msgid "Personal groups" +msgstr "Gruppi personali" + +#: html/User/Elements/DelegateRights:58 +msgid "Personal groups:" +msgstr "Gruppi personali:" + +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 +msgid "Phone numbers" +msgstr "Numeri telefonici" + +#: NOT FOUND IN SOURCE +msgid "Placeholder" +msgstr "Segnaposto" + +#: 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 +msgid "Preferences" +msgstr "Preferenze" + +#: NOT FOUND IN SOURCE +msgid "Prefs" +msgstr "Prefs" + +#: lib/RT/Action/Generic.pm:196 +msgid "Prepare Stubbed" +msgstr "Preparazione non necessaria" + +#: html/Ticket/Elements/Tabs:84 +msgid "Prev" +msgstr "Precedente" + +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "Pagina precedente" + +#: NOT FOUND IN SOURCE +msgid "Previous page" +msgstr "Pagina precedente" + +#: NOT FOUND IN SOURCE +msgid "Pri" +msgstr "Pri" + +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 +#. ($args{'PrincipalId'}) +msgid "Principal %1 not found." +msgstr "Utente/gruppo %1 not trovato." + +#: 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 +msgid "Priority" +msgstr "Priorità " + +#: html/Admin/Queues/Modify.html:86 +msgid "Priority starts at" +msgstr "La priorità inizia da" + +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "Riservatezza:" + +#: etc/initialdata:25 +msgid "Privileged" +msgstr "Privilegiato" + +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 +#. (loc_fuzzy($msg)) +msgid "Privileged status: %1" +msgstr "Stato previlegiato: %1" + +#: html/Admin/Users/index.html:102 +msgid "Privileged users" +msgstr "Utenti privilegiati" + +#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 +msgid "Pseudogroup for internal use" +msgstr "Pseudogruppo per uso interno" + +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Query" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "Costruttore di query" + +#: 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 +msgid "Queue" +msgstr "Coda" + +#: 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) +msgid "Queue %1 not found" +msgstr "Coda %1 non trovata" + +#: NOT FOUND IN SOURCE +msgid "Queue '%1' not found\\n" +msgstr "Coda '%1' non trovata\\n" + +#: NOT FOUND IN SOURCE +msgid "Queue Keyword Selections" +msgstr "Selezione delle parole chiave per la coda" + +#: html/Admin/Queues/Modify.html:64 +msgid "Queue Name" +msgstr "Nome della coda" + +#: NOT FOUND IN SOURCE +msgid "Queue Scrips" +msgstr "Scrips della coda" + +#: lib/RT/Queue_Overlay.pm:362 +msgid "Queue already exists" +msgstr "La coda esiste già " + +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 +msgid "Queue could not be created" +msgstr "Impossibile creare la coda" + +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 +msgid "Queue could not be loaded." +msgstr "Impossibile caricare la coda." + +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 +msgid "Queue created" +msgstr "Coda creata" + +#: NOT FOUND IN SOURCE +msgid "Queue is not specified." +msgstr "Coda non specificata." + +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 +msgid "Queue not found" +msgstr "Coda non trovata" + +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 +msgid "Queues" +msgstr "Code" + +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "Ricerca veloce" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Creazione veloce di un ticket" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS" + +#: html/Elements/Login:66 +#. ($RT::VERSION) +msgid "RT %1" +msgstr "RT %1" + +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 +#. ($RT::VERSION, $RT::rtname) +msgid "RT %1 for %2" +msgstr "RT %1 per %2" + +#: NOT FOUND IN SOURCE +msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." +msgstr "RT %1 da <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." + +#: NOT FOUND IN SOURCE +msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" +msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" + +#: NOT FOUND IN SOURCE +msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" +msgstr "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" + +#: html/Admin/index.html:46 html/Admin/index.html:47 +msgid "RT Administration" +msgstr "Amministrazione di RT" + +#: NOT FOUND IN SOURCE +msgid "RT Authentication error." +msgstr "Errore di autenticazione RT." + +#: NOT FOUND IN SOURCE +msgid "RT Bounce: %1" +msgstr "RT Bounce: %1" + +#: NOT FOUND IN SOURCE +msgid "RT Configuration error" +msgstr "Errore nella configurazione di RT" + +#: NOT FOUND IN SOURCE +msgid "RT Critical error. Message not recorded!" +msgstr "Errore critico. Messaggio not registrato!" + +#: html/Elements/Error:65 html/SelfService/Error.html:62 +msgid "RT Error" +msgstr "Errore RT" + +#: NOT FOUND IN SOURCE +msgid "RT Received mail (%1) from itself." +msgstr "RT ha ricevuto email (%1) da se stesso." + +#: NOT FOUND IN SOURCE +msgid "RT Recieved mail (%1) from itself." +msgstr "RT ha ricevuto email (%1) da se stesso." + +#: NOT FOUND IN SOURCE +msgid "RT Self Service / Closed Tickets" +msgstr "RT Self Service / Ticket chiusi" + +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "Variabili RT" + +#: html/index.html:72 html/index.html:75 +msgid "RT at a glance" +msgstr "Quadro d'insieme" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't authenticate you" +msgstr "RT non ha potuto autenticarti" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't find requestor via its external database lookup" +msgstr "RT non è riuscito a trovare il richiedente consultando in database esterno" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't find the queue: %1" +msgstr "RT non ha trovato la coda: %1" + +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "RT non può memorizzare la tua sessione" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't validate this PGP signature. \\n" +msgstr "RT non può verificare questa firma PGP. \\n" + +#: html/Elements/PageLayout:108 +#. ($RT::rtname) +msgid "RT for %1" +msgstr "RT / %1" + +#: NOT FOUND IN SOURCE +msgid "RT for %1: %2" +msgstr "RT / %1: %2" + +#: NOT FOUND IN SOURCE +msgid "RT has proccessed your commands" +msgstr "RT ha eseguito i comandi" + +#: NOT FOUND IN SOURCE +msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +msgstr "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. RT viene distribuito con la <a href=\"http://www.gnu.org/copyleft/gpl.html\">Versione 2 della GNU General Public License.</a>" + +#: NOT FOUND IN SOURCE +msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +msgstr "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. RT viene distribuito con la <a href=\"http://www.gnu.org/copyleft/gpl.html\">Versione 2 della GNU General Public License.</a>" + +#: NOT FOUND IN SOURCE +msgid "RT thinks this message may be a bounce" +msgstr "RT thinks this message may be a bounce" + +#: NOT FOUND IN SOURCE +msgid "RT will process this message as if it were unsigned.\\n" +msgstr "RT will process this message as if it were unsigned.\\n" + +#: NOT FOUND IN SOURCE +msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." +msgstr "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." + +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 +msgid "Real Name" +msgstr "Nome reale" + +#: NOT FOUND IN SOURCE +msgid "RealName" +msgstr "NomeReale" + +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "Aggiunto riferimento da %1" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "Cancellato riferimento da %1" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "Aggiunto riferimento a %1" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "Cancellato riferimento a %1" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 +msgid "Referred to by" +msgstr "È un riferimento per" + +#: NOT FOUND IN SOURCE +msgid "ReferredToBy" +msgstr "RiferimentoPer" + +#: 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 +msgid "Refers to" +msgstr "Fa riferimento a" + +#: NOT FOUND IN SOURCE +msgid "RefersTo" +msgstr "FaRiferimentoA" + +#: NOT FOUND IN SOURCE +msgid "Refine" +msgstr "Rifinisci" + +#: NOT FOUND IN SOURCE +msgid "Refine search" +msgstr "Rifinisci la ricerca" + +#: html/Elements/Refresh:57 +#. ($value/60) +msgid "Refresh this page every %1 minutes." +msgstr "Aggiorna questa pagina ogni %1 minuti." + +#: html/Search/Bulk.html:116 +msgid "Remove AdminCc" +msgstr "Rimuovi AdminCc" + +#: html/Search/Bulk.html:112 +msgid "Remove Cc" +msgstr "Rimuovi Cc" + +#: html/Search/Bulk.html:108 +msgid "Remove Requestor" +msgstr "Rimuovi richiedente" + +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 +msgid "Reply" +msgstr "Risposta" + +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Indirizzo a cui indirizzare le risposte" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Rispondi ai richiedenti" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "Reply to tickets" +msgstr "Rispondi ai ticket" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "ReplyToTicket" +msgstr "RispondiAlTicket" + +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 +msgid "Requestor" +msgstr "Richiedente" + +#: NOT FOUND IN SOURCE +msgid "Requestor email address" +msgstr "Indirizzo email del richiedente" + +#: NOT FOUND IN SOURCE +msgid "Requestor(s)" +msgstr "Richiedente(i)" + +#: NOT FOUND IN SOURCE +msgid "RequestorAddresses" +msgstr "IndirizzoRichiedente" + +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 +msgid "Requestors" +msgstr "Richiedenti" + +#: html/Admin/Queues/Modify.html:96 +msgid "Requests should be due in" +msgstr "Le richieste devono essere soddisfatte entro" + +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Il parametro obbligatorio '%1' non è stato specificato" + +#: html/Elements/Submit:104 +msgid "Reset" +msgstr "Azzera" + +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 +msgid "Residence" +msgstr "Casa" + +#: html/Ticket/Elements/Tabs:155 +msgid "Resolve" +msgstr "Risolvi" + +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Resolve ticket #%1 (%2)" +msgstr "Risolvi il ticket n°%1 (%2)" + +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 +msgid "Resolved" +msgstr "Risolto" + +#: NOT FOUND IN SOURCE +msgid "Response to requestors" +msgstr "Risposta ai richiedenti" + +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 +msgid "Results" +msgstr "Risultati" + +#: NOT FOUND IN SOURCE +msgid "Results per page" +msgstr "Risultati per pagina" + +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 +msgid "Retype Password" +msgstr "Ridigita Password" + +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Annulla modifiche" + +#: NOT FOUND IN SOURCE +msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" +msgstr "Diritto %1 non trovato per %2 %3 limitatamente a %4 (%5)\\n" + +#: lib/RT/ACE_Overlay.pm:631 +msgid "Right Delegated" +msgstr "Diritto delegato" + +#: lib/RT/ACE_Overlay.pm:321 +msgid "Right Granted" +msgstr "Diritto concesso" + +#: lib/RT/ACE_Overlay.pm:179 +msgid "Right Loaded" +msgstr "Diritto caricato" + +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 +msgid "Right could not be revoked" +msgstr "Il diritto non può essere revocato" + +#: html/User/Delegation.html:85 +msgid "Right not found" +msgstr "Diritto non trovato" + +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 +msgid "Right not loaded." +msgstr "Diritto non caricato." + +#: lib/RT/ACE_Overlay.pm:713 +msgid "Right revoked" +msgstr "Diritto revocato" + +#: html/Admin/Elements/UserTabs:67 +msgid "Rights" +msgstr "Diritti" + +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 +#. ($object_type) +msgid "Rights could not be granted for %1" +msgstr "I diritti per %1 non possono essere concessi" + +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 +#. ($object_type) +msgid "Rights could not be revoked for %1" +msgstr "I diritti per %1 non possono essere revocati" + +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 +msgid "Roles" +msgstr "Ruoli" + +#: NOT FOUND IN SOURCE +msgid "RootApproval" +msgstr "ApprovazioneAmministratore" + +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Righe per pagina" + +#: lib/RT/Date.pm:418 +msgid "Sat." +msgstr "Sab." + +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Salva" + +#: 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 +msgid "Save Changes" +msgstr "Salva modifiche" + +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Salva preferenze" + +#: html/Ticket/Elements/PreviewScrips:124 +msgid "Save changes" +msgstr "Salva modifiche" + +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "Ricerca %1 salvata" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Ricerche salvate" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) +#. ($ARGS{'id'}) +msgid "Scrip #%1" +msgstr "Scrip n°%1" + +#: lib/RT/Scrip_Overlay.pm:205 +msgid "Scrip Created" +msgstr "Scrip creato" + +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Campi dello scrip" + +#: html/Admin/Elements/EditScrips:107 +msgid "Scrip deleted" +msgstr "Scrip eliminato" + +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 +msgid "Scrips" +msgstr "Scrips" + +#: NOT FOUND IN SOURCE +msgid "Scrips for %1\\n" +msgstr "Scrips per %1\\n" + +#: html/Admin/Queues/Scrips.html:55 +msgid "Scrips which apply to all queues" +msgstr "Scrips che si applicano a tutte le code" + +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 +msgid "Search" +msgstr "Ricerca" + +#: NOT FOUND IN SOURCE +msgid "Search Criteria" +msgstr "Criteri di ricerca" + +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "Errore nel caricamento degli attributi della ricerca" + +#: html/Approvals/Elements/PendingMyApproval:60 +msgid "Search for approvals" +msgstr "Ricerca le richieste di approvazione" + +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "Aggiornamento della ricerca: %1" + +#: bin/rt-crontool:213 +msgid "Security:" +msgstr "Protezione:" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "Vedi campi personalizzati" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "Vedi letteralmente i messaggi in uscita e i loro destinatari" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "Vedi commenti privati del ticket" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "Vedi riassunto dei ticket" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "VediCampoPers." + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "VediGruppo" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "SeeQueue" +msgstr "VediCoda" + +#: NOT FOUND IN SOURCE +msgid "Select" +msgstr "Seleziona" + +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "Scegli un campo personalizzato" + +#: html/Admin/Groups/index.html:78 +msgid "Select a group" +msgstr "Seleziona un gruppo" + +#: html/Admin/Queues/index.html:54 +msgid "Select a queue" +msgstr "Seleziona una coda" + +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "Scegli una coda per il nuovo ticket" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 +msgid "Select a user" +msgstr "Seleziona un utente" + +#: html/Admin/Elements/CustomFieldTabs:90 +msgid "Select custom field" +msgstr "Seleziona un campo personalizzato" + +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "Seleziona i campi personalizzati per tutti i gruppi degli utenti" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "Seleziona i campi personalizzati per tutti gli utenti" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "Seleziona i campi personalizzati per i ticket in tutte le code" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "Seleziona i campi personalizzati per le transazioni relative ai ticket in tutte le code" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 +msgid "Select group" +msgstr "Seleziona il gruppo" + +#: lib/RT/CustomField_Overlay.pm:59 +msgid "Select multiple values" +msgstr "Elenco a selezione multipla" + +#: lib/RT/CustomField_Overlay.pm:60 +msgid "Select one value" +msgstr "Elenco a selezione singola" + +#: html/Admin/Elements/QueueTabs:92 +msgid "Select queue" +msgstr "Seleziona la coda" + +#: 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 "Seleziona lo scrip" + +#: 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 "Seleziona il modello" + +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Seleziona un massimo di %1 valori" + +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" +msgstr "Seleziona l'utente" + +#: NOT FOUND IN SOURCE +msgid "SelectMultiple" +msgstr "SelezioneMultipla" + +#: NOT FOUND IN SOURCE +msgid "SelectSingle" +msgstr "SelezioneSingola" + +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Campi personalizzati selezionati" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Oggetti selezionati" + +#: NOT FOUND IN SOURCE +msgid "Self Service" +msgstr "Self Service" + +#: etc/initialdata:121 +msgid "Send mail to all watchers" +msgstr "Invia una mail a tutti gli osservatori" + +#: etc/initialdata:117 +msgid "Send mail to all watchers as a \"comment\"" +msgstr "Invia una mail atutti gli osservatori come \"commento\"" + +#: etc/initialdata:112 +msgid "Send mail to requestors and Ccs" +msgstr "Invia mail ai richiedenti e Ccs" + +#: etc/initialdata:107 +msgid "Send mail to requestors and Ccs as a comment" +msgstr "Invia mail come commento a richiedenti e Cc" + +#: etc/initialdata:78 +msgid "Sends a message to the requestors" +msgstr "Invia un messaggio ai richiedenti" + +#: etc/initialdata:125 etc/initialdata:129 +msgid "Sends mail to explicitly listed Ccs and Bccs" +msgstr "Invia mail a Cc e Bcc esplicitamente elencati" + +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "Invia mail ai Cc" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "Invia mail ai Cc come commento" + +#: etc/initialdata:102 +msgid "Sends mail to the administrative Ccs" +msgstr "Invia mail ai Cc amministrativi" + +#: etc/initialdata:98 +msgid "Sends mail to the administrative Ccs as a comment" +msgstr "Invia mail ai Cc amministrativi come commento" + +#: etc/initialdata:82 etc/initialdata:86 +msgid "Sends mail to the owner" +msgstr "Invia mail all'incaricato" + +#: lib/RT/Date.pm:445 +msgid "Sep." +msgstr "Set." + +#: NOT FOUND IN SOURCE +msgid "September" +msgstr "Settembre" + +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Mostra" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Mostra richieste di approvazione" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Mostra colonne" + +#: html/Ticket/Elements/Tabs:201 +msgid "Show Results" +msgstr "Mostra i risultati" + +#: html/Approvals/Elements/PendingMyApproval:65 +msgid "Show approved requests" +msgstr "Mostra le richieste approvate" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show basics" +msgstr "Mostra info di base" + +#: html/Approvals/Elements/PendingMyApproval:66 +msgid "Show denied requests" +msgstr "Mostra le richieste negate" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show details" +msgstr "Mostra i dettagli" + +#: html/Approvals/Elements/PendingMyApproval:64 +msgid "Show pending requests" +msgstr "Mostra le richieste in attesa" + +#: html/Approvals/Elements/PendingMyApproval:67 +msgid "Show requests awaiting other approvals" +msgstr "Mostra le richieste in attesa di altre approvazioni" + +#: NOT FOUND IN SOURCE +msgid "Show ticket private commentary" +msgstr "Mostra commenti privati del ticket" + +#: NOT FOUND IN SOURCE +msgid "Show ticket summaries" +msgstr "Mostra riassunto dei ticket" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" +msgstr "MostraACL" + +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "MostraTabConfigurazione" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "MostraEmailUscente" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "MostraRicercheSalvate" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "ShowScrips" +msgstr "MostraScrips" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "ShowTemplate" +msgstr "MostraModello" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "ShowTicket" +msgstr "MostraTicket" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "ShowTicketComments" +msgstr "MostraCommentiAlTicket" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Sign up as a ticket Requestor or ticket or queue Cc" +msgstr "Registra come richiede o come Cc del ticket o della coda" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "Sign up as a ticket or queue AdminCc" +msgstr "Registra come AdminCc del ticket o della coda" + +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 +msgid "Signature" +msgstr "Firma" + +#: NOT FOUND IN SOURCE +msgid "Signed in as %1" +msgstr "Accesso effettuato come %1" + +#: html/Admin/Elements/SelectSingleOrMultiple:47 +msgid "Single" +msgstr "Singolo" + +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "Carattere" + +#: html/Elements/Header:85 +msgid "Skip Menu" +msgstr "Salta menu" + +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "Piccolo" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "Ordinamento" + +#: NOT FOUND IN SOURCE +msgid "Sort key" +msgstr "Chiave di ordinamento" + +#: NOT FOUND IN SOURCE +msgid "Sort results by" +msgstr "Ordina i risultati per" + +#: NOT FOUND IN SOURCE +msgid "SortOrder" +msgstr "Ordinamento" + +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Stalled" +msgstr "In stallo" + +#: NOT FOUND IN SOURCE +msgid "Start page" +msgstr "Pagina iniziale" + +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 +msgid "Started" +msgstr "Iniziato" + +#: NOT FOUND IN SOURCE +msgid "Started date '%1' could not be parsed" +msgstr "Impossibile interpretare data inizio '%1'" + +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 +msgid "Starts" +msgstr "InizioPrevisto" + +#: NOT FOUND IN SOURCE +msgid "Starts By" +msgstr "Inizio previsto il" + +#: NOT FOUND IN SOURCE +msgid "Starts date '%1' could not be parsed" +msgstr "Impossibile interpretare data inizio previsto '%1'" + +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 +msgid "State" +msgstr "Provincia" + +#: 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 +msgid "Status" +msgstr "Stato" + +#: etc/initialdata:309 +msgid "Status Change" +msgstr "Cambiamento di stato" + +#: NOT FOUND IN SOURCE +msgid "Status changed from %1 to %2" +msgstr "Cambiato lo stato da %1 a %2" + +#: NOT FOUND IN SOURCE +msgid "StatusChange" +msgstr "CambiamentoStato" + +#: html/Ticket/Elements/Tabs:170 +msgid "Steal" +msgstr "Sottrai" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Sottrae ticket" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "SottraeTicket" + +#: lib/RT/Transaction_Overlay.pm:667 +#. ($Old->Name) +msgid "Stolen from %1" +msgstr "Sottratto da %1" + +#: NOT FOUND IN SOURCE +msgid "Stolen from %1 " +msgstr "Sottratto da %1 " + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "Stile" + +#: 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 +msgid "Subject" +msgstr "Oggetto" + +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 +#. ($self->Data) +msgid "Subject changed to %1" +msgstr "L'oggetto diventa %1" + +#: html/Elements/Submit:97 +msgid "Submit" +msgstr "Invia" + +#: NOT FOUND IN SOURCE +msgid "Submit Workflow" +msgstr "Imposta workflow" + +#: lib/RT/Group_Overlay.pm:782 +msgid "Succeeded" +msgstr "Completato con successo" + +#: lib/RT/Date.pm:419 +msgid "Sun." +msgstr "Dom." + +#: lib/RT/System.pm:76 +msgid "SuperUser" +msgstr "SuperUtente" + +#: html/User/Elements/DelegateRights:98 +msgid "System" +msgstr "Sistema" + +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "Configurazione del sistema" + +#: 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 "Errore di sistema" + +#: NOT FOUND IN SOURCE +msgid "System Error. Right not granted." +msgstr "Errore di sistema. Diritto non concesso." + +#: NOT FOUND IN SOURCE +msgid "System Error. right not granted" +msgstr "Errore di sistema. Diritto non concesso" + +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "Errore di sistema: %1" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "Strumenti di sistema" + +#: lib/RT/ACE_Overlay.pm:634 +msgid "System error. Right not delegated." +msgstr "Errore di sistema. Diritto non delegato." + +#: 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 "Errore di sistema. Diritto non concesso." + +#: NOT FOUND IN SOURCE +msgid "System error. Unable to grant rights." +msgstr "Errore di sistema. Impossibile concedere i diritti." + +#: 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 "Gruppi di sistema" + +#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 +msgid "SystemRolegroup for internal use" +msgstr "SystemRolegroup per uso interno" + +#: 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 +msgid "Take" +msgstr "Prendi in carico" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "Prendi in carico ticket" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "PrendiInCaricoTicket" + +#: lib/RT/Transaction_Overlay.pm:652 +msgid "Taken" +msgstr "Preso in carico" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 +msgid "Template" +msgstr "Modello" + +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 +#. ($TemplateObj->Id()) +msgid "Template #%1" +msgstr "Modello n°%1" + +#: html/Admin/Elements/EditTemplates:110 +msgid "Template deleted" +msgstr "Modello eliminato" + +#: lib/RT/Scrip_Overlay.pm:181 +msgid "Template not found" +msgstr "Modello non trovato" + +#: NOT FOUND IN SOURCE +msgid "Template not found\\n" +msgstr "Modello non trovato\\n" + +#: lib/RT/Template_Overlay.pm:376 +msgid "Template parsed" +msgstr "Modello elaborato" + +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 +msgid "Templates" +msgstr "Modelli" + +#: NOT FOUND IN SOURCE +msgid "Templates for %1\\n" +msgstr "Modelli per %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "Testo" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 +msgid "That is already the current value" +msgstr "Il valore attuale è già questo" + +#: lib/RT/CustomField_Overlay.pm:407 +msgid "That is not a value for this custom field" +msgstr "Questo campo personalizzato non ammette questo valore" + +#: lib/RT/Ticket_Overlay.pm:1955 +msgid "That is the same value" +msgstr "Il valore è lo stesso" + +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "Questo utente/gruppo ha già questo diritto" + +#: lib/RT/Queue_Overlay.pm:750 +#. ($args{'Type'}) +msgid "That principal is already a %1 for this queue" +msgstr "Questo utente/gruppo è già %1 per questa coda" + +#: lib/RT/Ticket_Overlay.pm:1396 +#. ($self->loc($args{'Type'})) +msgid "That principal is already a %1 for this ticket" +msgstr "Questo utente/gruppo è già %1 per questo ticket" + +#: lib/RT/Queue_Overlay.pm:849 +#. ($args{'Type'}) +msgid "That principal is not a %1 for this queue" +msgstr "Questo utente/gruppo non è %1 per questa coda" + +#: NOT FOUND IN SOURCE +msgid "That principal is not a %1 for this ticket" +msgstr "Questo utente/gruppo non è %1 per questo ticket" + +#: lib/RT/Ticket_Overlay.pm:1951 +msgid "That queue does not exist" +msgstr "La coda non esiste" + +#: lib/RT/Ticket_Overlay.pm:3189 +msgid "That ticket has unresolved dependencies" +msgstr "Il ticket ha dipendenze non risolte" + +#: NOT FOUND IN SOURCE +msgid "That user already has that right" +msgstr "L'utente ha già questo diritto" + +#: lib/RT/Ticket_Overlay.pm:2993 +msgid "That user already owns that ticket" +msgstr "L'utente ha già il ticket in carico" + +#: lib/RT/Ticket_Overlay.pm:2965 +msgid "That user does not exist" +msgstr "L'utente non esiste" + +#: lib/RT/User_Overlay.pm:390 +msgid "That user is already privileged" +msgstr "L'utente è già previlegiato" + +#: lib/RT/User_Overlay.pm:411 +msgid "That user is already unprivileged" +msgstr "L'utente è già non previlegiato" + +#: lib/RT/User_Overlay.pm:403 +msgid "That user is now privileged" +msgstr "Ora l'utente è previlegiato" + +#: lib/RT/User_Overlay.pm:424 +msgid "That user is now unprivileged" +msgstr "Ora l'utente è non previlegiato" + +#: NOT FOUND IN SOURCE +msgid "That user is now unprivilegedileged" +msgstr "Ora l'utente è non previlegiato" + +#: lib/RT/Ticket_Overlay.pm:2986 +msgid "That user may not own tickets in that queue" +msgstr "L'utente non può prendere in carico ticket da questa coda" + +#: lib/RT/Link_Overlay.pm:234 +msgid "That's not a numerical id" +msgstr "Non è un identificativo numerico" + +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 +msgid "The Basics" +msgstr "Dati di base" + +#: lib/RT/ACE_Overlay.pm:113 +msgid "The CC of a ticket" +msgstr "Il Cc di un ticket" + +#: lib/RT/ACE_Overlay.pm:114 +msgid "The administrative CC of a ticket" +msgstr "Il Cc amministrativo di un ticket" + +#: NOT FOUND IN SOURCE +msgid "The comment has been recorded" +msgstr "Il commento è stato registrato" + +#: 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 "Il comando seguente troverà tutti i ticket attivi nella coda 'general' e ne imposterà la priorità a 99 se nessuno li ha toccati nelle ultime 4 ore:" + +#: lib/RT/Record.pm:934 +msgid "The new value has been set." +msgstr "Il nuovo valore è stato impostato." + +#: lib/RT/ACE_Overlay.pm:111 +msgid "The owner of a ticket" +msgstr "L'incaricato del ticket" + +#: lib/RT/ACE_Overlay.pm:112 +msgid "The requestor of a ticket" +msgstr "Il richiedente del ticket" + +#: html/Admin/Elements/EditUserComments:47 +msgid "These comments aren't generally visible to the user" +msgstr "Questi commenti non vengono normalmente mostrati all'utente" + +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "L'oggetto non ammette questo campo personalizzato" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Questa funzionalità è riservata agli amministratori di sistema" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Il messaggio sarà inviato a..." + +#: NOT FOUND IN SOURCE +msgid "This ticket %1 %2 (%3)\\n" +msgstr "Il ticket %1 %2 (%3)\\n" + +#: bin/rt-crontool:214 +msgid "This tool allows the user to run arbitrary perl modules from within RT." +msgstr "Questo strumento permette di eseguire qualsiasi modulo perl da dentro RT." + +#: lib/RT/Transaction_Overlay.pm:288 +msgid "This transaction appears to have no content" +msgstr "La transazione sembra non avere alcun contenuto" + +#: html/Ticket/Elements/ShowRequestor:70 +#. ($rows) +msgid "This user's %1 highest priority tickets" +msgstr "I %1 ticket a maggior priorità richiesti da questo utente" + +#: NOT FOUND IN SOURCE +msgid "This user's 25 highest priority tickets" +msgstr "I 25 ticket a maggior priorità richiesti da questo utente" + +#: lib/RT/Date.pm:416 +msgid "Thu." +msgstr "Gio." + +#: NOT FOUND IN SOURCE +msgid "Ticket # %1 %2" +msgstr "Ticket n° %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Ticket # %1 Jumbo update: %2" +msgstr "Ticket n° %1 aggiornamento Jumbo: %2" + +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket #%1 Jumbo update: %2" +msgstr "Ticket n°%1 aggiornamento Jumbo: %2" + +#: html/Approvals/Elements/ShowDependency:67 +#. ($link->BaseObj->Id, $link->BaseObj->Subject) +msgid "Ticket #%1: %2" +msgstr "Ticket n°%1: %2" + +#: lib/RT/Action/CreateTickets.pm:1258 lib/RT/Action/CreateTickets.pm:1267 lib/RT/Action/CreateTickets.pm:595 lib/RT/Action/CreateTickets.pm:716 lib/RT/Action/CreateTickets.pm:729 +#. ($T::Tickets{$template_id}->Id) +#. ($T::Tickets{$template_id}->id) +#. ($ticket->Id) +msgid "Ticket %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 +#. ($self->Id, $QueueObj->Name) +msgid "Ticket %1 created in queue '%2'" +msgstr "Creato ticket %1 nella coda '%2'" + +#: NOT FOUND IN SOURCE +msgid "Ticket %1 loaded\\n" +msgstr "Caricato ticket %1\\n" + +#: html/Search/Bulk.html:269 +#. ($Ticket->Id,$_) +msgid "Ticket %1: %2" +msgstr "Ticket %1: %2" + +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Campi personalizzati del ticket" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket History # %1 %2" +msgstr "Cronologia del ticket n° %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Ticket Id" +msgstr "Identificativo ticket" + +#: etc/initialdata:324 +msgid "Ticket Resolved" +msgstr "Ticket risolto" + +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Transazioni sul ticket" + +#: NOT FOUND IN SOURCE +msgid "Ticket attachment" +msgstr "Allegato al ticket" + +#: lib/RT/Tickets_Overlay.pm:1648 +msgid "Ticket content" +msgstr "Contenuto del ticket" + +#: lib/RT/Tickets_Overlay.pm:1697 +msgid "Ticket content type" +msgstr "Tipo del contenuto del ticket" + +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 +msgid "Ticket could not be created due to an internal error" +msgstr "A causa di un errore interno non è stato possibile creare il ticket" + +#: NOT FOUND IN SOURCE +msgid "Ticket created" +msgstr "Ticket creato" + +#: NOT FOUND IN SOURCE +msgid "Ticket creation failed" +msgstr "Creazione del ticket fallita" + +#: NOT FOUND IN SOURCE +msgid "Ticket deleted" +msgstr "Ticket eliminato" + +#: NOT FOUND IN SOURCE +msgid "Ticket id not found" +msgstr "Identificativo del ticket non trovato" + +#: NOT FOUND IN SOURCE +msgid "Ticket killed" +msgstr "Ticket eliminato" + +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Metadati del ticket" + +#: NOT FOUND IN SOURCE +msgid "Ticket not found" +msgstr "Ticket non trovato" + +#: etc/initialdata:310 +msgid "Ticket status changed" +msgstr "Stato del ticket cambiato" + +#: NOT FOUND IN SOURCE +msgid "Ticket watchers" +msgstr "Osservatori del ticket" + +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "Modulo di ricerca TicketSQL" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "Ticket" + +#: NOT FOUND IN SOURCE +msgid "Tickets %1 by %2" +msgstr "Ticket %1 da %2" + +#: NOT FOUND IN SOURCE +msgid "Tickets from %1" +msgstr "Ticket da %1" + +#: html/Approvals/Elements/ShowDependency:48 +msgid "Tickets which depend on this approval:" +msgstr "Ticket che dipendono da questa approvazione:" + +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "Tempo stimato" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 +msgid "Time Left" +msgstr "Tempo rimasto" + +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 +msgid "Time Worked" +msgstr "Tempo lavorato" + +#: lib/RT/Tickets_Overlay.pm:1619 +msgid "Time left" +msgstr "Tempo rimanente" + +#: html/Elements/Footer:71 +msgid "Time to display" +msgstr "Tempo impiegato per l'elaborazione" + +#: lib/RT/Tickets_Overlay.pm:1594 +msgid "Time worked" +msgstr "Tempo impiegato" + +#: NOT FOUND IN SOURCE +msgid "TimeLeft" +msgstr "TempoRimanente" + +#: lib/RT/Ticket_Overlay.pm:1143 +msgid "TimeWorked" +msgstr "TempoImpiegato" + +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "Titolo" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:" +msgstr "Per generare una diff dopo il commit:" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:\\n" +msgstr "Per generare una diff dopo il commit:\\n" + +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "Per richieste di supporto, formazione, personalizzazioni o acquisto di licenze, si prega di contattare %1." + +#: lib/RT/Ticket_Overlay.pm:1146 +msgid "Told" +msgstr "UltimaComunicazioneARichiedenti" + +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Strumenti" + +#: etc/initialdata:252 +msgid "Transaction" +msgstr "Transazioni" + +#: lib/RT/Transaction_Overlay.pm:794 +#. ($self->Data) +msgid "Transaction %1 purged" +msgstr "Transazione %1 ripulita" + +#: lib/RT/Transaction_Overlay.pm:174 +msgid "Transaction Created" +msgstr "Transazione creata" + +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Campi personalizzati della transazione" + +#: NOT FOUND IN SOURCE +msgid "Transaction->Create couldn't, as you didn't specify a ticket id" +msgstr "Transaction->Create fallita, devi specificare l'identificativo dell'oggetto" + +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "Transaction->Create fallita, devi specificare il tipo e l'identificativo dell'oggetto" + +#: lib/RT/Transaction_Overlay.pm:838 +msgid "Transactions are immutable" +msgstr "Le transazioni sono immutabili" + +#: NOT FOUND IN SOURCE +msgid "Trying to delete a right: %1" +msgstr "Provo a eliminare un diritto: %1" + +#: lib/RT/Date.pm:414 +msgid "Tue." +msgstr "Mar." + +#: html/Admin/CustomFields/Modify.html:66 html/Admin/Elements/EditCustomField:65 html/Ticket/Elements/AddWatchers:54 html/Ticket/Elements/AddWatchers:65 html/Ticket/Elements/AddWatchers:75 lib/RT/Ticket_Overlay.pm:1144 lib/RT/Tickets_Overlay.pm:1432 +msgid "Type" +msgstr "Tipo" + +#: lib/RT/ScripCondition_Overlay.pm:129 +msgid "Unimplemented" +msgstr "NonImplementato" + +#: html/Admin/Users/Modify.html:89 +msgid "Unix login" +msgstr "Username unix" + +#: NOT FOUND IN SOURCE +msgid "UnixUsername" +msgstr "UsernameUnix" + +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 +#. ($self->ContentEncoding) +#. ($ContentEncoding) +msgid "Unknown ContentEncoding %1" +msgstr "ContentEncoding sconosciuto %1" + +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "Campo sconosciuto: $key" + +#: html/Elements/SelectResultsPerPage:58 +msgid "Unlimited" +msgstr "Illimitato" + +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Ricerca senza nome" + +#: etc/initialdata:32 +msgid "Unprivileged" +msgstr "NonPrevilegiato" + +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "Campi personalizzati non selezionati" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "Oggetti non selezionati" + +#: lib/RT/Transaction_Overlay.pm:648 +msgid "Untaken" +msgstr "NonPreso" + +#: html/Search/Bulk.html:54 +msgid "Update" +msgstr "Aggiornamento" + +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Aggiorna tutti" + +#: NOT FOUND IN SOURCE +msgid "Update ID" +msgstr "Identificativo aggiornamento" + +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Aggiorna ticket" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 +msgid "Update Type" +msgstr "Tipo aggiornamento" + +#: NOT FOUND IN SOURCE +msgid "Update all these tickets at once" +msgstr "Aggiorna tutti questi ticket contemporaneamente" + +#: NOT FOUND IN SOURCE +msgid "Update email" +msgstr "Aggiorna email" + +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Aggiorna ticket multipli" + +#: NOT FOUND IN SOURCE +msgid "Update name" +msgstr "Aggiorna nome" + +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 +msgid "Update not recorded." +msgstr "Aggiornamento non registrato." + +#: html/Search/Bulk.html:99 +msgid "Update selected tickets" +msgstr "Aggiorna i ticket selezionati" + +#: NOT FOUND IN SOURCE +msgid "Update signature" +msgstr "Aggiorna la firma" + +#: html/Ticket/ModifyAll.html:84 +msgid "Update ticket" +msgstr "Aggiorna il ticket" + +#: NOT FOUND IN SOURCE +msgid "Update ticket # %1" +msgstr "Aggiorna il ticket n° %1" + +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 +#. ($Ticket->id) +msgid "Update ticket #%1" +msgstr "Aggiorna il ticket n°%1" + +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Update ticket #%1 (%2)" +msgstr "Aggiorna il ticket n°%1 (%2)" + +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 +msgid "Update type was neither correspondence nor comment." +msgstr "Il tipo aggiornamento non era ne' corrispondenza ne' commento." + +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 +msgid "Updated" +msgstr "Aggiornato" + +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Upload" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Upload file multipli" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Upload immagini multiple" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Upload file singolo" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Upload immagine singola" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "Upload fino a %1 file" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "Upload fino a %1 immagini" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "Upload delle modifiche" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "Usa altri strumenti di amministrazione di RT" + +#: NOT FOUND IN SOURCE +msgid "User %1 %2: %3\\n" +msgstr "Utente %1 %2: %3\\n" + +#: NOT FOUND IN SOURCE +msgid "User %1 Password: %2\\n" +msgstr "Utente %1 Password: %2\\n" + +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "Impossibile trovare l'utente '%1'" + +#: NOT FOUND IN SOURCE +msgid "User '%1' not found" +msgstr "Utente '%1' non trovato" + +#: NOT FOUND IN SOURCE +msgid "User '%1' not found\\n" +msgstr "Utente '%1' non trovato\\n" + +#: etc/initialdata:132 etc/initialdata:206 +msgid "User Defined" +msgstr "Definito dall'utente" + +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Condizioni e azioni definite dall'utente" + +#: NOT FOUND IN SOURCE +msgid "User ID" +msgstr "Username" + +#: NOT FOUND IN SOURCE +msgid "User Id" +msgstr "Username" + +#: 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 "Diritti dell'utente" + +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "L'utente ha richiesto un aggiornamento di tipo sconosciuto sul campo personalizzato %1 per %2 l'oggetto n°%3" + +#: html/Admin/Users/Modify.html:293 +#. ($msg) +msgid "User could not be created: %1" +msgstr "Impossibile creare l'utente: %1" + +#: lib/RT/User_Overlay.pm:331 +msgid "User created" +msgstr "Utente creato" + +#: 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 "Gruppi definiti dall'utente" + +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Utente caricato" + +#: NOT FOUND IN SOURCE +msgid "User notified" +msgstr "Utente notificato" + +#: NOT FOUND IN SOURCE +msgid "User view" +msgstr "User view" + +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Gruppi definiti dall'utente" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 +msgid "Username" +msgstr "Username" + +#: 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 +msgid "Users" +msgstr "Utenti" + +#: html/Admin/Users/index.html:85 +msgid "Users matching search criteria" +msgstr "Utenti che soddisfano il criterio di ricerca" + +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Query valida" + +#: NOT FOUND IN SOURCE +msgid "ValueOfQueue" +msgstr "ValoreDellaCoda" + +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 +msgid "Values" +msgstr "Valori" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Watch" +msgstr "Osserva" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "WatchAsAdminCc" +msgstr "OsservaComeAdminCc" + +#: NOT FOUND IN SOURCE +msgid "Watcher" +msgstr "Osservatore" + +#: NOT FOUND IN SOURCE +msgid "Watcher loaded" +msgstr "Osservatore caricato" + +#: html/Admin/Elements/QueueTabs:63 +msgid "Watchers" +msgstr "Osservatori" + +#: NOT FOUND IN SOURCE +msgid "WebEncoding" +msgstr "WebEncoding" + +#: lib/RT/Date.pm:415 +msgid "Wed." +msgstr "Mer." + +#: etc/initialdata:521 +msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" +msgstr "Quando un ticket ha ricevuto tutte le approvazioni richieste, aggiungi una corrispondenza al ticket originale" + +#: etc/initialdata:485 +msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" +msgstr "Quando un ticket riceve una qualsiasi delle approvazioni richieste, aggiungi una corrispondenza al ticket originale" + +#: etc/initialdata:146 +msgid "When a ticket is created" +msgstr "Quando viene creato un ticket" + +#: etc/initialdata:418 +msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" +msgstr "Quando una richiesta di approvazione viene creata, notifica chi ha in carico il ticket e gli AdminCc che devono approvarlo" + +#: etc/initialdata:151 +msgid "When anything happens" +msgstr "Quando succede qualsiasi cosa" + +#: etc/initialdata:199 +msgid "Whenever a ticket is resolved" +msgstr "Quando un ticket viene risolto" + +#: etc/initialdata:185 +msgid "Whenever a ticket's owner changes" +msgstr "Quando cambia colui che ha in carico il ticket" + +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "Quando cambia la priorità di un ticket" + +#: etc/initialdata:193 +msgid "Whenever a ticket's queue changes" +msgstr "Quando il ticket si sposta in un'altra coda" + +#: etc/initialdata:170 +msgid "Whenever a ticket's status changes" +msgstr "Quando cambia lo stato di un ticket" + +#: etc/initialdata:207 +msgid "Whenever a user-defined condition occurs" +msgstr "Quando si verifica una condizione definita dall'utente" + +#: etc/initialdata:164 +msgid "Whenever comments come in" +msgstr "Quando arrivano commenti" + +#: etc/initialdata:157 +msgid "Whenever correspondence comes in" +msgstr "Quando arrivano corrispondenze" + +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 +msgid "Work" +msgstr "Lavoro" + +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Lavoro offline" + +#: NOT FOUND IN SOURCE +msgid "WorkPhone" +msgstr "TelefonoLavoro" + +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 +msgid "Worked" +msgstr "Impiegato" + +#: lib/RT/Ticket_Overlay.pm:3096 +msgid "You already own this ticket" +msgstr "Hai già in carico questo ticket" + +#: html/autohandler:158 html/autohandler:166 +msgid "You are not an authorized user" +msgstr "Non sei un utente autorizzato" + +#: lib/RT/Ticket_Overlay.pm:2978 +msgid "You can only reassign tickets that you own or that are unowned" +msgstr "Puoi solo riassegnare ticket che hai in carico, o che non sono ancora assegnati" + +#: NOT FOUND IN SOURCE +msgid "You don't have permission to view that ticket.\\n" +msgstr "Non hai i permessi per visualizzare questo ticket.\\n" + +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 +#. ($num, $queue) +msgid "You found %1 tickets in queue %2" +msgstr "Hai trovato %1 ticket nella coda %2" + +#: html/NoAuth/Logout.html:52 +msgid "You have been logged out of RT." +msgstr "Ti sei scollegato da RT." + +#: html/SelfService/Display.html:109 +msgid "You have no permission to create tickets in that queue." +msgstr "Non hai l'autorizzazione per creare ticket in questa coda." + +#: lib/RT/Ticket_Overlay.pm:1964 +msgid "You may not create requests in that queue." +msgstr "Non puoi creare ticket in questa coda." + +#: html/NoAuth/Logout.html:56 +msgid "You're welcome to login again" +msgstr "Collegati di nuovo" + +#: NOT FOUND IN SOURCE +msgid "Your %1 requests" +msgstr "Le tue %1 richieste" + +#: NOT FOUND IN SOURCE +msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" +msgstr "L'amministratore RT non ha configurato correttamente l'alias di email che invoca RT" + +#: etc/initialdata:502 +msgid "Your request has been approved by %1. Other approvals may still be pending." +msgstr "La tua richiesta è stata approvata da %1. Potrebbero essere necessarie altre approvazioni." + +#: etc/initialdata:540 +msgid "Your request has been approved." +msgstr "La tua richiesta è stata approvata." + +#: NOT FOUND IN SOURCE +msgid "Your request was rejected" +msgstr "Your request was rejected" + +#: etc/initialdata:445 +msgid "Your request was rejected." +msgstr "La tua richiesta è stata respinta." + +#: html/autohandler:193 +msgid "Your username or password is incorrect" +msgstr "Il tuo username o la tua password non sono corretti" + +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 +msgid "Zip" +msgstr "CAP" + +#: NOT FOUND IN SOURCE +msgid "[no subject]" +msgstr "[senza oggetto]" + +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "permetti la creazione di ricerche salvate" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "permetti il caricamento di ricerche salvate" + +#: html/User/Elements/DelegateRights:80 +#. ($right->PrincipalObj->Object->SelfDescription) +msgid "as granted to %1" +msgstr "come concesso a %1" + +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "appartiene a" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "chiuso" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 +msgid "contains" +msgstr "contiene" + +#: NOT FOUND IN SOURCE +msgid "content" +msgstr "contenuto" + +#: NOT FOUND IN SOURCE +msgid "content-type" +msgstr "content-type" + +#: NOT FOUND IN SOURCE +msgid "correspondence (probably) not sent" +msgstr "corrispondenza (probabilmente) non inviata" + +#: NOT FOUND IN SOURCE +msgid "correspondence sent" +msgstr "corrispondenza inviata" + +#: NOT FOUND IN SOURCE +msgid "current: $current, want $want, Error near ->$val<- expecting a " +msgstr "attuale: $current, richiesto $want, Errore vicino a ->$val<- mi aspettavo " + +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 +msgid "days" +msgstr "giorni" + +#: NOT FOUND IN SOURCE +msgid "dead" +msgstr "morto" + +#: NOT FOUND IN SOURCE +msgid "delete" +msgstr "cancella" + +#: lib/RT/Queue_Overlay.pm:88 +msgid "deleted" +msgstr "cancellato" + +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "non appartiene a" + +#: html/Search/Elements/PickBasics:61 +msgid "does not match" +msgstr "non corrisponde a" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 +msgid "doesn't contain" +msgstr "non contiene" + +#: html/Elements/SelectEqualityOperator:59 +msgid "equal to" +msgstr "uguale a" + +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "errore: impossibile spostare in basso" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "errore: impossibile spostare a sinistra" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "errore: impossibile spostare in alto" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "errore: niente da cancellare" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "errore: niente da spostare" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "errore: niente da invertire" + +#: NOT FOUND IN SOURCE +msgid "false" +msgstr "falso" + +#: NOT FOUND IN SOURCE +msgid "filename" +msgstr "nome file" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "greater than" +msgstr "maggiore di" + +#: lib/RT/Group_Overlay.pm:222 +#. ($self->Name) +msgid "group '%1'" +msgstr "gruppo '%1'" + +#: lib/RT/Date.pm:338 +msgid "hours" +msgstr "ore" + +#: html/Search/Elements/PickBasics:48 +msgid "id" +msgstr "Codice" + +#: 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 +msgid "is" +msgstr "uguale a" + +#: 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 +msgid "isn't" +msgstr "diverso da" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "less than" +msgstr "minore di" + +#: html/Search/Elements/PickBasics:60 +msgid "matches" +msgstr "corrisponde a" + +#: lib/RT/Date.pm:334 +msgid "min" +msgstr "min" + +#: html/Ticket/Update.html:64 +msgid "minutes" +msgstr "minuti" + +#: lib/RT/Date.pm:350 +msgid "months" +msgstr "mesi" + +#: lib/RT/Queue_Overlay.pm:83 +msgid "new" +msgstr "nuovo" + +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "nessun nome" + +#: html/Admin/Elements/EditScrips:64 +msgid "no value" +msgstr "nessun valore" + +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 +msgid "none" +msgstr "nessuno" + +#: html/Elements/SelectEqualityOperator:59 +msgid "not equal to" +msgstr "diverso da" + +#: NOT FOUND IN SOURCE +msgid "notlike" +msgstr "diverso da" + +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 +msgid "open" +msgstr "aperto" + +#: lib/RT/Group_Overlay.pm:227 +#. ($self->Name, $user->Name) +msgid "personal group '%1' for user '%2'" +msgstr "Gruppo personale '%1' per l'utente '%2'" + +#: lib/RT/Group_Overlay.pm:235 +#. ($queue->Name, $self->Type) +msgid "queue %1 %2" +msgstr "coda %1 %2" + +#: lib/RT/Queue_Overlay.pm:87 +msgid "rejected" +msgstr "respinto" + +#: lib/RT/Queue_Overlay.pm:86 +msgid "resolved" +msgstr "risolto" + +#: lib/RT/Date.pm:330 +msgid "sec" +msgstr "sec" + +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "Mostra configurazione" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "foglio di calcolo" + +#: lib/RT/Queue_Overlay.pm:85 +msgid "stalled" +msgstr "in stallo" + +#: lib/RT/Group_Overlay.pm:230 +#. ($self->Type) +msgid "system %1" +msgstr "sistema %1" + +#: lib/RT/Group_Overlay.pm:241 +#. ($self->Type) +msgid "system group '%1'" +msgstr "gruppo di sistema '%1'" + +#: html/Elements/Error:66 html/SelfService/Error.html:63 +msgid "the calling component did not specify why" +msgstr "il componente chiamante non ha specificato il perché" + +#: lib/RT/Group_Overlay.pm:238 +#. ($self->Instance, $self->Type) +msgid "ticket #%1 %2" +msgstr "ticket n°%1 %2" + +#: NOT FOUND IN SOURCE +msgid "true" +msgstr "vero" + +#: lib/RT/Group_Overlay.pm:244 +#. ($self->Id) +msgid "undescribed group %1" +msgstr "gruppo %1 senza descrizione" + +#: NOT FOUND IN SOURCE +msgid "undescripbed group %1" +msgstr "gruppo %1 senza descrizione" + +#: lib/RT/Group_Overlay.pm:219 +#. ($user->Object->Name) +msgid "user %1" +msgstr "utente %1" + +#: lib/RT/Date.pm:346 +msgid "weeks" +msgstr "settimane" + +#: NOT FOUND IN SOURCE +msgid "with template %1" +msgstr "con il modello %1" + +#: lib/RT/Date.pm:354 +msgid "years" +msgstr "anni" + diff --git a/rt/lib/RT/I18N/ja.po b/rt/lib/RT/I18N/ja.po index c0401f869..259f857c0 100644 --- a/rt/lib/RT/I18N/ja.po +++ b/rt/lib/RT/I18N/ja.po @@ -11,66 +11,64 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) -msgid "#%1" -msgstr "" - -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->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 +#. ($Ticket->id, $Ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "" -#: lib/RT/Date.pm:337 -#. ($s, $time_unit) -msgid "%1 %2" +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" msgstr "" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) -msgid "%1 %2 %3" +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" msgstr "" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:361 +#. ($s, $time_unit) +msgid "%1 %2" +msgstr "" + +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %2 %3 %4:%5:%6 %7" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" msgstr "" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%3ã«å¤‰æ›´ã•れãŸ%1 %2 " -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" msgstr "" -#: NOT FOUND IN SOURCE -msgid "%1 %2 of group %3" -msgstr "" - -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" msgstr "" @@ -79,44 +77,81 @@ msgstr "" msgid "%1 (%2) %3 this ticket\\n" msgstr "%1 (%2) %3 ã“ã®ãƒã‚±ãƒƒãƒˆ\\n" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) -msgid "%1 - %2 shown" +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" msgstr "" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "%1スクリプトアクションãƒãƒ¼ãƒ‰ã—ã¾ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%2ã¨åŒã˜ãƒãƒªãƒ¥ãƒ¼ã®%1ãŒè¿½åŠ ã•れã¾ã—ãŸ" @@ -133,27 +168,31 @@ msgstr "%1aliasesã‚’å‹•ã‹ã™ãŸã‚ã«ãƒã‚±ãƒƒãƒˆIDãŒå¿…è¦ã§ã™ " msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "%1aliasesã‚’å‹•ã‹ã™ãŸã‚ã«ãƒã‚±ãƒƒãƒˆIDãŒå¿…è¦ã§ã™(%2ã‹ã‚‰) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%2ã«ã‚ˆã‚‹%1" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1ã¯%2ã‹ã‚‰%3ã«å¤‰æ›´ã•れã¾ã—ãŸ" -#: lib/RT/Interface/Web.pm:857 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "" @@ -161,38 +200,41 @@ msgstr "" msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1ã¯ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã‚’ã¯ã˜ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ(%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1ã¯åˆ†è§£ã™ã‚‹ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã‚’è¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸã€‚RTã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¸€è²«æ€§ãŒãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚" -#: html/Elements/MyTickets:25 -#. ($rows) -msgid "%1 highest priority tickets I own..." +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" msgstr "" -#: html/Elements/MyRequests:25 +#: html/Elements/MyTickets:47 #. ($rows) -msgid "%1 highest priority tickets I requested..." +msgid "%1 highest priority tickets I own" msgstr "" -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1ã¯ã“ã®ã‚ューã§ã¯%2ã§ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1ã¯ã“ã®ãƒã‚±ãƒƒãƒˆã§ã¯%2ã§ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1ã¯ã‚«ã‚¹ã‚¿ãƒ フィールド%2ã®ãƒãƒªãƒ¥ãƒ¼ã¯ã‚りã¾ã›ã‚“" @@ -200,16 +242,29 @@ msgstr "%1ã¯ã‚«ã‚¹ã‚¿ãƒ フィールド%2ã®ãƒãƒªãƒ¥ãƒ¼ã¯ã‚りã¾ã›ã‚“" msgid "%1 isn't a valid Queue id." msgstr "%1ã¯æœ‰åйãªã‚ューIDã§ã¯ã‚りã¾ã›ã‚“。" -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1分" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1表示ã•れã¾ã›ã‚“" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "" @@ -226,11 +281,7 @@ msgstr "%1タイプã¯$MessageIdIDã§ã¯ä¸æ˜Žã§ã™" msgid "%1 type unknown for %2" msgstr "%1タイプã¯%2ã§ã¯ä¸æ˜Žã§ã™" -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" -msgstr "" - -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1ã¯åˆ†è§£ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—ãƒã‚±ãƒƒãƒˆã®ã™ã¹ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’分解ã—ã¾ã™ã€‚" @@ -239,22 +290,36 @@ msgstr "%1ã¯åˆ†è§£ã•れãŸã‚°ãƒ«ãƒ¼ãƒ—ãƒã‚±ãƒƒãƒˆã®ã™ã¹ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼ã msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." msgstr "%1ãŒã‚‚ã—リンクã•れãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å¾“属者(もã—ãã¯ãƒ¡ãƒ³ãƒãƒ¼ï¼‰ã§ã‚ã‚‹ã¨ã€[ãƒãƒ¼ã‚«ãƒ«]ベースを行ãè©°ã¾ã‚‰ã›ã‚‹ã“ã¨ã«ãªã‚Šã¾ã™ã€‚" -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1:アタッãƒãƒ¡ãƒ³ãƒˆãŒç‰¹å®šã§ãã¾ã›ã‚“" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "%1'ã¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã«ç„¡åйåãƒãƒªãƒ¥ãƒ¼ã§ã™" @@ -264,52 +329,52 @@ msgid "'%1' not a recognized action. " msgstr "%1' アクションをèªè˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚" #: NOT FOUND IN SOURCE -msgid "(Check box to delete group member)" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "(Check box to delete scrip)" msgstr "(スクリプトを削除ã™ã‚‹ãŸã‚ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ï¼‰" -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(削除ã®ãŸã‚ã®ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ï¼‰" -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" msgstr "" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(ãƒã‚±ãƒƒãƒˆIDã¾ãŸã¯URLsを空欄ã§åŒºåˆ‡ã£ã¦å…¥åŠ›ã—ã¦ãã ã•ã„)" +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 -#. ($RT::CorrespondAddress) -#. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" msgstr "" -#: NOT FOUND IN SOURCE -msgid "(No Value)" +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 +#. ($RT::CorrespondAddress) +#. ($RT::CommentAddress) +msgid "(If left blank, will default to %1)" msgstr "" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(メンãƒãƒ¼ãªã—)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(スクリプトãªã—)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "" -#: html/Ticket/Update.html:85 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "" + +#: 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 "" @@ -317,11 +382,11 @@ msgstr "" msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Eメールアドレスã«ãŠã‘るカンマã§åŒºåˆ‡ã‚‰ã‚ŒãŸãƒªã‚¹ãƒˆã¸ã®æ£ç¢ºãªã‚¢ãƒƒãƒ—デートã®ãƒ–ラインドコピーをé€ã‚‹ã€‚今後ã®ã‚¢ãƒƒãƒ—デートを誰ãŒå—ä¿¡ã™ã‚‹ã‹ã¯<b>変更ã§ãã¾ã›ã‚“</b>)" -#: html/Ticket/Create.html:79 +#: 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/Update.html:81 +#: 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 "" @@ -329,47 +394,51 @@ msgstr "" msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Eメールアドレスã«ãŠã‘るカンマã§åŒºåˆ‡ã‚‰ã‚ŒãŸãƒªã‚¹ãƒˆã¸ã®æ£ç¢ºãªã‚¢ãƒƒãƒ—デートã®ã‚³ãƒ”ーをé€ã‚‹ã€‚今後ã®ã‚¢ãƒƒãƒ—デートを誰ãŒå—ä¿¡ã™ã‚‹ã‹ã¯<b>変更ã§ãã¾ã›ã‚“</b>)" -#: html/Ticket/Create.html:69 +#: 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/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(空)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(サブジェクトãªã—)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(ãƒãƒªãƒ¥ãƒ¼ãªã—)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(ã²ã¨ã¤ã®ãƒã‚±ãƒƒãƒˆã®ã¿ï¼‰" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 -msgid "(pending other tickets)" +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" msgstr "" -#: NOT FOUND IN SOURCE -msgid "(requestor's group)" -msgstr "" - -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(必è¦ã§ã™ï¼‰" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "" @@ -381,106 +450,106 @@ msgstr "ç§ãŒæ‰€æœ‰ã—ã¦ã„ã‚‹25ã®æœ€ã‚‚é‡è¦ãªå„ªå…ˆæ¨©" msgid "25 highest priority tickets I requested..." msgstr "ç§ãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã—ãŸ25ã®æœ€ã‚‚é‡è¦ãªå„ªå…ˆæ¨©" -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid "<input type=\"submit\" value=\"New ticket in\"> %1" -msgstr "<input type=\"submit\" value=\"æ–°ã—ã„ãƒã‚±ãƒƒãƒˆ\"> %1" - -#: etc/initialdata:203 -msgid "A blank template" +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE Deleted" +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" -msgstr "" +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<input type=\"submit\" value=\"æ–°ã—ã„ãƒã‚±ãƒƒãƒˆ\"> %1" -#: NOT FOUND IN SOURCE -msgid "ACE could not be deleted" +#: etc/initialdata:218 +msgid "A blank template" msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE could not be found" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." msgstr "" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "エースã¯ã¿ã¤ã‹ã‚Šã¾ã›ã‚“" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "エースã¯ä½œæˆã€å‰Šé™¤ã®ã¿ã§ã™ã€‚" -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" msgstr "æ„図的ã§ãªã„ãƒã‚±ãƒƒãƒˆã®ä¿®æ£ã‚’防ããŸã‚ã«å¼·åˆ¶çµ‚了ã—ã¾ã™ã€‚\\n" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "アクセスコントãƒãƒ¼ãƒ«" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "アクション" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "アクション%1ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: bin/rt-crontool:123 -msgid "Action committed." +#: bin/rt-crontool:148 +msgid "Action committed.\\n" msgstr "" -#: bin/rt-crontool:119 +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "" -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "管ç†Ccã‚’è¿½åŠ ã™ã‚‹" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "Ccã‚’è¿½åŠ ã™ã‚‹" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 -msgid "Add More Files" +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Add Next State" +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" msgstr "" -#: html/Search/Bulk.html:88 -msgid "Add Requestor" -msgstr "リクエストã™ã‚‹äººã‚’ã‚’è¿½åŠ ã™ã‚‹" - -#: NOT FOUND IN SOURCE -msgid "Add a Scrip to this queue" +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Add a Scrip which will apply to all queues" -msgstr "" +#: html/Search/Bulk.html:106 +msgid "Add Requestor" +msgstr "リクエストã™ã‚‹äººã‚’ã‚’è¿½åŠ ã™ã‚‹" -#: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" msgstr "" #: NOT FOUND IN SOURCE @@ -491,57 +560,61 @@ msgstr "æ–°ã—ã„ã‚°ãƒãƒ¼ãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’è¿½åŠ ã™ã‚‹" msgid "Add a scrip to this queue" msgstr "ã“ã®ã‚ューã«ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’è¿½åŠ ã™ã‚‹" -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" msgstr "ã™ã¹ã¦ã®ã‚ューã«é©å¿œã™ã‚‹ã‚¹ã‚¯ãƒªãƒ—ãƒˆã‚’è¿½åŠ ã™ã‚‹" -#: html/Search/Bulk.html:118 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "é¸æŠžã•れãŸãƒã‚±ãƒƒãƒˆã¸ã®ã‚³ãƒ¡ãƒ³ãƒˆã¾ãŸã¯è¿”äº‹ã‚’è¿½åŠ ã™ã‚‹" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "メンãƒãƒ¼ã‚’è¿½åŠ ã™ã‚‹" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "æ–°ã—ã„ウォッãƒãƒ£ãƒ¼ã‚’è¿½åŠ ã™ã‚‹" -#: NOT FOUND IN SOURCE -msgid "AddNextState" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" msgstr "" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "ã“ã®ã‚ューã«%1ã®è²¬ä»»è€…ã‚’è¿½åŠ ã—ã¾ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã«%1ã®è²¬ä»»è€…ã‚’è¿½åŠ ã—ã¾ã—ãŸ" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "使‰€1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "使‰€2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "管ç†Cc" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "管ç†ã‚ュー" @@ -549,7 +622,7 @@ msgstr "管ç†ã‚ュー" msgid "Admin users" msgstr "管ç†ãƒ¦ãƒ¼ã‚¶ãƒ¼" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "管ç†/ã‚°ãƒãƒ¼ãƒãƒ«è¨å®š" @@ -557,181 +630,177 @@ msgstr "管ç†/ã‚°ãƒãƒ¼ãƒãƒ«è¨å®š" msgid "Admin/Groups" msgstr "管ç†/グループ" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "管ç†/ã‚ュー/基本" -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "管ç†Cc" -#: NOT FOUND IN SOURCE -msgid "AdminComment" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "AdminCorrespondence" +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" msgstr "" -#: lib/RT/Queue_Overlay.pm:72 -msgid "AdminCustomFields" -msgstr "" - -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "管ç†è€…Cc" -#: NOT FOUND IN SOURCE -msgid "Admins" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" msgstr "" #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "çµžè¾¼ã¿æ¤œç´¢" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "後" -#: NOT FOUND IN SOURCE -msgid "Age" +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Alias" +#: etc/initialdata:363 +msgid "All Approvals Passed" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Alias for" +#: html/Admin/Queues/index.html:75 +msgid "All Queues" +msgstr "ã™ã¹ã¦ã®ã‚ュー" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" msgstr "" -#: html/Admin/Elements/EditCustomFields:96 -msgid "All Custom Fields" +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" msgstr "" -#: html/Admin/Queues/index.html:53 -msgid "All Queues" -msgstr "ã™ã¹ã¦ã®ã‚ュー" +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "Always sends a message to the requestors independent of message sender" +#: html/Search/Edit.html:64 +msgid "Apply your changes" msgstr "" -#: html/Elements/Tabs:58 +#: html/Elements/Tabs:74 msgid "Approval" msgstr "" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" msgstr "" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Approval Details" +#: etc/initialdata:351 +msgid "Approval Passed" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Approval diagram" +#: etc/initialdata:374 +msgid "Approval Rejected" msgstr "" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "四月" -#: NOT FOUND IN SOURCE -msgid "April" -msgstr "" - -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "æ˜‡é †" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "添付" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "添付ファイル" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "添付ファイル%1ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "添付ファイルãŒä½œæˆã•れã¾ã—ãŸ" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "添付ファイルå" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "添付ファイル" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "八月" #: NOT FOUND IN SOURCE -msgid "August" -msgstr "" - -#: html/Admin/Elements/ModifyUser:66 msgid "AuthSystem" msgstr "自動システム" -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "" @@ -740,137 +809,160 @@ msgid "Autoreply To Requestors" msgstr "" #: NOT FOUND IN SOURCE -msgid "AutoreplyToRequestors" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Bad PGP Signature: %1\\n" msgstr "悪ã„PGPç½²å: %1\\n" -#: html/SelfService/Attachment/dhandler:40 +#: NOT FOUND IN SOURCE msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "æ‚ªã„æ·»ä»˜IDã§ã™ã€‚添付ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“'%1'\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "%1ã®æ‚ªã„データã§ã™" -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) +#: NOT FOUND IN SOURCE msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "添付ファイルã«ã¨ã£ã¦æ‚ªã„トランザクションナンãƒãƒ¼ã§ã™ã€‚%1ã¯%2\\nã®ã¯ãšã§ã™" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "基本" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Bcc" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "本当ã«å¤‰æ›´ã‚’ä¿å˜ã—ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "å‰" -#: NOT FOUND IN SOURCE -msgid "Begin Approval" +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" msgstr "" -#: etc/initialdata:202 +#: etc/initialdata:217 msgid "Blank" msgstr "" -#: html/Search/Listing.html:79 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "ã“ã®æ¤œç´¢ã«ãƒ–ックマークã®ã§ãã‚‹URLã§ã™" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "çŸã„ヘッダー" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "ãƒã‚±ãƒƒãƒˆã®ä¸€æ‹¬ã‚¢ãƒƒãƒ—デート" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "システムユーザーを修æ£ã§ãã¾ã›ã‚“" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "" -#: lib/RT/CustomField_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "æ°åãªã—ã«ã‚«ã‚¹ã‚¿ãƒ フィールドãƒãƒªãƒ¥ãƒ¼ã®è¿½åŠ ã¯ã§ãã¾ã›ã‚“" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "ãƒã‚±ãƒƒãƒˆè‡ªä½“ã«ã¯ãƒªãƒ³ã‚¯ã§ãã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:2787 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "ã™ã§ã«çµåˆã—ãŸãƒã‚±ãƒƒãƒˆã«ã¯çµåˆã§ãã¾ã›ã‚“。ã“ã®ã‚¨ãƒ©ãƒ¼ã¯æ±ºã—ã¦å‡ºã•ãªã„ã§ãã ã•ã„" -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "ベースã¨ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’特定ã§ãã¾ã›ã‚“" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "ユーザー: %1を作æˆã§ãã¾ã›ã‚“" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "Cc" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "パスワードを変更ã™ã‚‹" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "権利を無効ã«ã™ã‚‹ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "åä¾›" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "町" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "" -#: html/SelfService/Elements/Tabs:60 +#: NOT FOUND IN SOURCE msgid "Closed requests" msgstr "終了ã—ãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™" -#: NOT FOUND IN SOURCE -msgid "Code" +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" msgstr "" #: NOT FOUND IN SOURCE msgid "Command not understood!\\n" msgstr "ç†è§£ã—ã¦ã„ãªã„コマンド!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "コメント" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "コメントアドレス" @@ -878,40 +970,39 @@ msgstr "コメントアドレス" msgid "Comment not recorded" msgstr "記録ã•れã¦ã„ãªã„コメント" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "コメント" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "コメント(リクエスã¨ã—ãŸäººã«ã¯é€ä¿¡ã•れã¾ã›ã‚“)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "コメント(リクエスã¨ã—ãŸäººã«ã¯é€ä¿¡ã•れã¾ã›ã‚“)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "%1ã«ã¤ã„ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆ" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¤ã„ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆ" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "コメントãŒè¿½åŠ ã•れã¾ã—ãŸ" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "コメントãŒçŸãã•れã¾ã—ãŸ" @@ -919,27 +1010,27 @@ msgstr "コメントãŒçŸãã•れã¾ã—ãŸ" msgid "Compile Restrictions" msgstr "コンパイルè¦åˆ¶" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "コンディション" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "" -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "コンディションãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "è¨å®š" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "確èª" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "ã‚³ãƒ³ã‚¿ã‚¯ãƒˆæƒ…å ±" @@ -947,23 +1038,27 @@ msgstr "ã‚³ãƒ³ã‚¿ã‚¯ãƒˆæƒ…å ±" msgid "Contacted date '%1' could not be parsed" msgstr "コンタクトã•ã‚ŒãŸæ—¥ã«ã¡'%1'ã‚’è§£æžã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "æƒ…å ±" -#: NOT FOUND IN SOURCE -msgid "Coould not create group" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" msgstr "" -#: etc/initialdata:266 +#: etc/initialdata:286 msgid "Correspondence" msgstr "" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "メールアドレス" -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "通信ãŒè¿½åŠ ã•れã¾ã—ãŸ" @@ -971,45 +1066,51 @@ msgstr "通信ãŒè¿½åŠ ã•れã¾ã—ãŸ" msgid "Correspondence not recorded" msgstr "記録ã•れã¦ã„ãªã„通信" -#: lib/RT/Ticket_Overlay.pm:3458 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "ãƒã‚±ãƒƒãƒˆã®æ–°ã—ã„カスタムフィールドãƒãƒªãƒ¥ãƒ¼ã‚’è¿½åŠ ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: NOT FOUND IN SOURCE -msgid "Could not add new custom field value for ticket. %1 " +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " msgstr "" -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "オーナー変更ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "カスタムフィールドã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "グループã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "テンプレート: %1ã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "ãƒã‚±ãƒƒãƒˆã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ã‚ューãŒã‚»ãƒƒãƒˆã•れã¦ã„ã¾ã›ã‚“" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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 "ユーザーã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" #: NOT FOUND IN SOURCE -msgid "Could not create watcher for requestor" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Could not find a ticket with id %1" msgstr "ãƒã‚±ãƒƒãƒˆã¨ãã®ID%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" @@ -1017,11 +1118,11 @@ msgstr "ãƒã‚±ãƒƒãƒˆã¨ãã®ID%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" msgid "Could not find group %1." msgstr "グループ %1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’作æˆã¾ãŸã¯è¦‹ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "ãã®è²¬ä»»è€…を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" @@ -1029,35 +1130,51 @@ msgstr "ãã®è²¬ä»»è€…を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" msgid "Could not find user %1." msgstr "ユーザー%1を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "グループをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "ã“ã®ã‚ューã§ãã®è²¬ä»»è€…ã‚’%1ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã§ãã®è²¬ä»»è€…ã‚’%1ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "ã“ã®ã‚ューã§ãã®è²¬ä»»è€…ã‚’%1ã¨ã—ã¦å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆã§ãã®è²¬ä»»è€…ã‚’%1ã¨ã—ã¦å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "グループã«ãƒ¡ãƒ³ãƒãƒ¼ã®è¿½åŠ ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "トランザクション: %1ã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" @@ -1070,33 +1187,35 @@ msgstr "GPGã®è¿”事\\nã‹ã‚‰ä½•を行ã£ãŸã‚‰ã‚ˆã„ã®ã‹ã‚ã‹ã‚Šã¾ã›ã‚“ã§ msgid "Couldn't find group\\n" msgstr "グループ\\nãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "責任者ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "ãã®ãƒãƒªãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" #: NOT FOUND IN SOURCE -msgid "Couldn't find that watcher" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Couldn't find user\\n" msgstr "ユーザー\\nãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "ユーザーデータベース\\nã‹ã‚‰%1ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: NOT FOUND IN SOURCE -msgid "Couldn't load KeywordSelects." +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" msgstr "" #: NOT FOUND IN SOURCE @@ -1107,21 +1226,26 @@ msgstr "RTè¨å®šãƒ•ァイル'%1' %2ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" msgid "Couldn't load Scrips." msgstr "スクリプトをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "グループ%1ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "リンクをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "ã‚ューをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "ã‚ュー%1ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" @@ -1134,58 +1258,59 @@ msgstr "スクリプトをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" msgid "Couldn't load template" msgstr "テンプレートをãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ï¼ˆ%1)をãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/SelfService/Display.html:166 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "ãƒã‚±ãƒƒãƒˆ'%1'ã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "国" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "作æˆ" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "カスタムフィールドã®ä½œæˆ" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "" -#: html/Admin/Global/CustomField.html:48 -msgid "Create a CustomField which applies to all queues" -msgstr "" - #: NOT FOUND IN SOURCE msgid "Create a new Custom Field" msgstr "æ–°ã—ã„カスタムフィールドã®ä½œæˆ" #: NOT FOUND IN SOURCE -msgid "Create a new global Scrip" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Create a new global scrip" msgstr "æ–°ã—ã„ã‚°ãƒãƒ¼ãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—トã®ä½œæˆ" -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "æ–°ã—ã„グループã®ä½œæˆ" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "æ–°ã—ã„個人グループã®ä½œæˆ" @@ -1194,22 +1319,18 @@ msgid "Create a new queue" msgstr "æ–°ã—ã„ã‚ューã®ä½œæˆ" #: NOT FOUND IN SOURCE -msgid "Create a new scrip" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Create a new template" msgstr "æ–°ã—ã„テンプレートã®ä½œæˆ" -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "æ–°ã—ã„ãƒã‚±ãƒƒãƒˆã®ä½œæˆ" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "æ–°ã—ã„ユーザーã®ä½œæˆ" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "ã‚ューã®ä½œæˆ" @@ -1217,68 +1338,64 @@ msgstr "ã‚ューã®ä½œæˆ" msgid "Create a queue called" msgstr "呼ã³å‡ºã•れãŸã‚ューã®ä½œæˆ" -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 +#: NOT FOUND IN SOURCE msgid "Create a request" msgstr "リクエストã®ä½œæˆ" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "テンプレートã®ä½œæˆ" -#: NOT FOUND IN SOURCE -msgid "Create failed: %1 / %2 / %3 " +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "" - -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "ãƒã‚±ãƒƒãƒˆã®ä½œæˆ" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "" - -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "作æˆã—ã¾ã—ãŸ" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "カスタムフィールド%1を作æˆã—ã¾ã—ãŸ" @@ -1287,80 +1404,75 @@ msgstr "カスタムフィールド%1を作æˆã—ã¾ã—ãŸ" msgid "Created template %1" msgstr "テンプレート%1を作æˆã—ã¾ã—ãŸ" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "ç¾åœ¨ã®é–¢ä¿‚" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "ç¾åœ¨ã®ãƒ¡ãƒ³ãƒãƒ¼" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "ç¾åœ¨ã®æ¨©åˆ©" -#: html/Search/Listing.html:71 -msgid "Current search criteria" -msgstr "" - -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "ç¾åœ¨ã®ã‚¦ã‚©ãƒƒãƒãƒ£ãƒ¼" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) -msgid "Custom Field #%1" -msgstr "" - -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "カスタムフィールド" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "カスタムフィールド%1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "カスタムフィールド%1ã¯ãƒãƒªãƒ¥ãƒ¼ãŒã‚りã¾ã™" -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "カスタムフィールド%1ã¯ãƒãƒªãƒ¥ãƒ¼ãŒã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "カスタムフィールド%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: html/Admin/Elements/EditCustomFields:197 -msgid "Custom field deleted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "カスタムフィールドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "カスタムフィールド%2ã®ãŸã‚ã®ã‚«ã‚¹ã‚¿ãƒ フィールドãƒãƒªãƒ¥ãƒ¼%1ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" @@ -1369,120 +1481,120 @@ msgstr "カスタムフィールド%2ã®ãŸã‚ã®ã‚«ã‚¹ã‚¿ãƒ フィールドãƒã msgid "Custom field value changed from %1 to %2" msgstr "カスタムフィールドãŒ%1ã‹ã‚‰%2ã«å¤‰æ›´ã•れã¾ã—ãŸ" -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "カスタムフィールドãƒãƒªãƒ¥ãƒ¼ã¯å‰Šé™¤ã•れã¾ã›ã‚“" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "カスタムフィールドãƒãƒªãƒ¥ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "カスタムフィールドãƒãƒªãƒ¥ãƒ¼ãŒå‰Šé™¤ã•れã¾ã—ãŸ" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Data error" -msgstr "" - -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "日付" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "å二月" -#: NOT FOUND IN SOURCE -msgid "December" +#: etc/initialdata:222 +msgid "Default Autoresponse template" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Default Autoresponse Template" +#: html/Tools/Offline.html:61 +msgid "Default Queue" msgstr "" -#: etc/initialdata:207 -msgid "Default Autoresponse template" +#: html/Tools/Offline.html:70 +msgid "Default Requestor" msgstr "" -#: etc/initialdata:275 +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) -msgid "Default: %1/%2 changed from %3 to %4" -msgstr "" - -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "ä»£è¡¨è€…ã®æ¨©åˆ©" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "削除" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒããšã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒããšã•れã¾ã™" -#: lib/RT/User_Overlay.pm:430 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "ã“ã®ã‚ªãƒ–ジェクトを削除ã™ã‚‹ã¨æŒ‡ç¤ºã®å®Œå…¨æ€§ãŒå¦¨å®³ã•れã¾ã™" -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity. That's bad." -msgstr "" - -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" msgstr "次ã®ã‚‚ã®æ¬¡ç¬¬ã§ã‚ã‚‹" @@ -1490,72 +1602,103 @@ msgstr "次ã®ã‚‚ã®æ¬¡ç¬¬ã§ã‚ã‚‹" msgid "Dependencies: \\n" msgstr "従属ãƒã‚±ãƒƒãƒˆ: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 -msgid "Depends on" -msgstr "ã«ã‚ˆã‚‹" +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "DependsOn" +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" msgstr "" -#: html/Elements/SelectSortOrder:35 +#: 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 +msgid "Depends on" +msgstr "ã«ã‚ˆã‚‹" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "é™é †ã™ã‚‹" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "下ã®å•題点を表ã™" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "記述" -#: html/SelfService/Elements/MyRequests:44 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "詳細" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "表ã™" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "" -#: lib/RT/Queue_Overlay.pm:75 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "モードを表ã™" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "ãƒã‚±ãƒƒãƒˆ#%1を表ã™" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "" -#: html/Elements/Refresh:30 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã‚’æ›´æ–°ã—ãªã„ã§ãã ã•ã„" -#: html/Search/Elements/PickRestriction:114 -msgid "Don't show search results" -msgstr "" - -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "ダウンãƒãƒ¼ãƒ‰" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 msgid "Due" msgstr "期é™åˆ‡ã‚Œ" @@ -1563,8 +1706,7 @@ msgstr "期é™åˆ‡ã‚Œ" msgid "Due date '%1' could not be parsed" msgstr "期é™ãŒåˆ‡ã‚Œã‚‹æ—¥'%1'ã¯è§£æžã•れã¾ã›ã‚“" -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "ERROR: ã¯ãƒã‚±ãƒƒãƒˆ '%1': %2.\\nã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" @@ -1572,33 +1714,45 @@ msgstr "ERROR: ã¯ãƒã‚±ãƒƒãƒˆ '%1': %2.\\nã‚’ãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" msgid "Edit" msgstr "編集" -#: NOT FOUND IN SOURCE -msgid "Edit Conditions" -msgstr "" - -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "%1ã®ã‚«ã‚¹ã‚¿ãƒ フィールドを編集ã™ã‚‹" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "関係を編集ã™ã‚‹" -#: html/Admin/Queues/Templates.html:41 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Edit keywords" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" msgstr "" #: NOT FOUND IN SOURCE msgid "Edit scrips" msgstr "スクリプトを編集ã™ã‚‹" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "システムテンプレートを編集ã™ã‚‹" @@ -1606,28 +1760,30 @@ msgstr "システムテンプレートを編集ã™ã‚‹" msgid "Edit templates for %1" msgstr "%1ã®ãƒ†ãƒ³ãƒ—レートを編集ã™ã‚‹" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "ã‚ュー%1ã®è¨å®šã‚’編集ã™ã‚‹" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "ユーザー%1ã®è¨å®šã‚’編集ã™ã‚‹" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "カスタムフィールド%1を編集ã™ã‚‹" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "グループ%1ã®ä¼šå“¡ã‚’編集ã™ã‚‹" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "個人グループ%1ã®ä¼šå“¡ã‚’編集ã™ã‚‹" @@ -1636,236 +1792,298 @@ msgstr "個人グループ%1ã®ä¼šå“¡ã‚’編集ã™ã‚‹" msgid "Editing template %1" msgstr "テンプレート%1を編集ã™ã‚‹" -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "ベースもã—ãã¯ã‚¿ãƒ¼ã‚²ãƒƒãƒˆã‚’特定ã—ãªã‘れã°ãªã‚Šã¾ã›ã‚“" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Eメール" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "ãŠä½¿ã„ã®Eメールアドレス" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "Eメールアドレス" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "Eメールエンコーディング" -#: html/Admin/Elements/EditCustomField:36 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "有効ã«ãªã‚Šã¾ã—ãŸï¼ˆã‚‚ã†ä¸€åº¦ã“ã®ãƒœãƒƒã‚¯ã‚¹ã‚’ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã“ã®ã‚ãƒ¥ãƒ¼ã¯æœ‰åйã§ãªããªã‚Šã¾ã™ï¼‰" -#: html/Admin/Elements/EditCustomFields:99 -msgid "Enabled Custom Fields" -msgstr "" - -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "有効ãªã‚ュー" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "有効ãªã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹%1" -#: lib/RT/CustomField_Overlay.pm:361 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "" -#: lib/RT/CustomField_Overlay.pm:358 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." msgstr "ãƒã‚±ãƒƒãƒˆã‚’リンクã™ã‚‹ãƒã‚±ãƒƒãƒˆã¾ãŸã¯URLsを入力ã—ã¦ãã ã•ã„。入力ã™ã‚‹é …ç›®ãŒã„ãã¤ã‹ã‚ã‚‹å ´åˆã«ã¯ã‚¹ãƒšãƒ¼ã‚¹ã§åŒºåˆ‡ã£ã¦ãã ã•ã„。" -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "エラー" -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Queue->DelWatcher" msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Queue->DelWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Ticket->DelWatcher" msgstr "パラメーターã®ã‚¨ãƒ©ãƒ¼Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "" + #: etc/initialdata:20 msgid "Everyone" msgstr "" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "外部ã®èªè¨¼ID" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "外部ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆæƒ…å ±ID" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "ãã®ä»–ã®æƒ…å ±" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "'特権ã®ã‚ã‚‹'ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ“¬ä¼¼ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¤œç´¢ãŒå¤±æ•—ã—ã¾ã—ãŸ" -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "'特権ã®ãªã„'ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ“¬ä¼¼ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¤œç´¢ãŒå¤±æ•—ã—ã¾ã—ãŸ" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "二月" -#: NOT FOUND IN SOURCE -msgid "February" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" msgstr "" #: NOT FOUND IN SOURCE msgid "Fin" msgstr "終了" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "æœ€çµ‚å„ªå…ˆé †ä½" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 -msgid "Find group whose" +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" msgstr "" -#: html/Elements/Quicksearch:25 +#: NOT FOUND IN SOURCE msgid "Find new/open tickets" msgstr "æ–°ã—ã„/é–‹ããƒã‚±ãƒƒãƒˆã‚’見ã¤ã‘ã‚‹" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "人々を見ã¤ã‘ã‚‹" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Finish Approval" -msgstr "" - -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "最åˆã®" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "最åˆã®ãƒšãƒ¼ã‚¸" -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "ã°ã‹ï¼" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "変更を強制ã—ã¾ã™" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "ãƒ•ãƒªãƒ¼ãƒ•ã‚©ãƒ¼ãƒ ã‚³ãƒ³ã‚¿ã‚¯ãƒˆæƒ…å ±" -#: lib/RT/CustomField_Overlay.pm:38 -msgid "FreeformMultiple" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:37 -msgid "FreeformSingle" -msgstr "" - -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "金曜日" -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "フルヘッダー" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "pgp sig\\nã‹ã‚‰ç¾åœ¨ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å¾—ã‚‹" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "ã‚°ãƒãƒ¼ãƒãƒ«" -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" msgstr "" #: NOT FOUND IN SOURCE msgid "Global Scrips" msgstr "ã‚°ãƒãƒ¼ãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—ト" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" + +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "" + +#: 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 msgid "Go!" msgstr "行ãï¼" @@ -1873,19 +2091,15 @@ msgstr "行ãï¼" msgid "Good pgp sig from %1\\n" msgstr "%1\\nã‹ã‚‰ã®è‰¯ã„pgp sig" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "ページã¸è¡Œã" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "ãƒã‚±ãƒƒãƒˆã«è¡Œã" -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "" - -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "" @@ -1893,32 +2107,28 @@ msgstr "" msgid "Group %1 %2: %3" msgstr "グループ%1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "グループ権利" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "グループã«ã¯ã™ã§ã«ãƒ¡ãƒ³ãƒãƒ¼ãŒã„ã¾ã™" -#: NOT FOUND IN SOURCE -msgid "Group could not be created." -msgstr "" - -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "グループãŒä½œæˆã•れã¾ã—ãŸ" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" @@ -1930,36 +2140,54 @@ msgstr "グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。\\n" msgid "Group not specified.\\n" msgstr "グループãŒç‰¹å®šã§ãã¾ã›ã‚“。\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "グループ" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "グループã¯å½¼ã‚‰ã®ãƒ¡ãƒ³ãƒãƒ¼ã«ã¯ãªã‚Œã¾ã›ã‚“" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "ã“ã‚“ã«ã¡ã¯ï¼" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "ã“ã‚“ã«ã¡ã¯ã€%1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "ヒストリー" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "自宅ã®é›»è©±" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "ホームページ" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "" @@ -1968,201 +2196,205 @@ msgstr "" msgid "I have [quant,_1,concrete mixer]." msgstr "ç§ã¯[quant,_1,concrete mixer]ãŒã‚りã¾ã™ã€‚" -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "ID" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "身分証明書" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "" -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "" + +#: 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 "" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "上ã®ä½•ã‹ã‚’アップデートã—ãŸãªã‚‰ã€æ¬¡ã®ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "" -#: lib/RT/Interface/Web.pm:863 +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "" -#: html/Admin/Elements/EditCustomFields:74 -msgid "Include disabled custom fields in listing." +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." msgstr "" -#: html/Admin/Queues/index.html:43 +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "リストã®ç„¡åйãªã‚ューをå«ã‚€" -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "検索ã®ç„¡åйãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å«ã‚€" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "最åˆã®å„ªå…ˆæ¨©" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "入力エラー" -#: NOT FOUND IN SOURCE -msgid "Interest noted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "無効ãªã‚°ãƒ«ãƒ¼ãƒ—タイプã§ã™" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Invalid Type" -msgstr "" - -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "" -#: lib/RT/Ticket_Overlay.pm:438 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." msgstr "無効ãªã‚ªãƒ¼ãƒŠãƒ¼ã§ã™ã€‚ '誰ã§ã‚‚ãªã„'ã«åˆæœŸè¨å®šã—ã¾ã™." -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "無効ãªã‚ューã§ã™" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "ç„¡åŠ¹ãªæ¨©åˆ©ã§ã™" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "%1ã«ã¯ç„¡åйãªãƒãƒªãƒ¥ãƒ¼ã§ã™" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "カスタムフィールドã«ã¯ç„¡åйãªãƒãƒªãƒ¥ãƒ¼ã§ã™" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "ステータスã«ã¯ç„¡åйãªãƒãƒªãƒ¥ãƒ¼ã§ã™" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "" -#: bin/rt-crontool:192 +#: 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 "" -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Items pending my approval" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" msgstr "" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "一月" -#: NOT FOUND IN SOURCE -msgid "January" -msgstr "" - -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "七月" -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "" - -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "大ãã„" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "å…æœˆ" #: NOT FOUND IN SOURCE -msgid "June" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Keyword" msgstr "ã‚ーワード" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "é•·ã„" -#: html/Ticket/Elements/Tabs:73 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "最後ã®" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "最後ã®ã‚³ãƒ³ã‚¿ã‚¯ãƒˆ" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "最後ã«ã‚³ãƒ³ã‚¿ã‚¯ãƒˆã—ãŸ" -#: html/Search/Elements/TicketHeader:41 -msgid "Last Notified" -msgstr "" - -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "最後ã«ã‚¢ãƒƒãƒ—デートã—ãŸ" -#: NOT FOUND IN SOURCE -msgid "LastUpdated" +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "残ã£ãŸ" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’RTã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©åˆ©ã‚’èªã‚ã¾ã™" @@ -2174,188 +2406,263 @@ msgstr "オーナーを%1 %2ã«åˆ¶é™ã—ã¾ã™" msgid "Limiting queue to %1 %2" msgstr "ã‚ューを%1 %2ã«åˆ¶é™ã—ã¾ã™" -#: lib/RT/Ticket_Overlay.pm:2697 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "リンクã¯ã™ã§ã«å˜åœ¨ã—ã¦ã„ã¾ã™" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "リンクãŒä½œæˆã•れã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "リンクãŒä½œæˆã•れã¾ã—ãŸï¼ˆ%1)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "リンクãŒå‰Šé™¤ã•れã¾ã—ãŸï¼ˆ%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "リンクãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "リンクãƒã‚±ãƒƒãƒˆ#%1" -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "" - -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "リンク" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "å ´æ‰€" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "ãƒã‚°ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼%1ãŒè¦‹ã¤ã‹ã‚‰ãªã„ã€ã¾ãŸã¯æ›¸ã出ã›ã¾ã›ã‚“。\\n RTãŒå‹•ãã¾ã›ã‚“" -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "%1ã¨ã—ã¦ã‚µã‚¤ãƒ³ã™ã‚‹" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" msgstr "ãƒã‚°ã‚¤ãƒ³" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "ãƒã‚°ã‚¢ã‚¦ãƒˆ" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "オーナーを決ã‚ã‚‹" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "ステータスを決ã‚ã‚‹" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "æœŸé™æœŸæ—¥ã‚’決ã‚ã‚‹" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "è§£æžæœŸæ—¥ã‚’決ã‚ã‚‹" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "é–‹å§‹ã—ãŸæ—¥ã‚’決ã‚ã‚‹" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "開始日を決ã‚ã‚‹" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "ã„ã‚ã‚ŒãŸæ—¥ã‚’決ã‚ã‚‹" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "å„ªå…ˆé †ä½ã‚’決ã‚ã‚‹" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "ã‚ューを決ã‚ã‚‹" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "サブジェクトを決ã‚ã‚‹" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "三月" -#: NOT FOUND IN SOURCE -msgid "March" -msgstr "" +#: lib/RT/Date.pm:441 +msgid "May." +msgstr "五月" -#: NOT FOUND IN SOURCE -msgid "May" +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" msgstr "" -#: lib/RT/Date.pm:415 -msgid "May." -msgstr "五月" +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "" -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "メンãƒãƒ¼ãŒè¿½åŠ ã•れã¾ã—ãŸ" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "メンãƒãƒ¼ãŒå‰Šé™¤ã•れã¾ã—ãŸ" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "メンãƒãƒ¼ãŒå‰Šé™¤ã•れã¦ã„ã¾ã›ã‚“" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "ã®ãƒ¡ãƒ³ãƒãƒ¼" -#: NOT FOUND IN SOURCE -msgid "MemberOf" -msgstr "" - -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "メンãƒãƒ¼" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "çµåˆãŒæˆåŠŸã—ã¾ã—ãŸ" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "çµåˆãŒå¤±æ•—ã—ã¾ã—ãŸã€‚有効ãªIDãŒè¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "ã«çµåˆ" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "" -#: lib/RT/Interface/Web.pm:867 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "æºå¸¯" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "æºå¸¯é›»è©±" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "" @@ -2363,172 +2670,189 @@ msgstr "" msgid "Modify Custom Field %1" msgstr "カスタムフィールド%1ã‚’ä¿®æ£ã™ã‚‹" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 -msgid "Modify Custom Fields which apply to all queues" +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 -msgid "Modify Scrip templates for this queue" +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" msgstr "" -#: lib/RT/Queue_Overlay.pm:76 -msgid "Modify Scrips for this queue" +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify System ACLS" +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify Template %1" +#: html/User/Delegation.html:58 +msgid "Modify Rights" msgstr "" -#: html/Admin/Queues/CustomField.html:45 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" msgstr "" -#: html/Admin/Global/CustomField.html:53 -msgid "Modify a CustomField which applies to all queues" +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "" + +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" msgstr "" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Modify dates for # %1" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" msgstr "" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "#%1ã®æœŸæ—¥ã‚’ä¿®æ£ã™ã‚‹" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "ãƒã‚±ãƒƒãƒˆ#%1ã®æœŸæ—¥ã‚’ä¿®æ£ã™ã‚‹" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "ã‚°ãƒãƒ¼ãƒãƒ«ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©åˆ©ã‚’ä¿®æ£ã™ã‚‹" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "ã‚°ãƒãƒ¼ãƒãƒ«ã‚°ãƒ«ãƒ¼ãƒ—ã®æ¨©åˆ©ã‚’ä¿®æ£ã™ã‚‹" #: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Modify global scrips" msgstr "ã‚°ãƒãƒ¼ãƒãƒ«ã‚¹ã‚¯ãƒªãƒ—トを修æ£ã™ã‚‹" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "ã‚°ãƒãƒ¼ãƒãƒ«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®æ¨©åˆ©ã‚’ä¿®æ£ã™ã‚‹" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "%1ã®ã‚°ãƒ«ãƒ¼ãƒ—権利を修æ£ã™ã‚‹" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "ã‚ュー%1ã®ã‚°ãƒ«ãƒ¼ãƒ—権利を修æ£ã™ã‚‹" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "ã‚ュー%1ã«é–¢ä¿‚ã®ã‚る人々を修æ£ã™ã‚‹" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "ãƒã‚±ãƒƒãƒˆ#%1ã«é–¢ä¿‚ã®ã‚る人々を修æ£ã™ã‚‹" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "ã‚ュー%1ã®ã‚¹ã‚¯ãƒªãƒ—トを修æ£ã™ã‚‹" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "テンプレート%1ã‚’ä¿®æ£ã™ã‚‹" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "グループ%1ã‚’ä¿®æ£ã™ã‚‹" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "ユーザー%1ã‚’ä¿®æ£ã™ã‚‹" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "ãƒã‚±ãƒƒãƒˆ# %1ã‚’ä¿®æ£ã™ã‚‹" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "ãƒã‚±ãƒƒãƒˆ#%1ã‚’ä¿®æ£ã™ã‚‹" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "グループ%1ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©åˆ©ã‚’ä¿®æ£ã™ã‚‹" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "ã‚ュー%1ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©åˆ©ã‚’ä¿®æ£ã™ã‚‹" @@ -2537,132 +2861,137 @@ msgstr "ã‚ュー%1ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æ¨©åˆ©ã‚’ä¿®æ£ã™ã‚‹" msgid "Modify watchers for queue '%1'" msgstr "ã‚ュー'%1'ã®ã‚¦ã‚©ãƒƒãƒãƒ£ãƒ¼ã‚’ä¿®æ£ã™ã‚‹" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "月曜日" -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "ã•らã«%1ã«ã¤ã„ã¦" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "多ãã®" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "'åå‰'ã®å±žæ€§ã‚’特定ã—ã¦ãã ã•ã„" -#: NOT FOUND IN SOURCE -msgid "My Approvals" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" msgstr "" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "" + +#: 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 msgid "Name" msgstr "åå‰" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "ç¾åœ¨ãŠä½¿ã„ã®åå‰" -#: NOT FOUND IN SOURCE -msgid "Need approval from system administrator" -msgstr "" - -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "æ–°ã—ã„" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "æ–°ã—ã„関係" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "æ–°ã—ã„パスワード" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "æ–°ã—ã„関係" - -#: html/Ticket/Elements/Tabs:36 -msgid "New Search" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" msgstr "" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "æ–°ã—ã„パスワード" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "æ–°ã—ã„ãƒ‘ã‚¹ãƒ¯ãƒ¼ãƒ‰æƒ…å ±ãŒé€ã‚‰ã‚Œã¾ã—ãŸ" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "" -#: html/SelfService/Elements/Tabs:63 +#: NOT FOUND IN SOURCE msgid "New request" msgstr "æ–°ã—ã„リクエスト" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "æ–°ã—ã„æ¨©åˆ©" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "" @@ -2670,67 +2999,83 @@ msgstr "" msgid "New search" msgstr "æ–°ã—ã„æ¤œç´¢" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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 "" -#: lib/RT/Ticket_Overlay.pm:2771 +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "æ–°ã—ã„ãƒã‚±ãƒƒãƒˆã¯ã‚りã¾ã›ã‚“" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "æ–°ã—ã„ユーザーãŒå‘¼ã°ã‚Œã¾ã—ãŸ" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "æ–°ã—ã„ウォッãƒãƒ£ãƒ¼" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "æ–°ã—ã„ウインドウè¨å®š" -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "次ã¸" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "次ã®ãƒšãƒ¼ã‚¸" -#: html/Admin/Elements/ModifyUser:50 -msgid "NickName" -msgstr "" - -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "ニックãƒãƒ¼ãƒ " -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "カスタムフィールドãŒã‚りã¾ã›ã‚“" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "グループãŒå®šç¾©ã•れã¾ã›ã‚“" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" msgstr "ã‚ューãŒå®šç¾©ã•れã¾ã›ã‚“" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "RTユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。RT管ç†è€…ã«ç›¸è«‡ã—ã¦ãã ã•ã„。\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "テンプレートãŒã‚りã¾ã›ã‚“" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "ãƒã‚±ãƒƒãƒˆãŒç‰¹å®šã§ãã¾ã›ã‚“。ãƒã‚±ãƒƒãƒˆã‚’終了ã—ã¾ã™" @@ -2738,11 +3083,11 @@ msgstr "ãƒã‚±ãƒƒãƒˆãŒç‰¹å®šã§ãã¾ã›ã‚“。ãƒã‚±ãƒƒãƒˆã‚’終了ã—ã¾ã™" msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "ãƒã‚±ãƒƒãƒˆãŒç‰¹å®šã§ãã¾ã›ã‚“。ãƒã‚±ãƒƒãƒˆã®ä¿®æ£ã‚’終了ã—ã¾ã™\\n\\n" -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "" @@ -2750,379 +3095,482 @@ msgstr "" msgid "No command found\\n" msgstr "コマンドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢ã—ã¦ã®ã‚³ãƒ¡ãƒ³ãƒˆã¯å…¥åŠ›ã•れã¦ã„ã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "é€šä¿¡æ–‡æ›¸ã®æ·»ä»˜ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "%1記述ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "グループãŒç‰¹å®šã§ãã¾ã›ã‚“" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "パスワードãŒè¨å®šã•れã¾ã›ã‚“" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "ã‚ューを作æˆã™ã‚‹è¨±å¯ãŒã•れã¦ã„ã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "ユーザーを作æˆã™ã‚‹è¨±å¯ãŒã•れã¦ã„ã¾ã›ã‚“" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "ãã®ãƒã‚±ãƒƒãƒˆã‚’表示ã™ã‚‹è¨±å¯ãŒã‚りã¾ã›ã‚“" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "アップデートãƒã‚±ãƒƒãƒˆã‚’見る許å¯ãŒã•ã‚りã¾ã›ã‚“" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "責任者ãŒç‰¹å®šã§ãã¾ã›ã‚“" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "責任者ãŒé¸æŠžã•れã¦ã„ã¾ã›ã‚“" -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "検索基準ã«ã‚ã£ãŸã‚ューãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "権利ãŒè¨±å¯ã•れã¦ã„ã¾ã›ã‚“" -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "æ“作ã®ãŸã‚ã®æ¤œç´¢ãŒã§ãã¾ã›ã‚“" +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "" + #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "ãƒã‚±ãƒƒãƒˆIDãŒç‰¹å®šã§ãã¾ã›ã‚“" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "トランザクションタイプãŒç‰¹å®šã§ãã¾ã›ã‚“" -#: NOT FOUND IN SOURCE -msgid "No user or email address specified" -msgstr "" - -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "検索基準ã«ã‚ã£ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "有効ãªRTユーザーãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。RT cvcãƒãƒ³ãƒ‰ãƒ©ãŒåˆ†é›¢ã—ã¦ã„ã¾ã™ã€‚RT管ç†è€…ã«ç›¸è«‡ã—ã¦ãã ã•ã„。\\n" -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "" -#: html/Elements/Login:99 -msgid "Not logged in" -msgstr "" - -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "ãƒã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“" -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "セットã§ãã¾ã›ã‚“" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "ã¾ã 実行ã§ãã¾ã›ã‚“" -#: html/Admin/Groups/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Not yet implemented...." msgstr "ã¾ã 実行ã§ãã¾ã›ã‚“。。。" -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "ãŠçŸ¥ã‚‰ã›ã‚’é€ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "å一月" -#: NOT FOUND IN SOURCE -msgid "November" +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" msgstr "" -#: lib/RT/Record.pm:157 +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "åæœˆ" -#: NOT FOUND IN SOURCE -msgid "October" +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" msgstr "" -#: html/Elements/SelectDateRelation:35 +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "ã«" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "é–‹ã" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "ãれを開ã" -#: html/SelfService/Elements/Tabs:57 +#: NOT FOUND IN SOURCE msgid "Open requests" msgstr "リクエストを開ã" -#: html/Admin/Users/Prefs.html:41 +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "ãƒã‚±ãƒƒãƒˆã‚’(リストã‹ã‚‰ï¼‰æ–°ã—ã„ウインドウã‹ã‚‰é–‹ã" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "ãƒã‚±ãƒƒãƒˆã‚’(リストã‹ã‚‰ï¼‰ã»ã‹ã®ã‚¦ã‚¤ãƒ³ãƒ‰ã‚¦ã‹ã‚‰é–‹ã" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "" -#: html/Search/Elements/PickRestriction:101 +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "整列ã¨ä¸¦ã³æ›¿ãˆ" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "組織" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "時間切れã§ã™ã€å„ªå…ˆé †ä½ãŒã†ã¤ã‚Šã¾ã—ãŸ" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "オーナー" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) -msgid "Owner changed from %1 to %2" +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." msgstr "" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "オーナーã¯å¼·åˆ¶çš„ã«%1ã‹ã‚‰%2を変更ã—ã¾ã—ãŸ" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "オーナーã¯" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "ãƒã‚±ãƒƒãƒˆãƒ™ãƒ«" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "ãƒã‚±ãƒƒãƒˆãƒ™ãƒ«é›»è©±" -#: NOT FOUND IN SOURCE -msgid "Parent" -msgstr "" - -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "両親" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "パスワード" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "パスワードã®ãŠçŸ¥ã‚‰ã›" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "パスワードãŒçŸã™ãŽã¾ã™" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "パスワード: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "" + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "人々" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "" + +#: 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 msgid "Permission Denied" msgstr "許å¯ãŒä¸‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "個人グループ" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "個人グループ:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "電話番å·" -#: html/Admin/Users/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Placeholder" msgstr "代替物" @@ -3130,23 +3578,23 @@ msgstr "代替物" msgid "Pref" msgstr "ãŠæ°—ã«å…¥ã‚Š" -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "ãŠæ°—ã«å…¥ã‚Š" -#: NOT FOUND IN SOURCE -msgid "Prefs" -msgstr "" - -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Prepare Stubbed" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "å‰ã®" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "å‰ã®ãƒšãƒ¼ã‚¸" @@ -3154,29 +3602,33 @@ msgstr "å‰ã®ãƒšãƒ¼ã‚¸" msgid "Pri" msgstr "優先権" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "" -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "優先権" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "å„ªå…ˆé †ä½ã¯æ¬¡ã®ã‚ˆã†ã«å§‹ã¾ã‚Šã¾ã™" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "" + #: etc/initialdata:25 msgid "Privileged" msgstr "" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "特権ステータス: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "特権ã®ã‚るユーザー" @@ -3184,11 +3636,19 @@ msgstr "特権ã®ã‚るユーザー" msgid "Pseudogroup for internal use" msgstr "" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "" + +#: 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 msgid "Queue" msgstr "ã‚ュー" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" @@ -3198,11 +3658,7 @@ msgstr "" msgid "Queue '%1' not found\\n" msgstr "ã‚ュー'%1'ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ\\n" -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "" - -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "ã‚ューã®åå‰" @@ -3210,46 +3666,53 @@ msgstr "ã‚ューã®åå‰" msgid "Queue Scrips" msgstr "ã‚ュースクリプト" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "ã‚ューã¯ã™ã§ã«å˜åœ¨ã—ã¦ã„ã¾ã™" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "ã‚ューã®ä½œæˆãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "ã‚ューã®ãƒãƒ¼ãƒ‰ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "ã‚ューãŒä½œæˆã•れã¾ã—ãŸ" -#: NOT FOUND IN SOURCE -msgid "Queue is not specified." -msgstr "" - -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "ã‚ューãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "ã‚ュー" -#: html/Elements/Login:34 +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "%2ã®RT %1" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "<a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>ã‹ã‚‰ã®RT%1。" @@ -3257,11 +3720,7 @@ msgstr "<a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>ã msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" -msgstr "" - -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "RT管ç†" @@ -3281,7 +3740,7 @@ msgstr "RTè¨å®šã‚¨ãƒ©ãƒ¼" msgid "RT Critical error. Message not recorded!" msgstr "RTé‡å¤§ãªã‚¨ãƒ©ãƒ¼ã€‚メッセージãŒè¨˜éŒ²ã•れã¾ã›ã‚“" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "RTエラー" @@ -3290,14 +3749,14 @@ msgid "RT Received mail (%1) from itself." msgstr "RTå—信メール(%1)自身ã‹ã‚‰ã®ãƒ¡ãƒ¼ãƒ« " #: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "" - -#: html/SelfService/Closed.html:25 msgid "RT Self Service / Closed Tickets" msgstr "RTセルフサービス/クãƒãƒ¼ã‚ºã•れãŸãƒã‚±ãƒƒãƒˆ" -#: html/index.html:25 html/index.html:28 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "" @@ -3313,33 +3772,28 @@ msgstr "RTã¯å¤–部ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ«ãƒƒã‚¯ã‚¢ãƒƒãƒ—を使ã£ã¦ãƒªã‚¯ã‚¨ã msgid "RT couldn't find the queue: %1" msgstr "RTã¯ã‚ュー: %1を見ã¤ã‘ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "RTã¯ã“ã®PGPサインを有効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚\\n" -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "" #: NOT FOUND IN SOURCE -msgid "RT for %1: %2" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "RT has proccessed your commands" msgstr "RTã¯ã‚ãªãŸã®ã®ã‚³ãƒžãƒ³ãƒ‰ã‚’処ç†ã—ã¾ã—ãŸ" -#: html/Elements/Login:83 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RTã¯&コピー; Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>。ã“れã¯<a href=\"http://www.gnu.org/copyleft/gpl.html\">GNUジェãƒãƒ©ãƒ«ãƒ‘ブリックライセンスã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³2ã§é…ä¿¡ã•れã¦ã„ã¾ã™ã€‚</a>" #: NOT FOUND IN SOURCE -msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "RT thinks this message may be a bounce" msgstr "RTã«ã‚ˆã‚‹ã¨ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã¯ãƒã‚¦ãƒ³ã‚¹ã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™" @@ -3351,208 +3805,252 @@ msgstr "RTã¯ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒã¾ã‚‹ã§ã‚µã‚¤ãƒ³ã•れã¦ã„ãªã„よã†ã msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." msgstr "RTã®Eメールコマンドモードã§ã¯PGPèªè¨¼ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚è²´æ–¹ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã‚µã‚¤ãƒ³ã—ãªã‹ã£ãŸã€ã‚‚ã—ãã¯ã¯ã‚µã‚¤ãƒ³ãŒæœ‰åйã§ã‚りã¾ã›ã‚“" -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "本å" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "本å" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "次ã®ã‚‚ã®ã«ã‚ˆã£ã¦å‚ç…§ã—ãŸ" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "å‚ç…§ã™ã‚‹" #: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Refine" msgstr "絞り込む" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "çµžè¾¼ã¿æ¤œç´¢" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã‚’%1分ãŠãã«æ›´æ–°ã—ã¦ãã ã•ã„" -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "関係" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "管ç†Ccを削除ã™ã‚‹" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Ccを削除ã™ã‚‹" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "リクエストã™ã‚‹äººã‚’削除ã™ã‚‹" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "返信" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "リクエストã™ã‚‹äºº" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "リクエストã™ã‚‹äººã®Eメールアドレス" -#: NOT FOUND IN SOURCE -msgid "Requestor(s)" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "RequestorAddresses" -msgstr "" - -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "リクエストã™ã‚‹äºº" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æ¬¡ã®æ—¥ã¾ã§ã«è¡Œã‚れãªã‘れã°ãªã‚Šã¾ã›ã‚“" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "リセット" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "使‰€" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "分解ã™ã‚‹" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "分解ã—ãŸ" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "リクエストã™ã‚‹äººã«è¿”ç”ã™ã‚‹" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "çµæžœ" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "ページã”ã¨ã®çµæžœ" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "パスワードã®å†å…¥åŠ›" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "%2 %3ã®æ¨©åˆ©%1ãŒé ˜åŸŸ%4 %5\\nã§è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "権利ãŒå§”託ã•れã¾ã—ãŸ" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "権利ãŒè¨±å¯ã•れã¾ã—ãŸ" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "権利ãŒãƒãƒ¼ãƒ‰ã•れã¾ã—ãŸ" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "権利を無効ã«ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "権利ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "権利ãŒãƒãƒ¼ãƒ‰ã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "権利ãŒç„¡åйã«ãªã‚Šã¾ã—ãŸ" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "権利" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "役割" -#: NOT FOUND IN SOURCE -msgid "RootApproval" +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" msgstr "" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "土曜日" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "" + +#: 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 msgid "Save Changes" msgstr "変更をä¿å˜ã™ã‚‹" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "変更をä¿å˜ã™ã‚‹" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "スクリプトãŒä½œæˆã•れã¾ã—ãŸ" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "スクリプト" @@ -3560,11 +4058,11 @@ msgstr "スクリプト" msgid "Scrips for %1\\n" msgstr "%1\\nã®ã‚¹ã‚¯ãƒªãƒ—ト" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "検索" @@ -3572,211 +4070,303 @@ msgstr "検索" msgid "Search Criteria" msgstr "検索基準" -#: html/Approvals/Elements/PendingMyApproval:39 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "グループã®é¸æŠž" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "ã‚ューã®é¸æŠž" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "ユーザーã®é¸æŠž" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "" -#: lib/RT/CustomField_Overlay.pm:352 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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 "" -#: html/Admin/Elements/UserTabs:49 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "" -#: lib/RT/CustomField_Overlay.pm:36 -msgid "SelectMultiple" +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" msgstr "" -#: lib/RT/CustomField_Overlay.pm:35 -msgid "SelectSingle" +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" msgstr "" -#: html/SelfService/index.html:25 +#: NOT FOUND IN SOURCE msgid "Self Service" msgstr "セルフサービス" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "乿œˆ" -#: NOT FOUND IN SOURCE -msgid "September" +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "çµæžœã‚’見る" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "基本を見る" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "詳細を見る" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "" -#: lib/RT/Queue_Overlay.pm:81 -msgid "Show ticket private commentary" +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" msgstr "" -#: lib/RT/Queue_Overlay.pm:79 -msgid "Show ticket summaries" +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" msgstr "" -#: lib/RT/Queue_Overlay.pm:69 -msgid "ShowACL" +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" msgstr "" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "サイン" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) -msgid "Signed in as %1" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "ã²ã¨ã¤ã®" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "" -#: html/Admin/Elements/EditCustomFieldValues:31 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Sort key" msgstr "ä¸¦ã¹æ›¿ãˆã®ã‚ー" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "次ã®é …ç›®ã”ã¨ã®ä¸¦ã³æ›¿ãˆ" -#: html/Admin/Elements/AddCustomFieldValue:25 +#: NOT FOUND IN SOURCE msgid "SortOrder" msgstr "並ã³é †" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Stalled" msgstr "åœæ¢ã—ã¦ã„ã¾ã™" @@ -3785,7 +4375,7 @@ msgstr "åœæ¢ã—ã¦ã„ã¾ã™" msgid "Start page" msgstr "開始ページ" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "é–‹å§‹ã—ãŸ" @@ -3793,7 +4383,7 @@ msgstr "é–‹å§‹ã—ãŸ" msgid "Started date '%1' could not be parsed" msgstr "é–‹å§‹æ—¥'%1'ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "é–‹å§‹ã™ã‚‹" @@ -3805,94 +4395,102 @@ msgstr "æ¬¡ã®æ—¥æ™‚ã¾ã§ã«é–‹å§‹ã™ã‚‹" msgid "Starts date '%1' could not be parsed" msgstr "é–‹å§‹æ—¥'%1'ã‚’è§£æžã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "状態" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "ステータス" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" msgstr "" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "ステータスãŒ%1ã‹ã‚‰%2ã«å¤‰æ›´ã•れã¾ã—ãŸ" -#: NOT FOUND IN SOURCE -msgid "StatusChange" -msgstr "" - -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "盗用ã™ã‚‹" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " +msgid "Stolen from %1" msgstr "%1ã‹ã‚‰ç›—用ã—ãŸ" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: NOT FOUND IN SOURCE +msgid "Stolen from %1 " +msgstr "%1ã‹ã‚‰ç›—用ã—㟠" + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "サブジェクト" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "æå‡º" -#: NOT FOUND IN SOURCE -msgid "Submit Workflow" -msgstr "" - -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "日曜日" -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "" + +#: 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 "システムエラー" -#: NOT FOUND IN SOURCE -msgid "System Error. Right not granted." +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "System Error. right not granted" +#: html/Admin/Tools/index.html:47 +msgid "System Tools" msgstr "" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "システムエラー。権利ãŒå§”ä»»ã•れã¦ã„ã¾ã›ã‚“" -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "システムエラー。権利ãŒèªå¯ã•れã¦ã„ã¾ã›ã‚“" -#: NOT FOUND IN SOURCE -msgid "System error. Unable to grant rights." -msgstr "" - -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "システムグループ" @@ -3900,32 +4498,40 @@ msgstr "システムグループ" msgid "SystemRolegroup for internal use" msgstr "" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "テスト_ストリング" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "ã¨ã‚‹" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "ã¨ã‚‰ã‚ŒãŸ" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "テンプレート" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "テンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" @@ -3933,11 +4539,11 @@ msgstr "テンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "Template not found\\n" msgstr "テンプレートãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "テンプレートãŒè§£æžã•れã¾ã—ãŸ" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "テンプレート" @@ -3945,139 +4551,150 @@ msgstr "テンプレート" msgid "Templates for %1\\n" msgstr "%1\\nã®ãƒ†ãƒ³ãƒ—レート" -#: lib/RT/Interface/Web.pm:858 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "ãれã¯ã“ã®ã‚«ã‚¹ã‚¿ãƒ フィールドã®ãƒãƒªãƒ¥ãƒ¼ã§ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "ãれã¯åŒã˜ãƒãƒªãƒ¥ãƒ¼ã§ã™" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "ãã®è²¬ä»»è€…ã¯ã™ã§ã«ã“ã®ã‚ューã®%1ã§ã™" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "ãã®è²¬ä»»è€…ã¯ã™ã§ã«ã“ã®ãƒã‚±ãƒƒãƒˆã®%1ã§ã™" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "ãã®è²¬ä»»è€…ã¯ã“ã®ã‚ューã®%1ã§ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "ãã®è²¬ä»»è€…ã¯ã“ã®ãƒã‚±ãƒƒãƒˆã®%1ã§ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "ãã®ã‚ューã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "ãã®ãƒã‚±ãƒƒãƒˆã¯å¾“属物をã™ã§ã«åˆ†è§£ã—ã¾ã—ãŸ" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: NOT FOUND IN SOURCE msgid "That user already has that right" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã™ã§ã«æ¨©åˆ©ãŒã‚りã¾ã™" -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã™ã§ã«ãƒã‚±ãƒƒãƒˆã‚’所有ã—ã¦ã„ã¾ã™" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯å˜åœ¨ã—ã¾ã›ã‚“" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã™ã§ã«ç‰¹æ¨©ãŒä¸Žãˆã‚‰ã‚Œã¦ã„ã¾ã™" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ã™ã§ã«ç‰¹æ¨©ãŒã‚りã¾ã›ã‚“" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä»Šç‰¹æ¨©ã‚’与ãˆã‚‰ã‚Œã¾ã—ãŸ" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ä»Šç‰¹æ¨©ã‚’失ã„ã¾ã—ãŸ" -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã“ã®ã‚ューã§ã¯ãƒã‚±ãƒƒãƒˆã‚’所有ã—ã¦ã„ãªã„å¯èƒ½æ€§ãŒã‚りã¾ã™" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "ãã‚Œã¯æ•°å—ã®IDã§ã¯ã‚りã¾ã›ã‚“" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "基本" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "コメントã¯è¨˜éŒ²ã•れã¾ã—ãŸ" -#: bin/rt-crontool:198 +#: 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 "" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "次ã®ã‚³ãƒžãƒ³ãƒ‰ã¯å‡¦ç†ã•れã¾ã›ã‚“ã§ã—ãŸ:\\n\\n" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "" -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "ãれらã®ã‚³ãƒ¡ãƒ³ãƒˆã¯å®Ÿéš›ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "" + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "ã“ã®ãƒã‚±ãƒƒãƒˆ%1 %2 (%3)\\n" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "" -#: lib/RT/Transaction_Overlay.pm:253 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "ã“ã®ãƒˆãƒ©ãƒ³ã‚¶ã‚¯ã‚·ãƒ§ãƒ³ã«ã¯ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ãŒã‚りã¾ã›ã‚“" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "" @@ -4086,77 +4703,83 @@ msgstr "" msgid "This user's 25 highest priority tickets" msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®25ã®ã‚‚ã£ã¨ã‚‚高ã„優先ãƒã‚±ãƒƒãƒˆ" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "木曜日" #: NOT FOUND IN SOURCE -msgid "Ticket" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Ticket # %1 %2" msgstr "ãƒã‚±ãƒƒãƒˆ# %1 %2" -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 Jumbo update: %2" -msgstr "" - -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "ãƒã‚±ãƒƒãƒˆã€€#%1 大ãã„アップデート: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "" -#: lib/RT/Ticket_Overlay.pm:608 +#: 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) +msgid "Ticket %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "ãƒã‚±ãƒƒãƒˆ %1ãŒã‚ュー '%2'ã§ä½œæˆã•れã¾ã—ãŸ" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "ãƒã‚±ãƒƒãƒˆ%1ãŒãƒãƒ¼ãƒ‰ã•れã¾ã—ãŸ\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "ãƒã‚±ãƒƒãƒˆã€€%1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "ãƒã‚±ãƒƒãƒˆãƒ’ストリー # %1 %2" -#: html/SelfService/Display.html:34 +#: NOT FOUND IN SOURCE msgid "Ticket Id" msgstr "ãƒã‚±ãƒƒãƒˆID" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "ãƒã‚±ãƒƒãƒˆæ·»ä»˜" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "ãƒã‚±ãƒƒãƒˆã‚³ãƒ³ãƒ†ãƒ³ãƒ„" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "ãƒã‚±ãƒƒãƒˆã‚³ãƒ³ãƒ†ãƒ³ãƒ„タイプ" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "" -#: lib/RT/Transaction_Overlay.pm:522 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "ãƒã‚±ãƒƒãƒˆãŒä½œæˆã•れã¾ã—ãŸ" @@ -4164,111 +4787,114 @@ msgstr "ãƒã‚±ãƒƒãƒˆãŒä½œæˆã•れã¾ã—ãŸ" msgid "Ticket creation failed" msgstr "ãƒã‚±ãƒƒãƒˆã®ä½œæˆãŒå¤±æ•—ã—ã¾ã—ãŸ" -#: lib/RT/Transaction_Overlay.pm:527 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "ãƒã‚±ãƒƒãƒˆãŒå‰Šé™¤ã•れã¾ã—ãŸ" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 -msgid "Ticket id not found" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ticket killed" -msgstr "" - -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 -msgid "Ticket not found" +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" msgstr "" -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "ãƒã‚±ãƒƒãƒˆã‚¦ã‚©ãƒƒãƒãƒ£ãƒ¼" -#: html/Elements/Tabs:49 -msgid "Tickets" -msgstr "" - -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) -msgid "Tickets %1 %2" +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) -msgid "Tickets %1 by %2" +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" msgstr "" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "%1ã‹ã‚‰ã®ãƒã‚±ãƒƒãƒˆ" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "æ™‚é–“ãŒæ®‹ã£ã¦ã„ã¾ã™" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "使ã£ãŸæ™‚é–“" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "残ã£ã¦ã„る時間" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "表示ã™ã‚‹æ™‚é–“" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "使ã£ãŸæ™‚é–“" -#: NOT FOUND IN SOURCE -msgid "TimeLeft" +#: lib/RT/Ticket_Overlay.pm:1143 +msgid "TimeWorked" msgstr "" -#: lib/RT/Ticket_Overlay.pm:1165 -msgid "TimeWorked" +#: html/Search/Elements/EditFormat:74 +msgid "Title" msgstr "" -#: bin/rt-commit-handler:402 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "ã“ã®ã‚³ãƒŸãƒƒãƒˆã®ãƒ‡ã‚£ãƒ•ã‚’ã¤ãã‚‹ãŸã‚ã«:" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "ã“ã®ã‚³ãƒŸãƒƒãƒˆã®ãƒ‡ã‚£ãƒ•ã‚’ã¤ãã‚‹ãŸã‚ã«:\\n" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "言ã£ãŸ" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "" + +#: etc/initialdata:252 msgid "Transaction" msgstr "" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "トランザクション%1ãŒæ¶ˆåŽ»ã•れã¾ã—ãŸ" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "トランザクションãŒä½œæˆã•れã¾ã—ãŸ" -#: lib/RT/Transaction_Overlay.pm:89 -msgid "Transaction->Create couldn't, as you didn't specify a ticket id" +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" msgstr "" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "トランザクションã¯å¤‰æ›´ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“" @@ -4276,106 +4902,170 @@ msgstr "トランザクションã¯å¤‰æ›´ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“" msgid "Trying to delete a right: %1" msgstr "権利: %1を削除ã—ã¦ã„ã¾ã™" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "ç«æ›œæ—¥" -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "タイプ" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "å°Žå…¥ã•れã¦ã„ãªã„" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Unixãƒã‚°ã‚¤ãƒ³" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "Unixユーザーãƒãƒ¼ãƒ " -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "䏿˜Žãªã‚³ãƒ³ãƒ†ãƒ³ãƒ„エンコーディング%1" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "制é™ã•れã¦ã„ãªã„" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "" -#: lib/RT/Transaction_Overlay.pm:571 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "ã¨ã‚‰ã‚Œã¦ã„ãªã„" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "アップデート" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "アップデートID" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "アップデートタイプ" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "ã™ã¹ã¦ã®ãƒã‚±ãƒƒãƒˆã‚’一度ã«ã‚¢ãƒƒãƒ—デートã™ã‚‹" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "アップデートEメール" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "アップデートãƒãƒ¼ãƒ " -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "アップデートã¯è¨˜éŒ²ã•れã¾ã›ã‚“ã§ã—ãŸ" -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "é¸æŠžã•れãŸãƒã‚±ãƒƒãƒˆã‚’アップデートã™ã‚‹" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "サインをアップデートã™ã‚‹" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "ãƒã‚±ãƒƒãƒˆã‚’アップデートã™ã‚‹" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) +#: NOT FOUND IN SOURCE msgid "Update ticket # %1" msgstr "アップデートãƒã‚±ãƒƒãƒˆ # %1" -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "アップデートãƒã‚±ãƒƒãƒˆ #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "" -#: lib/RT/Interface/Web.pm:373 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "アップデートタイプã¯é€šçŸ¥ã§ã‚‚コメントã§ã‚‚ã‚りã¾ã›ã‚“" -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "アップデートã—ã¾ã—ãŸ" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" msgstr "ユーザー%1 %2: %3\\n" @@ -4384,6 +5074,11 @@ msgstr "ユーザー%1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "ユーザー%1パスワード: %2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "ユーザー'%1'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" @@ -4392,156 +5087,181 @@ msgstr "ユーザー'%1'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“" msgid "User '%1' not found\\n" msgstr "ユーザー'%1'ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“\\n" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "ユーザーID" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "ユーザーID" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "ユーザー権利" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "ユーザーを作æˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸ: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "ユーザーãŒä½œæˆã•れã¾ã—ãŸ" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "ユーザーãŒã‚°ãƒ«ãƒ¼ãƒ—を決定ã—ã¾ã—ãŸ" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "ユーザーã«é€šå‘Šã•れã¾ã—ãŸ" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "ユーザービュー" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "ユーザーãƒãƒ¼ãƒ " -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "ユーザー" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ¤œç´¢åŸºæº–ã«ã‚ã£ã¦ã„ã¾ã™" -#: html/Search/Elements/PickRestriction:51 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "ã‚ューã®ãƒãƒªãƒ¥ãƒ¼" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "ãƒãƒªãƒ¥ãƒ¼" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Watcher loaded" -msgstr "" - -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "ウォッãƒãƒ£ãƒ¼" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "ウェブエンコーディング" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "水曜日" -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "仕事" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "仕事先ã®é›»è©±" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Worked" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "ã‚ãªãŸã¯ã™ã§ã«ã“ã®ãƒã‚±ãƒƒãƒˆã‚’所有ã—ã¦ã„ã¾ã™" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "ã‚ãªãŸã¯èªè¨¼ã•れãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã¯ã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:2930 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "ã‚ãªãŸã¯æ‰€æœ‰ã€ã¾ãŸã¯æ‰€æœ‰ã•れã¦ã„ãªã„ãƒã‚±ãƒƒãƒˆã®ã¿ã‚’æ¢ã‚ã‚‹ã“ã¨ãŒã§ãã¾ã™" @@ -4549,29 +5269,28 @@ msgstr "ã‚ãªãŸã¯æ‰€æœ‰ã€ã¾ãŸã¯æ‰€æœ‰ã•れã¦ã„ãªã„ãƒã‚±ãƒƒãƒˆã®ã¿ msgid "You don't have permission to view that ticket.\\n" msgstr "ã‚ãªãŸã¯ãã®ãƒã‚±ãƒƒãƒˆã‚’見る許å¯ãŒã‚りã¾ã›ã‚“。\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "ã‚ãªãŸã¯%2ã§ãƒã‚±ãƒƒãƒˆ%1を見ã¤ã‘ã¾ã—ãŸ" -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "ã‚ãªãŸã¯RTã‹ã‚‰ãƒã‚°ã‚¢ã‚¦ãƒˆã—ãŸã¾ã¾ã§ã™" -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "ã‚ãªãŸã¯ã“ã®ã‚ューã§ãƒã‚±ãƒƒãƒˆä½œæˆã®è¨±å¯ãŒã‚りã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "ã‚ãªãŸã¯ã“ã®ã‚ューã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ä½œæˆãŒã§ãã‚‹ã§ã—ょã†" -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "ãœã²ã¾ãŸãƒã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„" -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) +#: NOT FOUND IN SOURCE msgid "Your %1 requests" msgstr "ã‚ãªãŸã®%1ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" @@ -4579,218 +5298,238 @@ msgstr "ã‚ãªãŸã®%1ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "ã‚ãªãŸã®RT管ç†è€…ã¯RTを呼ã³å‡ºã™ãƒ¡ãƒ¼ãƒ«aliasesã‚’è¨å®šã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "" -#: etc/initialdata:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "" -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "" - -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "" -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "ã‚ãªãŸã®ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒãƒ¼ãƒ ã¨ãƒ‘スワードãŒé–“é•ã£ã¦ã„ã¾ã™" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "ジップ" -#: NOT FOUND IN SOURCE -msgid "[no subject]" +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" msgstr "" -#: html/User/Elements/DelegateRights:59 +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "%1ã¸ã®è¨±å¯" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 -msgid "contains" -msgstr "å«ã‚€" - -#: html/Elements/SelectAttachmentField:26 -msgid "content" +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" msgstr "" -#: html/Elements/SelectAttachmentField:27 -msgid "content-type" +#: html/SelfService/Closed.html:49 +msgid "closed" msgstr "" -#: lib/RT/Ticket_Overlay.pm:2282 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 +msgid "contains" +msgstr "å«ã‚€" + +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "通知ã¯ï¼ˆãŠãらã)é€ä¿¡ã•れã¦ã„ã¾ã›ã‚“" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "通知ãŒé€ä¿¡ã•れã¾ã—ãŸ" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "æ—¥" #: NOT FOUND IN SOURCE -msgid "dead" -msgstr "" - -#: html/Search/Listing.html:75 msgid "delete" msgstr "削除" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "削除ã•れãŸ" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "ã‚ã„ã¾ã›ã‚“" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "å«ã¿ã¾ã›ã‚“" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "ç‰ã—ã„" -#: NOT FOUND IN SOURCE -msgid "false" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" msgstr "" -#: html/Elements/SelectAttachmentField:28 -msgid "filename" +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" msgstr "" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "より大ãã„" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "グループ'%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "時間" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "ID" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "ã§ã™" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "ã§ãªã„" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "より少ãªã„" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "åˆã†" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "最低" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "分" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "ä¿®æ£\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "月" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "æ–°ã—ã„" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "ãªã—" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "ç‰ã—ããªã„" -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "é–‹ã" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "ユーザー '%2' ã®ãƒ‘ーソナルグループ '%1' " -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "ã‚ュー %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "æ‹’å¦ã•れã¾ã—ãŸ" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "分解ã•れã¾ã—ãŸ" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "ç§’" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "æ¢ã¾ã‚Šã¾ã—ãŸ" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "システム %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "システムグループ '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "呼ã³å‡ºã—ã¦ã„るコンãƒãƒ¼ãƒãƒ³ãƒˆãŒãªãœæ¬¡ã®ã‚ˆã†ãªã“ã¨ãŒèµ·ã“ã‚‹ã®ã‹ç‰¹å®šã§ãã¾ã›ã‚“ã§ã—ãŸ" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "ãƒã‚±ãƒƒãƒˆã€€#%1 %2" -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "" - -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "" @@ -4799,12 +5538,12 @@ msgstr "" msgid "undescripbed group %1" msgstr "表示ã•れãªã„グループ %1" -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "ユーザー %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "週" @@ -4812,11 +5551,7 @@ msgstr "週" msgid "with template %1" msgstr "テンプレート %1ã¨" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "å¹´" -#: NOT FOUND IN SOURCE -msgid "ニックãƒãƒ¼ãƒ " -msgstr "" - diff --git a/rt/lib/RT/I18N/nl.po b/rt/lib/RT/I18N/nl.po index 0c3549914..91547c870 100644 --- a/rt/lib/RT/I18N/nl.po +++ b/rt/lib/RT/I18N/nl.po @@ -5,65 +5,72 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) +#: NOT FOUND IN SOURCE msgid "#%1" -msgstr "" -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->Subject) +msgstr "msgstr "" " + +#: 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) msgid "#%1: %2" msgstr "#%1: %2" -#: lib/RT/Date.pm:337 +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) +#: NOT FOUND IN SOURCE msgid "%1 %2 %3" msgstr "%1 %2 %3" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %2 %3 %4:%5:%6 %7" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" msgstr "%1 %2 toegevoegd" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "%1 %2 geleden" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 veranderd naar %3" -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" msgstr "%1 %2 verwijderd" -#: NOT FOUND IN SOURCE -msgid "%1 %2 of group %3" -msgstr "" - -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" msgstr "%1 %2 met sjabloon %3" @@ -72,44 +79,81 @@ msgstr "%1 %2 met sjabloon %3" msgid "%1 (%2) %3 this ticket\\n" msgstr "%1 (%2) %3 dit ticket\\n" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) -msgid "%1 - %2 shown" +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "" + +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" msgstr "" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - Een argument om door te geven aan %2" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - Uitvoer status herzieningen naar STDOUT" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "%1 - Specificeer de actie module die u wenst te gebruiken" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "%1 - Specificeer de conditie module die u wenst te gebruiken" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "%1 - Specificeer de zoek module die u wenst te gebruiken" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "%1 ScripAction geladen" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 toegevoegd als waarde voor %2" @@ -126,27 +170,31 @@ msgstr "%1 aliassen hebben een TicketId nodig om mee te werken" msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "%1 aliassen hebben een TicketId nodig om mee te werken (van %2) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "" +msgstr "%1 lijkt een lokaal object te zijn maar kan niet gelokaliseerd worden in de database" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 door %2" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 veranderd van %2 naar %3" -#: lib/RT/Interface/Web.pm:857 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "%1 kon niet veranderd worden naar %2" @@ -154,38 +202,49 @@ msgstr "%1 kon niet veranderd worden naar %2" msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1 kon geen transactie initiëren (%2)" -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 kon status niet veranderen naar opgelost. RT's Database zou inconsistent kunnen zijn" -#: html/Elements/MyTickets:25 +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." msgstr "De %1 hoogste prioriteit tickets die ik bezit..." -#: html/Elements/MyRequests:25 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." -msgstr "De %1 hoogste prioriteit tickets waarom ik verzocht heb..." +msgstr "De %1 hoogste prioriteit tickets waar ik om verzocht heb..." -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "%1 is een gereedschap om te reageren op tickets van een extern rooster programma, zoals cron" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 is niet langer een %2 voor deze rij" -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1 is niet langer een %2 voor dit ticket" -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 is niet langer een waarde voor specifiek veld %2" @@ -193,16 +252,29 @@ msgstr "%1 is niet langer een waarde voor specifiek veld %2" msgid "%1 isn't a valid Queue id." msgstr "%1 is niet een geldig Rij id" -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 min" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1 niet afgebeeld" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 objecten" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "%1 rechten" @@ -219,35 +291,41 @@ msgstr "%1 type onbekend voor $MessageId" msgid "%1 type unknown for %2" msgstr "%1 type onbekend voor %2" -#: NOT FOUND IN SOURCE -msgid "%1 was created without a CurrentUser\\n" -msgstr "" - -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 zal alle leden van een opgelost groep ticket omzetten." -#: NOT FOUND IN SOURCE -msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" msgstr "" -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: geen aanhechting gespecificeerd" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1b" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1 is een ongeldige waarde voor status" @@ -256,53 +334,53 @@ msgstr "'%1 is een ongeldige waarde voor status" msgid "'%1' not a recognized action. " msgstr "'%1' onherkende actie. " -#: NOT FOUND IN SOURCE -msgid "(Check box to delete group member)" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "(Check box to delete scrip)" -msgstr "" - -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(Vink hokje af om te verwijderen)" -#: NOT FOUND IN SOURCE -msgid "(Check boxes to delete)" -msgstr "" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(Markeer hokje om notificaties voor de genoemde ontvangers uit te zetten)" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Vul ticket ids of URLs in, gescheiden door spaties)" +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(Markeer hokje om notificaties voor de genoemde ontvangers aan te zetten)" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "" + +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "" +msgid "(If left blank, will default to %1)" +msgstr "(Indien leeggelaten, wordt voorzien van %1)" #: NOT FOUND IN SOURCE msgid "(No Value)" msgstr "(Geen Waarde)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" -msgstr "" +msgstr "(Geen eigen velden)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Geen Leden)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(Geen scrips)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" +msgstr "(Geen slablonen)" + +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" msgstr "" -#: html/Ticket/Update.html:85 +#: 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 "" @@ -310,11 +388,11 @@ msgstr "" msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Stuurt een blinde carbon copy van deze herziening naar een comma gescheiden lijst van email adressen. Wie er toekomstige herzieningen zal ontvangen, zal <b>niet</b> veranderen.)" -#: html/Ticket/Create.html:79 +#: 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/Update.html:81 +#: 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 "" @@ -322,79 +400,87 @@ msgstr "" msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Stuurt een carbon copy van deze herziening naar een comma gescheiden lijst van email adressen. Wie er toekomstige herzieningen zal ontvangen, zal <b>niet</b> veranderen.)" -#: html/Ticket/Create.html:69 +#: 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 "(Stuurt een kopie van deze herziening naar een door komma's gescheiden lijst van email-adressen. Deze personen zullen toekomstige herzieningen <b>blijven</b> ontvangen.)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" msgstr "" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(leeg)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(geen onderwerp)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(geen waarde)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(geen waarden)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(slechts één ticket)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(wacht op goedkeuring)" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 -msgid "(pending other tickets)" -msgstr "(wacht op andere tickets)" +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(wacht op andere Collection)" #: NOT FOUND IN SOURCE -msgid "(requestor's group)" -msgstr "" +msgid "(pending other tickets)" +msgstr "(wacht op andere tickets)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(verplicht)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(zonder titel)" -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I own..." -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "" - -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "<% $_ %>" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"Nieuw ticket in\"> %1" -#: NOT FOUND IN SOURCE -msgid "??????" -msgstr "" - -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "Een leeg sjabloon" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + #: NOT FOUND IN SOURCE msgid "ACE Deleted" msgstr "ACE Verwijderd" @@ -403,150 +489,154 @@ msgstr "ACE Verwijderd" msgid "ACE Loaded" msgstr "ACE Geladen" -#: NOT FOUND IN SOURCE -msgid "ACE could not be deleted" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "ACE could not be found" -msgstr "" - -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE niet gevonden" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACEs kunnen allen gecreëerd of verwijderd worden." -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" msgstr "Afbraak om ongewenste ticket aanpassing te voorkomen.\\n" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" -msgstr "" +msgstr "Over mezelf" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "Toegangscontrole" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Actie" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Actie %1 niet gevonden" -#: bin/rt-crontool:123 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "Actie uitgevoerd." -#: bin/rt-crontool:119 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "Actie voorbereid..." -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Voeg toe" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "Voeg AdminCc toe" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "Voeg Cc toe" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 -msgid "Add More Files" -msgstr "Voeg Meer Bestanden Toe" +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "Add Next State" +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" msgstr "" -#: html/Search/Bulk.html:88 +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "Voeg Meer Bestanden Toe" + +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "Voeg Verzoeker Toe" -#: NOT FOUND IN SOURCE -msgid "Add a Scrip to this queue" -msgstr "Voeg een Scrip toe aan deze rij" - -#: NOT FOUND IN SOURCE -msgid "Add a Scrip which will apply to all queues" +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" msgstr "" #: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" -msgstr "" +msgid "Add a Scrip to this queue" +msgstr "Voeg een Scrip toe aan deze rij" -#: NOT FOUND IN SOURCE -msgid "Add a new a global scrip" -msgstr "" +#: html/Admin/Global/Scrip.html:76 +msgid "Add a scrip which will apply to all queues" +msgstr "Voeg een Scrip toe dat voor alle rijen zal gelden" -#: NOT FOUND IN SOURCE -msgid "Add a scrip to this queue" +#: html/Search/Build.html:85 +msgid "Add additional criteria" msgstr "" -#: html/Admin/Global/Scrip.html:55 -msgid "Add a scrip which will apply to all queues" -msgstr "Voeg een scrip toe welke voor alle rijen zal gelden" - -#: html/Search/Bulk.html:118 +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "Voeg commentaar of reacties toe aan geselecteerde tickets" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "Voeg leden toe" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Voeg nieuwe toeschouwers toe" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "AddNextState" msgstr "VoegVolgendeStaatToe" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "Hoofd toegevoegd als %1 voor deze rij" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "Hoofd toegevoegd als %1 voor dit ticket" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Adres1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Adres2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Beheerder Cc" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "Beheerder rijen" #: NOT FOUND IN SOURCE msgid "Admin users" -msgstr "Beheerder gebruikers" +msgstr "Beheerdergebruikers" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "Beheerder/Globale configuratie" @@ -554,15 +644,11 @@ msgstr "Beheerder/Globale configuratie" msgid "Admin/Groups" msgstr "Beheerder/Groepen" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "Beheerder/Rij/Basis" -#: NOT FOUND IN SOURCE -msgid "AdminAllPersonalGroups" -msgstr "" - -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "BeheerderCc" @@ -574,43 +660,47 @@ msgstr "BeheerderCommentaar" msgid "AdminCorrespondence" msgstr "BeheerderCorrespondentie" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "BeheerderSpecifiekVeld" + +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" msgstr "BeheerderSpecifiekeVelden" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "BeheerderGroep" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "BeheerderGroepLidmaatschap" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "BeheerderBezitPersoonlijkeGroepen" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "BeheerderRij" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "BeheerderGebruikers" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Administratieve Cc" -#: NOT FOUND IN SOURCE -msgid "Admins" -msgstr "" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Geavanceerd" #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "Uitgebreid Zoeken" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "Nadat" @@ -618,19 +708,15 @@ msgstr "Nadat" msgid "Age" msgstr "Leeftijd" -#: NOT FOUND IN SOURCE -msgid "Alias" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Alias for" +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" msgstr "" -#: html/Admin/Elements/EditCustomFields:96 -msgid "All Custom Fields" -msgstr "" +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "Alle Gegeven Goedkeuringen" -#: html/Admin/Queues/index.html:53 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "Alle Rijen" @@ -638,24 +724,39 @@ msgstr "Alle Rijen" msgid "Always sends a message to the requestors independent of message sender" msgstr "Stuurt altijd een bericht naar de verzoekers ongeacht de verzender van het bericht" -#: html/Elements/Tabs:58 +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "" + +#: html/Elements/Tabs:74 msgid "Approval" msgstr "Goedkeuring" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" msgstr "Goedkeuring #%1: %2" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "Goedkeuring #%1: Notities niet bewaard vanwege een systeem fout" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "Goedkeuring #%1: Notities bewaard" @@ -664,19 +765,27 @@ msgstr "Goedkeuring #%1: Notities bewaard" msgid "Approval Details" msgstr "Goedkeuring Details" +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Approval diagram" msgstr "Goedkeuring diagram" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "Goedkeuring" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "Notities van de goedkeurer: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "Ggk." @@ -684,39 +793,52 @@ msgstr "Ggk." msgid "April" msgstr "april" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "Oplopend" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "WijsSpecifiekeVeldenToe" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Aanhechten" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "Hecht bestand aan" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "Aangehecht bestand" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Aanhechting '%1' kon niet geladen worden" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "Aanhechting gecreëerd" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "Aanhechting bestandsnaam" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "Aanhechtingen" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Attribuut Verwijderd" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "aug." @@ -724,53 +846,55 @@ msgstr "aug." msgid "August" msgstr "augustus" -#: html/Admin/Elements/ModifyUser:66 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "AuthenticatieSysteem" -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "Automatisch-antwoord" #: etc/initialdata:72 msgid "Autoreply To Requestors" -msgstr "" +msgstr "Automatisch-antwoord aan Verzoekers" #: NOT FOUND IN SOURCE msgid "AutoreplyToRequestors" msgstr "Automatisch-antwoordAanVerzoekers" #: NOT FOUND IN SOURCE +msgid "Available Columns" +msgstr "Beschikbare Kolommen" + +#: NOT FOUND IN SOURCE msgid "Bad PGP Signature: %1\\n" -msgstr "Ongeldige PGP Signatuur: %1\\n" +msgstr "Ongeldige PGP Signature: %1\\n" -#: html/SelfService/Attachment/dhandler:40 +#: NOT FOUND IN SOURCE msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "Ongeldig aanhechtings id. Kon aanhechting '%1' niet vinden\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "Ongeldige data in %1" -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) +#: NOT FOUND IN SOURCE msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "Ongeldig transactienummer voor aanhechting. %1 zou %2 moeten zijn\\n" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "Basis" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Bcc" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Zorg ervoor dat u uw veranderingen bewaard" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "Voorheen" @@ -778,96 +902,129 @@ msgstr "Voorheen" msgid "Begin Approval" msgstr "Begin Goedkeuring" -#: etc/initialdata:202 +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: etc/initialdata:217 msgid "Blank" msgstr "Blanco" -#: html/Search/Listing.html:79 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" -msgstr "XXX URL voor deze zoekopdracht" +msgstr "URL voor deze zoekopdracht, geschikt als bookmark" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "Korte koppen" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "Bulk ticketherziening" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "Kan systeemgebruikers niet wijzigen" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "Kan dit hoofd deze rij zien" -#: lib/RT/CustomFieLd_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "Kan geen specifiek veld toevoegen zonder een naam" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Kan geen bewaarde zoekopdracht vinden om mee te werken" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "Kan een ticket niet koppelen aan zichzelf" -#: lib/RT/Ticket_Overlay.pm:2787 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "Kan niet samenvoegen met een reeds samengevoegd ticket. U zou deze boodschap nooit mogen krijgen" -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Kan deze zoekopdracht niet opslaan" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "Kan niet zowel basis als doel specificeren" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "Kan gebruiker %1 niet aanmaken" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "Cc" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "Wijzig wachtwoord" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Alle Markeren" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "Vink hokje af om te verwijderen" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "Vink hokje af om recht te verwijderen" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Kinderen" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "Stad" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "Alle Wissen" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" -msgstr "" +msgstr "Gesloten" -#: html/SelfService/Elements/Tabs:60 +#: NOT FOUND IN SOURCE msgid "Closed requests" msgstr "Gesloten verzoeken" -#: NOT FOUND IN SOURCE -msgid "Code" +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" msgstr "" #: NOT FOUND IN SOURCE msgid "Command not understood!\\n" msgstr "Commando niet begrepen!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Commentaar" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Commentaar Adres" @@ -875,40 +1032,39 @@ msgstr "Commentaar Adres" msgid "Comment not recorded" msgstr "Commentaar niet bewaard" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "Commentaar op tickets" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "CommentaarOpTicket" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "Commentaar" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "Commentaar (Wordt niet verstuurd aan verzoekers)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "Commentaar (Wordt niet verstuurd aan verzoekers)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "Commentaar over %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "Commentaar over deze gebruiker" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "Commentaar toegevoegd" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "" @@ -916,27 +1072,27 @@ msgstr "" msgid "Compile Restrictions" msgstr "Compilatie Restricties" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "Voorwaarde" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "Voorwaarde komt overeen..." -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "Voorwaarde niet gevonden" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Configuratie" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "Bevestig" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "ContactInfoSysteem" @@ -944,23 +1100,27 @@ msgstr "ContactInfoSysteem" msgid "Contacted date '%1' could not be parsed" msgstr "Contact datum '%1' kon niet ontleed worden" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Inhoud" -#: NOT FOUND IN SOURCE -msgid "Coould not create group" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" msgstr "" -#: etc/initialdata:266 +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "" + +#: etc/initialdata:286 msgid "Correspondence" msgstr "Correspondentie" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "Correspondentieadres" -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Correspondentie toegevoegd" @@ -968,7 +1128,7 @@ msgstr "Correspondentie toegevoegd" msgid "Correspondence not recorded" msgstr "Correspondentie niet bewaard" -#: lib/RT/Ticket_Overlay.pm:3458 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "Kon nieuw specifiek veld niet toevoegen voor dit ticket. " @@ -976,29 +1136,43 @@ msgstr "Kon nieuw specifiek veld niet toevoegen voor dit ticket. " msgid "Could not add new custom field value for ticket. %1 " msgstr "Kon nieuw specifiek veld niet toevoegen voor dit ticket. %1" -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "Kon eigenaar niet wijzigen. " -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "Kon SpecifiekVeld niet creëren" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "Kon groep niet creëren" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "Kon sjabloon niet creëren: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "Kon ticket niet creëren. Rij niet ingesteld" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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 "Kon gebruiker niet creëren" @@ -1014,11 +1188,11 @@ msgstr "Kon geen ticket vinden met id %1" msgid "Could not find group %1." msgstr "Kon groep %1 niet vinden. " -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "Kon deze gebruiker niet vinden of creëren" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "Kon dat hoofd niet vinden" @@ -1026,35 +1200,51 @@ msgstr "Kon dat hoofd niet vinden" msgid "Could not find user %1." msgstr "Kon gebruiker %1 niet vinden." -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Kon SpecifiekVeld %1 niet laden" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "Kon groep niet laden" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "Kon dat hoofd geen %1 maken voor deze rij" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "Kon dat hoofd geen %1 maken voor dit ticket" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "Kon dat hoofd niet verwijderen als %1 voor deze rij" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "Kon dat hoofd niet verwijderen als %1 voor dit ticket" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Kan gebruikersinformatie niet toewijzen" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "Kon lid niet toevoegen aan groep" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "Kon geen transactie creëren: %1" @@ -1067,15 +1257,15 @@ msgstr "Kon niet bepalen welke actie te ondernemen aan de hand van gpg's antwoor msgid "Couldn't find group\\n" msgstr "Kon groep niet vinden\\n" -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "Kon rij niet vinden" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "Kon dat hoofd niet vinden" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "Kon die waarde niet vinden" @@ -1087,11 +1277,21 @@ msgstr "Kon die toeschouwer niet vinden" msgid "Couldn't find user\\n" msgstr "Kon gebruiker niet vinden\\n" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "Kon %1 niet laden uit de gebruikersdatabase.\\n" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Couldn't load KeywordSelects." msgstr "Kon KeywordSelects niet laden." @@ -1104,21 +1304,26 @@ msgstr "Kon RT configuratie bestand niet laden '%1' %2" msgid "Couldn't load Scrips." msgstr "Kon Scrips niet laden" -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "Kon groep %1 niet laden" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "Kon link niet laden" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "Kon object %1 niet laden" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "Kon rij niet laden" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "Kon rij %1 niet laden " @@ -1131,41 +1336,46 @@ msgstr "Kon scrip niet laden" msgid "Couldn't load template" msgstr "Kon sjabloon niet laden" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "Kon die gebruiker (%1) niet laden" -#: html/SelfService/Display.html:166 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "Kon ticket '%1' niet laden" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "Land" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "Creëer" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "Creëer Tickets" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "Creëer een SpecifiekVeld" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "" -#: html/Admin/Global/CustomField.html:48 -msgid "Create a CustomField which applies to all queues" -msgstr "" - #: NOT FOUND IN SOURCE msgid "Create a new Custom Field" msgstr "Creëer een niuew Specifiek Veld" @@ -1174,15 +1384,11 @@ msgstr "Creëer een niuew Specifiek Veld" msgid "Create a new global Scrip" msgstr "Creëer een nieuw globaal Scrip" -#: NOT FOUND IN SOURCE -msgid "Create a new global scrip" -msgstr "" - -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "Creëer een nieuwe groep" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "Creëer een nieuwe persoonlijke groep" @@ -1198,15 +1404,15 @@ msgstr "Creëer een nieuw scrip" msgid "Create a new template" msgstr "Creëer een nieuw template" -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "Creëer een nieuw ticket" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "Creëer een nieuwe gebruiker" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "Creëer een rij" @@ -1214,68 +1420,68 @@ msgstr "Creëer een rij" msgid "Create a queue called" msgstr "Creëer een rij genaamd" -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 +#: NOT FOUND IN SOURCE msgid "Create a request" msgstr "Creëer een verzoek" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "Creëer een scrip voor rij %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "Creëer een sjabloon" +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "Maak een ticket aan" + #: NOT FOUND IN SOURCE msgid "Create failed: %1 / %2 / %3 " msgstr "Creatie mislukt: %1 / %2 / %3 " -#: NOT FOUND IN SOURCE -msgid "Create failed: %1/%2/%3" -msgstr "" - -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "Creëer nieuwe tickets gebaseerd op het sjabloon van dit scrip" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "Creëer ticket" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "Creëer tickets in deze rij" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "Creëer, verwijder en wijzig specifieke velden" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "Creëer, verwijder en wijzig rijen" -#: NOT FOUND IN SOURCE -msgid "Create, delete and modify the members of any user's personal groups" -msgstr "" - -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "Creëer, verwijder en wijzig de leden van persoonlijke groepen" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "Creëer, verwijder en wijzig gebruikers" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "CreëerTicket" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "Gecreëerd" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "SpecifiekVeld %1 gecreëerd" @@ -1284,80 +1490,83 @@ msgstr "SpecifiekVeld %1 gecreëerd" msgid "Created template %1" msgstr "Sjabloon %1 Gecreëerd" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Creator" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Huidige Relaties" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "Huidige Scrips" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Huidige leden" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Huidige rechten" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" -msgstr "" +msgstr "Huidige zoekcriteria" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Huidige toeschouwers" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) -msgid "Custom Field #%1" -msgstr "" - -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "Specifieke Velden" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Specifieke Velden voor %1" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "Specifieke actie opruim code" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "Specifieke actie voorbereidings code" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "Specifieke voorwaarde" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "Specifiek veld %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: NOT FOUND IN SOURCE +msgid "Custom field %1 does not apply to this object" +msgstr "Specifiek Veld %1 is niet van toepassing op dit object" + +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "Specifiek veld %1 heeft een waarde." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "Specifiek veld %1 heeft geen waarde." -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Specifiek veld %1 niet gevonden" -#: html/Admin/Elements/EditCustomFields:197 -msgid "Custom field deleted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "Specifiek veld niet gevonden" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "Specifiek veld waarde %1 kon niet gevonden worden voor specifiek veld %2" @@ -1366,31 +1575,31 @@ msgstr "Specifiek veld waarde %1 kon niet gevonden worden voor specifiek veld %2 msgid "Custom field value changed from %1 to %2" msgstr "Specifiek veld waarde veranderd van %1 naar %2" -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "Specifiek veld waarde kon niet verwijderd worden" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "Specifiek veld waarde kon niet gevonden worden" -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "Specifiek veld waarde verwijderd" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" -msgstr "" +msgstr "SpecifiekVeld" #: NOT FOUND IN SOURCE msgid "Data error" msgstr "Data fout" -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Data" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "dec." @@ -1402,68 +1611,92 @@ msgstr "december" msgid "Default Autoresponse Template" msgstr "Standaard Auto-antwoord Sjabloon" -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "" -#: etc/initialdata:275 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "Standaard admin commentaar sjabloon" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "Standaard admin correspondentie sjabloon" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "Standaard correspondentie sjabloon" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "Standaard transactie sjabloon" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" msgstr "Standaard: %1/%2 verandered van %3 naar %4" -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Delegeer rechten" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "Delegeer specifieke rechten die aan u verleend zijn." -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "DelegeerRechten" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "Verwijder tickets" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "VerwijderTicket" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "Het verwijderen van dit object zou de referentiële integriteit kunnen ondermijnen" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen" -#: lib/RT/User_Overlay.pm:430 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen" @@ -1471,15 +1704,11 @@ msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermij msgid "Deleting this object would violate referential integrity." msgstr "Het verwijderen van dit object zou de referentiële integriteit ondermijnen" -#: NOT FOUND IN SOURCE -msgid "Deleting this object would violate referential integrity. That's bad." -msgstr "" - -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "Wijs af" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" msgstr "Afhankelijkheid van" @@ -1487,72 +1716,107 @@ msgstr "Afhankelijkheid van" msgid "Dependencies: \\n" msgstr "Afhankelijkheden: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 -msgid "Depends on" -msgstr "Is afhankelijk van" +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "" -#: NOT FOUND IN SOURCE -msgid "DependsOn" +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" msgstr "" -#: html/Elements/SelectSortOrder:35 +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "" + +#: 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 +msgid "Depends on" +msgstr "Is afhankelijk van" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "Aflopend" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "Omschrijf onderstaande kwestie" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "Omschrijving" -#: html/SelfService/Elements/MyRequests:44 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "Details" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Toon" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "Toon Toegangs Controle Lijst" -#: lib/RT/Queue_Overlay.pm:75 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Toon Kolommen" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "Toon Scrip sjablonen voor deze rij" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "Toon Scrips voor deze rij" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Toon modus" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "Toon bewaarde zoekopdrachten voor deze groep" + +#: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "Toon ticket #%1" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "Doe iets en alles" -#: html/Elements/Refresh:30 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "Ververs deze pagina niet" -#: html/Search/Elements/PickRestriction:114 +#: NOT FOUND IN SOURCE msgid "Don't show search results" -msgstr "" +msgstr "Toon zoekresultaten niet" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "Download" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "Download als een door tabs gescheiden databestand" + +#: 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 msgid "Due" msgstr "Verwacht" @@ -1560,8 +1824,7 @@ msgstr "Verwacht" msgid "Due date '%1' could not be parsed" msgstr "Verwachte datum '%1' kon niet ontleed worden" -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "FOUT: Kon ticket '%1' niet laden: %2.\\n" @@ -1569,33 +1832,41 @@ msgstr "FOUT: Kon ticket '%1' niet laden: %2.\\n" msgid "Edit" msgstr "Wijzig" -#: NOT FOUND IN SOURCE -msgid "Edit Conditions" -msgstr "" - -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "Wijzig Specifieke Velden voor %1" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "Wijzig Relaties" -#: html/Admin/Queues/Templates.html:41 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Wijzig Zoekopdracht" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Edit keywords" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Edit scrips" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" msgstr "" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "Wijzig systeem sjablonen" @@ -1603,28 +1874,30 @@ msgstr "Wijzig systeem sjablonen" msgid "Edit templates for %1" msgstr "Wijzig sjablonen voor %1" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "WijzigOpgeslagenZoekopdrachten" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "Bezig met wijzigen van de configuratie voor rij %1" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "Bezit met het wijzigen van de configuratie voor gebruiker %1" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "Bezit met het wijzigen van SpecifiekVeld %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "Bezit met het wijzigen van lidmaatschap voor groep %1" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "Bezit met het wijzigen van lidmaatschap voor persoonlijke groep %1" @@ -1633,153 +1906,207 @@ msgstr "Bezit met het wijzigen van lidmaatschap voor persoonlijke groep %1" msgid "Editing template %1" msgstr "Bezit met het wijzigen van sjabloon %1" -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "Of basis of doel moeten gespecificeerd zijn" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "E-mail" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "E-mailadres in gebruik" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "E-mailAdres" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "E-mailCodering" -#: html/Admin/Elements/EditCustomField:36 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "Actief (Het uitvinken van dit hokje zal deze rij deactiveren)" -#: html/Admin/Elements/EditCustomFields:99 -msgid "Enabled Custom Fields" -msgstr "" - -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "Actieve Rijen" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "Actieve status %1" -#: lib/RT/CustomField_Overlay.pm:361 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "" -#: lib/RT/CustomField_Overlay.pm:358 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." msgstr "Vul tickets of URIs in om deze tickets aan te koppelen. Scheidt meerdere elementen met spaties." -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Fout" -#: NOT FOUND IN SOURCE -msgid "Error adding watcher" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "Fout in paramaters naar Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Queue->DelWatcher" msgstr "Fout in paramaters naar Queue->DelWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Fout in paramaters naar Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Ticket->DelWatcher" msgstr "Fout in paramaters naar Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "" + #: etc/initialdata:20 msgid "Everyone" msgstr "Iedereen" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "Voorbeeld:" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "ExternAuteurId" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "ExternContactInfoId" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "Extra informatie" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "Kon de gebruikers pseudogroep 'Privileged' niet vinden." -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "Kon de gebruikers pseudogroep 'Unprivileged' niet vinden." -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "Kon module %1 niet laden. (%2)" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "feb." -#: NOT FOUND IN SOURCE -msgid "February" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Bestandsnaam" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" msgstr "" -#: NOT FOUND IN SOURCE -msgid "Fin" +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" msgstr "" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Uiteindelijke Prioriteit" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "UiteindelijkePrioriteit" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 -msgid "Find group whose" +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" msgstr "" -#: html/Elements/Quicksearch:25 +#: NOT FOUND IN SOURCE msgid "Find new/open tickets" msgstr "Zoek nieuwe/open tickets" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "Zoek mensen wier" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "" @@ -1787,82 +2114,94 @@ msgstr "" msgid "Finish Approval" msgstr "Beëindig Goedkeuring" -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Eerste" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "Eerste pagina" -#: docs/design_docs/string-extraction-guide.txt:33 +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 msgid "Foo Bar Baz" msgstr "Aap Noot Mies" -#: docs/design_docs/string-extraction-guide.txt:24 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "Aap!" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "Gevonden Object" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "Vrije vorm" + +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "VrijevormContactInfo" -#: lib/RT/CustomField_Overlay.pm:38 +#: NOT FOUND IN SOURCE msgid "FreeformMultiple" msgstr "VrijevormMeerdere" -#: lib/RT/CustomField_Overlay.pm:37 -msgid "FreeformSingle" -msgstr "" - -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Vr." -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "Volledige Kop" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "Vul sjabloon uit bestand" + #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "Bezig met het ophalen van de huidige gebruiker middels een pgp handtekening" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "Aan %1 gegeven" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "Globaal" -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" -msgstr "" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Globaal Specifieke Velden" -#: NOT FOUND IN SOURCE -msgid "Global Scrips" +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" msgstr "" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "Globaal sjabloon: %1" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Ga" + +#: 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 msgid "Go!" msgstr "Ga!" @@ -1870,19 +2209,15 @@ msgstr "Ga!" msgid "Good pgp sig from %1\\n" msgstr "Goede pgp handtekening van %1\\n" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "Ga naar pagina" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "Ga naar ticket" -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "" - -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "Groep" @@ -1890,32 +2225,28 @@ msgstr "Groep" msgid "Group %1 %2: %3" msgstr "Groep %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "Groeps rechten" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "Groep heeft al een lid" -#: NOT FOUND IN SOURCE -msgid "Group could not be created." -msgstr "" - -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "Groep kon niet gecreërd worden: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "Groep gecreërd" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "Groep heeft geen lid onder die naam" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Groep niet gevonden" @@ -1927,167 +2258,205 @@ msgstr "Groep niet gevonden.\\n" msgid "Group not specified.\\n" msgstr "Groep niet gespecificeerd.\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Groepen" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "Groepen kunnen geen leden zijn van hun leden" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "Groepen waar deze gebruiker deel van uitmaakt" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "Hallo!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Hallo, %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "Geschiedenis" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "ThuisNummer" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Homepage" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." -msgstr "" +msgstr "Ik heb %quant(%1,betonmixer)." -#: NOT FOUND IN SOURCE -msgid "I have [quant,_1,concrete mixer]." +#: html/Search/Build.html:637 +msgid "I'm lost" msgstr "" -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "Id" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identiteit" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "Als een goedkeuring afgewezen is, wijs het origineel af en verwijder hangende goedkeuringen" -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "Cre‘er tickets in deze rij indien geen rij is opgegeven." + +#: 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 "Als dit gereedschap setgid zou zijn, zou een kwaadwillende lokale gebruiker dit gereedschap kunnen gebruiken om administratieve toegang te verkrijgen tot RT" -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "Als u een van de bovenstaande elemented ververst heeft, zorg dan dat u" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "Illegale waarde voor %1" -#: lib/RT/Interface/Web.pm:863 +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Afbeelding" + +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "Niet-wijzigbaar veld" -#: html/Admin/Elements/EditCustomFields:74 -msgid "Include disabled custom fields in listing." -msgstr "" +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Neem inactieve groepen op in de weergave." -#: html/Admin/Queues/index.html:43 +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." -msgstr "Neem inactieve rijen op in de weergave" +msgstr "Neem inactieve rijen op in de weergave." -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "Neem inactieve gebruiker op in de zoek opdracht" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "Initiële Prioriteit" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "InitiëlePrioriteit" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Invoer fout" -#: NOT FOUND IN SOURCE -msgid "Interest noted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "Interne Fout" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "Interne Fout: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "Ongeldig Groep Type" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" -msgstr "" +msgstr "Ongeldig Recht" #: NOT FOUND IN SOURCE msgid "Invalid Type" msgstr "Ongeldig Type" -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "Ongeldige data" -#: lib/RT/Ticket_Overlay.pm:438 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." msgstr "Ongeldige eigenaar. Val terug op 'nobody'." -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "Ongeldige rij" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "Ongeldige recht" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "Ongeldige waarde voor %1" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "Ongeldige waarde voor specifiek veld" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Ongeldige waarde voor status" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "Het is ontzettend belangrijk dat onbevoorrechtigde gebruikers geen toestemming hebben om dit gereedschap te gebruiken." -#: bin/rt-crontool:192 +#: 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 "We stellen voor dat u een onbevoorrechtigde unix gebruiker aanmaakt met het juiste groep lidmaatschap en RT toegang om dit gereedschap te gebruiken." -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "Het accepteerd meerdere argumenten:" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Items pending my approval" msgstr "Zaken die wachten op mijn goedkeuring" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "jan." @@ -2095,71 +2464,71 @@ msgstr "jan." msgid "January" msgstr "januari" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "Sluit u aan of verlaat deze groep" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "jul." -#: NOT FOUND IN SOURCE -msgid "July" -msgstr "" - -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "Jumbo" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "jun." #: NOT FOUND IN SOURCE -msgid "June" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Keyword" msgstr "Sleutelwoord" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "Taal" -#: html/Ticket/Elements/Tabs:73 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "Laatste" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Laatste Contact" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Laatst Gecontacteerd" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" -msgstr "" +msgstr "Laatst Bericht" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Laatst Ververst" -#: NOT FOUND IN SOURCE -msgid "LastUpdated" -msgstr "" +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "LaatstVerverstDoor" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "Over" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "Geef deze gebruiker toegang tot RT" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "Geef deze gebruiker rechten" @@ -2171,120 +2540,153 @@ msgstr "Eigenaar wordt gelimieteerd tot %1 %2" msgid "Limiting queue to %1 %2" msgstr "Rij wordt gelimiteerd tot %1 %2" -#: lib/RT/Ticket_Overlay.pm:2697 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "Koppeling bestaat al" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "Koppeling kon niet gecreëerd worden" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "Koppeling gecreëerd (%1)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "Koppelink verwijderd (%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "Koppeling niet gevonden" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "Koppel ticket #%1" -#: NOT FOUND IN SOURCE -msgid "Link ticket %1" -msgstr "" - -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Koppelingen" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "Locatie" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "Log folder %1 niet gevonden of niet toegankelijk.\\n RT kan niet starten." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "Aangemeld als %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" msgstr "Aanmelden" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Afmelden" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "Lookup type komt niet overeen" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "Maak Eigenaar" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "Maak Status" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "Maak verwachtingsdatum" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "Make oplossingsdatum" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "Maak startdatum" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "Maak datum gestart" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "Maak datum gemeld" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "Maak prioriteit" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "Maak rij" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "Maak onderwerp" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "Beheer specifieke velden en waarden daarvan" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "Beheer groepen en groeplidmaatschap" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "Beheer eigenschappen en configuraties welke betrekking hebben op alle rijen" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "Beheer rijen en rij-specifieke eigenschappen" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "Beheer gebruikers en wachtwoorden" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "maa." @@ -2296,23 +2698,33 @@ msgstr "maart" msgid "May" msgstr "mei" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "mei." -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "Lid toegevoegd" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "Lid verwijderd" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "Lid niet verwijderd" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "Lid van" @@ -2320,39 +2732,83 @@ msgstr "Lid van" msgid "MemberOf" msgstr "LidVan" -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "Leden" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "Samenvoeging Succesvol" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "Samenvoeging mislukt. Kon EffectiefId niet instellen" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "Voeg samen in" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Samengevoegd tot %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "Bericht" -#: lib/RT/Interface/Web.pm:867 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "Mist primaire sleutel?: %1" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "Mobiel" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "MobieleTelefoon" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "Wijzig Toegangs Controle Lijst" @@ -2360,172 +2816,193 @@ msgstr "Wijzig Toegangs Controle Lijst" msgid "Modify Custom Field %1" msgstr "Wijzig Specifiek Veld %1" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 -msgid "Modify Custom Fields which apply to all queues" +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" msgstr "Wijzit Scrip sjabloon voor deze rij" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" msgstr "Wijzig Scrips voor deze rij" #: NOT FOUND IN SOURCE -msgid "Modify System ACLS" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Modify Template %1" msgstr "Wijzig Sjabloon %1" -#: html/Admin/Queues/CustomField.html:45 -#. ($QueueObj->Name()) -msgid "Modify a CustomField for queue %1" +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" msgstr "" -#: html/Admin/Global/CustomField.html:53 -msgid "Modify a CustomField which applies to all queues" -msgstr "" +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" +msgstr "Wijzig een Specifiek Veld voor deze rij %1" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "Wijzig een scrip voor deze rij %1" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "Wijzig een scrip welke betrekking heeft op alle rijen" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Wijzig objecten geassocieerd aan %1" + #: NOT FOUND IN SOURCE msgid "Modify dates for # %1" msgstr "Wijzig data voor # %1" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "Wijzig data voor #%1" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "Wijzig data voor ticket # %1" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Wijzig globale groepsrechten" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "Wijzig globale groepsrechten" -#: NOT FOUND IN SOURCE -msgid "Modify global rights for groups" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Modify global rights for users" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Modify global scrips" -msgstr "" - -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" -msgstr "" +msgstr "Wijzig globale gebruikersrechten" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "Wijzig globale gebruikersrechten" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "Wijzig groepsmetadata of verwijder groep" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Wijzig groepsrechten voor specifiek veld %1" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "Wijzig groepsrechten voor groep %1" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "Wijzig groepsrechten voor rij %1" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "Wijzig lidmaatschap rooster voor dze groep" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "Wijzig uw eigen RT " -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "Wijzig mensen gekoppeld aan rij %1" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "Wijzig mensen gekoppeld aan ticket #%1" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "Wijzig scrips voor rij %1" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "Wijzig scrips welke betrekking hebben op alle rijen" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "Wijzig sjabloon %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" -msgstr "" +msgstr "Wijzig sjablonen die van toepassing zijn op alle rijen" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "Wijzig de groep %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "Wijzig de toeschouwers van de rij" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Wijzig de gebruiker %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "Wijzig ticket # %1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "Wijzig ticket #%1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "Wijzig tickets" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Wijzig gebruikersrechten voor specifiek veld %1" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Wijzig gebruikersrechten voor groep %1" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "Wijzig gebruikersrechten voor rij %1" @@ -2534,72 +3011,85 @@ msgstr "Wijzig gebruikersrechten voor rij %1" msgid "Modify watchers for queue '%1'" msgstr "Wijzig toeschouwers voor rij '%1'" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "WijzigACL" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "WijzigEigenLidmaatschap" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "WijzigRijToeschouwers" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "WijzigScrips" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "WijzigZelf" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "WijzigSjabloon" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "WijzigTicket" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Ma." -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "Meer over %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "Meerdere" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "Specificeren van 'Naam' attribuut verplicht" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "Mijn %1 tickets" + #: NOT FOUND IN SOURCE msgid "My Approvals" msgstr "Mijn Goedkeuringen" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" -msgstr "" +msgstr "Mijn goedkeuringen" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Mijn bewaarde zoekopdrachten" + +#: 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 msgid "Name" msgstr "Naam" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Naam in gebruik" @@ -2607,127 +3097,147 @@ msgstr "Naam in gebruik" msgid "Need approval from system administrator" msgstr "Goedkeuring benodigd van de systeem beheerder" -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "Nooit" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Nieuw" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nieuwe Relaties" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Nieuw Wachtwoord" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "Nieuwe Hangende Goedkeuring" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "Nieuwe Relaties" - -#: html/Ticket/Elements/Tabs:36 -msgid "New Search" -msgstr "" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Nieuwe Zoekopdracht" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Nieuw wachtwoord" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Bericht voor nieuw wachtwoord verzonden" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" -msgstr "" +msgstr "Nieuwe rij" -#: html/SelfService/Elements/Tabs:63 +#: NOT FOUND IN SOURCE msgid "New request" msgstr "Nieuw verzoek" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Nieuwe rechten" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "" +msgstr "Nieuw scrip" #: NOT FOUND IN SOURCE msgid "New search" msgstr "Nieuwe zoekopdracht" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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 "" +msgstr "Nieuw sjabloon" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Nieuw ticket" -#: lib/RT/Ticket_Overlay.pm:2771 +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "Nieuw ticket bestaat niet" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" -msgstr "" +msgstr "Nieuwe gebruiker" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Nieuwe gebruiker genaamd" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Nieuwe toeschouwers" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "Nieuwe venster instelling" -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Volgende" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "Volgende pagina" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "Volgende pagina" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "Bijnaam" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "Bijnaam" -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "Geen Klasse gedefinieerd" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "Geen SpecifiekVeld" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Geen SpecifiekVeld gedefinieerd" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "Geen Groep gedefinieerd" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Geen Zoekopdracht" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" msgstr "Geen Rij gedefinieerd" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" -msgstr "Geen RT gebruiker gevonden. Raadpleeg uw RT beheerder.\\n" +msgstr "Geen RT-gebruiker gevonden. Raadpleeg uw RT-beheerder.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "Geen Sjabloon" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "Geen ticket gespecificeerd. Ticket afgebroken " @@ -2735,11 +3245,11 @@ msgstr "Geen ticket gespecificeerd. Ticket afgebroken " msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "Geen ticket gespecificeerd. Ticket wijzigingen afgebroken\\n\\n" -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "Geen actie" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "Geen kolom gespecificeerd" @@ -2747,77 +3257,93 @@ msgstr "Geen kolom gespecificeerd" msgid "No command found\\n" msgstr "Geen commando gevonden\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "Geen commentaar ingevuld over deze gebruiker" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "Geen correspondentie aangehecht" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "Geen omschrijving voor %1" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Geen groep gespecificeerd" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "Geen wachtwoord ingesteld" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "Geen rechten om rijen te creëren" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "Geen rechten om tickets te creëren in de rij '%1'" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "Geen rechten om gebruikers te creëren" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "Geen rechten om dat ticket te tonen" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "Geen rechten om verversing ticket te bekijken" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "Geen hoofd gespecificeerd" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "Geen hoofden geselecteerd" -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "Geen rijen gevonden die aan de zoekcriteria voldoen" -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" -msgstr "" +msgstr "Geen rechten gevonden" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "Geen rechten toegekend" -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "Geen zoek opdracht om uit te voeren." +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Geen onderwerp" + #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "Geen ticket id gespecificeerd" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "Geen transactie type gespecificeerd" @@ -2825,309 +3351,400 @@ msgstr "Geen transactie type gespecificeerd" msgid "No user or email address specified" msgstr "Geen gebruiker of email-adres gespecificeerd" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "Geen gebruikers gevonden die aan de zoekcriteria voldoen" -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "Geen geldige RT gebruiker gevonden. RT cvs behandelaar losgemaakt. Neemt u alstublieft contact op met uw RT beheerder.\\n" -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "Geen waarde gestuurd naar _Set!\\n" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" -msgstr "" +msgstr "Niemand" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "Nietbestaand veld?" -#: html/Elements/Login:99 -msgid "Not logged in" -msgstr "" - -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "Niet aangemeld." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Niet gezet" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "Nog niet geïmplementeerd." -#: html/Admin/Groups/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Not yet implemented...." msgstr "Nog niet geïmplementeerd...." -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "Notities" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "Bericht kon niet verstuurd worden" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "Bericht AdminCcs" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "Bericht AdminCcs als Commentaar" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "Bericht Andere Ontvangers" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "Bericht Andere Ontvangers als Commentaar" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "Bericht Eigenaar" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "Bericht Eigenaar als Commentaar" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "Bericht Eigenaars en AdminCcs van nieuwe zaken welke hangende hun goedkeuring zijn" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "Bericht Aanvragers" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "Bericht Aanvragers en Ccs" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "Bericht Aanvragers en Ccs als Commentaar" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "Bericht Aanvragers, Ccs en AdminCcs" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "Bericht Aanvragers, Ccs en AdminCcs als Commentaar" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "nov." -#: NOT FOUND IN SOURCE -msgid "November" +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" msgstr "" -#: lib/RT/Record.pm:157 +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "Object kon niet gecreëerd worden" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "Object gecreëerd" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "oct." -#: NOT FOUND IN SOURCE -msgid "October" +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" msgstr "" -#: html/Elements/SelectDateRelation:35 +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "Bij" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "Bij Commentaar" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "Bij Overeenkomst" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "Bij Creatie" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "Bij Eigenaarwijziging" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "Bij Rijwijziging" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "Bij Oplossing" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "Bij Statuswijziging" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "Bij Transactie" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "Toon alleen goedkeuringen voor verzoeken gecreëerd na %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "Toon alleen goedkeuringen voor verzoeken gecreëerd voor %1" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Open" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Open" -#: html/SelfService/Elements/Tabs:57 +#: NOT FOUND IN SOURCE msgid "Open requests" msgstr "Open verzoeken" -#: html/Admin/Users/Prefs.html:41 +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "Open tickets (van lijst) in een nieuw venster" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "Open tickets (van lijst) in een ander venster" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" -msgstr "" +msgstr "Open ticket bij correspondentie" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Sorteer op" -#: html/Search/Elements/PickRestriction:101 +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "Ordening en sortering" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "Organisatie" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "Voortgekomen uit ticket: #%1" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "Naar mate de tijd vordert, verschuift de prioriteit richting" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "Eigen tickets" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "EigenTicket" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "Eigenaar" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) +#: NOT FOUND IN SOURCE msgid "Owner changed from %1 to %2" msgstr "Eigenaar veranderd van %1 naar %2" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "Eigenaar gedwongen veranderd van %1 naar %2" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "Eigenaar is" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Pagina %1 van %2" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Pieper" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "Pieper" -#: NOT FOUND IN SOURCE -msgid "Parent" -msgstr "" - -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Ouders" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Wachtwoord" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" -msgstr "Wachtwoord Herinerring" +msgstr "Wachtwoord Herinnering" + +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "Wachtwoord te kort" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Wachtwoord: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "" + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "Mensen" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "Verricht een gebruiker gedefiniëerde actie" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Perl-configuratie" + +#: 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 msgid "Permission Denied" msgstr "Toestemming Geweigerd" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" -msgstr "" +msgstr "Persoonlijke Groepen" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Persoonlijke groepen" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Persoonlijke groepen:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Telefoonnummers" -#: html/Admin/Users/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Placeholder" msgstr "Plaatshouder" -#: NOT FOUND IN SOURCE -msgid "Pref" -msgstr "" - -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "Voorkeuren" @@ -3135,15 +3752,19 @@ msgstr "Voorkeuren" msgid "Prefs" msgstr "Voorkeuren" -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Bereid Plaatshouder Voor" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Vorige" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "Vorige pagina" @@ -3151,41 +3772,57 @@ msgstr "Vorige pagina" msgid "Pri" msgstr "Pri" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "Hoofd %1 niet gevonden." -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Prioriteit" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "Prioriteit begint bij" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "Privacy:" + #: etc/initialdata:25 msgid "Privileged" msgstr "Gerechtigd" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "Gerechtigde status: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "Gerechtigde gebruikers" +#: NOT FOUND IN SOURCE +msgid "Projects" +msgstr "Projecten" + #: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 msgid "Pseudogroup for internal use" msgstr "Pseudogroep voor intern gebruik" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "" + +#: 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 msgid "Queue" msgstr "Rij" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" @@ -3195,11 +3832,7 @@ msgstr "Rij %1 niet gevonden" msgid "Queue '%1' not found\\n" msgstr "Rij '%1' niet gevonden\\n" -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "" - -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "Rij Naam" @@ -3207,19 +3840,19 @@ msgstr "Rij Naam" msgid "Queue Scrips" msgstr "Rij Scrips" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "Rij bestaat al" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "Rij kon niet aangemaakt worden" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "Rij kon niet geladen worden." -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "Rij aangemaakt" @@ -3227,38 +3860,45 @@ msgstr "Rij aangemaakt" msgid "Queue is not specified." msgstr "Rij is niet gespecificeerd" -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "Rij niet gevonden" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "Rijen" -#: html/Elements/Login:34 +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 voor %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." -msgstr "RT %1 van <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." +msgstr "RT %1 van <a href=\"http://bestpractical.com/\">Best Practical Solutions, LLC</a>." #: NOT FOUND IN SOURCE msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" -msgstr "" - -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "RT Beheer" @@ -3278,7 +3918,7 @@ msgstr "RT Configuratie fout" msgid "RT Critical error. Message not recorded!" msgstr "RT Kritieke fout: Bericht niet bewaard!" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "RT Fout" @@ -3287,16 +3927,16 @@ msgid "RT Received mail (%1) from itself." msgstr "RT Ontving mail (%1) van zichzelf." #: NOT FOUND IN SOURCE -msgid "RT Recieved mail (%1) from itself." -msgstr "" - -#: html/SelfService/Closed.html:25 msgid "RT Self Service / Closed Tickets" msgstr "RT Zelfbediening / Afgesloten Tickets" -#: html/index.html:25 html/index.html:28 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "RT Variabelen" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" -msgstr "" +msgstr "RT in een oogopslag" #: NOT FOUND IN SOURCE msgid "RT couldn't authenticate you" @@ -3310,11 +3950,15 @@ msgstr "RT kon de verzoeker niet vinden in zijn interne database" msgid "RT couldn't find the queue: %1" msgstr "RT kon de rij %1 niet vinden" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "RT kon deze PGP signatuur niet valideren. \\n" -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT voor %1" @@ -3327,16 +3971,11 @@ msgstr "RT voor %1: %2" msgid "RT has proccessed your commands" msgstr "RT heeft uw commando's verwerkt" -#: html/Elements/Login:83 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Het is gedistribueerd onder <a href=\"http://www.gnu.org/copyleft/gpl.html\">Versie 2 van de GNU General Public License.</a>"" #: NOT FOUND IN SOURCE -msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "RT thinks this message may be a bounce" msgstr "RT denkt dat dit bericht onbestelbaar zou kunnen zijn" @@ -3348,72 +3987,92 @@ msgstr "RT zal dit bericht verwerken als of het ongesigneerd is.\\n" msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." msgstr "RT's email commando modus vereist PGP authenticatie. Of u heeft uw bericht niet gesigneerd, of uw signatuur kon niet geverifieerd worden." -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "Echte Naam" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "EchteNaam" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "Naar gerefeerd door" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "Refereert aan" #: NOT FOUND IN SOURCE -msgid "RefersTo" -msgstr "" - -#: NOT FOUND IN SOURCE msgid "Refine" msgstr "Verfijn" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "Verfijn Zoekopdracht" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "Ververs deze pagina elke %1 minuten." -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "Relaties" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Verwijder AdminCc" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Verwijder Cc" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Verwijder Verzoeker" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Antwoord" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Antwoord naar adres" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Antwoord naar verzoekers" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "Antwoord op tickets" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "AntwoordOpTicket" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Verzoeker" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "Verzoeker email adres" @@ -3421,102 +4080,107 @@ msgstr "Verzoeker email adres" msgid "Requestor(s)" msgstr "Verzoeker(s)" -#: NOT FOUND IN SOURCE -msgid "RequestorAddresses" -msgstr "" - -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Verzoekers" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "Verzoek is terug verwacht" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Verplichte parameter '%1' ontbreekt" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Herstel" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Woonplaats" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "Los op" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "Los ticket #%1 (%2) op" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "Opgelost" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "Antwoord aan verzoekers" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Resultaten" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "Resultaten per pagina" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" -msgstr "Type wachtwoord opnieuw" +msgstr "Geef wachtwoord opnieuw" + +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Herstel" #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "Recht %1 niet gevonden voor %2 %3 in bereik %4 (%5)\\n" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Recht Gedelegeerd" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Recht Toegekend" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Recht Geladen" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "Recht kon niet afgenomen worden" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Recht niet gevonden" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "Recht niet geladen" -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" -msgstr "" +msgstr "Recht ingetrokken" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Rechten" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Rollen" @@ -3524,32 +4188,59 @@ msgstr "Rollen" msgid "RootApproval" msgstr "RootGoedkeuring" -#: lib/RT/Date.pm:393 +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "" + +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "Za." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Bewaar" + +#: 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 msgid "Save Changes" msgstr "Bewaarwijzigingen" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" -msgstr "Bewaarwijzigingen" +msgstr "Bewaar wijzigingen" + +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" -#: html/Admin/Global/Scrip.html:49 +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Opgeslagen zoekopdrachten" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" -msgstr "" +msgstr "Scrip #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "Scrip aangemaakt" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "Script verwijderd" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "Scrips" @@ -3557,11 +4248,11 @@ msgstr "Scrips" msgid "Scrips for %1\\n" msgstr "Scrips voor %1\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "Scrips welke betrekking hebben op alle rijen" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "Zoek" @@ -3569,220 +4260,332 @@ msgstr "Zoek" msgid "Search Criteria" msgstr "Zoek Criteria" -#: html/Approvals/Elements/PendingMyApproval:39 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Searches can't be associated with that kind of object" +msgstr "Zoekopdrachten kunnen niet met dat type object geassocieerd worden" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "Veiligheid" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "ZieRij" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "Selecteer een groep" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "Selecteer een rij" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "Selecteer een gebruiker" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "" -#: lib/RT/CustomField_Overlay.pm:352 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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 "" -#: html/Admin/Elements/UserTabs:49 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" msgstr "SelecteerMeerdere" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectSingle" msgstr "SelecteerEnkele" -#: html/SelfService/index.html:25 +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Self Service" msgstr "Zelfbediening" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "Stuurt mail naar alle toeschouwers" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "Stuurt mail naar alle toeschouwers als een \"commentaar\"" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "Stuurt mail naar alle verzoekers en Ccs" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "Stuurt mail naar alle verzoekers en Ccs als een \"commentaar\"" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "Stuurt een bericht aan de verzoekers" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "Stuurt mail aan expliciet genoemde Ccs en Bccs" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "Stuurt mail aan de administratieve Ccs" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "Stuurt mail aan de administratieve Ccs als een \"commentaar\"" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "Stuurt mail aan de eigenaar" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Sep." -#: NOT FOUND IN SOURCE -msgid "September" +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" msgstr "" -#: NOT FOUND IN SOURCE +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "Toon Resultaten" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "Toon goedgekeurde verzoeken" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Toon beginselen" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "Toon afgewezen verzoeken" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Toon details" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "Toon hangende verzoeken" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "Toon verzoeken die wachten op andere goedkeuringen" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" msgstr "Toon ticket privé commentaar" -#: lib/RT/Queue_Overlay.pm:79 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" msgstr "Toon ticket samenvattingen" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "ToonACL" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "ToonUitgaandeEmail" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "ToonOpgeslagenZoekopdrachten" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "ToonScrips" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "ToonSjabloon" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "ToonTicket" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "ToonTicketCommentaar" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "Schrijf in als een ticket Verzoeker of ticket of rij Cc" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "Schrijf in als een ticket of rij AdminCc" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "Signatuur" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) -msgid "Signed in as %1" -msgstr "" - -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Enkel" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "" -#: html/Admin/Elements/EditCustomFieldValues:31 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Sort key" msgstr "Sorteer sleutel" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "Sorteer resultaten op" -#: html/Admin/Elements/AddCustomFieldValue:25 +#: NOT FOUND IN SOURCE msgid "SortOrder" msgstr "SorteerVolgorde" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "Stadium" + #: NOT FOUND IN SOURCE msgid "Stalled" -msgstr "Blijft Steken" +msgstr "Is blijven steken" #: NOT FOUND IN SOURCE msgid "Start page" msgstr "Start pagina" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "Gestart" @@ -3790,7 +4593,7 @@ msgstr "Gestart" msgid "Started date '%1' could not be parsed" msgstr "Startum '%1' kon niet ontleed worden" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "Begint" @@ -3802,20 +4605,19 @@ msgstr "Begint op" msgid "Starts date '%1' could not be parsed" msgstr "Begindatum '%1' kon niet ontleed worden" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Staat" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "Status" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" msgstr "" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Status veranderd van %1 naar %2" @@ -3823,25 +4625,41 @@ msgstr "Status veranderd van %1 naar %2" msgid "StatusChange" msgstr "StatusVerandering" -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "Steel" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Steel ticket" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "SteelTicket" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) -msgid "Stolen from %1 " +msgid "Stolen from %1" msgstr "Gestolen van %1" -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: NOT FOUND IN SOURCE +msgid "Stolen from %1 " +msgstr "Gestolen van %1 " + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "Onderwerp" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "Onderwerp veranderd naar %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Registreer" @@ -3849,39 +4667,44 @@ msgstr "Registreer" msgid "Submit Workflow" msgstr "Registreer Workflow" -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "Gelukt" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Zo." -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "SuperGebruiker" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "Systeem" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "Systeemconfiguratie" + +#: 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 "Systeem Fout" -#: NOT FOUND IN SOURCE -msgid "System Error. Right not granted." +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" msgstr "" -#: NOT FOUND IN SOURCE -msgid "System Error. right not granted" +#: html/Admin/Tools/index.html:47 +msgid "System Tools" msgstr "" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "Systeem fout. Recht niet gedelegeerd." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "Systeem fout. Recht niet toegekend." @@ -3889,7 +4712,7 @@ msgstr "Systeem fout. Recht niet toegekend." msgid "System error. Unable to grant rights." msgstr "Systeem fout. Niet mogelijk om rechten toe te kennen" -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "Systeem groepen" @@ -3897,32 +4720,44 @@ msgstr "Systeem groepen" msgid "SystemRolegroup for internal use" msgstr "SysteemRolgroep voor intern gebruik" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRING" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "Neem" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "Neem ticket" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "NeemTicket" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Genomen" -#: html/Admin/Elements/EditScrip:81 +#: NOT FOUND IN SOURCE +msgid "Task" +msgstr "Taak" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Sjabloon" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" -msgstr "" +msgstr "Sjabloon verwijderd" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Sjabloon niet gevonden" @@ -3930,11 +4765,11 @@ msgstr "Sjabloon niet gevonden" msgid "Template not found\\n" msgstr "Sjabloon niet gevonden\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Sjabloon ontleed" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Sjablonen" @@ -3942,218 +4777,235 @@ msgstr "Sjablonen" msgid "Templates for %1\\n" msgstr "Sjablonen voor %1\\n" -#: lib/RT/Interface/Web.pm:858 +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "Tekst" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "Dat is al de huidige waarde" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Dat is geen waarde voor dit specifieke veld" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Dat is de zelfde waarde" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "Dat hoofd heeft reeds dat recht" + +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "Dat hoofd is reeds een %1 voor deze rij" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "Dat hoofd is reeds een %1 voor dit ticket" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "Dat hoofd is geen %1 voor deze rij" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "Dat hoofd is geen %1 voor dit ticket" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "Die rij bestaat niet" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "Dat ticket heeft onopgeloste afhankelijkheden" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: NOT FOUND IN SOURCE msgid "That user already has that right" msgstr "Die gebruiker heeft dat recht reeds" -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "Die gebruiker is al eigenaar van dat ticket" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Die gebruiker bestaat niet" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "Die gebruiker is al gerechtigd" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "Die gebruiker is reeds ontrechtigd" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "Die gebruiker is nu gerechtigd" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "Die gebruiker is nu ontrechtigd" -#: NOT FOUND IN SOURCE -msgid "That user is now unprivilegedileged" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "Die gebruiker mag geen eigenaar zijn van tickets in die rij" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "Dat is niet een numeriek ID" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "De Beginselen" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "De CC van een ticket" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "De administratieve CC van een ticket" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "Het commentaar is bewaard" -#: bin/rt-crontool:198 +#: 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 "Het volgende commando zal alle actieve tickets in de rij 'general' vinden en hun prioriteit op 99 zetten als ze meer dan 4 uur niet aangeraakt zijn:" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "De volgende commando's zijn niet verwerkt:\\n\\n" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "De waarde is gezet." -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "De eigenaar van een ticket" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "De verzoeker van een ticket" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Dit commentaar is gewoonlijk niet zichtbaar voor de gebruiker" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "Dit specifieke veld is niet van toepassing op dat object" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Dit onderdeel is alleen beschikbaar voor systeembeheerders" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Dit bericht zal verstuurd worden aan..." + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "Dit ticket %1 %2 (%3)\\n" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "Dit gereedschap stelt de gebruiker in staat arbitraire perl modules te gebruiken vanuit RT" -#: lib/RT/Transaction_Overlay.pm:253 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "Het lijkt erop alsof deze transactie geen inhoud heeft" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" -msgstr "" +msgstr "De %1 tickets met hoogste prioriteit van deze gebruiker" #: NOT FOUND IN SOURCE msgid "This user's 25 highest priority tickets" msgstr "De 25 hoogste prioriteit tickets van deze gebruiker" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Do." -#: NOT FOUND IN SOURCE -msgid "Ticket" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 %2" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Ticket # %1 Jumbo update: %2" -msgstr "" - -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "Ticket #%1 Jumbo actualisering: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "Ticket #%1: %2" -#: lib/RT/Ticket_Overlay.pm:608 +#: 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) +msgid "Ticket %1" +msgstr "Ticket %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "Ticket %1 aangemaakt in rij '%2'" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "Toclet %1 geladen\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "Ticket %1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Ticket-Specifieke Velden" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "Ticket Historie # %1 %2" -#: html/SelfService/Display.html:34 +#: NOT FOUND IN SOURCE msgid "Ticket Id" msgstr "Ticket Id" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "Ticket Opgelost" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Ticket Transacties" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "Ticket aanhechting" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "Ticket inhoud" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "Ticket inhoud type" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "Ticket kong niet aangemaakt worden vanwege een interne fout" -#: lib/RT/Transaction_Overlay.pm:522 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "Ticket aangemaakt" @@ -4161,70 +5013,76 @@ msgstr "Ticket aangemaakt" msgid "Ticket creation failed" msgstr "Ticket aanmaken gefaald" -#: lib/RT/Transaction_Overlay.pm:527 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "Ticket verwijderd" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" msgstr "Ticket id niet gevonden" -#: NOT FOUND IN SOURCE -msgid "Ticket killed" -msgstr "" +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Ticket metagegevens" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "Ticket niet gevonden" -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "Ticket status gewijzigd" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "Ticket toeschouwers" -#: html/Elements/Tabs:49 -msgid "Tickets" +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "Tickets" + +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" msgstr "Tickets %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" msgstr "Tickets %1 door %2" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "Tickets van %1" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "Tickets welke afhankelijk zijn van deze goedkeuring" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "Geschatte Tijd" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "Tijd Over" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "Tijd Gewerkt" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "Tijd over" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "Tijd om te tonen" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "Tijd gewerkt" @@ -4232,40 +5090,61 @@ msgstr "Tijd gewerkt" msgid "TimeLeft" msgstr "TijdOver" -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "TijdGewerkt" -#: bin/rt-commit-handler:402 +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "Om een diff van deze uitvoering te genereren:" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "Om een diff van deze uitvoering te genereren:\\n" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "Voor vragen over support, training, bedrijfsspecifieke software-ontwikkeling of licentieovereenkomsten, gelieve contact op te nemen met %1." + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Verteld" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Hulpstukken" + +#: etc/initialdata:252 msgid "Transaction" msgstr "Transactie" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "Transactie %1 gezuiverd" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "Transactie Gecreëerd" -#: lib/RT/Transaction_Overlay.pm:89 +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Transactie Specifieke Velden" + +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" msgstr "Transactie->Creëer kon niet, aangezien u geen ticket id gespecificeerd heeft" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "Transactie->Cre‘r kon niet aangezien er geen objectttype en -id gespecificeerd is" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "Transacties zijn onwijzigbaar" @@ -4273,106 +5152,174 @@ msgstr "Transacties zijn onwijzigbaar" msgid "Trying to delete a right: %1" msgstr "Tracht een recht te verwijderen: %1" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Di." -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "Type" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Niet geïmplementeerd" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Unix aanmelden" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "UnixGebruikersnaam" -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "Onbekende InhoudCodering %1" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "Ongelimiteerd" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Onbenoemde zoekopdracht" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "Ongerechtigd" -#: lib/RT/Transaction_Overlay.pm:571 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "Vrij" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: NOT FOUND IN SOURCE +msgid "Untitled search" +msgstr "Naamloze zoekopdracht" + +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Ververs" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "Ververs ID" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Ververs Type" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "Ververs al deze tickets in eens" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "Ververs email" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Ververs meer dan ŽŽn ticket" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "Ververs naam" -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "Verversing niet opgeslagen." -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "Ververs geselecteerde tickets" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "Ververs signatuur" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "Ververs ticket" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) +#: NOT FOUND IN SOURCE msgid "Update ticket # %1" msgstr "Ververs ticket # %1" -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "Ververs ticket #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "Ververs ticket #%1 (%2)" -#: lib/RT/Interface/Web.pm:373 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "Verversingstype was noch correspondentie, noch commentaar" -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Ververst" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" msgstr "Gebruiker %1 %2: %3\\n" @@ -4381,6 +5328,11 @@ msgstr "Gebruiker %1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "Gebruiker %1 Wachtwoord: %2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "Gebruiker '%1' niet gevonden" @@ -4389,72 +5341,89 @@ msgstr "Gebruiker '%1' niet gevonden" msgid "User '%1' not found\\n" msgstr "Gebruiker '%1' niet gevonden\\n" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "Gebruiker Gedifiniëerd" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "GebruikersID" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "Gebruiker Id" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "Gebruikersrechten" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "De gebruiker vroeg om een onbekende aanpassing van specifiek veld %1 voor %2 object #%3" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "Gebruiker kon niet aangemaakt worden: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Gebruiker aangemaakt" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "Door gebruiker gedefiniëerde groepen" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Gebruiker opgehaald" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "Gebruiker verwittigd" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "Gebruikers aanzicht" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Door gebruiker gedefinieerde groepen" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Gebruikersnaam" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Gebruikers" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "Gebruikers die voldoen aan de zoek criteria" -#: html/Search/Elements/PickRestriction:51 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Geldige Zoekopdracht" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "WaardeVanRij" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Waarden" -#: NOT FOUND IN SOURCE -msgid "VrijevormEnkele" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "Schouw toe" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "SchouwToeAlsAdminCc" @@ -4462,117 +5431,124 @@ msgstr "SchouwToeAlsAdminCc" msgid "Watcher loaded" msgstr "Toeschouwer geladen" -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Toeschouwers" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "WebCodering" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Wo." -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "Wanneer een ticket goedgekeurd is door alle goedkeurders, voeg correspondentie toe aan het orginele ticket" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "Wanneer een ticket goedgekeurd is door een goedkeurder, voeg correspondentie toe aan het orginele ticket" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "Wanneer een ticket is aangemaakt" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "Wanneer een goedkeuringsticket is aangemaakts, verwittig de Eigenaar en de AdminCc van het onderwerp dat op hun goedkeuring wacht" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "Wanneer iets gebeurt" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "Wanneer een ticket is opgelost" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "Wanneer de eigenaar van een ticket verandert" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "Wanneer de rij van een ticket verandert" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "Wanneer de status van een ticket verandert" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "Wanneer een door de gebruiker gedifiniëerde voorwaarde gebeurt" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "Wanneer commentaar binnenkomt" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "Wanneer correspondentie binnenkomt" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Werk" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "WerkTelefoon" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Gewerkt" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "U bent al eigenaar van dit ticket" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "U bent geen geauthorizeerde gebruiker" -#: lib/RT/Ticket_Overlay.pm:2930 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" -msgstr "U kunt alleen tickets opnieuw toe bedelen die van u zijn, of van niemand" +msgstr "U kunt alleen tickets opnieuw toebedelen die van u zijn, of van niemand" #: NOT FOUND IN SOURCE msgid "You don't have permission to view that ticket.\\n" msgstr "U heeft geen toestemming om dat ticket te bekijken" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "U vond %1 tickets in rij %2" -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "U bent afgemeld bij RT" -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "U heeft geen toestemming om tickets aan te maken in die rij." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "U mag geen verzoeken aanmaken in die rij" -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "U mag zich weer aanmelden" -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) +#: NOT FOUND IN SOURCE msgid "Your %1 requests" msgstr "Uw %1 verzoeken" @@ -4580,60 +5556,68 @@ msgstr "Uw %1 verzoeken" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "Uw RT beheerder heeft de mail-aliasses welke RT aanroepen verkeerd geconfigureerd" -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "Uw verzoek is goedgekeurd door %1. Er zijn wellicht nog andere hangende goedkeuringen." -#: etc/initialdata:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "Uw verzoek is goedgekeurd." -#: NOT FOUND IN SOURCE -msgid "Your request was rejected" -msgstr "" - -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "Uw verzoek was geweigerd." -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "Uw gebruikersnaam of wachtwoord zijn onjuist" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "Postcode" -#: NOT FOUND IN SOURCE -msgid "[no subject]" +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" msgstr "" -#: html/User/Elements/DelegateRights:59 +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "zoals gegeven aan %1" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "bevat" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" msgstr "inhoud" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "inhoud-type" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "correspondentie (waarschijnlijk) niet verstuurd" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "correspondentie verstuurd" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "dagen" @@ -4641,171 +5625,195 @@ msgstr "dagen" msgid "dead" msgstr "dood" -#: html/Search/Listing.html:75 +#: NOT FOUND IN SOURCE msgid "delete" msgstr "verwijder" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "verwijderd" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "voldoet niet aan" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "bevat niet" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "gelijk aan" -#: NOT FOUND IN SOURCE -msgid "false" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" msgstr "" -#: html/Elements/SelectAttachmentField:28 +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "filename" msgstr "bestandsnaam" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "groter dan" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "groep '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "uren" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "id" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "is" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "is niet" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "minder dan" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "voldoet aan" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "min" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "minuten" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "wijzigingen\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "maanden" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "nieuw" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "geen" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "niet gelijk aan" -#: NOT FOUND IN SOURCE -msgid "notlike" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "open" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "persoonlijke groep '%1' voor gebruiker '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "rij %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "geweigerd" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "opgelost" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "sec" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "bleef steken" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "systeem %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "systeem groep '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "het aanroepende component specificeerde niet waarom" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "ticket #%1 %2" -#: NOT FOUND IN SOURCE -msgid "true" -msgstr "" - -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "onbeschreven groep %1" -#: NOT FOUND IN SOURCE -msgid "undescripbed group %1" -msgstr "" - -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "gebruiker %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "weken" @@ -4813,7 +5821,7 @@ msgstr "weken" msgid "with template %1" msgstr "met sjabloon %1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "jaren" diff --git a/rt/lib/RT/I18N/no.po b/rt/lib/RT/I18N/no.po index 5b1ab05cb..995ab7852 100644 --- a/rt/lib/RT/I18N/no.po +++ b/rt/lib/RT/I18N/no.po @@ -1,68 +1,74 @@ msgid "" msgstr "" -"Project-Id-Version: RT 3.0.1\n" +"Project-Id-Version: RT 3.0.11\n" "POT-Creation-Date: 2003-04-01 06:06+0200\n" "PO-Revision-Date: 2003-05-01 04:47+0200\n" -"Last-Translator: Marcus Ramberg <marcus@thefeed.no>\n" +"Last-Translator: Ronny Pettersen <ronny.pettersen@edb.com>\n" "Language-Team: RT Norwegian <rt@thefeed.no>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" - - -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) +#: NOT FOUND IN SOURCE msgid "#%1" msgstr "#%1" -#: html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:50 html/SelfService/Display.html:25 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->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 #. ($Ticket->id, $Ticket->Subject) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "#%1: %2" -#: lib/RT/Date.pm:337 +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) +#: NOT FOUND IN SOURCE msgid "%1 %2 %3" msgstr "%1 %2 %3" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %3. %2 %7 %4:%5:%6" -#: lib/RT/Ticket_Overlay.pm:3505 lib/RT/Transaction_Overlay.pm:557 lib/RT/Transaction_Overlay.pm:599 +#: 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) msgid "%1 %2 added" msgstr "%1 %2 lagt til" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "%1 %2 siden" -#: lib/RT/Ticket_Overlay.pm:3511 lib/RT/Transaction_Overlay.pm:564 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 ble endret til %3" -#: lib/RT/Ticket_Overlay.pm:3508 lib/RT/Transaction_Overlay.pm:560 lib/RT/Transaction_Overlay.pm:605 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" @@ -72,53 +78,94 @@ msgstr "%1 %2 slettet" msgid "%1 %2 of group %3" msgstr "%1 %2 av gruppen %3" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" msgstr "%1 %2 med mal %3" #: NOT FOUND IN SOURCE msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 denne biletten\\n"" +msgstr "%1 (%2) %3 denne saken\\n" + +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "" + +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) +#: NOT FOUND IN SOURCE msgid "%1 - %2 shown" msgstr "%1 - %2 vist" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - Et parameter til %2" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - Viser statusoppdateringer til STDOUT" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" -msgstr "%1 - Oppgi kommandomodulen du ønsker  bruke" +msgstr "%1 - Oppgi kommandomodulen du ønsker Ã¥ bruke" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" -msgstr "%1 - Oppgiv betingelsesmodulen du ønsker  bruke" +msgstr "%1 - Oppgi betingelsesmodulen du ønsker Ã¥ bruke" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" -msgstr "%1 - Oppgi søkemodulen du ønsker  bruke" +msgstr "%1 - Oppgi søkemodulen du ønsker Ã¥ bruke" + + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" -#: lib/RT/ScripAction_Overlay.pm:122 +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "%1 KommandoScript lastet" -#: lib/RT/Ticket_Overlay.pm:3538 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 ble lagt til som verdi for %2" @@ -135,27 +182,31 @@ msgstr "%1 alias trenger en saksnummer Ã¥ jobbe mot " msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "%1 alias trenger et saksnummer Ã¥ jobbe mot (fra %2) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "%1 ser ut til Ã¥ være et lokalt objekt, men kan ikke finnes i databasen" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:481 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 av %2" -#: lib/RT/Transaction_Overlay.pm:535 lib/RT/Transaction_Overlay.pm:624 lib/RT/Transaction_Overlay.pm:633 lib/RT/Transaction_Overlay.pm:636 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 ble endret fra %2 til %3" -#: lib/RT/Interface/Web.pm:891 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "%1 kunne ikke settes til %2." @@ -163,38 +214,49 @@ msgstr "%1 kunne ikke settes til %2." msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1 kunne ikke starte en transaksjon (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2817 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 kunne ikke sette status til løst. RT-basen kan være inkonsistent." -#: html/Elements/MyTickets:25 +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." msgstr "Mine %1 høyst prioriterte saker..." -#: html/Elements/MyRequests:25 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." msgstr "Mine %1 høyst prioriterte forespørsler..." -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "%1 er et verktøy for Ã¥ behandle saker fra eksterne verktøy, slik som cron." -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 er ikke lenger en %2 for denne køen." -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1 er ikke lenger en %2 for denne saken." -#: lib/RT/Ticket_Overlay.pm:3594 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 er ikke lenger en verdi for fleksifeltet %2" @@ -202,16 +264,29 @@ msgstr "%1 er ikke lenger en verdi for fleksifeltet %2" msgid "%1 isn't a valid Queue id." msgstr "%1 er ikke et gyldig saksnummer." -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 min" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1 vises ikke" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "%1 rettigheter" @@ -232,7 +307,7 @@ msgstr "%1 er ukjent type for %2" msgid "%1 was created without a CurrentUser\\n" msgstr "%1 ble opprettet uten en aktiv bruker\\n" -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 vil løse alle medlemmer av en løst gruppesak." @@ -241,22 +316,36 @@ msgstr "%1 vil løse alle medlemmer av en løst gruppesak." msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." msgstr "%1 vil stoppe en [lokal] BASE hvis den er avhengig av/medlem av en tilkoblet sak." -#: lib/RT/Transaction_Overlay.pm:433 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: ingen vedlegg oppgitt" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1b" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' er en ugyldig statusverdi" @@ -273,7 +362,7 @@ msgstr "(Merk for Ã¥ slette gruppemedlem)" msgid "(Check box to delete scrip)" msgstr "(Merk for Ã¥ slette Scrip)" -#: html/Admin/Elements/EditCustomFieldValues:25 html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(Merk for Ã¥ slette)" @@ -281,37 +370,49 @@ msgstr "(Merk for Ã¥ slette)" msgid "(Check boxes to delete)" msgstr "(Merk boksene for Ã¥ slette)" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" msgstr "(Skriv inn referansenummer eller URler, separert med mellomrom)" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "(Standard er %1);H +msgid "(If left blank, will default to %1)" +msgstr "(Settes til standard %1 hvis blank)" #: NOT FOUND IN SOURCE msgid "(No Value)" msgstr "(Ingen Verdi)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "(Ingen fleksifelt)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Ingen medlemmer)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(Ingen scrips)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "(Ingen maler)" -#: html/Ticket/Update.html:85 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "" + +#: 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 "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epostaddresser. Endrer <b>ikke</b> hvem som vil motta fremtidige oppdatreinger.)" @@ -319,11 +420,11 @@ msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med ep msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epostaddresser. Endrer <b>ikke</b> hvem som vil motta fremtidige oppdateringer.)" -#: html/Ticket/Create.html:79 +#: 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 "(Sender en kopi av denne oppdateringen til en kommaseparert liste av administrative epostaddresser. Disse vil <b>vil</b> motta fremtidige oppdateringer.)" -#: html/Ticket/Update.html:81 +#: 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 "(Sender en kopi av denne oppdateringen til en komma-separert liste av epostaddresser. Endrer <b>ikke</b> hvem som vil motta fremtidige oppdateringer.)" @@ -331,35 +432,47 @@ msgstr "(Sender en kopi av denne oppdateringen til en komma-separert liste av ep msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Sender en kopi av denne oppdateringen til en kommaseparert liste med epost-addresser. Endrer <b->ikke</b> hvem som vi motta fremtige utfordrer dere nÃ¥." -#: html/Ticket/Create.html:69 +#: 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 "(Sender en kopi av dette oppdateringen til en kommaseparert liste med epostaddresser. Disse <b>vill</b> motta fremtidige oppdateringer.)" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(tom)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "(navn ikke oppgitt)" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(ingen overskrift)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:534 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(ingen verdi)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(bare en sak)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(Venter pÃ¥ godkjenning)" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" msgstr "(venter pÃ¥ andre saker)" @@ -367,11 +480,11 @@ msgstr "(venter pÃ¥ andre saker)" msgid "(requestor's group)" msgstr "(kundens gruppe)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(nødvendig)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(ingen tittel)" @@ -383,15 +496,23 @@ msgstr "Mine 25 høyst prioriterte saker..." msgid "25 highest priority tickets I requested..." msgstr "Mine 25 høyst priorterte forespørsler..." -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket-:Status%>" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "<% $_ %>" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"Ny sak i\"> %1" @@ -400,10 +521,14 @@ msgstr "<input type=\"submit\" value=\"Ny sak i\"> %1" msgid "??????" msgstr "??????" -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "En tom mal" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + #: NOT FOUND IN SOURCE msgid "ACE Deleted" msgstr "ACE slettet" @@ -420,52 +545,72 @@ msgstr "ACE kunne ikke slettes" msgid "ACE could not be found" msgstr "fant ikke ACE" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE ikke funnet" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACEr kan bare opprettes og slettes." -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Avbryter for  ung uønsket saksendring" +msgstr "Avbryter for Ã¥ ungÃ¥ uÃ¥nsket saksendring" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "Om meg" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "Aksesskontroll" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Handling" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Handling %1 finnes ikke" -#: bin/rt-crontool:123 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "Handling skrevet." -#: bin/rt-crontool:119 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "Handling forberedt" -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "Legg til AdminCc" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "Legg til Cc" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" msgstr "Legg til flere filer" @@ -473,11 +618,11 @@ msgstr "Legg til flere filer" msgid "Add Next State" msgstr "Legg til neste status" -#: html/Search/Bulk.html:88 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "Legg til kunde" -#: html/Admin/Elements/AddCustomFieldValue:26 +#: html/Admin/Elements/AddCustomFieldValue:46 msgid "Add Value" msgstr "Legg til verdi" @@ -491,7 +636,7 @@ msgstr "Legg til et Scrip som gjelder for alle køer" #: NOT FOUND IN SOURCE msgid "Add a keyword selection to this queue" -msgstr "Legg til et nøkkelordvalg p denne køen" +msgstr "Legg til et nøkkelordvalg pÃ¥ denne køen" #: NOT FOUND IN SOURCE msgid "Add a new a global scrip" @@ -501,57 +646,65 @@ msgstr "Legg til et globalt Scrip" msgid "Add a scrip to this queue" msgstr "Legg til et Scrip til denne køen" -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" msgstr "Legg til et Scrip som vil gjelde for alle køer" -#: html/Search/Bulk.html:118 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "Legg til kommentarer eller svar til denne saken" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "Legg til medlemmer" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Legg til overvÃ¥kere" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "AddNextState" msgstr "AddNextState" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "La til primær som en %1 for denne køen" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "La til primær som en %1 for denne saken" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Adresse1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Adresse2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Admin Cc" -#: etc/initialdata:280 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "Admin Kommentar" -#: etc/initialdata:259 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "Admin-korrespondanse" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "Adminkøer" @@ -559,7 +712,7 @@ msgstr "Adminkøer" msgid "Admin users" msgstr "Adminbrukere" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "Admin/Global konfigurasjon" @@ -567,7 +720,7 @@ msgstr "Admin/Global konfigurasjon" msgid "Admin/Groups" msgstr "Admin/Grupper" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "Admin/Køer/Grunnleggende" @@ -575,7 +728,7 @@ msgstr "Admin/Køer/Grunnleggende" msgid "AdminAllPersonalGroups" msgstr "AdminAllePersonalGrupper" -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "AdminCc" @@ -587,31 +740,35 @@ msgstr "AdminKommentar" msgid "AdminCorrespondence" msgstr "AdminKorrespondanse" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" msgstr "AdminFleksifelt" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "AdminGruppe" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "AdminGruppeMedlemskap" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "AdminEgnePersonligeGrupper" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "AdminKø" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "AdminBrukere" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Administrativ Cc" @@ -619,11 +776,15 @@ msgstr "Administrativ Cc" msgid "Admins" msgstr "Admin" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "Avansert Søk" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "Etter" @@ -631,6 +792,10 @@ msgstr "Etter" msgid "Age" msgstr "Alder" +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Alias" msgstr "Alias" @@ -639,11 +804,15 @@ msgstr "Alias" msgid "Alias for" msgstr "Alias for" -#: html/Admin/Elements/EditCustomFields:96 +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "All Custom Fields" msgstr "Alle Fleksifelt" -#: html/Admin/Queues/index.html:53 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "Alle køer" @@ -651,23 +820,39 @@ msgstr "Alle køer" msgid "Always sends a message to the requestors independent of message sender" msgstr "Send alltid en melding til kunden uavhengig av meldingssender" -#: html/Elements/Tabs:56 +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "" + +#: html/Elements/Tabs:74 msgid "Approval" msgstr "Godkjennelse" -#: html/Approvals/Display.html:46 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: 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) msgid "Approval #%1: %2" msgstr "Godkjennelse #%1: %2" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "Godkjenning # %1: Notater kunne ikke lagres pga. systemfeil" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "Godkjenning #%1: Notater lagret" @@ -676,19 +861,27 @@ msgstr "Godkjenning #%1: Notater lagret" msgid "Approval Details" msgstr "Godkjenning - Detaljer" +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Approval diagram" msgstr "Godkjenningsdiagram" -#: html/Approvals/Elements/Approve:44 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "Godkjenn" -#: etc/initialdata:437 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "Godkjenners notater: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "Apr." @@ -696,39 +889,52 @@ msgstr "Apr." msgid "April" msgstr "April" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "Stigende" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:33 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Legg Ved" -#: html/SelfService/Create.html:65 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "Legg ved fil" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "Vedlagt fil" -#: NOT FOUND IN SOURCE +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Vedlegg '%1' kunne ikke lastes" -#: lib/RT/Transaction_Overlay.pm:441 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "Vedlegg opprettet" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "Vedleggsnavn" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "Vedlegg" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "Aug." @@ -736,11 +942,11 @@ msgstr "Aug." msgid "August" msgstr "August" -#: html/Admin/Elements/ModifyUser:66 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "AutSystem" -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "Autosvar" @@ -760,8 +966,7 @@ msgstr "Ugyldig PGP-signatur: %1\\n" msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "Ugyldig vedleggsid. Kunne ikke finne vedlegg '%1'\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "Ugyldig data i %1" @@ -769,19 +974,19 @@ msgstr "Ugyldig data i %1" msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "Ugyldig transaksjonsnummer for vedlegg. %1 skulle vært %2\\n" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "Detaljer" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Bcc" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Sørg for  lagre endringene dine" +msgstr "Sørg for Ã¥ lagre endringene dine" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:320 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "Før" @@ -789,80 +994,113 @@ msgstr "Før" msgid "Begin Approval" msgstr "Begynn Godkjenning" -#: etc/initialdata:202 +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: etc/initialdata:217 msgid "Blank" msgstr "Blank" -#: html/Search/Listing.html:79 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "URL som kan brukes som bokmerke for dette søket" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "Begrens headere" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "Masseoppdatering av saker" -#: lib/RT/User_Overlay.pm:1352 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "Kan ikke endre systembrukere" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "Kan denne primæren se denne køen" -#: lib/RT/CustomField_Overlay.pm:206 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "Kan ikke legge til en verdi for et fleksifelt uten navn" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "Kan ikke koble en sak til seg selv" -#: lib/RT/Ticket_Overlay.pm:2794 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "Kan ikke flette inn i en flettet sak. Denne meldingen bør ikke forekomme" -#: lib/RT/Ticket_Overlay.pm:2612 lib/RT/Ticket_Overlay.pm:2681 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "Kan ikke spesifisere bÃ¥de base og mÃ¥l." -#: html/autohandler:99 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "Kunne ikke oprette bruker: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:49 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "Cc" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "Endre passord" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "Merk for Ã¥ slette" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "Merk for Ã¥ trekke tilbake rettighet" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:57 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Barn" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "By" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "Lukket" -#: html/SelfService/Closed.html:25 +#: NOT FOUND IN SOURCE msgid "Closed Tickets" msgstr "Lukkede Saker" @@ -870,7 +1108,7 @@ msgstr "Lukkede Saker" msgid "Closed requests" msgstr "Lukkede forespørsler" -#: html/SelfService/Elements/Tabs:45 +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 msgid "Closed tickets" msgstr "Lukkede saker" @@ -882,11 +1120,11 @@ msgstr "Kode" msgid "Command not understood!\\n" msgstr "Kunne ikke tolke kommando!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Kommenter" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Kommentaraddresse" @@ -894,40 +1132,39 @@ msgstr "Kommentaraddresse" msgid "Comment not recorded" msgstr "Kommentaren ble ikke lagret" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "Kommenter saker" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "KommenterSak" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "Kommentarer" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "Kommentarer (Ikke send til kunder)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "Kommentarer (ikke sendt til kunder)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "Kommentarer til %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "Kommentarer om denne brukeren" -#: lib/RT/Transaction_Overlay.pm:543 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "La til kommentarer " -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "Lagring forkortet" @@ -935,27 +1172,27 @@ msgstr "Lagring forkortet" msgid "Compile Restrictions" msgstr "Kompilatorrestriksjoner" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "Forutsetning" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "Forutsetning gjelder..." -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "Forutsetning ikke funnet" -#: html/Elements/Tabs:50 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Konfigurasjon" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "Bekreft" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "KontaktInfoSystem" @@ -963,23 +1200,31 @@ msgstr "KontaktInfoSystem" msgid "Contacted date '%1' could not be parsed" msgstr "Kontatdato '%1' kunne ikke tolkes" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Innhold" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Coould not create group" msgstr "Kunne ikke opprette gruppen" -#: etc/initialdata:271 +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "" + +#: etc/initialdata:286 msgid "Correspondence" msgstr "Korrespondanse" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "Korrespondanseaddresse" -#: lib/RT/Transaction_Overlay.pm:539 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Korrespondanse lagt til" @@ -987,7 +1232,7 @@ msgstr "Korrespondanse lagt til" msgid "Correspondence not recorded" msgstr "Korrespondansen ble ikke lagret" -#: lib/RT/Ticket_Overlay.pm:3525 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "Kunne ikke legge til nye fleksifeltverdier for saken. " @@ -995,29 +1240,43 @@ msgstr "Kunne ikke legge til nye fleksifeltverdier for saken. " msgid "Could not add new custom field value for ticket. %1 " msgstr "Kunne ikke legge til nye fleksifeltverdier for saken. %1 " -#: lib/RT/Ticket_Overlay.pm:3031 lib/RT/Ticket_Overlay.pm:3039 lib/RT/Ticket_Overlay.pm:3055 +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "Kunne ikke endre eier. " -#: html/Admin/Elements/EditCustomField:85 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "Kunne ikke opprette fleksifelt" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "Kunne ikke opprette gruppe" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "Kunne ikke opprette mal: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:334 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "Kunne ikke opprette sak. Kø ikke satt" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:422 +#: 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 "Kunne ikke opprette bruker" @@ -1033,11 +1292,11 @@ msgstr "Kunne ikke finne en sak med id %1" msgid "Could not find group %1." msgstr "Kunne ikke finne gruppen %1." -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "Kunne ikke finne eller lage den brukeren" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "Kunne ikke finne den primæren" @@ -1045,35 +1304,51 @@ msgstr "Kunne ikke finne den primæren" msgid "Could not find user %1." msgstr "Kunne ikke finne brukeren %1." -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "Kunne ikke hente gruppen" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "Kunne ikke sette den primæren som %1 for denne køen" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "Kunne ikke sette den primæren som %1 for denne saken" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "Kunne ikke fjerne den primæren som %1 for denne køen" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "Knne ikke fjære den primæren som %1 for denne saken" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "Kunne ikke legge til medlemmmer i gruppen" -#: lib/RT/Ticket_Overlay.pm:3535 lib/RT/Ticket_Overlay.pm:3591 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "Kunne ikke opprette en transaksjon: %1" @@ -1086,15 +1361,15 @@ msgstr "Kunne ikke tolke gpgs svar\\n" msgid "Couldn't find group\\n" msgstr "Kunne ikke finne gruppen\\n" -#: lib/RT/Interface/Web.pm:900 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "Kunne ikke finne raden" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "Kunne ikke finne primæren" -#: lib/RT/CustomField_Overlay.pm:240 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "Kunne ikke finne verdien" @@ -1106,11 +1381,21 @@ msgstr "Kunne ikke finne den overvÃ¥kern" msgid "Couldn't find user\\n" msgstr "Kunne ikke finne bruker\\n" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "Kunne ikke laste %1 fra brukerdatabasen.\\n" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Couldn't load KeywordSelects." msgstr "Kunne ikke laste NøkkelordValg." @@ -1123,21 +1408,26 @@ msgstr "Kunne ikke laste RTs konfigurasjonsfil '%1' %2" msgid "Couldn't load Scrips." msgstr "Kunne ikke laste Scripsene." -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "Kunne ikke laste gruppen %1" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "Kunne ikke laste linken" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "Kunne ikke laste køen" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "Kunne ikke laste køen %1" @@ -1150,38 +1440,47 @@ msgstr "Kunne ikke laste scripet" msgid "Couldn't load template" msgstr "Kunne ikke finne mal" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "Kunne ikke laste den brukeren (%1)" -#: html/SelfService/Display.html:109 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "Kunne ikke laste saken '%1'" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "Land" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "Opprett" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "Opprett Saker" -#: html/Admin/Elements/EditCustomField:75 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "Oprett et fleksifelt" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "Opprett et fleksifelt for køen %1" -#: html/Admin/Global/CustomField.html:48 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" msgstr "Opprett et fleksifelt for alle køer" @@ -1197,11 +1496,11 @@ msgstr "Opprett et globalt Scrip" msgid "Create a new global scrip" msgstr "Opprett et nytt globalt scrip" -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "Opprett en ny gruppe" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "Opprett en ny personlig gruppe" @@ -1217,15 +1516,15 @@ msgstr "Opprett et nytt scrip" msgid "Create a new template" msgstr "Opprett en ny mal" -#: html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "Opprett en ny sak" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "Opprett en ny bruker" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "Opprett en ny kø" @@ -1237,16 +1536,16 @@ msgstr "Opprett en kø kalt" msgid "Create a request" msgstr "Opprett en forespørsel" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "Opprett et scrip for køen %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "Opprett en mal" -#: html/SelfService/Create.html:25 +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 msgid "Create a ticket" msgstr "Opprett en sak" @@ -1258,23 +1557,23 @@ msgstr "Opprettelse feilet: %1 / %2 / %3" msgid "Create failed: %1/%2/%3" msgstr "Opprettelse feilet: %1/%2/%3" -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "Opprett nye saker basert pÃ¥ dette scripets mal" -#: html/SelfService/Create.html:78 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "Opprett sak" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "Opprett saker i denne køen" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "Opprett, slett og modifiser fleksifelt" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "Opprett, slett og endre køer" @@ -1282,23 +1581,27 @@ msgstr "Opprett, slett og endre køer" msgid "Create, delete and modify the members of any user's personal groups" msgstr "Opprett, slett og modifiser medlemmene av en brukers personlige grupper" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "Opprett, slett og modifiser medlemmene av personlige grupper" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "Opprett, slett og modifiser brukere" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "OpprettSak" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "Opprettet" -#: html/Admin/Elements/EditCustomField:88 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "Opprettet Fleksifelt %1" @@ -1307,80 +1610,87 @@ msgstr "Opprettet Fleksifelt %1" msgid "Created template %1" msgstr "Opprettet malen %1" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Eksisterende Forhold" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "Eksisterende Scrips" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Eksisterende medlemmer" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Eksisterende rettigheter" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" msgstr "Eksisterende søkekriterier" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Eksisterende overvÃ¥kere" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) +#: NOT FOUND IN SOURCE msgid "Custom Field #%1" msgstr "Fleksifeltet #%1" -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:36 +#: 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 msgid "Custom Fields" msgstr "Fleksifelt" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "Avsluttningskode" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "Forberedelseskode" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "Forutsetning" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "Fleksifeltet %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "Fleksifeltet %1 har en verdi." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "Fleksifeltet %1 har ingen verdi." -#: lib/RT/Ticket_Overlay.pm:3427 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Fleksifeltet %1 kunne ikke finnes" -#: html/Admin/Elements/EditCustomFields:197 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" msgstr "Fleksifeltet slettet" -#: lib/RT/Ticket_Overlay.pm:3577 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "Fleksifeltet kunne ikke finnes" -#: lib/RT/CustomField_Overlay.pm:350 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "Verdien %1 for fleksifeltet %2 kunne ikke finnes" @@ -1389,19 +1699,19 @@ msgstr "Verdien %1 for fleksifeltet %2 kunne ikke finnes" msgid "Custom field value changed from %1 to %2" msgstr "Fleksifeltets verdi endret fra %1 til %2" -#: lib/RT/CustomField_Overlay.pm:250 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "Fleksifeltets verdi kunne ikke slettes" -#: lib/RT/CustomField_Overlay.pm:356 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "Fleksifeltets verdi kunne ikke finnes" -#: lib/RT/CustomField_Overlay.pm:248 lib/RT/CustomField_Overlay.pm:358 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "Fleksifeltverdi slettet" -#: lib/RT/Transaction_Overlay.pm:548 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "FleksiFelt" @@ -1409,11 +1719,11 @@ msgstr "FleksiFelt" msgid "Data error" msgstr "Datafeil" -#: html/SelfService/Display.html:39 html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:55 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Datoer" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "Des." @@ -1425,68 +1735,92 @@ msgstr "Desember" msgid "Default Autoresponse Template" msgstr "Standard Autosvarmal" -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "Standard Autosvarmal" -#: etc/initialdata:281 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "Standard Adminkommentarmal" -#: etc/initialdata:260 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "Standard Adminkorrespondensemal" -#: etc/initialdata:272 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "Standard korrespondensemal" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "Standard transaksjonsmal" -#: lib/RT/Transaction_Overlay.pm:643 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" msgstr "Standard: %1/%2 endret seg fra %3 til %4" -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Deleger rettigheter" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "Deleger spesifikke rettigheter som har blitt gitt til deg." -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "DelegerRettigheter" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "Delegering" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "Slett" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "Slett saker" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "SlettSak" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "Sletting av dette objektet kan føre til inkonsistens" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "Sletting av dette objektet vil føre til inkonsistens" -#: lib/RT/User_Overlay.pm:438 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Sletting av dette objektet ville føre til inkonsistens" @@ -1498,11 +1832,11 @@ msgstr "Sletting av dette objektet ville føre til inkonsisistens." msgid "Deleting this object would violate referential integrity. That's bad." msgstr "Sletting av dette objektet ville føre til inkonsistens. Det er uheldig." -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "Nekt" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:37 +#: 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 msgid "Depended on by" msgstr "Avhengighet fra" @@ -1510,7 +1844,27 @@ msgstr "Avhengighet fra" msgid "Dependencies: \\n" msgstr "Avhengigheter: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "" + +#: 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 msgid "Depends on" msgstr "Avhengig av" @@ -1518,15 +1872,15 @@ msgstr "Avhengig av" msgid "DependsOn" msgstr "AvhengigAv" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "Synkende" -#: html/SelfService/Create.html:73 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "Beskriv problemet under" -#: html/Admin/Elements/AddCustomFieldValue:37 html/Admin/Elements/EditCustomField:39 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "Beskrivelse" @@ -1534,56 +1888,75 @@ msgstr "Beskrivelse" msgid "Details" msgstr "Detaljer" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Vis" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "Vis Rettigheter" -#: lib/RT/Queue_Overlay.pm:75 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "Vis Scrip-maler for denne køen" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "Vis Scrip-maler for denne køen" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Visningsmodus" +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "Vis saken #%1" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "Gjør hva som helst" -#: html/Elements/Refresh:30 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." -msgstr "Ikke last denne siden p nytt" +msgstr "Ikke last denne siden pÃ¥ nytt" -#: html/Search/Elements/PickRestriction:114 +#: NOT FOUND IN SOURCE msgid "Don't show search results" msgstr "Ikke vis søkeresultat" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "Last ned" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 msgid "Due" msgstr "Innen" #: NOT FOUND IN SOURCE msgid "Due date '%1' could not be parsed" -msgstr "Innendato '%1' kunne ikke tolkes"" +msgstr "Innendato '%1' kunne ikke tolkes" -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "FEIL: Kunne ikke laste sak '%1': %2.\\n" @@ -1595,16 +1968,32 @@ msgstr "Rediger" msgid "Edit Conditions" msgstr "Rediger Forhold" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "Rediger fleksifelt for %1" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "Rediger Forhold" -#: html/Admin/Queues/Templates.html:42 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "Rediger Maler for køen %1" @@ -1613,11 +2002,15 @@ msgstr "Rediger Maler for køen %1" msgid "Edit keywords" msgstr "Rediger nøkkelord" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Edit scrips" msgstr "Rediger scrips" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "Rediger systemmal" @@ -1625,28 +2018,30 @@ msgstr "Rediger systemmal" msgid "Edit templates for %1" msgstr "Rediger maler for %1" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:118 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "Rediger Konfigurasjon for køen %1" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "Redigerer Konfigurasjonen av brukern %1" -#: html/Admin/Elements/EditCustomField:91 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "Redigerer Fleksifeltet %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" -msgstr "Redigerer medlemsskap for gruppen %1"" +msgstr "Redigerer medlemsskap for gruppen %1" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "Redigerer medlemsskap for den personlige gruppen %1" @@ -1655,64 +2050,81 @@ msgstr "Redigerer medlemsskap for den personlige gruppen %1" msgid "Editing template %1" msgstr "Redigerer malen %1" -#: lib/RT/Ticket_Overlay.pm:2622 lib/RT/Ticket_Overlay.pm:2690 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "Enten base eller mÃ¥l mÃ¥ oppgis" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Epost" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "Epostaddresse i bruk" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "EpostAddresse" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "EpostFormat" -#: html/Admin/Elements/EditCustomField:51 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "Aktivt (Fjern merkingen for  deaktivere dette fleksifeltet)" +msgstr "Aktivt (Fjern merkingen for Ã¥ deaktivere dette fleksifeltet)" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" -msgstr "Aktiv (Fjern merkingen for  deaktivere denne gruppen)" +msgstr "Aktiv (Fjern merkingen for Ã¥ deaktivere denne gruppen)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Aktiv (Fjern merkingen for  deaktivere denne køen)" +msgstr "Aktiv (Fjern merkingen for Ã¥ deaktivere denne køen)" -#: html/Admin/Elements/EditCustomFields:99 +#: NOT FOUND IN SOURCE msgid "Enabled Custom Fields" msgstr "Aktive Fleksifelt" -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "Aktive Køer" -#: html/Admin/Elements/EditCustomField:107 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:140 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "Aktiv status %1" -#: lib/RT/CustomField_Overlay.pm:428 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "Skriv multiple verdier" -#: lib/RT/CustomField_Overlay.pm:425 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "Skriv en verdi" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." msgstr "Skriv saker og/eller URIer som det skal linkes til. Separer dem med mellomrom" -#: html/Elements/Login:39 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Feil" @@ -1720,56 +2132,81 @@ msgstr "Feil" msgid "Error adding watcher" msgstr "Feilet ved opprettelse av OvervÃ¥ker" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "Feil i parameterne til Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Queue->DelWatcher" msgstr "Feil i parameterne til Queue->DelWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Feil i parameterne til Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Ticket->DelWatcher" msgstr "Feil i parameterne til Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "" + #: etc/initialdata:20 msgid "Everyone" msgstr "Alle" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "Eksempel:" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "EksternAutId" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "EksternKontaktInfoId" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "Ekstra info" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "Kunne ikke finne pseudogruppen 'Privilgerte' brukere." -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "Kunne ikke finne 'pseudogruppen 'Upriviligerte' brukere" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "Kunne ikke laste modulen %1. (%2)" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "Feb." @@ -1777,31 +2214,63 @@ msgstr "Feb." msgid "February" msgstr "Februar" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Fin" msgstr "End" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Endelig Prioritet" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "EndeligPrioritet" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 +#: NOT FOUND IN SOURCE msgid "Find group whose" msgstr "Finn grupper hvor" +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Find new/open tickets" -msgstr "Finn nye/Âpne saker" +msgstr "Finn nye/Ã¥pne saker" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "Finn folk hvor" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "Finn saker" @@ -1809,68 +2278,80 @@ msgstr "Finn saker" msgid "Finish Approval" msgstr "Fullfør godkjennelse" -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Først" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "Første side" -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "Foo!" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "Tving gjennom endring" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" -msgstr "Fant %quant(%1,sak)" +msgstr "Fant %quant(%1) sak(er)" -#: lib/RT/Interface/Web.pm:902 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "Fant Objektet" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "FriforkKontaktInfo" -#: lib/RT/CustomField_Overlay.pm:38 +#: NOT FOUND IN SOURCE msgid "FreeformMultiple" msgstr "FriformMultipel" -#: lib/RT/CustomField_Overlay.pm:37 +#: NOT FOUND IN SOURCE msgid "FreeformSingle" msgstr "FriformSingel" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Fre." -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "Fulle headere" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "Henter brukerinfo fra pgp signatur\\n" -#: lib/RT/Transaction_Overlay.pm:593 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "Gitt til %1" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "Global" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Global Keyword Selections" msgstr "Globale Nøkkelordvalg" @@ -1879,12 +2360,20 @@ msgstr "Globale Nøkkelordvalg" msgid "Global Scrips" msgstr "Globale Scrip" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" + +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "Globale maler: %1" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "" + +#: 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 msgid "Go!" msgstr "Start!" @@ -1892,11 +2381,11 @@ msgstr "Start!" msgid "Good pgp sig from %1\\n" msgstr "Gyldig pgp sig fra %1\\n" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "GÃ¥ til siden" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "GÃ¥ til saken" @@ -1904,7 +2393,7 @@ msgstr "GÃ¥ til saken" msgid "Grand" msgstr "Stor" -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "Gruppe" @@ -1912,11 +2401,11 @@ msgstr "Gruppe" msgid "Group %1 %2: %3" msgstr "Gruppen %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "Grupperettigheter" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "Alt medlem av gruppen" @@ -1924,20 +2413,20 @@ msgstr "Alt medlem av gruppen" msgid "Group could not be created." msgstr "Gruppen kunne ikke lastes." -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "Gruppen kunne ikke opprettes: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "Gruppen opprettet" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "Gruppen har ikke det medlemmet" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Fant ikke gruppen" @@ -1949,36 +2438,54 @@ msgstr "Fant ikke gruppen.\\n" msgid "Group not specified.\\n" msgstr "Ikke spesifisert gruppe.\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Grupper" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "Grupper kan ikke være medlemmer av sine medlemmer" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "Hallo!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Hallo, %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "Historikk" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "HjemmeTelefon" -#: html/Elements/Tabs:44 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Hjemmeside" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "Jeg har %quant(%1, sementblandere)." @@ -1987,55 +2494,79 @@ msgstr "Jeg har %quant(%1, sementblandere)." msgid "I have [quant,_1,concrete mixer]." msgstr "Jeg har [quant,_1,sementblandere]." -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "Id" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identitet" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "Hvis en godkjenner blir avvist, avvis orginalen, og slett ventende godkjenninger" -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "" + +#: 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 "Hvis dette verktøyet var setgid kunne en fiendtlig lokal bruker bruke dette verktøyet for Ã¥ oppnÃ¥ administrativ tilgang til RT." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "Hvis du har oppdatert noe over, sørg for at" -#: lib/RT/Interface/Web.pm:894 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "Ugyldig verdig for %1" -#: lib/RT/Interface/Web.pm:897 +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "LÃ¥st felt" -#: html/Admin/Elements/EditCustomFields:74 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." msgstr "Inkluder deaktiverte fleksifelt i listen." -#: html/Admin/Queues/index.html:43 +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "" + +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "Inkluder deaktiverte køer i listen." -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "Inkluder deaktiverte brukere i søket." -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "Startprioritet" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "StartPrioritet" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Feil i inntasting" @@ -2043,20 +2574,20 @@ msgstr "Feil i inntasting" msgid "Interest noted" msgstr "Interesse registrert" -#: lib/RT/Ticket_Overlay.pm:3796 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "Intern Feil" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "Intern Feil: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "Ugyldig gruppetype" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "Ugyldige rettigheter" @@ -2064,52 +2595,56 @@ msgstr "Ugyldige rettigheter" msgid "Invalid Type" msgstr "Ugyldig Type" -#: lib/RT/Interface/Web.pm:899 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "Ugyldig data" -#: lib/RT/Ticket_Overlay.pm:439 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." msgstr "Ugydlig eier. Setter til 'nobody'." -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "Ugyldig kø" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "Ugyldige rettigheter" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "Ugyldig verdi for %1" -#: lib/RT/Ticket_Overlay.pm:3434 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "Ugyldig verdi for fleksifeltet." -#: lib/RT/Ticket_Overlay.pm:346 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Ugyldig verdi for status" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "Det er ekstremt viktig at ikkepriviligerte brukere ikke har tilgang til dette verktøyet." -#: bin/rt-crontool:192 +#: 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 "Det er anbefalt at du oppretter en upriviligert unixbruker med korrekt gruppemedlemsskap og tilgang til RT for  kjøre dette verktøyet." -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "Det tar flere parametere:" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Items pending my approval" -msgstr "Ting som venter p min godkjenning" +msgstr "Ting som venter pÃ¥ min godkjenning" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "Jan." @@ -2117,11 +2652,11 @@ msgstr "Jan." msgid "January" msgstr "Januar" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "Bli med i eller forlat denne gruppen" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Jul." @@ -2129,11 +2664,11 @@ msgstr "Jul." msgid "July" msgstr "Juli" -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "Total" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "Jun." @@ -2145,27 +2680,35 @@ msgstr "Juni" msgid "Keyword" msgstr "Nøkkelord" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "SprÃ¥k" -#: html/Ticket/Elements/Tabs:73 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "Siste" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Siste Kontakt" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Sist kontaktet" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" msgstr "Sist Informert" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Sist Oppdatert" @@ -2173,15 +2716,19 @@ msgstr "Sist Oppdatert" msgid "LastUpdated" msgstr "SistOppdatert" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "Igjen" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "La denne brukeren fÃ¥ tilgang til RT" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "La denne brukeren fÃ¥ rettigheter" @@ -2193,29 +2740,33 @@ msgstr "Begrenser eier til %1 %2" msgid "Limiting queue to %1 %2" msgstr "Begrenser køen til %1 %2" -#: lib/RT/Ticket_Overlay.pm:2704 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "Lenke finnes alt" -#: lib/RT/Ticket_Overlay.pm:2716 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "Lenke kunne ikke opprettes" -#: lib/RT/Ticket_Overlay.pm:2724 lib/RT/Ticket_Overlay.pm:2734 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "Lenke opprettet (%1)" -#: lib/RT/Ticket_Overlay.pm:2645 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "Lenke slettet (%1)" -#: lib/RT/Ticket_Overlay.pm:2651 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "Lenke ble ikke funnet" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "Knytt sak #%1" @@ -2224,89 +2775,122 @@ msgstr "Knytt sak #%1" msgid "Link ticket %1" msgstr "Knytt sak %1" -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Lenker" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "Lokasjon" -#: lib/RT.pm:159 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "Logkatalogen %1 ble ikke funnet eller kunne ikke skrives til.\\nRT kan ikke kjøre." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "Logget inn som %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:35 html/Elements/Login:44 html/Elements/Login:54 +#: 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 msgid "Login" msgstr "Innlogging" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Logg av" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "Sett Eier" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "Sett Status" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" -msgstr "Sett tidsfrist" +msgstr "msgstr "Sett tidsfrist" " -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "Sett løsningsdato" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "Sett startdato" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "Sett startdato" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "Sett informert dato" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "Sett prioritet" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "Sett Kø" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "Sett Emne" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "Sett grupper og gruppemedlemsskap" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "Rediger egenskaper og konfigurasjon som gjelder for alle køer" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "Rediger køer og kø-spesifike egenskaper" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "Rediger brukere og passord" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "Mar." @@ -2318,23 +2902,33 @@ msgstr "Mars" msgid "May" msgstr "Mai" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "Mai." -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "Medlem lagt til" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "Medlem slettet" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "Medlem ikke slettet" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "Medlem av" @@ -2342,39 +2936,83 @@ msgstr "Medlem av" msgid "MemberOf" msgstr "MedlemAv" -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "Medlemmer" -#: lib/RT/Ticket_Overlay.pm:2891 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "Fletting vellykket" -#: lib/RT/Ticket_Overlay.pm:2811 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "Fletting feilet. Kunne ikke sette EffektivId" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "Flett inn i" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "Melding" -#: lib/RT/Interface/Web.pm:901 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "Mangler en primærnøkkel?: %1" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "Mobil" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "MobilTelefon" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "Endre Tilgangslister" @@ -2382,15 +3020,37 @@ msgstr "Endre Tilgangslister" msgid "Modify Custom Field %1" msgstr "Endre Fleksifeltet %1" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Modify Custom Fields which apply to all queues" msgstr "Endre Fleksifelt som gjelder for alle køer" -#: lib/RT/Queue_Overlay.pm:73 +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" msgstr "Endre Scripmaler for denne køen" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" msgstr "Endre Scrips for denne køen" @@ -2402,43 +3062,56 @@ msgstr "Endre SystemACLer" msgid "Modify Template %1" msgstr "Endre Malen %1" -#: html/Admin/Queues/CustomField.html:45 +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "" + +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" msgstr "Endre et fleksifelt for køen %1" -#: html/Admin/Global/CustomField.html:53 +#: NOT FOUND IN SOURCE msgid "Modify a CustomField which applies to all queues" msgstr "Endre et fleksifelt som gjelder for alle køer" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "Endre et scrip for køen %1" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "Endre et scrip som gjelder for alle køer" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Modify dates for # %1" msgstr "Endre datoer for # %1" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "Endre datoer for #%1" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "Endre datoer for sak # %1" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Endre globale grupperettigheter" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "Endre globale grupperettigheter" @@ -2454,100 +3127,110 @@ msgstr "Endre globale rettigheter for brukere" msgid "Modify global scrips" msgstr "Endre globale scrips" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "Endre globale brukerrettigheter" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "Endre globale brukerrettigheter" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "Endre gruppens metadata eller slette gruppen" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "Endre grupperettigheter for %1 gruppen" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "Endre grupperettigheter %1 køen" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "Endre medlemsliste for denne gruppen" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "Endre sin egen RT konto" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "Endre hvem som er relatert til %1 køen" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "Endre hvem som er relater til sak #%1" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "Endre scrips for %1 køen" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "Endre scrips som gjelder alle køer" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "Endre mal %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "Endre maler som gjelder for alle køer" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "Endre gruppen %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "Endre overvÃ¥kere for køen" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Endre brukeren %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "Endre sak # %1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "Endre sak #%1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "Endre saker" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Endre brukerrettigheter for %1 gruppen" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "Endre brukerrettigheter for %1 køen" @@ -2556,60 +3239,64 @@ msgstr "Endre brukerrettigheter for %1 køen" msgid "Modify watchers for queue '%1'" msgstr "Endre overvÃ¥kere for '%1' køen" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "EndreACL" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "EndreEgetMedlemskap" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "EndreKøOvervÃ¥kere" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "EndreScrips" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "EndreSegSelv" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "EndreMal" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "EndreSak" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Man." -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "Mer om %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "Flytt ned" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "Flytt opp" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "Flere" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "MÃ¥ spesifisere attributten 'Navn'" -#: html/SelfService/Elements/MyRequests:49 +#: html/SelfService/Elements/MyRequests:70 #. ($friendly_status) msgid "My %1 tickets" msgstr "Mine %1 saker" @@ -2618,15 +3305,19 @@ msgstr "Mine %1 saker" msgid "My Approvals" msgstr "Mine saker til godkjenning" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "Mine saker til godkjenning" -#: html/Admin/Elements/AddCustomFieldValue:33 html/Admin/Elements/EditCustomField:34 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "" + +#: 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 msgid "Name" msgstr "Navn" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Navnet er i bruk" @@ -2634,47 +3325,51 @@ msgstr "Navnet er i bruk" msgid "Need approval from system administrator" msgstr "Trenger godkjennelse fra systemadministrator" -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "Aldri" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Ny" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nye forhold" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Nytt Passord" -#: etc/initialdata:317 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "Ny, Venter pÃ¥ Godkjennelse" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "Nye forhold" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "" -#: html/Ticket/Elements/Tabs:36 +#: NOT FOUND IN SOURCE msgid "New Search" msgstr "Nytt Søk" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "Nytt fleksifelt" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "Ny gruppe" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Nytt passord" -#: lib/RT/User_Overlay.pm:647 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Melding om nytt passord sendt" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "Ny kø" @@ -2682,11 +3377,11 @@ msgstr "Ny kø" msgid "New request" msgstr "Ny forespørsel" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Nye rettigheter" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "Nytt scrip" @@ -2694,71 +3389,87 @@ msgstr "Nytt scrip" msgid "New search" msgstr "Nytt søk" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:50 +#: 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 "Ny mal" -#: html/SelfService/Elements/Tabs:48 +#: html/SelfService/Elements/Tabs:69 msgid "New ticket" msgstr "Ny sak" -#: lib/RT/Ticket_Overlay.pm:2778 +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "Ny sak eksistere ikke" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "Ny bruker" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Ny bruker kalt" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Ny overvÃ¥ker" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "Instillinger for nytt vindu" -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Neste" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "Neste side" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "KalleNavn" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "Kallenavn" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "Ingen FleksiFelt" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "Ingen grupper definert" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" msgstr "Ingen kø definert" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "Ingen RT bruker funnet. Vennligst referer til manualen.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "Ingen Mal" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "Ingen sak oppgitt. Avbryter sak " @@ -2766,11 +3477,11 @@ msgstr "Ingen sak oppgitt. Avbryter sak " msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "Ingen Sak oppgitt. Avbryter saksendring\\n\\n" -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "Ingen handling" -#: lib/RT/Interface/Web.pm:896 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "Ingen kolonne spesifisert" @@ -2778,77 +3489,93 @@ msgstr "Ingen kolonne spesifisert" msgid "No command found\\n" msgstr "Ingen kommando funnet\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "Ingen kommentar skrevet om denne brukeren" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "Ingen korrespondanse vedlagt" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "Ingen beskrivelse for %1" -#: lib/RT/Users_Overlay.pm:145 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Ingen gruppe spesifisert" -#: lib/RT/User_Overlay.pm:865 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "Passordet er ikke satt" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "Ingen tilgang til Ã¥ opprette køer" -#: lib/RT/Ticket_Overlay.pm:342 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "Ikke tilgang til Ã¥ opprette saker for køen '%1'" -#: lib/RT/User_Overlay.pm:152 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "Ikke tilgang til Ã¥ opprette brukere" -#: html/SelfService/Display.html:118 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "Ikke tilgang til Ã¥ vise den saken" -#: html/SelfService/Update.html:52 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "Ingen tilgang til Ã¥ se oppdatering av saken" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "Ingen primær spesifisert" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "Ingen primære spesifisert" -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "Det er ingen køer som matcher søkekriteriet" -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "Ingen rettigheter funnet" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "Ingen rettigheter tildelt" -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." -msgstr "Ingen søk  behandle" +msgstr "Ingen søk Ã¥ behandle" + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "" #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "Ingen saksid oppgitt" -#: lib/RT/Transaction_Overlay.pm:478 lib/RT/Transaction_Overlay.pm:516 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "Transaksjonstype ikke spesifisert" @@ -2856,23 +3583,23 @@ msgstr "Transaksjonstype ikke spesifisert" msgid "No user or email address specified" msgstr "Ingen bruker eller epostaddresse oppgitt" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "Fant ingen brukere som treffer søkekriteriene." -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "Fant ingen gyldig RT bruker. RT cvs handler avstengt. Kontakt din RT administrator.\\n" -#: lib/RT/Interface/Web.pm:893 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "Ingen verdi sendt til _Set!\\n" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "Ingen" -#: lib/RT/Interface/Web.pm:898 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "Ukjent felt?" @@ -2880,15 +3607,15 @@ msgstr "Ukjent felt?" msgid "Not logged in" msgstr "Ikke logget inn" -#: html/Elements/Header:59 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "Ikke logget inn." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Ikke satt" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "Ikke implementert enda." @@ -2896,63 +3623,83 @@ msgstr "Ikke implementert enda." msgid "Not yet implemented...." msgstr "Ikke implementert enda...." -#: html/Approvals/Elements/Approve:49 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "Notater" -#: lib/RT/User_Overlay.pm:650 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "Melding kunne ikke sendes" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "Raporter til AdminCc" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "Rapporter til AdminCc som kommentar" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "Rapporter til andre mottakere" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "Rapporter til andre mottakere som kommentar" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "Rapporter til eier" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "Rapportert til eier som kommentar" -#: etc/initialdata:319 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "Rapporter til Eiere og AdminCc om nye ting som venter pÃ¥ godkjenning" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "Rapporter til kunde" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "Rapporter til Kunder og Cc" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "Rapporter til Kunder og Cc som kommentar" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "Rapporter til Kunder Cc og AdminCc" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "Rapporter til Kunder Cc og AdminCc som Kommentar" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "Nov." @@ -2960,15 +3707,37 @@ msgstr "Nov." msgid "November" msgstr "November" -#: lib/RT/Record.pm:157 +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "Objekter kunne ikke opprettes" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "Objektet ble opprettet" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Okt." @@ -2976,57 +3745,73 @@ msgstr "Okt." msgid "October" msgstr "Oktober" -#: html/Elements/SelectDateRelation:35 +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "Ved" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "Ved Kommentar" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "Ved Korrespondanse" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "Ved Opprettelse" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "Ved Eierskifte" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "Ved Køendring" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "Ved Løsning" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "Ved statusendring" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "Ved Transaksjon" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "Vis kun godkjennelse for saker opprettet etter %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "Bare vis godkjennelse for saker opprettet før %1" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Ã…pne" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Ã…pne den" @@ -3034,70 +3819,90 @@ msgstr "Ã…pne den" msgid "Open requests" msgstr "Ã…pne forespørsler" -#: html/SelfService/Elements/Tabs:42 +#: html/SelfService/Elements/Tabs:63 msgid "Open tickets" msgstr "Ã…pne saker" -#: html/Admin/Users/Prefs.html:41 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "Ã…pne saker (fra utlisting) i et nytt vindu" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "Ã…pne saker (fra utlisting) it et annet vinud" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "Ã…pne saker ved korrespondanse" -#: html/Search/Elements/PickRestriction:101 +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "Rekkefølge og sortering" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "Organisasjon" -#: html/Approvals/Elements/Approve:33 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "Opprinnelig sak: #%1" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "Over tid beveger prioriteten seg mot" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "Eie saker" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "EieSak" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "Eier" -#: lib/RT/Ticket_Overlay.pm:3071 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) +#: NOT FOUND IN SOURCE msgid "Owner changed from %1 to %2" msgstr "Eier endret fra %1 til %2" -#: lib/RT/Transaction_Overlay.pm:582 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "Eier ble tvunget til Ã¥ endres fra %1 til %2" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "Eier er" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Personsøker" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "PersonSøker" @@ -3105,60 +3910,81 @@ msgstr "PersonSøker" msgid "Parent" msgstr "Forelder" -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:47 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Foreldre" -#: html/Elements/Login:52 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Passord" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "Passordhint" -#: lib/RT/User_Overlay.pm:169 lib/RT/User_Overlay.pm:868 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "For kort passord" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Passord: %1" -#: html/Admin/Users/Modify.html:293 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 msgid "Passwords do not match." msgstr "Passordene stemmer ikke overens." -#: html/User/Prefs.html:174 +#: html/User/Prefs.html:234 msgid "Passwords do not match. Your password has not been changed" msgstr "Passordene stemmer ikke overrens. Passordet ble ikke endret" -#: html/Ticket/Elements/ShowSummary:45 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" -msgstr "Folk" +msgstr "Personer" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "Kjør en brukerdefinert handling" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:101 lib/RT/CustomField_Overlay.pm:202 lib/RT/CustomField_Overlay.pm:234 lib/RT/CustomField_Overlay.pm:511 lib/RT/CustomField_Overlay.pm:91 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2603 lib/RT/Ticket_Overlay.pm:2675 lib/RT/Ticket_Overlay.pm:2769 lib/RT/Ticket_Overlay.pm:2784 lib/RT/Ticket_Overlay.pm:2978 lib/RT/Ticket_Overlay.pm:3206 lib/RT/Ticket_Overlay.pm:3404 lib/RT/Ticket_Overlay.pm:3566 lib/RT/Ticket_Overlay.pm:3618 lib/RT/Ticket_Overlay.pm:3783 lib/RT/Transaction_Overlay.pm:466 lib/RT/Transaction_Overlay.pm:473 lib/RT/Transaction_Overlay.pm:502 lib/RT/Transaction_Overlay.pm:509 lib/RT/User_Overlay.pm:1355 lib/RT/User_Overlay.pm:570 lib/RT/User_Overlay.pm:605 lib/RT/User_Overlay.pm:861 lib/RT/User_Overlay.pm:962 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "" + +#: 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 msgid "Permission Denied" msgstr "Ingen Tilgang" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "Personlige Grupper" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Personlige grupper" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Personlige grupper:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Telefonnummer" @@ -3170,7 +3996,7 @@ msgstr "Stedholder" msgid "Pref" msgstr "Pref" -#: html/Elements/Header:52 html/Elements/Tabs:53 html/SelfService/Elements/Tabs:51 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "Instillinger" @@ -3178,15 +4004,19 @@ msgstr "Instillinger" msgid "Prefs" msgstr "Pref" -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Klargjør Forkortet" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Forrige" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "Forrige side" @@ -3194,29 +4024,33 @@ msgstr "Forrige side" msgid "Pri" msgstr "Pri" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "Primær %1 ikke funnet." -#: html/Search/Elements/PickRestriction:54 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Prioritet" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "Prioritet starter pÃ¥" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "" + #: etc/initialdata:25 msgid "Privileged" msgstr "Priviligert" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "Priviligert status: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "Priviligerte brukere" @@ -3224,11 +4058,19 @@ msgstr "Priviligerte brukere" msgid "Pseudogroup for internal use" msgstr "Pseduogruppe for intern bruk" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:33 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "" + +#: 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 msgid "Queue" msgstr "Kø" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:44 +#: 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) msgid "Queue %1 not found" @@ -3242,7 +4084,7 @@ msgstr "Køen '%1' ikke funnet\\n" msgid "Queue Keyword Selections" msgstr "Nøkkelordvalg for kø" -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "Kønavn" @@ -3250,19 +4092,19 @@ msgstr "Kønavn" msgid "Queue Scrips" msgstr "Køscrip" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "Køen eksisterer allerede" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "Køen kunne ikke opprettes" -#: html/Ticket/Create.html:205 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "Køen kunne ikke lastes." -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "Køen opprettet" @@ -3270,30 +4112,37 @@ msgstr "Køen opprettet" msgid "Queue is not specified." msgstr "Køen er ikke oppgitt." -#: html/SelfService/Display.html:71 lib/RT/CustomField_Overlay.pm:98 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "Køen ikke funnet" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "Køer" -#: html/Elements/Quicksearch:25 +#: html/Elements/Quicksearch:46 msgid "Quick search" msgstr "Raskt søk" -#: html/Elements/Login:44 +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 for %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "RT %1 fra <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." @@ -3305,7 +4154,7 @@ msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "RT-administrasjon" @@ -3325,7 +4174,7 @@ msgstr "RT Konfigurasjonsfeil" msgid "RT Critical error. Message not recorded!" msgstr "Kritisk RT feil. Meldingen ble ikke lagret!" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "RT Feil" @@ -3341,7 +4190,11 @@ msgstr "RT Mottok mail (%1) fra seg selv." msgid "RT Self Service / Closed Tickets" msgstr "RT Selvbetjening / Lukkede Saker" -#: html/index.html:25 html/index.html:28 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT oversikt" @@ -3357,11 +4210,15 @@ msgstr "RT kunne ikke finne kunde via sitt eksterne databaseoppslag" msgid "RT couldn't find the queue: %1" msgstr "RT kunne ikke finne køen: %1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT kunne ikke validere denne PGP signaturen. \\n" +msgstr "msgstr "RT kunne ikke validere denne PGP signaturen. \\n" " -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT for %1" @@ -3374,14 +4231,13 @@ msgstr "RT for %1: %2" msgid "RT has proccessed your commands" msgstr "RT har behandlet dine kommandoer" -#: html/Elements/Login:92 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "RT er © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Den er distribuert under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"" +msgstr "RT er © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Den er distribuert under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" #: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "RT er © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. Den er distribuert under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>"" +msgstr "RT er © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. Den er distribuert under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" #: NOT FOUND IN SOURCE msgid "RT thinks this message may be a bounce" @@ -3395,19 +4251,39 @@ msgstr "RT vil behandle denne meldingen som om den var usignert" msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." msgstr "RT's epost kommandomodus krever PGP autentisering. Meldingen din var enten ikke signert, eller signaturen din kunne ikke bekreftes." -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "Ekte Navn" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "EkteNavn" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:71 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "Referert til av" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:61 +#: 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 msgid "Refers to" msgstr "Refererer til" @@ -3419,48 +4295,52 @@ msgstr "RefererTil" msgid "Refine" msgstr "Redefiner" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "Redefiner søket" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." -msgstr "Last siden p nytt hvert %1 minutt." +msgstr "Last siden pÃ¥ nytt hvert %1 minutt." -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:62 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "Forhold" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Fjern AdminCc" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Fjern Cc" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Fjern Kunde" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Svar" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" -msgstr "Svar p sak" +msgstr "Svar pÃ¥ sak" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" -msgstr "SvarPÂSak" +msgstr "SvarPÃ¥Sak" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Kunde" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "Kundens epostaddresse" @@ -3472,98 +4352,107 @@ msgstr "Kunde(r)" msgid "RequestorAddresses" msgstr "KundeAddresser" -#: html/SelfService/Create.html:41 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Kunder" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "Forespørsler skal være behandlet innen" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Reset" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Hjemme" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "Løs" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "Løs saknr #%1 (%2)" -#: etc/initialdata:308 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "Løst" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "Svar til kunder" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Resultater" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "Resultater per side" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "Skriv Passord igjen" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "Rettighet %1 kunne ikke finnes for %2 %3 in scope %4 (%5)\\n" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Rettighet Deligert" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Rettighet Tildelt" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Rettighet lastet" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "Rettigheten kunne ikke trekkes tilbake" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Rettighet ikke funnet" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "Rettighet ikke lastet." -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "Rettighet fjernet" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Rettigheter" -#: lib/RT/Interface/Web.pm:792 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "Rettigheter kunne ikke tildeles for %1" -#: lib/RT/Interface/Web.pm:825 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "Rettigheter kunne ikke trekkes tilbake for %1" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Roller" @@ -3571,32 +4460,59 @@ msgstr "Roller" msgid "RootApproval" msgstr "RootGodkjenning" -#: lib/RT/Date.pm:393 +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "" + +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "Lør." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyLinks.html:39 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "" + +#: 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 msgid "Save Changes" msgstr "Lagre Endringer" -#: NOT FOUND IN SOURCE +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Lage endringer" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "Scrip #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "Scrip Opprettet" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "Scrip slettet" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "Scrip" @@ -3604,11 +4520,11 @@ msgstr "Scrip" msgid "Scrips for %1\\n" msgstr "Scrip for %1\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "Scrip som gjelder for alle køer" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "Søk" @@ -3616,111 +4532,188 @@ msgstr "Søk" msgid "Search Criteria" msgstr "Søkekriteria" -#: html/Approvals/Elements/PendingMyApproval:39 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "Søk etter godkjenninger" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "Sikkerhet:" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "SeKø" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "Velg en gruppe" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "Velg en kø" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "Velg en bruker" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "Velg fleksifelt" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "Velg gruppe" -#: lib/RT/CustomField_Overlay.pm:422 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "Velg flere verdier" -#: lib/RT/CustomField_Overlay.pm:419 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "Velg en verdi" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "Velg kø" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "Velg scrip" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 html/Admin/Queues/Templates.html:47 +#: 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 "Velg mal" -#: html/Admin/Elements/UserTabs:49 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "Velg bruker" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" msgstr "VelgFlere" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectSingle" msgstr "VelgEnkelt" +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Self Service" msgstr "Selvbetjening" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "Send epost til alle overvÃ¥kere" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "Send epost til alle overvÃ¥kere som \"kommentar\"" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "Send epost til kunder og Cc" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "Send epost til kunder og Cc som kommentar" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "Sender en melding til kundene" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "Send epost til eksplisit oppgitte Ccer og Bccer" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "Send epost til Administrative Ccer" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "Sender epost til de administrative Ccene som kommentar" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "Sender epost til eieren" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Sep." @@ -3728,71 +4721,95 @@ msgstr "Sep." msgid "September" msgstr "September" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "Vis Resultater" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "Vis godkjente forespørsler" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Vis basisinfo" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "Vis avviste forespørsler" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Vis detaljer" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "Vis ventende forespørsler" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "Vis forespørsler som venter pÃ¥ andre godkjenninger" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" msgstr "Vis sakens private kommentarer" -#: lib/RT/Queue_Overlay.pm:79 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" msgstr "Vis sakssammendrag" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "VisACL" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "VisScrip" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "VisMal" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "VisSak" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "VisSaksKommentarer" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "Meld deg pÃ¥ som saksforespørrer eller sak/kø Cc" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "Meld deg pÃ¥ som sak/kø AdminCc" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "Signatur" @@ -3800,15 +4817,23 @@ msgstr "Signatur" msgid "Signed in as %1" msgstr "Logget inn som %1" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Enkel" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "Dropp Meny" -#: html/Admin/Elements/AddCustomFieldValue:29 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 msgid "Sort" msgstr "Sorter" @@ -3816,7 +4841,7 @@ msgstr "Sorter" msgid "Sort key" msgstr "Sorter nøkkel" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "Sorter resultater etter" @@ -3824,6 +4849,10 @@ msgstr "Sorter resultater etter" msgid "SortOrder" msgstr "SorteringsRekkefølge" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Stalled" msgstr "Pauset" @@ -3832,7 +4861,7 @@ msgstr "Pauset" msgid "Start page" msgstr "Startside" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "Startet" @@ -3840,7 +4869,7 @@ msgstr "Startet" msgid "Started date '%1' could not be parsed" msgstr "Startdato '%1' kunne ikke tolkes" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "Starter" @@ -3852,20 +4881,19 @@ msgstr "Starter Etter" msgid "Starts date '%1' could not be parsed" msgstr "Startdato '%1' kunne ikke tolkes" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Stat" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "Status" -#: etc/initialdata:294 +#: etc/initialdata:309 msgid "Status Change" msgstr "Statusendring" -#: lib/RT/Transaction_Overlay.pm:528 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Status endret fra %1 til %2" @@ -3873,25 +4901,41 @@ msgstr "Status endret fra %1 til %2" msgid "StatusChange" msgstr "EndreStatus" -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "Stjel" -#: lib/RT/Transaction_Overlay.pm:587 +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) +msgid "Stolen from %1" +msgstr "StjÃ¥let fra %1" + +#: NOT FOUND IN SOURCE msgid "Stolen from %1 " msgstr "StjÃ¥let fra %1 " -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:57 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:32 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "Emne" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:609 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "Endre emne til %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Oppdater" @@ -3899,23 +4943,27 @@ msgstr "Oppdater" msgid "Submit Workflow" msgstr "Send Arbeidsflyt" -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "Lykkes" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Søn." -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "SuperBruker" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "System" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:791 lib/RT/Interface/Web.pm:824 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "" + +#: 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 "Systemfeil" @@ -3927,11 +4975,20 @@ msgstr "Systemfeil. Rettighet ikke tildelt." msgid "System Error. right not granted" msgstr "Systemfeil. rettigheter ikke tildelt" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "Systemfeil. Rettighet ikke tildelt." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "Systemfeil. Rettighet ikke tildelt." @@ -3939,7 +4996,7 @@ msgstr "Systemfeil. Rettighet ikke tildelt." msgid "System error. Unable to grant rights." msgstr "Systemfeil. Kunne ikke tildele rettigheter." -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "Systemgrupper" @@ -3947,32 +5004,40 @@ msgstr "Systemgrupper" msgid "SystemRolegroup for internal use" msgstr "SystemRollegruppe for intern bruk" -#: lib/RT/CurrentUser.pm:318 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRENG" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "Ta" -#: lib/RT/Transaction_Overlay.pm:573 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Tatt" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Mal" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "Mal #%1" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "Mal slettet" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Kunne ikke finne mal" @@ -3980,11 +5045,11 @@ msgstr "Kunne ikke finne mal" msgid "Template not found\\n" msgstr "Kunne ikke finne mal\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Mal tolket" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Maler" @@ -3992,47 +5057,46 @@ msgstr "Maler" msgid "Templates for %1\\n" msgstr "Maler for %1\\n" -#: lib/RT/Interface/Web.pm:892 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "Verdien er allerede satt" -#: lib/RT/CustomField_Overlay.pm:243 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Det er ikke en verdi for dette fleksifeltet" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Det er den samme verdien" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 msgid "That principal already has that right" msgstr "Den primæren har allerede den rettigheten" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "Den primæren er allerede en %1 for denne køen" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "Den primæren er allerede en %1 for denne køen" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "Den primæren er ikke en %1 for denne køen" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "Den primæren er ikke en %1 for denne saken" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "Den køen eksisterer ikke" -#: lib/RT/Ticket_Overlay.pm:3210 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "Denne saken har uløste avhengigheter" @@ -4040,27 +5104,27 @@ msgstr "Denne saken har uløste avhengigheter" msgid "That user already has that right" msgstr "Den brukeren har allerede den rettigheten" -#: lib/RT/Ticket_Overlay.pm:3020 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "Den brukeren eier allerede den saken" -#: lib/RT/Ticket_Overlay.pm:2986 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Den brukeren finnes ikke" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "Den brukeren er allerede priviligert" -#: lib/RT/User_Overlay.pm:336 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "Den brukeren er allerede upriviligert" -#: lib/RT/User_Overlay.pm:328 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "Denne brukeren er nÃ¥ priviligert" -#: lib/RT/User_Overlay.pm:349 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "Dette brukeren er nÃ¥ upriviligert" @@ -4068,67 +5132,79 @@ msgstr "Dette brukeren er nÃ¥ upriviligert" msgid "That user is now unprivilegedileged" msgstr "Den brukeren er allerede upriviligert" -#: lib/RT/Ticket_Overlay.pm:3012 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "Den brukeren kan ikke eie saker i den køen" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "Dette er ikke en numerisk id" -#: html/SelfService/Display.html:32 html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "Detaljer" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "CCen til en sak" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "Administrative CCer for en sak" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "Kommentarer er lagret" -#: bin/rt-crontool:198 +#: 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 "De følgende kommandoene vil finne alle aktive saker i køen 'general' og sette deres prioritet til 99 hvis de ikke har blitt rørt de siste 4 timene:" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "De følgende kommandoene ble ikke behandlet:\\n\\n" -#: lib/RT/Interface/Web.pm:895 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "Den nye verdien har blitt satt." -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "Eieren av en sak" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "Forespørren av en sak" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Disse kommentarene er generelt ikke synlig for brukeren" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "" + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "Denne saken %1 %2 (%3)\\n" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "Dette verktøyet tillater brukeren Ã¥ kjøre perlmoduler fra inni RT." -#: lib/RT/Transaction_Overlay.pm:251 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "Denne transaksjonen ser ikke ut til Ã¥ ha noe innhold" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "Denne brukerens %1 høyst prioriterte saker" @@ -4137,7 +5213,7 @@ msgstr "Denne brukerens %1 høyst prioriterte saker" msgid "This user's 25 highest priority tickets" msgstr "Denne brukerens 23 høys prioriterte saker" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Tor." @@ -4153,32 +5229,42 @@ msgstr "Sak # %1 %2" msgid "Ticket # %1 Jumbo update: %2" msgstr "Sak $ %1 Jumbo oppdater: %2" -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "Sak #%1 Jumbo oppdatering: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "Sak #%1: %2" -#: lib/RT/Ticket_Overlay.pm:587 lib/RT/Ticket_Overlay.pm:608 +#: 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) +msgid "Ticket %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "Sak %1 opprettet i '%2' køen" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "Sak %1 lastet\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "Sak %1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "Sakshistorikk # %1 %2" @@ -4187,27 +5273,31 @@ msgstr "Sakshistorikk # %1 %2" msgid "Ticket Id" msgstr "SaksId" -#: etc/initialdata:309 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "Løst Sak" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "Saks-vedlegg" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "Saks-innhold" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "Sakens innholdstype" -#: lib/RT/Ticket_Overlay.pm:496 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "Saken kunne ikke opprettes pÃ¥ grunn av en intern feil" -#: lib/RT/Transaction_Overlay.pm:520 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "Sak opprettet" @@ -4215,11 +5305,11 @@ msgstr "Sak opprettet" msgid "Ticket creation failed" msgstr "Saksopprettelse feilet" -#: lib/RT/Transaction_Overlay.pm:525 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "Sak slettet" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" msgstr "Saksid ikke funnet" @@ -4227,58 +5317,68 @@ msgstr "Saksid ikke funnet" msgid "Ticket killed" msgstr "Sak drept" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "Sak ikke funnet" -#: etc/initialdata:295 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "Saksstatus endret" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "SaksovervÃ¥kere" -#: html/Elements/Tabs:47 +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" msgstr "Saker" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" msgstr "Saker %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" msgstr "Saker %1 av %2" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "Saker fra %1" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "Saker som er avhengige av denne godkjennelsen:" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "Tid Igjen" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "Arbeidstid" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "Tid igjen" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "Tid Ã¥ vise" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "Arbeidstid" @@ -4286,40 +5386,61 @@ msgstr "Arbeidstid" msgid "TimeLeft" msgstr "TidIgjen" -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "ArbeidsTid" -#: bin/rt-commit-handler:402 +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "For Ã¥ generere en diff av denne bekreftelsen:" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "For Ã¥ genere en diff av denne bekreftelsen" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Fortalt" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "" + +#: etc/initialdata:252 msgid "Transaction" msgstr "Transaksjon" -#: lib/RT/Transaction_Overlay.pm:640 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "Transaksjon %1 slettet" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "Transaksjon Opprettet" -#: lib/RT/Transaction_Overlay.pm:89 +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" msgstr "Transaction->Create kunne ikke, siden du ikke spesifiserte en saksid" -#: lib/RT/Transaction_Overlay.pm:699 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "Transaksjoner er lÃ¥st" @@ -4327,80 +5448,109 @@ msgstr "Transaksjoner er lÃ¥st" msgid "Trying to delete a right: %1" msgstr "Prøver Ã¥ slette en rettighet: %1" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Tir." -#: html/Admin/Elements/EditCustomField:44 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "Type" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Uimplementert" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Unix login" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "UnixBrukerNavn" -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "Ukjent InnholdsFormatering %1" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "Ubegrenset" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "Upriviligert" -#: lib/RT/Transaction_Overlay.pm:569 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "Ikke tatt" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Oppdater" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "Oppdater ID" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Oppdater Type" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "Oppdater alle disse sakene samtidig" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "Oppdater epost" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "Oppdater navn" -#: lib/RT/Interface/Web.pm:409 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "Oppdatering ikke lagret." -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "Oppdater valgte saker" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "Oppdater signatur" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "Oppdater sak" @@ -4408,24 +5558,60 @@ msgstr "Oppdater sak" msgid "Update ticket # %1" msgstr "Ooppdater sak # %1" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:47 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "Oppdater sak #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "Oppdater sak #%1 (%2)" -#: lib/RT/Interface/Web.pm:407 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "Oppdateringstype var verken korrespondanse eller kommentar." -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Oppdatert" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" msgstr "Bruker %1 %2: %3\\n" @@ -4434,6 +5620,11 @@ msgstr "Bruker %1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "Bruker %1 Passord: %2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "Brukeren '%1' ble ikke funnet" @@ -4442,60 +5633,81 @@ msgstr "Brukeren '%1' ble ikke funnet" msgid "User '%1' not found\\n" msgstr "Brukeren '%1' ble ikke funnet" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "Bruker Definert" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "BrukerID" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "BrukerId" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "Brukerrettigheter" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "Bruker kunne ikke opprettes: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Bruker opprettet" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "Brukerdefinerte grupper" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "Bruker informert" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "Brukervisning" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:51 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Brukernavn" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Brukere" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "Brukere som treffer søkekriteria" -#: html/Search/Elements/PickRestriction:51 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "KøVerdi" -#: html/Admin/Elements/EditCustomField:57 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Verdier" @@ -4503,11 +5715,11 @@ msgstr "Verdier" msgid "VrijevormEnkele" msgstr "VrijevormEnkele" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "OvervÃ¥k" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "OvervÃ¥kSomAdminCc" @@ -4515,87 +5727,95 @@ msgstr "OvervÃ¥kSomAdminCc" msgid "Watcher loaded" msgstr "OvervÃ¥ker lastet" -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "OvervÃ¥kere" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "WebFormatering" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Ons." -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "NÃ¥r en sak har blitt godkjent av alle godkjennere, legg til korrespondanse for den opprinnelige saken" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "NÃ¥r en sak har blitt godkjent av en godkjenner, legg til korrespondanse til den orginale saken" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "NÃ¥r er sak er opprettet" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "NÃ¥r er godkjennelsessak blir opprettet, gi melding til Eier og AdminCc om saken som venter pÃ¥ deres godkjenning" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "NÃ¥r noe skjer" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "NÃ¥r en sak er løst" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "NÃ¥r en sak fÃ¥r ny eier" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "NÃ¥r en sak flyttes til en ny kø" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "NÃ¥r en saks status endres" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "NÃ¥r brukerdefinerte forhold intreffer" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "NÃ¥r kommentarer kommer inn" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "NÃ¥r korrespondanse kommer inn" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Arbeid" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "ArbeidsTelefon" -#: html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Arbeidet" -#: lib/RT/Ticket_Overlay.pm:3123 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "Du eier allerede denne saken" -#: html/autohandler:108 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "Du er ikke en autorisert bruker" -#: lib/RT/Ticket_Overlay.pm:2998 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "Du kan bare omfordele saker som du eier eller som ikke har en eier" @@ -4603,24 +5823,24 @@ msgstr "Du kan bare omfordele saker som du eier eller som ikke har en eier" msgid "You don't have permission to view that ticket.\\n" msgstr "Du har ikke tilgang til Ã¥ se den saken.\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "Du fant %1 saker i %2 køen" -#: html/NoAuth/Logout.html:31 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "" -#: html/SelfService/Display.html:78 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "Du har ikke tilgang til Ã¥ opprette saker i den køen." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "Du kan ikke opprette forespørsler i den køen." -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "Velkommen tilbake" @@ -4632,11 +5852,11 @@ msgstr "Dine %1 forespørsler" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "Din RT administrastor har feilkonfigurert mail aliasene som kaller RT" -#: etc/initialdata:435 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "Din forespørsel har blitt godkjent av %1. Andre godkjennelser avventer kanskje fortsatt" -#: etc/initialdata:469 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "Din forespørsel ble godkjent." @@ -4644,15 +5864,15 @@ msgstr "Din forespørsel ble godkjent." msgid "Your request was rejected" msgstr "Din forespørsel ble avvist" -#: etc/initialdata:390 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "Din forespørsel ble avvist" -#: html/autohandler:127 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "Ditt brukernavn/passord er ugyldig" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "Zip" @@ -4660,36 +5880,48 @@ msgstr "Zip" msgid "[no subject]" msgstr "[ikke noe emne]" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "som tildelt til %1" -#: html/SelfService/Closed.html:28 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 msgid "closed" msgstr "lukket" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "inneholder" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" msgstr "innhold" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "innholdstype" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "korrespondanse (sansynligvis) ikke sendt" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "korrespondanse sendt" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "dager" @@ -4697,96 +5929,128 @@ msgstr "dager" msgid "dead" msgstr "død" -#: html/Search/Listing.html:75 +#: NOT FOUND IN SOURCE msgid "delete" msgstr "slett" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "slettet" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "treffer ikke" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "inneholder ikke" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "lik som" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + #: NOT FOUND IN SOURCE msgid "false" msgstr "usant" -#: html/Elements/SelectAttachmentField:28 +#: NOT FOUND IN SOURCE msgid "filename" msgstr "filnavn" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "større enn" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "gruppe '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "timer" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "id" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "er" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "er ikke" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "mindre enn" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "treffer" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "min" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "minutter" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "endringer\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "mÃ¥neder" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "ny" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "ingen verdi" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "ingen" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "ikke lik som" @@ -4794,51 +6058,59 @@ msgstr "ikke lik som" msgid "notlike" msgstr "ikkelik" -#: html/SelfService/Elements/MyRequests:61 lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "Ã¥pen" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "personlig gruppe '%1' for bruker '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "kø %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "avvist" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "løst" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "sek" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "pauset" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "system %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "systemgruppe '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "den kallende komponenten oppga ikke hvorfor" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "sak #%1 %2" @@ -4847,7 +6119,7 @@ msgstr "sak #%1 %2" msgid "true" msgstr "sant" -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "ubeskrevet gruppe %1" @@ -4856,12 +6128,12 @@ msgstr "ubeskrevet gruppe %1" msgid "undescripbed group %1" msgstr "ubeskrevet gruppe %1" -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "bruker %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "uker" @@ -4869,11 +6141,7 @@ msgstr "uker" msgid "with template %1" msgstr "med malen %1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "Ã¥r" -#: NOT FOUND IN SOURCE -msgid "ニックネーム" -msgstr "????" - diff --git a/rt/lib/RT/I18N/pl.po b/rt/lib/RT/I18N/pl.po new file mode 100644 index 000000000..3faa4eccb --- /dev/null +++ b/rt/lib/RT/I18N/pl.po @@ -0,0 +1,6436 @@ +# Copyright (c) 2002 Jesse Vincent <jesse@bestpractical.com> +# +msgid "" +msgstr "" +"Project-Id-Version: RT 3.2.2\n" +"POT-Creation-Date: 2007-01-18 11:36+0800\n" +"PO-Revision-Date: 2005-01-18 02:00+0800\n" +"Last-Translator: Piotr Åšliwa <piotr.sliwa@comarch.pl>\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-Transfer-Encoding: 8bit\n" + +#: NOT FOUND IN SOURCE +msgid "#" +msgstr "Nr" + +#: 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) +msgid "#%1: %2" +msgstr "#%1: %2" + +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 nr%2" + +#: lib/RT/Date.pm:361 +#. ($s, $time_unit) +msgid "%1 %2" +msgstr "%1 %2" + +#: NOT FOUND IN SOURCE +msgid "%1 %2 %3" +msgstr "%1 %2 %3" + +#: lib/RT/Date.pm:397 +#. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) +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) +msgid "%1 %2 added" +msgstr "%1 %2 zostaÅ‚y dodane" + +#: lib/RT/Date.pm:358 +#. ($s, $time_unit) +msgid "%1 %2 ago" +msgstr "przed %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) +msgid "%1 %2 changed to %3" +msgstr "%1 %2 zostaÅ‚o zamienione na %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) +msgid "%1 %2 deleted" +msgstr "%1 %2 zostaÅ‚o usuniÄ™te" + +#: NOT FOUND IN SOURCE +msgid "%1 %2 of group %3" +msgstr "%1 %2 z groupy %3" + +#: 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)) +msgid "%1 %2 with template %3" +msgstr "%1 %2 wg szablonu %3" + +#: NOT FOUND IN SOURCE +msgid "%1 (%2) %3 this ticket\\n" +msgstr "%1 (%2) %3 tego zgÅ‚oszenia\\n" + +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) przez %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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (Niezmienione)" + +#: NOT FOUND IN SOURCE +msgid "%1 - %2 shown" +msgstr "wyÅ›wietlone %1 - %2" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 +#. ("--search-argument", "--search") +#. ("--condition-argument", "--condition") +#. ("--action-argument", "--action") +msgid "%1 - An argument to pass to %2" +msgstr "%1 - warunek przejÅ›cia na %2" + +#: bin/rt-crontool:210 +#. ("--verbose") +msgid "%1 - Output status updates to STDOUT" +msgstr "%1 - Status wyjÅ›ciowy zaktualizowany na STDOUT" + +#: bin/rt-crontool:204 +#. ("--action") +msgid "%1 - Specify the action module you want to use" +msgstr "%1 - OkreÅ›l moduÅ‚ dziaÅ‚aÅ„, którego chcesz użyć" + +#: bin/rt-crontool:198 +#. ("--condition") +msgid "%1 - Specify the condition module you want to use" +msgstr "%1 - OkreÅ›l moduÅ‚ warunków, którego chcesz użyć" + +#: bin/rt-crontool:191 +#. ("--search") +msgid "%1 - Specify the search module you want to use" +msgstr "%1 - OkreÅ›l moduÅ‚ wyszukiwania, którego chcesz użyć" + + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "%1 RT %2 Wszelkie prawa zastrzeżone 1996-%3 %4" + +#: lib/RT/ScripAction_Overlay.pm:151 +#. ($self->Id) +msgid "%1 ScripAction loaded" +msgstr "Skrypt %1 zostaÅ‚ zaÅ‚adowany" + +#: lib/RT/Record.pm:1708 +#. ($args{'Value'}, $cf->Name) +msgid "%1 added as a value for %2" +msgstr "dodano %1 jako wartość dla %2" + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on" +msgstr "do okreÅ›lenia aliasów dla %1 wymagany numer zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on " +msgstr "do okreÅ›lenia aliasów dla %1 wymagany numer zgÅ‚oszenia " + +#: NOT FOUND IN SOURCE +msgid "%1 aliases require a TicketId to work on (from %2) %3" +msgstr "do okreÅ›lenia aliasów dla %1 wymagany numer zgÅ‚oszenia (od %2) %3" + +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 +#. ($args{'Base'}) +#. ($args{'Target'}) +msgid "%1 appears to be a local object, but can't be found in the database" +msgstr "Wydaje siÄ™, że %1 to obiekt lokalny, ale nie udaÅ‚o siÄ™ wyszukać go w bazie danych" + +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 +#. ($self->BriefDescription , $self->CreatorObj->Name) +#. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) +msgid "%1 by %2" +msgstr "%1 przez %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."'") +msgid "%1 changed from %2 to %3" +msgstr "%1 zmieniÅ‚o siÄ™ z %2 na %3" + +# Nie jestem pewien! +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "kopia %1" + +#: lib/RT/Record.pm:930 +msgid "%1 could not be set to %2." +msgstr "nie udaÅ‚o siÄ™ ustawić %1 na %2" + +#: NOT FOUND IN SOURCE +msgid "%1 couldn't init a transaction (%2)\\n" +msgstr "%1 nie udaÅ‚o siÄ™ rozpocząć transakcji (%2)\\n" + +#: lib/RT/Ticket_Overlay.pm:2743 +#. ($self) +msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." +msgstr "%1 nie udaÅ‚o siÄ™ ustawić statusu na zamkniÄ™ty. Baza danych RT może być niespójna" + +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "%1 crĂŠĂŠ(e)" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "%1 supprimĂŠ(e)" + +#: html/Elements/MyTickets:47 +#. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "%1 zgÅ‚oszeÅ„ o najwyższym priorytecie, których jestem wÅ‚aÅ›cicielem" + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I own..." +msgstr "%1 zgÅ‚oszeÅ„ o najwyższym priorytecie, których wÅ‚aÅ›cicielem jest użytkownik..." + +#: NOT FOUND IN SOURCE +msgid "%1 highest priority tickets I requested..." +msgstr "%1 zgÅ‚oszeÅ„ o najwyższym priorytecie zarejestrowanych przez użytkownika..." + +#: bin/rt-crontool:186 +#. ($0) +msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." +msgstr "%1 jest narzÄ™dziem umożliwiajÄ…cym obsÅ‚ugÄ™ zgÅ‚oszeÅ„ z zewnÄ™trznej aplikacji do sporzÄ…dzania wykazów, takiej jak cron." + +#: lib/RT/Queue_Overlay.pm:860 +#. ($principal->Object->Name, $args{'Type'}) +msgid "%1 is no longer a %2 for this queue." +msgstr "%1 nie jest już %2 dla tej kolejki" + +#: NOT FOUND IN SOURCE +msgid "%1 is no longer a %2 for this ticket." +msgstr "%1 nie jest już %2 dla tego zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "%1 is no longer a value for custom field %2" +msgstr "%1 nie jest już wartoÅ›ciÄ… pola %2" + +#: NOT FOUND IN SOURCE +msgid "%1 isn't a valid Queue id." +msgstr "%1 nie jest aktualnie obowiÄ…zujÄ…cym Id kolejki" + +#: NOT FOUND IN SOURCE +msgid "%1 matches" +msgstr "%1 pasuje" + +#: 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) +msgid "%1 min" +msgstr "%1 min." + +#: NOT FOUND IN SOURCE +msgid "%1 most recently updated articles" +msgstr "%1 ostatnio zaktualizowanych artykułów" + +#: NOT FOUND IN SOURCE +msgid "%1 newest articles" +msgstr "%1 najnowszych artykułów" + +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "%1 zgÅ‚oszeÅ„ bez wÅ‚aÅ›ciciela" + +#: NOT FOUND IN SOURCE +msgid "%1 not shown" +msgstr "%1 nie zostaÅ‚o wyÅ›wietlone" + +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 objets" + +#: html/User/Elements/DelegateRights:97 +#. (loc($ObjectType =~ /^RT::(.*)$/)) +msgid "%1 rights" +msgstr "%1 - uprawnienia" + +#: NOT FOUND IN SOURCE +msgid "%1 succeeded\\n" +msgstr "%1 udaÅ‚o siÄ™" + +#: NOT FOUND IN SOURCE +msgid "%1 type unknown for $MessageId" +msgstr "%1 to nieznany typ Id wiadomoÅ›ci ($MessageId)" + +#: NOT FOUND IN SOURCE +msgid "%1 type unknown for %2" +msgstr "%1 to nieznany typ dla %2" + +#: NOT FOUND IN SOURCE +msgid "%1 was created without a CurrentUser\\n" +msgstr "%1 a ĂŠtĂŠcrĂŠĂŠsans utilisateur courant\\n" + +#: lib/RT/Action/ResolveMembers.pm:63 +#. (ref $self) +msgid "%1 will resolve all members of a resolved group ticket." +msgstr "%1 zamknie wszystkie części zamykanego zgÅ‚oszenia grupowego." + +#: NOT FOUND IN SOURCE +msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." +msgstr "%1 zamknie bazÄ™ lokalnÄ…, jeÅ›li jest powiÄ…zana z podłączonym zgÅ‚oszeniem (lub jest jego częściÄ…)" + +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "Zapisane zapytania %1" + +#: lib/RT/Transaction_Overlay.pm:470 +#. ($self) +msgid "%1: no attachment specified" +msgstr "%1: nie okreÅ›lono załącznika" + +#: html/Ticket/Elements/ShowTransactionAttachments:78 +#. ($size) +msgid "%1b" +msgstr "%1b" + +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) +msgid "%1k" +msgstr "%1k" + +#: lib/RT/Ticket_Overlay.pm:1118 +#. ($args{'Status'}) +msgid "'%1' is an invalid value for status" +msgstr "'%1' to nieprawidÅ‚owa wartość statusu" + +#: NOT FOUND IN SOURCE +msgid "'%1' not a recognized action. " +msgstr "'%1' n'est pas une action connue. " + +#: NOT FOUND IN SOURCE +msgid "(Check box to delete group member)" +msgstr "(Zaznacz pole, aby usunąć element z grupy)" + +#: NOT FOUND IN SOURCE +msgid "(Check box to delete scrip)" +msgstr "(Zaznacz pole, aby usunąć skrypt)" + +#: 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 "(Zaznacz pole, aby usunąć)" + +#: NOT FOUND IN SOURCE +msgid "(Check boxes to delete)" +msgstr "(Zaznacz pola, aby usunąć)" + +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(Zaznacz pola przy odbiorcach na liÅ›cie, aby zablokować wysyÅ‚anie powiadomieÅ„)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(Zaznacz pola przy odbiorcach na liÅ›cie, aby uruchomić wysyÅ‚anie powiadomieÅ„)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(Wprowadź numery lub adresy URL zgÅ‚oszeÅ„, oddzielone spacjami)" + +#: NOT FOUND IN SOURCE +msgid "(Enter ticket ids or URLs, seperated with spaces)" +msgstr "(Wprowadź numery lub adresy URL zgÅ‚oszeÅ„, oddzielone spacjami)" + +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 +#. ($RT::CorrespondAddress) +#. ($RT::CommentAddress) +msgid "(If left blank, will default to %1)" +msgstr "(JeÅ›li pozostawisz puste, domyÅ›lnie zostanie ustawione na %1)" + +#: NOT FOUND IN SOURCE +msgid "(No Value)" +msgstr "(Non renseignĂŠ)" + +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 +msgid "(No custom fields)" +msgstr "(Brak pól definiowanych przez użytkownika)" + +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 +msgid "(No members)" +msgstr "(Brak czÅ‚onków grupy)" + +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 +msgid "(No scrips)" +msgstr "(Brak skryptów)" + +#: html/Admin/Elements/EditTemplates:52 +msgid "(No templates)" +msgstr "(Brak szablonów)" + +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(Aucun)" + +#: 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 "(WysyÅ‚a kopiÄ™ zgÅ‚oszenia na listÄ™ adresów mailowych oddzielonych przecinkami, umieszczonych w polu BCC.<b> Nie zmienia</b> tego, kto bÄ™dzie otrzymywaÅ‚ informacje o stanie zgÅ‚oszenia)" + +#: NOT FOUND IN SOURCE +msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +msgstr "(WysyÅ‚a kopiÄ™ zgÅ‚oszenia na listÄ™ adresów mailowych oddzielonych przecinkami, umieszczonych w polu BCC. <b>Nie zmienia</b> tego, kto bÄ™dzie otrzymywaÅ‚ informacje o stanie zgÅ‚oszenia)" + +#: 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 "(WysyÅ‚a kopiÄ™ zgÅ‚oszenia na listÄ™ administracyjnych adresów mailowych oddzielonych przecinkami. Te osoby <b> bÄ™dÄ…</b> otrzymywać informacje o stanie zgÅ‚oszenia)" + +#: 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 "(WysyÅ‚a kopiÄ™ zgÅ‚oszenia na listÄ™ adresów mailowych oddzielonych przecinkami. <b>Nie</b> zmienia tego, kto bÄ™dzie otrzymywaÅ‚ informacje o stanie zgÅ‚oszenia)" + +#: NOT FOUND IN SOURCE +msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" +msgstr "(WysyÅ‚a kopiÄ™ zgÅ‚oszenia na listÄ™ adresów mailowych oddzielonych przecinkami. <b>Nie</b> zmienia tego, kto bÄ™dzie otrzymywaÅ‚ informacje o stanie zgÅ‚oszenia)" + +#: 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 "(WysyÅ‚a kopiÄ™ zgÅ‚oszenia na listÄ™ adresów mailowych oddzielonych przecinkami. Te osoby <b>bÄ™dÄ…</b> otrzymywać informacje o stanie zgÅ‚oszenia)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(Skorzystaj z tych pól jeÅ›li wybrano 'Definiowany przez użytkownika' w atrybutach warunku lub operacji)" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 +msgid "(empty)" +msgstr "(pusta)" + +#: NOT FOUND IN SOURCE +msgid "(no Summary)" +msgstr "(brak streszczenia)" + +#: html/Admin/Users/index.html:60 +msgid "(no name listed)" +msgstr "(brak listy użytkowników)" + +#: NOT FOUND IN SOURCE +msgid "(no name)" +msgstr "(brak nazwy)" + +#: NOT FOUND IN SOURCE +msgid "(no subject)" +msgstr "(brak tematu)" + +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 +msgid "(no value)" +msgstr "(brak wartoÅ›ci)" + +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(aucune valeur)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 +msgid "(only one ticket)" +msgstr "(tylko jedno zgÅ‚oszenie)" + +#: html/Elements/RT__Ticket/ColumnMap:146 +msgid "(pending approval)" +msgstr "(oczekuje na zatwierdzenie)" + +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(oczekuje na innÄ… KolekcjÄ™)" + +#: NOT FOUND IN SOURCE +msgid "(pending other tickets)" +msgstr "(oczekuje na inne zgÅ‚oszenia)" + +#: NOT FOUND IN SOURCE +msgid "(requestor's group)" +msgstr "(groupe du demandeur)" + +#: html/Admin/Users/Modify.html:71 +msgid "(required)" +msgstr "(wymagana)" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "(untitled)" +msgstr "(nienazwany)" + +#: NOT FOUND IN SOURCE +msgid "25 highest priority tickets I own..." +msgstr "25 zgÅ‚oszeÅ„ o najwyższym priorytecie, których wÅ‚aÅ›cicielem jest użytkownik..." + +#: NOT FOUND IN SOURCE +msgid "25 highest priority tickets I requested..." +msgstr "25 zgÅ‚oszeÅ„ o najwyższym priorytecie zarejestrowanych przez użytkownika..." + +#: html/Ticket/Elements/ShowBasics:53 +msgid "<% $Ticket->Status%>" +msgstr "<% $Ticket->Status%>" + +#: html/Elements/SelectTicketTypes:48 +msgid "<% $_ %>" +msgstr "<% $_ %>" + +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<input type=\"submit\" value=\"Nowe zgÅ‚oszenie w\"> %1" + +#: etc/initialdata:218 +msgid "A blank template" +msgstr "Pusty szablon" + +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "ACE Deleted" +msgstr "ACE SupprimĂŠ" + +#: NOT FOUND IN SOURCE +msgid "ACE Loaded" +msgstr "ACE ChargĂŠ" + +#: NOT FOUND IN SOURCE +msgid "ACE could not be deleted" +msgstr "l'ACE n'a pu ĂŞtre supprimĂŠ" + +#: NOT FOUND IN SOURCE +msgid "ACE could not be found" +msgstr "l'ACE n'a pu ĂŞtre trouvĂŠ" + +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 +msgid "ACE not found" +msgstr "Nie udaÅ‚o siÄ™ odnaleźć ACE" + +#: lib/RT/ACE_Overlay.pm:854 +msgid "ACEs can only be created and deleted." +msgstr "ACE mogÄ… być tylko utworzone lub usuniÄ™te." + +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Aborting to avoid unintended ticket modifications.\\n" +msgstr "Przerwanie operacji, aby uniknąć niezamierzonych modyfikacji zgÅ‚oszenia.\\n" + +#: html/User/Elements/Tabs:53 +msgid "About me" +msgstr "Użytkownika" + +#: html/Admin/Users/Modify.html:106 +msgid "Access control" +msgstr "Kontrola dostÄ™pu" + +#: html/Admin/Elements/EditScrip:71 +msgid "Action" +msgstr "Operacja" + +#: lib/RT/Scrip_Overlay.pm:173 +#. ($args{'ScripAction'}) +msgid "Action %1 not found" +msgstr "Operacja %1 nie zostaÅ‚a odnaleziona" + +#: NOT FOUND IN SOURCE +msgid "Action committed." +msgstr "Operacja zostaÅ‚a zatwierdzona" + +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 +msgid "Action prepared..." +msgstr "Operacja zostaÅ‚a przygotowana..." + +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Dodaj" + +#: html/Search/Bulk.html:114 +msgid "Add AdminCc" +msgstr "Dodaj AdminCc" + +#: html/Search/Bulk.html:110 +msgid "Add Cc" +msgstr "Dodaj Cc" + +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "Dodaj kryterium" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "Dodaj wiÄ™cej plików" + +#: NOT FOUND IN SOURCE +msgid "Add Next State" +msgstr "Ajouter ĂŠtape suivant" + +#: html/Search/Bulk.html:106 +msgid "Add Requestor" +msgstr "Dodaj zgÅ‚aszajÄ…cego" + +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "Dodaj wartość" + +#: NOT FOUND IN SOURCE +msgid "Add a keyword selection to this queue" +msgstr "Ajouter une sĂŠlection de mots clĂŠĂ cette queue" + +#: NOT FOUND IN SOURCE +msgid "Add a new a global scrip" +msgstr "Dodaj nowy skrypt globalny" + +#: NOT FOUND IN SOURCE +msgid "Add a scrip to this queue" +msgstr "Dodaj skrypt dla tej kolejki" + +#: html/Admin/Global/Scrip.html:76 +msgid "Add a scrip which will apply to all queues" +msgstr "Dodaj skrypt, który bÄ™dzie dotyczyÅ‚ wszystkich kolejek" + +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "Dodaj kolejne kryterium" + +#: html/Search/Bulk.html:146 +msgid "Add comments or replies to selected tickets" +msgstr "Dodaj komentarze lub odpowiedzi do wybranych zgÅ‚oszeÅ„" + +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 +msgid "Add members" +msgstr "Dodaj czÅ‚onków grupy" + +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 +msgid "Add new watchers" +msgstr "Dodaj nowych obserwatorów" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "AddNextState" +msgstr "Dodaj nastÄ™pny status" + +#: lib/RT/Queue_Overlay.pm:760 +#. ($args{'Type'}) +msgid "Added principal as a %1 for this queue" +msgstr "ZostaÅ‚ dodany zarzÄ…dzajÄ…cy %1 dla tej kolejki" + +#: lib/RT/Ticket_Overlay.pm:1416 +#. ($self->loc($args{'Type'})) +msgid "Added principal as a %1 for this ticket" +msgstr "ZostaÅ‚ dodany zarzÄ…dzajÄ…cy %1 dla tego zgÅ‚oszenia" + +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 +msgid "Address1" +msgstr "Adres 1" + +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 +msgid "Address2" +msgstr "Adres 2" + +#: html/Ticket/Create.html:95 +msgid "Admin Cc" +msgstr "Admin Cc" + +#: etc/initialdata:295 +msgid "Admin Comment" +msgstr "Administracja komentarzami" + +#: etc/initialdata:274 +msgid "Admin Correspondence" +msgstr "Administracja korespondencjÄ…" + +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 +msgid "Admin queues" +msgstr "Administracja kolejkami" + +#: NOT FOUND IN SOURCE +msgid "Admin users" +msgstr "Administracja użytkownikami" + +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 +msgid "Admin/Global configuration" +msgstr "Globalna konfiguracja - administracja" + +#: NOT FOUND IN SOURCE +msgid "Admin/Groups" +msgstr "Grupy - administracja" + +#: NOT FOUND IN SOURCE +msgid "Admin/Queue/Basics" +msgstr "Administracja kolejkami . podstawowe informacje" + +#: NOT FOUND IN SOURCE +msgid "AdminAllPersonalGroups" +msgstr "AdminAllPersonalGroups" + +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 +msgid "AdminCc" +msgstr "AdminCc" + +#: NOT FOUND IN SOURCE +msgid "AdminComment" +msgstr "AdminComment" + +#: NOT FOUND IN SOURCE +msgid "AdminCorrespondence" +msgstr "AdminCorrespondence" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "AdminPolamiUżytk" + +#: NOT FOUND IN SOURCE +msgid "AdminCustomFields" +msgstr "AdminCustomFields" + +#: lib/RT/Group_Overlay.pm:171 +msgid "AdminGroup" +msgstr "AdminGroup" + +#: lib/RT/Group_Overlay.pm:173 +msgid "AdminGroupMembership" +msgstr "AdminGroupMembership" + +#: lib/RT/System.pm:81 +msgid "AdminOwnPersonalGroups" +msgstr "AdminOwnPersonalGroups" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "AdminQueue" +msgstr "AdminQueue" + +#: lib/RT/System.pm:82 +msgid "AdminUsers" +msgstr "AdminUsers" + +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 +msgid "Administrative Cc" +msgstr "Administracyjne Cc" + +#: NOT FOUND IN SOURCE +msgid "Admins" +msgstr "Administrateurs" + +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Zaawansowane" + +#: NOT FOUND IN SOURCE +msgid "Advanced Search" +msgstr "Wyszukiwanie zaawansowane" + +#: NOT FOUND IN SOURCE +msgid "Advanced Search Criteria" +msgstr "Kryteria wyszukiwania zaawansowanego" + +#: html/Elements/SelectDateRelation:57 +msgid "After" +msgstr "po" + +#: NOT FOUND IN SOURCE +msgid "Age" +msgstr "Wiek" + +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Alias for" +msgstr "Alias pour" + +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "Wszystkie warunki poprawnoÅ›ci speÅ‚nione" + +#: NOT FOUND IN SOURCE +msgid "All Classes" +msgstr "Wszystkie klasy" + +#: NOT FOUND IN SOURCE +msgid "All Custom Fields" +msgstr "Wszystkie pola definiowane przez użytkownika" + +#: html/Admin/Queues/index.html:75 +msgid "All Queues" +msgstr "Wszystkie kolejki" + +#: NOT FOUND IN SOURCE +msgid "Always sends a message to the requestors independent of message sender" +msgstr "Zawsze wysyÅ‚a wiadomość do zgÅ‚aszajÄ…cych niezależnie od nadawcy wiadomoÅ›ci" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "S'applique Ă " + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Zastosuj" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Zastosuj zmiany" + +#: html/Elements/Tabs:74 +msgid "Approval" +msgstr "Potwierdzenia" + +#: 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) +msgid "Approval #%1: %2" +msgstr "Potwierdzenie #%1: %2" + +#: html/Approvals/index.html:75 +#. ($ticket->Id) +msgid "Approval #%1: Notes not recorded due to a system error" +msgstr "Potwierdzenie #%1: Uwagi nie zostaÅ‚y zapisane z powodu błędu systemu" + +#: html/Approvals/index.html:73 +#. ($ticket->Id) +msgid "Approval #%1: Notes recorded" +msgstr "Potwierdzenie #%1: Uwagi zostaÅ‚y zapisane" + +#: NOT FOUND IN SOURCE +msgid "Approval Details" +msgstr "Szczegóły zatwierdzenia" + +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Zatwierdzone" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Odrzucone" + +#: NOT FOUND IN SOURCE +msgid "Approval diagram" +msgstr "Diagram potwierdzenia" + +#: html/Approvals/Elements/Approve:65 +msgid "Approve" +msgstr "Zatwierdź" + +#: etc/initialdata:504 +msgid "Approver's notes: %1" +msgstr "Uwagi zatwierdzajÄ…cego: %1" + +#: lib/RT/Date.pm:440 +msgid "Apr." +msgstr "Kwi." + +#: NOT FOUND IN SOURCE +msgid "April" +msgstr "KwiecieÅ„" + +#: NOT FOUND IN SOURCE +msgid "Are you sure you want to delete this article?" +msgstr "Czy jestes pewien, że chcesz usunąć ten artykuÅ‚?" + +#: NOT FOUND IN SOURCE +msgid "Article #%1 deleted" +msgstr "ArtykuÅ‚ #%1 zostaÅ‚ usuniÄ™ty" + +#: NOT FOUND IN SOURCE +msgid "Article #%1: %2" +msgstr "ArtykuÅ‚ #%1: %2" + +#: NOT FOUND IN SOURCE +msgid "Article not found" +msgstr "ArtykuÅ‚ nie zostaÅ‚ odnaleziony" + +#: NOT FOUND IN SOURCE +msgid "Articles" +msgstr "ArtykuÅ‚y" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 +msgid "Ascending" +msgstr "RosnÄ…co" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Fixer et supprimer les champs personnalisĂŠs" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "FixerChampsPersonnalisĂŠs" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 +msgid "Attach" +msgstr "Załączniki" + +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 +msgid "Attach file" +msgstr "Załącz plik" + +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 +msgid "Attached file" +msgstr "Plik zostaÅ‚ załączony" + +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) +msgid "Attachment '%1' could not be loaded" +msgstr "Nie udaÅ‚o siÄ™ dodać załącznika '%1'" + +#: lib/RT/Transaction_Overlay.pm:478 +msgid "Attachment created" +msgstr "Załącznik zostaÅ‚ utworzony" + +#: lib/RT/Tickets_Overlay.pm:1673 +msgid "Attachment filename" +msgstr "Nazwa pliku załącznika" + +#: html/Ticket/Elements/ShowAttachments:47 +msgid "Attachments" +msgstr "Załączniki" + +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Atrybut usuniÄ™ty" + +#: lib/RT/Date.pm:444 +msgid "Aug." +msgstr "Sie." + +#: NOT FOUND IN SOURCE +msgid "August" +msgstr "SierpieÅ„" + +#: NOT FOUND IN SOURCE +msgid "AuthSystem" +msgstr "AuthSystem" + +#: etc/initialdata:221 +msgid "Autoreply" +msgstr "Automatyczna odpowiedź" + +#: etc/initialdata:72 +msgid "Autoreply To Requestors" +msgstr "Automatyczna odpowiedź wysyÅ‚ana do zgÅ‚aszajÄ…cych" + +#: NOT FOUND IN SOURCE +msgid "AutoreplyToRequestors" +msgstr "Automatyczna odpowiedź wysyÅ‚ana do zgÅ‚aszajÄ…cych" + +#: NOT FOUND IN SOURCE +msgid "Available Columns" +msgstr "DostÄ™pne kolumny" + +#: NOT FOUND IN SOURCE +msgid "Bad PGP Signature: %1\\n" +msgstr "NiewÅ‚aÅ›ciwy podpis PGP: %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Bad attachment id. Couldn't find attachment '%1'\\n" +msgstr "NiewÅ‚aÅ›ciwy numer id załącznika. Nie udaÅ‚o siÄ™ wyszukać załącznika '%1'\\n" + +#: NOT FOUND IN SOURCE +msgid "Bad data in %1" +msgstr "NiewÅ‚aÅ›ciwe dane w %1" + +#: NOT FOUND IN SOURCE +msgid "Bad transaction number for attachment. %1 should be %2\\n" +msgstr "NiewÅ‚aÅ›ciwy numer transakcji dla załącznika. %1 należy zastÄ…pić przez %2\\n" + +#: 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 "Podst. informacje" + +#: html/Ticket/Update.html:86 +msgid "Bcc" +msgstr "Bcc" + +#: 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 "PamiÄ™taj, aby zapisać zmiany" + +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 +msgid "Before" +msgstr "przed" + +#: NOT FOUND IN SOURCE +msgid "Begin Approval" +msgstr "Rozpocznij zatwierdzanie" + +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "Binaire" + +#: etc/initialdata:217 +msgid "Blank" +msgstr "Pusty" + +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Bookmarkable URL for this search" +msgstr "Adres URL do zapamiÄ™tania dla tego wyszukiwania" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "URL do zapamiÄ™tania" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 +msgid "Brief headers" +msgstr "Krótkie nagłówki" + +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 +msgid "Bulk ticket update" +msgstr "Hurtowa aktualizacja zgÅ‚oszeÅ„" + +#: lib/RT/User_Overlay.pm:1722 +msgid "Can not modify system users" +msgstr "Nie można zmienić użytkowników systemu" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "Can this principal see this queue" +msgstr "Czy ten zarzÄ…dzajÄ…cy widzi tÄ™ kolejkÄ™" + +#: lib/RT/CustomField_Overlay.pm:370 +msgid "Can't add a custom field value without a name" +msgstr "Nie można wprowadzić wartoÅ›ci pola bez nazwy" + +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 +msgid "Can't link a ticket to itself" +msgstr "Nie można połączyć zgÅ‚oszenia z tym samym zgÅ‚oszeniem" + +#: NOT FOUND IN SOURCE +msgid "Can't merge into a merged ticket. You should never get this error" +msgstr "Niemożliwe połączenie w jedno zgÅ‚oszenie" + +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Niemożliwe jest zapisanie tego zapytania" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 +msgid "Can't specifiy both base and target" +msgstr "Niemożliwe okreÅ›lenie jednoczeÅ›nie podstaw i celu" + +#: html/autohandler:148 +#. ($msg) +msgid "Cannot create user: %1" +msgstr "Niemożliwe utworzenie użytkownika: %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 +msgid "Cc" +msgstr "Cc" + +#: html/SelfService/Prefs.html:52 +msgid "Change password" +msgstr "ZmieÅ„ hasÅ‚o" + +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Tout vĂŠrifier" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 +msgid "Check box to delete" +msgstr "Zaznacz pole, aby usunąć" + +#: html/Admin/Elements/SelectRights:55 +msgid "Check box to revoke right" +msgstr "Zaznacz pole, aby odebrać uprawnienie" + +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 +msgid "Children" +msgstr "ZgÅ‚oszenia podrzÄ™dne" + +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 +msgid "City" +msgstr "Miasto" + +#: NOT FOUND IN SOURCE +msgid "Class" +msgstr "Klasa" + +#: NOT FOUND IN SOURCE +msgid "Class Name" +msgstr "Nazwa klasy" + +#: NOT FOUND IN SOURCE +msgid "Class is" +msgstr "KlasÄ… jest" + +#: NOT FOUND IN SOURCE +msgid "Classes" +msgstr "Klasy" + +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "Tout effacer" + +#: html/Ticket/Elements/ShowDates:68 +msgid "Closed" +msgstr "ZamkniÄ™te" + +#: NOT FOUND IN SOURCE +msgid "Closed Tickets" +msgstr "ZamkniÄ™te zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Closed requests" +msgstr "Demandes closes" + +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "ZamkniÄ™te zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Command not understood!\\n" +msgstr "NiezrozumiaÅ‚e polecenie!\\n" + +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 +msgid "Comment" +msgstr "Komentuj" + +#: html/Admin/Queues/Modify.html:79 +msgid "Comment Address" +msgstr "Adres komentarza" + +#: NOT FOUND IN SOURCE +msgid "Comment not recorded" +msgstr "Komentarz nie zostaÅ‚ zapisany" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "Comment on tickets" +msgstr "Komentarz do zgÅ‚oszeÅ„" + +#: lib/RT/Queue_Overlay.pm:112 +msgid "CommentOnTicket" +msgstr "CommentOnTicket" + +#: NOT FOUND IN SOURCE +msgid "Comments" +msgstr "Komentarze" + +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 +msgid "Comments (Not sent to requestors)" +msgstr "Komentarze (które nie zostanÄ… wysÅ‚ane zgÅ‚aszajÄ…cym)" + +#: html/Search/Bulk.html:150 +msgid "Comments (not sent to requestors)" +msgstr "Komentarze (które nie zostaÅ‚y wysÅ‚ane zgÅ‚aszajÄ…cym)" + +#: NOT FOUND IN SOURCE +msgid "Comments about %1" +msgstr "Komentarze dotyczÄ…ce %1" + +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 +msgid "Comments about this user" +msgstr "Uwagi dotyczÄ…ce użytkownika" + +#: lib/RT/Transaction_Overlay.pm:623 +msgid "Comments added" +msgstr "Komentarze zostaÅ‚y dodane" + +#: lib/RT/Action/Generic.pm:176 +msgid "Commit Stubbed" +msgstr "Potwierdzenie wysÅ‚ane do zgÅ‚aszajÄ…cego" + +#: NOT FOUND IN SOURCE +msgid "Compile Restrictions" +msgstr "Ograniczenia kompilacji" + +#: html/Admin/Elements/EditScrip:63 +msgid "Condition" +msgstr "Warunek" + +#: bin/rt-crontool:131 +msgid "Condition matches..." +msgstr "Warunek zgadza siÄ™ z ..." + +#: lib/RT/Scrip_Overlay.pm:189 +msgid "Condition not found" +msgstr "Warunek nie zostaÅ‚ odnaleziony" + +#: html/Elements/Tabs:81 +msgid "Configuration" +msgstr "Konfiguracja" + +#: html/SelfService/Prefs.html:54 +msgid "Confirm" +msgstr "Potwierdź" + +#: NOT FOUND IN SOURCE +msgid "ContactInfoSystem" +msgstr "ContactInfoSystem" + +#: NOT FOUND IN SOURCE +msgid "Contacted date '%1' could not be parsed" +msgstr "Nie udaÅ‚o siÄ™ rozpoznać daty modyfikacji'%1'" + +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 +msgid "Content" +msgstr "Zawartość" + +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "Typ zawartoÅ›ci" + +#: NOT FOUND IN SOURCE +msgid "Coould not create group" +msgstr "Le groupe n'a pas pu ĂŞtre crĂŠĂŠ" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "Kopiuj" + +#: etc/initialdata:286 +msgid "Correspondence" +msgstr "Korespondencja" + +#: NOT FOUND IN SOURCE +msgid "Correspondence Address" +msgstr "Adres korespondencyjny" + +#: lib/RT/Transaction_Overlay.pm:619 +msgid "Correspondence added" +msgstr "Korespondencja zostaÅ‚a dodana" + +#: NOT FOUND IN SOURCE +msgid "Correspondence not recorded" +msgstr "Korespondencja nie zostaÅ‚a zapisana" + +#: NOT FOUND IN SOURCE +msgid "Could not add new custom field value for ticket. " +msgstr "Nie udaÅ‚o siÄ™ wprowadzić nowej wartoÅ›ci pola dla zgÅ‚oszenia." + +#: NOT FOUND IN SOURCE +msgid "Could not add new custom field value for ticket. %1 " +msgstr "La valeur de champ personnalisĂŠn'a pas pu ĂŞtre ajoutĂŠe. %1" + +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 +msgid "Could not change owner. " +msgstr "Nie udaÅ‚o siÄ™ zmienić wÅ‚aÅ›ciciela." + +#: html/Admin/CustomFields/Modify.html:119 +#. ($msg) +msgid "Could not create CustomField" +msgstr "Nie udaÅ‚o siÄ™ utworzyć pola definiowanego przez użytkownika" + +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 +msgid "Could not create group" +msgstr "Nie udaÅ‚o siÄ™ utworzyć grupy" + +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 +#. ($msg) +msgid "Could not create template: %1" +msgstr "Nie udaÅ‚o siÄ™ utworzyć szablonu: %1" + +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 +msgid "Could not create ticket. Queue not set" +msgstr "Nie udaÅ‚o siÄ™ utworzyć zgÅ‚oszenia. Nie okreÅ›lono kolejki" + +#: 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 "Nie udaÅ‚o siÄ™ utworzyć użytkownika" + +#: NOT FOUND IN SOURCE +msgid "Could not create watcher for requestor" +msgstr "L'observateur n'a pas pu ĂŞtre crĂŠe pour le demandeur" + +#: NOT FOUND IN SOURCE +msgid "Could not find a ticket with id %1" +msgstr "Nie udaÅ‚o siÄ™ wyszukać zgÅ‚oszenia o numerze %1" + +#: NOT FOUND IN SOURCE +msgid "Could not find group %1." +msgstr "Nie udaÅ‚o siÄ™ wyszukać grupy %1." + +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 +msgid "Could not find or create that user" +msgstr "Nie udaÅ‚o siÄ™ wyszukać ani utworzyć tego użytkownika" + +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 +msgid "Could not find that principal" +msgstr "Nie udaÅ‚o siÄ™ wyszukać tego zarzÄ…dzajÄ…cego" + +#: NOT FOUND IN SOURCE +msgid "Could not find user %1." +msgstr "Nie udaÅ‚o siÄ™ wyszukać użytkownika %1." + +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Impossible de charger le champ personnalisĂŠ%1" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 +msgid "Could not load group" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować grupy" + +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 +#. ($args{'Type'}) +msgid "Could not make that principal a %1 for this queue" +msgstr "Nie udaÅ‚o siÄ™ przypisać tego zarzÄ…dzajÄ…cego jako %1 dla tej kolejki" + +#: lib/RT/Ticket_Overlay.pm:1405 +#. ($self->loc($args{'Type'})) +msgid "Could not make that principal a %1 for this ticket" +msgstr "Nie udaÅ‚o siÄ™ przypisać tego zarzÄ…dzajÄ…cego jako %1 dla tego zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:857 +#. ($args{'Type'}) +msgid "Could not remove that principal as a %1 for this queue" +msgstr "Nie udaÅ‚o siÄ™ usunąć tego zarzÄ…dzajÄ…cego jako %1 dla tej kolejki" + +#: NOT FOUND IN SOURCE +msgid "Could not remove that principal as a %1 for this ticket" +msgstr "Nie udaÅ‚o siÄ™ usunąć tego zarzÄ…dzajÄ…cego jako %1 dla tego zgÅ‚oszenia" + +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Niemożliwe byÅ‚o zapisanie danych użytkownika" + +#: lib/RT/Group_Overlay.pm:1011 +msgid "Couldn't add member to group" +msgstr "Nie udaÅ‚o siÄ™ dodać nowego czÅ‚onka grupy" + +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 +#. ($Msg) +msgid "Couldn't create a transaction: %1" +msgstr "Nie udaÅ‚o siÄ™ utworzyć transakcji: %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't figure out what to do from gpg's reply\\n" +msgstr "Nie udaÅ‚o siÄ™ ustalić, co zrobić na podstawie odpowiedzi z gpg\\n" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find group\\n" +msgstr "Nie udaÅ‚o siÄ™ wyszukać grupy\\n" + +#: lib/RT/Record.pm:939 +msgid "Couldn't find row" +msgstr "Nie udaÅ‚o siÄ™ wyszukać wiersza" + +#: lib/RT/Group_Overlay.pm:985 +msgid "Couldn't find that principal" +msgstr "Nie udaÅ‚o siÄ™ wyszukać tego zarzÄ…dzajÄ…cego" + +#: lib/RT/CustomField_Overlay.pm:404 +msgid "Couldn't find that value" +msgstr "Nie udaÅ‚o siÄ™ wyszukać tej wartoÅ›ci" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find that watcher" +msgstr "L'observateur n'a pas pu ĂŞtre trouvĂŠ" + +#: NOT FOUND IN SOURCE +msgid "Couldn't find user\\n" +msgstr "Nie udaÅ‚o siÄ™ wyszukać użytkownika\\n" + +#: lib/RT/CurrentUser.pm:146 +#. ($self->Id) +msgid "Couldn't load %1 from the users database.\\n" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować %1 z bazy użytkowników.\\n" + +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować klasy %1" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować pola %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load KeywordSelects." +msgstr "KeywordSelects n'a pas pu ĂŞtre chargĂŠ" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load RT config file '%1' %2" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować pliku konfiguracji RT '%1' %2" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load Scrips." +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować skryptów" + +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 +#. ($id) +msgid "Couldn't load group %1" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować grupy %1" + +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 +msgid "Couldn't load link" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować połączenia" + +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "Impossible de charger l'objet %1" + +#: html/Admin/Queues/People.html:142 +#. ($id) +msgid "Couldn't load queue" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować kolejki" + +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 +#. ($id) +msgid "Couldn't load queue %1" +msgstr " Nie udaÅ‚o siÄ™ zaÅ‚adować kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load scrip" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować skryptu" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load template" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować szablonu" + +#: NOT FOUND IN SOURCE +msgid "Couldn't load that user (%1)" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować użytkownika (%1)" + +#: html/SelfService/Display.html:156 +#. ($id) +msgid "Couldn't load ticket '%1'" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować zgÅ‚oszenia '%1'" + +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 +msgid "Country" +msgstr "Kraj" + +#: 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 +msgid "Create" +msgstr "Utwórz" + +#: etc/initialdata:135 +msgid "Create Tickets" +msgstr "Utwórz zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Create a Class" +msgstr "Utwórz klasÄ™" + +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 +msgid "Create a CustomField" +msgstr "Utwórz pole definiowane przez użytkownika" + +#: html/Admin/Queues/CustomField.html:69 +#. ($QueueObj->Name()) +msgid "Create a CustomField for queue %1" +msgstr "Utwórz pole dla kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Create a CustomField which applies to all queues" +msgstr "Utwórz pole, które dotyczy wszystkich kolejek" + +#: NOT FOUND IN SOURCE +msgid "Create a new Custom Field" +msgstr "Utwórz nowe pole definiowane przez użytkownika" + +#: NOT FOUND IN SOURCE +msgid "Create a new article" +msgstr "Utwórz nowy artykuÅ‚" + +#: NOT FOUND IN SOURCE +msgid "Create a new global scrip" +msgstr "Utwórz nowy skrypt globalny" + +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 +msgid "Create a new group" +msgstr "Utwórz nowÄ… grupÄ™" + +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 +msgid "Create a new personal group" +msgstr "Utwórz nowÄ… grupÄ™ prywatnÄ…" + +#: NOT FOUND IN SOURCE +msgid "Create a new queue" +msgstr "Utwórz nowÄ… kolejkÄ™" + +#: NOT FOUND IN SOURCE +msgid "Create a new scrip" +msgstr "Utwórz nowy skrypt" + +#: NOT FOUND IN SOURCE +msgid "Create a new template" +msgstr "Utwórz nowy szablon" + +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 +msgid "Create a new ticket" +msgstr "Utwórz nowe zgÅ‚oszenie" + +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 +msgid "Create a new user" +msgstr "Utwórz nowego użytkownika" + +#: html/Admin/Queues/Modify.html:125 +msgid "Create a queue" +msgstr "Utwórz kolejkÄ™" + +#: NOT FOUND IN SOURCE +msgid "Create a queue called" +msgstr "Utwórz kolejkÄ™ nazwanÄ…" + +#: NOT FOUND IN SOURCE +msgid "Create a request" +msgstr "Utwórz zgÅ‚oszenie" + +#: html/Admin/Queues/Scrip.html:80 +#. ($QueueObj->Name) +msgid "Create a scrip for queue %1" +msgstr "Utwórz skrypt dla kolejki %1" + +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 +msgid "Create a template" +msgstr "Utwórz szablon" + +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "Utwórz zgÅ‚oszenie" + +#: NOT FOUND IN SOURCE +msgid "Create an article" +msgstr "Utwórz artykuÅ‚" + +#: NOT FOUND IN SOURCE +msgid "Create an article in class..." +msgstr "Utwórz artykuÅ‚ w ramach klasy..." + +#: NOT FOUND IN SOURCE +msgid "Create failed: %1 / %2 / %3 " +msgstr "Echec Ă la crĂŠation de: %1 / %2 / %3" + +#: NOT FOUND IN SOURCE +msgid "Create failed: %1/%2/%3" +msgstr "Echec Ă la crĂŠation de: %1/%2/%3" + +#: etc/initialdata:137 +msgid "Create new tickets based on this scrip's template" +msgstr "Utwórz nowe zgÅ‚oszenia na podstawie szablonu tego skryptu" + +#: html/SelfService/Create.html:105 +msgid "Create ticket" +msgstr "Utwórz zgÅ‚oszenie" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "Create tickets in this queue" +msgstr "Utwórz zgÅ‚oszenia w tej kolejce" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "Create, delete and modify custom fields" +msgstr "Utwórz, usuÅ„ i zmodyfikuj pola def. przez użytkownika" + +#: lib/RT/Queue_Overlay.pm:93 +msgid "Create, delete and modify queues" +msgstr "Utwórz, usuÅ„ i zmodyfikuj kolejki" + +#: NOT FOUND IN SOURCE +msgid "Create, delete and modify the members of any user's personal groups" +msgstr "Utwórz, usuÅ„ i zmodyfikuj czÅ‚onków którejÅ› z prywatnych grup użytkownika" + +#: lib/RT/System.pm:81 +msgid "Create, delete and modify the members of personal groups" +msgstr " Utwórz, usuÅ„ i zmodyfikuj czÅ‚onków prywatnych grup" + +#: lib/RT/System.pm:82 +msgid "Create, delete and modify users" +msgstr "Utwórz, usuÅ„ i zmodyfikuj użytkowników" + +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 +msgid "CreateTicket" +msgstr "CreateTicket" + +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 +msgid "Created" +msgstr "Zarejestrowane" + +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 +#. ($CustomFieldObj->Name()) +msgid "Created CustomField %1" +msgstr "Pole %1 zostaÅ‚o utworzone" + +#: NOT FOUND IN SOURCE +msgid "Created by" +msgstr "Utworzony przez" + +#: NOT FOUND IN SOURCE +msgid "Created during" +msgstr "Utworzony podczas" + +#: NOT FOUND IN SOURCE +msgid "Created template %1" +msgstr "Szablon %1 zostaÅ‚ utworzony" + +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "ZgÅ‚aszajÄ…cy" + +#: html/Elements/EditLinks:49 +msgid "Current Links" +msgstr "Aktualne powiÄ…zania" + +#: NOT FOUND IN SOURCE +msgid "Current Relationships" +msgstr "Aktualne powiÄ…zania" + +#: html/Admin/Elements/EditScrips:51 +msgid "Current Scrips" +msgstr "Aktualne skrypty" + +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 +msgid "Current members" +msgstr "Aktualni czÅ‚onkowie" + +#: html/Admin/Elements/SelectRights:51 +msgid "Current rights" +msgstr "Aktualne uprawnienia" + +#: NOT FOUND IN SOURCE +msgid "Current search criteria" +msgstr "Aktualne kryteria wyszukiwania" + +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 +msgid "Current watchers" +msgstr "Aktualni obserwatorzy" + +#: NOT FOUND IN SOURCE +msgid "Custom Field #%1" +msgstr "Pole def. przez użytkownika #%1" + +#: 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 +msgid "Custom Fields" +msgstr "Pola def. przez użytkownika" + +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Champs personnalisĂŠs pour %1" + +#: html/Admin/Elements/EditScrip:123 +msgid "Custom action cleanup code" +msgstr "Treść procedury czyszczenia definiowana przez użytkownika" + +#: html/Admin/Elements/EditScrip:115 +msgid "Custom action preparation code" +msgstr "Treść procedury definiowana przez użytkownika" + +#: html/Admin/Elements/EditScrip:107 +msgid "Custom condition" +msgstr "Warunek definiowany przez użytkownika" + +#: NOT FOUND IN SOURCE +msgid "Custom field %1 %2 %3" +msgstr "Pole definiowane przez użytkownika %1 %2 %3" + +#: NOT FOUND IN SOURCE +msgid "Custom field %1 does not apply to this object" +msgstr "Le champ personnalisĂŠ%1 ne s'applique pas Ă cet objet" + +#: lib/RT/Tickets_Overlay.pm:2147 +#. ($CF->Name) +msgid "Custom field %1 has a value." +msgstr "Pole %1 definiowane przez użytkownika ma wartość." + +#: lib/RT/Tickets_Overlay.pm:2143 +#. ($CF->Name) +msgid "Custom field %1 has no value." +msgstr "Brak wartoÅ›ci w polu %1 definiowanym przez użytkownika." + +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 +#. ($args{'Field'}) +msgid "Custom field %1 not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać pola %1 definiowanego przez użytkownika" + +#: NOT FOUND IN SOURCE +msgid "Custom field deleted" +msgstr "Pole definiowane przez użytkownika zostaÅ‚o usuniÄ™te" + +#: NOT FOUND IN SOURCE +msgid "Custom field not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać pola definiowanego przez użytkownika" + +#: lib/RT/CustomField_Overlay.pm:1041 +#. ($args{'Content'}, $self->Name) +msgid "Custom field value %1 could not be found for custom field %2" +msgstr "Nie udaÅ‚o siÄ™ wyszukać wartoÅ›ci %1 dla pola %2" + +#: NOT FOUND IN SOURCE +msgid "Custom field value changed from %1 to %2" +msgstr "Wartość pola zmieniÅ‚a siÄ™ z %1 na %2" + +#: lib/RT/CustomField_Overlay.pm:414 +msgid "Custom field value could not be deleted" +msgstr "Nie można usunąć wartoÅ›ci pola" + +#: lib/RT/CustomField_Overlay.pm:1047 +msgid "Custom field value could not be found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać wartoÅ›ci pola" + +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 +msgid "Custom field value deleted" +msgstr "Wartość pola zostaÅ‚a usuniÄ™ta" + +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 +msgid "CustomField" +msgstr "Pole" + +#: NOT FOUND IN SOURCE +msgid "Data error" +msgstr "Erreur de donnĂŠes" + +#: 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 +msgid "Dates" +msgstr "Daty" + +#: lib/RT/Date.pm:448 +msgid "Dec." +msgstr "Gru." + +#: NOT FOUND IN SOURCE +msgid "December" +msgstr "GrudzieÅ„" + +#: NOT FOUND IN SOURCE +msgid "Default Autoresponse Template" +msgstr "DomyÅ›lnie wybierany szablon odpowiedzi wysyÅ‚anej automatycznie" + +#: etc/initialdata:222 +msgid "Default Autoresponse template" +msgstr "DomyÅ›lnie wybierany szablon odpowiedzi wysyÅ‚anej automatycznie" + +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "DomyÅ›lna kolejka" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "DomyÅ›lny zgÅ‚aszajÄ…cy" + +#: etc/initialdata:296 +msgid "Default admin comment template" +msgstr "DomyÅ›lnie wybierany szablon komentarza administratora" + +#: etc/initialdata:275 +msgid "Default admin correspondence template" +msgstr "DomyÅ›lnie wybierany szablon korespondencji administratora" + +#: etc/initialdata:287 +msgid "Default correspondence template" +msgstr "DomyÅ›lnie wybierany szablon korespondencji" + +#: etc/initialdata:253 +msgid "Default transaction template" +msgstr "DomyÅ›lnie wybierany szablon transakcji" + +#: NOT FOUND IN SOURCE +msgid "Default: %1/%2 changed from %3 to %4" +msgstr "DomyÅ›lnie: %1/%2 zmieniane z \"%3\" na \"%4\"" + +#: html/User/Delegation.html:46 html/User/Delegation.html:49 +msgid "Delegate rights" +msgstr "Przekaż uprawnienia" + +#: lib/RT/System.pm:85 +msgid "Delegate specific rights which have been granted to you." +msgstr "Przekaż specyficzne uprawnienia, które zostaÅ‚y Ci przyznane" + +#: lib/RT/System.pm:85 +msgid "DelegateRights" +msgstr "DelegateRights" + +#: html/User/Elements/Tabs:59 +msgid "Delegation" +msgstr "Przekazywanie uprawnieÅ„" + +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 +msgid "Delete" +msgstr "UsuÅ„" + +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "UsuÅ„ szablon" + +#: NOT FOUND IN SOURCE +msgid "Delete article #%1" +msgstr "UsuÅ„ artykuÅ‚ #%1" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "UsuÅ„ zaznaczone skrypty" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "Delete tickets" +msgstr "UsuÅ„ zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:115 +msgid "DeleteTicket" +msgstr "DeleteTicket" + +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object could break referential integrity" +msgstr "UsuniÄ™cie tego obiektu mogÅ‚o spowodować brak spójnoÅ›ci" + +#: lib/RT/Queue_Overlay.pm:391 +msgid "Deleting this object would break referential integrity" +msgstr "UsuniÄ™cie tego obiektu spowoduje brak spójnoÅ›ci" + +#: lib/RT/User_Overlay.pm:513 +msgid "Deleting this object would violate referential integrity" +msgstr "UsuniÄ™cie tego obiektu naruszy spójność" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object would violate referential integrity." +msgstr "Effacer cet objet violerait l'intĂŠgritĂŠrĂŠfĂŠrentielle" + +#: NOT FOUND IN SOURCE +msgid "Deleting this object would violate referential integrity. That's bad." +msgstr "Effacer cet objet violerait l'intĂŠgritĂŠrĂŠfĂŠrentielle, c'est serait facheux!" + +#: html/Approvals/Elements/Approve:66 +msgid "Deny" +msgstr "Odrzucić" + +#: 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 +msgid "Depended on by" +msgstr "ZgÅ‚oszenia zależne" + +#: NOT FOUND IN SOURCE +msgid "Dependencies: \\n" +msgstr "ZależnoÅ›ci" + +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "Zależność %1 dodana" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "Zależność %1 usuniÄ™ta" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "Zależność od %1 dodana" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "Zależność od %1 usuniÄ™ta" + +#: 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 +msgid "Depends on" +msgstr "Zależy od" + +#: NOT FOUND IN SOURCE +msgid "DependsOn" +msgstr "ZależyOd" + +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 +msgid "Descending" +msgstr "MalejÄ…co" + +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 +msgid "Describe the issue below" +msgstr "Opis zgÅ‚oszenia" + +#: 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 "Opis" + +#: NOT FOUND IN SOURCE +msgid "Details" +msgstr "Szczegóły" + +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 +msgid "Display" +msgstr "WyÅ›wietl" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "Display Access Control List" +msgstr "WyÅ›wietl ListÄ™ Praw DostÄ™pu" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Wybierz kolumny" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "Display Scrip templates for this queue" +msgstr "WyÅ›wietl szablony skryptów dla tej kolejki" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "Display Scrips for this queue" +msgstr "WyÅ›wietl skrypty dla tej kolejki" + +#: html/Ticket/Elements/ShowHistory:56 +msgid "Display mode" +msgstr "Tryb wyÅ›wietlania" + +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Display ticket #%1" +msgstr "WyÅ›wietl zgÅ‚oszenie #%1" + +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "Rozpowszechniane na mocy wersji 2 licencji GNU GPL <a href=\"http://www.gnu.org/copyleft/gpl.html\">." + +#: lib/RT/System.pm:76 +msgid "Do anything and everything" +msgstr "Zrób cokolwiek i wszystko" + +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 +msgid "Don't refresh this page." +msgstr "Nie odÅ›wieżaj tej strony." + +#: NOT FOUND IN SOURCE +msgid "Don't show search results" +msgstr "Nie wyÅ›wietlaj wyników wyszukiwania" + +#: html/Ticket/Elements/ShowTransactionAttachments:82 +msgid "Download" +msgstr "Pobierz " + +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "TĂŠlĂŠcharger en tant que fichier dĂŠlimitĂŠpar tabulations" + +#: 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 +msgid "Due" +msgstr "Termin realizacji" + +#: NOT FOUND IN SOURCE +msgid "Due date '%1' could not be parsed" +msgstr "Termin realizacji '%1' nie może być rozpoznany" + +#: NOT FOUND IN SOURCE +msgid "ERROR: Couldn't load ticket '%1': %2.\\n" +msgstr "BÅÄ„D: Nie udaÅ‚o siÄ™ zaÅ‚adować zgÅ‚oszenia: '%1': %2.\\n" + +#: NOT FOUND IN SOURCE +msgid "Edit" +msgstr "Edytuj" + +#: NOT FOUND IN SOURCE +msgid "Edit Conditions" +msgstr "Modifier les conditions" + +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) +msgid "Edit Custom Fields for %1" +msgstr "Edytuj pola dla kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Edit Custom Fields for Class %1" +msgstr "Edytuj pola dla klasy %1" + +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" +msgstr "Edytuj powiÄ…zania" + +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Zmodyfikuj zapytanie" + +#: NOT FOUND IN SOURCE +msgid "Edit Relationships" +msgstr "Edytuj powiÄ…zania" + +#: html/Admin/Queues/Templates.html:63 +#. ($QueueObj->Name) +msgid "Edit Templates for queue %1" +msgstr "Edytuj szablony kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Edit keywords" +msgstr "Modifier les mots clÄ‚" + +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Edit scrips" +msgstr "Edytuj skrypty" + +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 +msgid "Edit system templates" +msgstr "Edytuj szablony systemowe" + +#: NOT FOUND IN SOURCE +msgid "Edit templates for %1" +msgstr "Edytuj szablony dla %1" + +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "EdytujZapisaneZapytania" + +#: NOT FOUND IN SOURCE +msgid "Editing Configuration for Class %1" +msgstr "Edytuj konfiguracjÄ™ klasy %1" + +#: html/Admin/Queues/Modify.html:140 +#. ($QueueObj->Name) +msgid "Editing Configuration for queue %1" +msgstr "Edytuj konfiguracjÄ™ kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Editing Configuration for user %1" +msgstr "Edytuj konfiguracjÄ™ użytkownika %1" + +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 +#. ($CustomFieldObj->Name()) +msgid "Editing CustomField %1" +msgstr "Edytuj pole %1" + +#: html/Admin/Groups/Members.html:53 +#. ($Group->Name) +msgid "Editing membership for group %1" +msgstr "Edytuj listÄ™ czÅ‚onków grupy %1" + +#: html/User/Groups/Members.html:150 +#. ($Group->Name) +msgid "Editing membership for personal group %1" +msgstr "Edytuj listÄ™ czÅ‚onków prywatnej grupy %1" + +#: NOT FOUND IN SOURCE +msgid "Editing template %1" +msgstr "Edytuj szablon %1" + +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 +msgid "Either base or target must be specified" +msgstr "Podstawy lub cel muszÄ… być okreÅ›lone" + +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 +msgid "Email" +msgstr "e-mail" + +#: lib/RT/User_Overlay.pm:236 +msgid "Email address in use" +msgstr "Używany adres e-mail " + +#: NOT FOUND IN SOURCE +msgid "EmailAddress" +msgstr "adres e-mail" + +#: NOT FOUND IN SOURCE +msgid "EmailEncoding" +msgstr "kodowanie e-maila" + +#: NOT FOUND IN SOURCE +msgid "Enabled (Unchecking this box disables this Class)" +msgstr "UdostÄ™pniona (nieoznaczenie tego pola spowoduje, że klasa bÄ™dzie niedostÄ™pna)" + +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 +msgid "Enabled (Unchecking this box disables this custom field)" +msgstr "UdostÄ™pnione (nieoznaczenie tego pola spowoduje, że pole bÄ™dzie niedostÄ™pne)" + +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 +msgid "Enabled (Unchecking this box disables this group)" +msgstr "UdostÄ™pniona (nieoznaczenie tego pola spowoduje, że grupa bÄ™dzie niedostÄ™pna)" + +#: html/Admin/Queues/Modify.html:105 +msgid "Enabled (Unchecking this box disables this queue)" +msgstr "UdostÄ™pniona (nieoznaczenie tego pola spowoduje, że kolejka bÄ™dzie niedostÄ™pna)" + +#: NOT FOUND IN SOURCE +msgid "Enabled Classes" +msgstr "DostÄ™pne klasy" + +#: NOT FOUND IN SOURCE +msgid "Enabled Custom Fields" +msgstr "DostÄ™pne pola definiowane przez użytkownika" + +#: html/Admin/Queues/index.html:78 +msgid "Enabled Queues" +msgstr "DostÄ™pne kolejki" + +#: 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)) +msgid "Enabled status %1" +msgstr "DostÄ™pny status %1" + +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "Statut actif: %1" + +#: NOT FOUND IN SOURCE +msgid "Enter Articles or URIs to link Articles to. Seperate multiple entries with spaces." +msgstr "Aby powiÄ…zać artykuÅ‚y, wprowadź artykuÅ‚y lub URI oddzielone spacjami." + +#: lib/RT/CustomField_Overlay.pm:64 +msgid "Enter multiple values" +msgstr "Wprowadzanie wielu wartoÅ›ci" + +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Aby powiÄ…zać obiekty, wprowadź URI obiektów oddzielone spacjami." + +#: lib/RT/CustomField_Overlay.pm:65 +msgid "Enter one value" +msgstr "Wprowadzanie jednej wartoÅ›ci" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Aby powiÄ…zać kolejki, wprowadź URI kolejek oddzielone spacjamii." + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Aby powiÄ…zać zgÅ‚oszenia, wprowadź numery zgÅ‚oszeÅ„ lub URI oddzielone spacjami." + +#: NOT FOUND IN SOURCE +msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +msgstr "Aby powiÄ…zać zgÅ‚oszenia, wprowadź numery zgÅ‚oszeÅ„ lub URI oddzielone spacjami." + +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "Saisir %1 valeurs maximum" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 +msgid "Error" +msgstr "Błąd" + +#: NOT FOUND IN SOURCE +msgid "Error adding watcher" +msgstr "Erreur Ă l'ajout de l'observateur" + +#: lib/RT/Queue_Overlay.pm:669 +msgid "Error in parameters to Queue->AddWatcher" +msgstr "Błąd w okreÅ›leniu parametrów kolejki->Dodaj Obserwatora" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Queue->DelWatcher" +msgstr "Błąd w okreÅ›leniu parametrów kolejki -> UsuÅ„ Obserwatora" + +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Błąd w okreÅ›leniu parametrów kolejki -> UsuÅ„ Obserwatora" + +#: lib/RT/Ticket_Overlay.pm:1333 +msgid "Error in parameters to Ticket->AddWatcher" +msgstr "Błąd w okreÅ›leniu parametrów zgÅ‚oszenia -> Dodaj Obserwatora" + +#: NOT FOUND IN SOURCE +msgid "Error in parameters to Ticket->DelWatcher" +msgstr " Błąd w okreÅ›leniu parametrów zgÅ‚oszenia -> UsuÅ„ Obserwatora" + +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Błąd w okreÅ›leniu parametrów ZgÅ‚oszenia-> UsuÅ„ Obserwatora" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "Eskaluj zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Estimate" +msgstr "Estimer" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "Szacowane" + +#: etc/initialdata:20 +msgid "Everyone" +msgstr "Wszyscy" + +#: bin/rt-crontool:219 +msgid "Example:" +msgstr "PrzykÅ‚ad:" + +#: NOT FOUND IN SOURCE +msgid "ExternalAuthId" +msgstr "ZewnÄ™trzne AuthId" + +#: NOT FOUND IN SOURCE +msgid "ExternalContactInfoId" +msgstr "ExternalContactInfoId" + +#: html/Admin/Users/Modify.html:99 +msgid "Extra info" +msgstr "Informacje dodatkowe" + +#: NOT FOUND IN SOURCE +msgid "Extract article from ticket #%1" +msgstr "Wydziel artykuÅ‚ ze zgÅ‚oszenia #%1" + +#: NOT FOUND IN SOURCE +msgid "Extract article from ticket #%1 into class %2" +msgstr "Wydziel artykuÅ‚ ze zgÅ‚oszenia #%1 w klasie %2" + +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 +msgid "Failed to find 'Privileged' users pseudogroup." +msgstr "Nie udaÅ‚o siÄ™ wyszukać czÅ‚onków grupy 'Uprawnieni'" + +#: lib/RT/User_Overlay.pm:384 +msgid "Failed to find 'Unprivileged' users pseudogroup" +msgstr "Nie udaÅ‚o siÄ™ wyszukać czÅ‚onków grupy 'Nieuprawnieni'" + +#: bin/rt-crontool:163 +#. ($modname, $@) +msgid "Failed to load module %1. (%2)" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować moduÅ‚u %1. (%2)" + +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 +msgid "Feb." +msgstr "Lut." + +#: NOT FOUND IN SOURCE +msgid "February" +msgstr "Luty" + +# Nie jestem pewien: jedno sÅ‚owo! +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Nazwa pliku" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "Saisir dans plusieurs champs de type texte" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "Saisir dans un champ de type texte" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "Saisir dans %1 champs de type texte maximum" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Fin" +msgstr "Koniec" + +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 +msgid "Final Priority" +msgstr "KoÅ„cowy priorytet" + +#: lib/RT/Ticket_Overlay.pm:1140 +msgid "FinalPriority" +msgstr "KoÅ„cowy priorytet" + +#: NOT FOUND IN SOURCE +msgid "Find group whose" +msgstr "Wyszukaj grupÄ™, której" + +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "Trouver les groupes dont" + +#: NOT FOUND IN SOURCE +msgid "Find new/open tickets" +msgstr "Wyszykaj nowe/otwarte zgÅ‚oszenia" + +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 +msgid "Find people whose" +msgstr "Wyszukaj użytkowników, których" + +#: html/Search/Results.html:109 +msgid "Find tickets" +msgstr "Wyszukaj zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Finish Approval" +msgstr "ZakoÅ„cz zatwierdzanie" + +#: html/Ticket/Elements/Tabs:81 +msgid "First" +msgstr "Pierwsze" + +#: NOT FOUND IN SOURCE +msgid "First page" +msgstr "Pierwsza strona" + +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 +msgid "Foo Bar Baz" +msgstr "Ble ble" + +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 +msgid "Foo!" +msgstr "ble ble" + +#: html/Search/Bulk.html:105 +msgid "Force change" +msgstr "WymuÅ› zmianÄ™" + +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 +#. ($ticketcount) +msgid "Found %quant(%1,ticket)" +msgstr "Wyszukano %1 zgÅ‚oszeÅ„" + +#: lib/RT/Record.pm:942 +msgid "Found Object" +msgstr "Wyszukany obiekt" + +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "FormulaireLibre" + +#: NOT FOUND IN SOURCE +msgid "FreeformContactInfo" +msgstr "FreeformContactInfo" + +#: NOT FOUND IN SOURCE +msgid "FreeformMultiple" +msgstr "FreeformMultiple" + +#: NOT FOUND IN SOURCE +msgid "FreeformSingle" +msgstr "FreeformSingle" + +#: lib/RT/Date.pm:417 +msgid "Fri." +msgstr "Pt." + +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 +msgid "Full headers" +msgstr "PeÅ‚ne nagłówki" + +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "Pobierz szablon z pliku" + +#: NOT FOUND IN SOURCE +msgid "Getting the current user from a pgp sig\\n" +msgstr "Uzyskanie aktualnego użytkownika na podstawie podpisu pgp\\n" + +#: lib/RT/Transaction_Overlay.pm:673 +#. ($New->Name) +msgid "Given to %1" +msgstr "Nadany dla %1" + +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 +msgid "Global" +msgstr "Globalna" + +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Champs personnalisĂŠs globaux" + +#: NOT FOUND IN SOURCE +msgid "Global Keyword Selections" +msgstr "Mots clĂŠglobaux" + +#: NOT FOUND IN SOURCE +msgid "Global Scrips" +msgstr "Skrypty globalne" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" + +#: html/Admin/Elements/SelectTemplate:59 +#. (loc($Template->Name)) +msgid "Global template: %1" +msgstr "Szablon globalny: %1" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Pobierz" + +#: 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 +msgid "Go!" +msgstr "Start!" + +#: NOT FOUND IN SOURCE +msgid "Good pgp sig from %1\\n" +msgstr "Poprawny podpis pgp dla %1\\n " + +#: NOT FOUND IN SOURCE +msgid "Goto page" +msgstr "Przejdź do strony" + +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 +msgid "Goto ticket" +msgstr "Przejdź do zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Grand" +msgstr "Accorder" + +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 +msgid "Group" +msgstr "Grupa" + +#: NOT FOUND IN SOURCE +msgid "Group %1 %2: %3" +msgstr "Grupa %1 %2: %3" + +#: 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 "Uprawnienia grupowe" + +#: lib/RT/Group_Overlay.pm:991 +msgid "Group already has member" +msgstr "Grupa ma już czÅ‚onka" + +#: NOT FOUND IN SOURCE +msgid "Group could not be created." +msgstr "Le groupe n'a pas pu ĂŞtre crĂŠĂŠ" + +#: html/Admin/Groups/Modify.html:109 +#. ($create_msg) +msgid "Group could not be created: %1" +msgstr "Nie udaÅ‚o siÄ™ utworzyć grupy: %1" + +#: lib/RT/Group_Overlay.pm:529 +msgid "Group created" +msgstr "Grupa zostaÅ‚a utworzona" + +#: lib/RT/Group_Overlay.pm:1163 +msgid "Group has no such member" +msgstr "Nie ma takiego czÅ‚onka grupy" + +#: 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 +msgid "Group not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać grupy" + +#: NOT FOUND IN SOURCE +msgid "Group not found.\\n" +msgstr "Nie udaÅ‚o siÄ™ wyszukać grupy.\\n" + +#: NOT FOUND IN SOURCE +msgid "Group not specified.\\n" +msgstr "Grupa nie zostaÅ‚a okreÅ›lona.\\n" + +#: 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 +msgid "Groups" +msgstr "Grupy" + +#: lib/RT/Group_Overlay.pm:997 +msgid "Groups can't be members of their members" +msgstr "Nie można przypisac grup jako czÅ‚onków tych grup" + +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "Groupes correspondant au critère de recherche" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "Cette utilisateur appartient aux groupes" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 +msgid "Hello!" +msgstr "Witaj!" + +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 +#. ($name) +msgid "Hello, %1" +msgstr "Witaj, %1" + +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 +msgid "History" +msgstr "Historia" + +#: NOT FOUND IN SOURCE +msgid "History for article #%1" +msgstr "Historia artykuÅ‚u #%1" + +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "Historique du groupe %1" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "Historique de l'utilisateur %1" + +#: NOT FOUND IN SOURCE +msgid "HomePhone" +msgstr "Tel. domowy" + +#: html/Elements/Tabs:65 +msgid "Homepage" +msgstr "Start" + +#: lib/RT/Base.pm:110 +#. (6) +msgid "I have %quant(%1,concrete mixer)." +msgstr "Posiadam %quant(%1,concrete mixer)." + +#: NOT FOUND IN SOURCE +msgid "I have [quant,_1,concrete mixer]." +msgstr "I have [quant,_1,concrete mixer]." + +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 +msgid "Id" +msgstr "Nr " + +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 +msgid "Identity" +msgstr "Identyfikacja użytkownika" + +#: etc/initialdata:429 +msgid "If an approval is rejected, reject the original and delete pending approvals" +msgstr "JeÅ›li potwierdzenie zostaÅ‚o odrzucone, odrzuć oryginaÅ‚ i usuÅ„ oczekujÄ…ce potwierdzenia" + +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "JeÅ›li zgÅ‚aszajÄ…cy nie zostaÅ‚ okreÅ›lony, twórz zgÅ‚oszenia dla tego użytkownika." + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "JeÅ›li kolejka nie zostaÅ‚a okreÅ›lona, twórz zgÅ‚oszenia w tej kolejce." + +#: 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 "JeÅ›li ta aplikacja zostaÅ‚a zachwiana, obcy lokalny użytkownik mógÅ‚ używać tej aplikacji, aby uzyskać do RT dostÄ™p na prawach administratora" + +#: 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 "JeÅ›li zmodyfikowaÅ‚eÅ› coÅ› powyżej" + +#: lib/RT/Record.pm:933 +msgid "Illegal value for %1" +msgstr "Niedopuszczalna wartość dla %1" + +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Image" + +#: lib/RT/Record.pm:936 +msgid "Immutable field" +msgstr "Pole, które nie może być powielane" + +#: NOT FOUND IN SOURCE +msgid "Include disabled classes in listing." +msgstr "UwzglÄ™dnij na liÅ›cie nieaktywne klasy" + +#: NOT FOUND IN SOURCE +msgid "Include disabled custom fields in listing." +msgstr "UwzglÄ™dnij na liÅ›cie nieaktywne pola." + +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "UwzglÄ™dnij na liÅ›cie nieaktywne grupy." + +#: html/Admin/Queues/index.html:65 +msgid "Include disabled queues in listing." +msgstr "UwzglÄ™dnij na liÅ›cie nieaktywne kolejki." + +#: html/Admin/Users/index.html:71 +msgid "Include disabled users in search." +msgstr "UwzglÄ™dnij w wyszukiwaniu nieaktywnych użytkowników." + +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 +msgid "Initial Priority" +msgstr "PoczÄ…tkowy priorytet" + +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 +msgid "InitialPriority" +msgstr "PoczÄ…tkowy priorytet" + +#: lib/RT/ScripAction_Overlay.pm:134 +msgid "Input error" +msgstr "Błąd na wejÅ›ciu" + +#: NOT FOUND IN SOURCE +msgid "Interest noted" +msgstr "Votre intĂŠret est notĂŠ" + +#: lib/RT/Ticket_Overlay.pm:3454 +msgid "Internal Error" +msgstr "Błąd wewnÄ™trzny" + +#: lib/RT/Record.pm:305 +#. ($id->{error_message}) +msgid "Internal Error: %1" +msgstr "Błąd wewnÄ™trzny: %1" + +#: lib/RT/Group_Overlay.pm:676 +msgid "Invalid Group Type" +msgstr "NieprawidÅ‚owy typ grupy" + +#: lib/RT/Principal_Overlay.pm:161 +msgid "Invalid Right" +msgstr "NieprawidÅ‚owe uprawnienie" + +#: NOT FOUND IN SOURCE +msgid "Invalid Type" +msgstr "Type invalide" + +#: lib/RT/Record.pm:938 +msgid "Invalid data" +msgstr "NieprawidÅ‚owe dane" + +#: NOT FOUND IN SOURCE +msgid "Invalid owner. Defaulting to 'nobody'." +msgstr "NieprawidÅ‚owy wÅ‚aÅ›ciciel. DomyÅ›lnie 'nikt'" + +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 +msgid "Invalid queue" +msgstr "NieprawidÅ‚owa kolejka" + +#: 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 "NieprawidÅ‚owe uprawnienie" + +#: lib/RT/Record.pm:280 +#. ($key) +msgid "Invalid value for %1" +msgstr "NieprawidÅ‚owa wartość dla %1" + +#: lib/RT/Record.pm:1597 +msgid "Invalid value for custom field" +msgstr "NieprawidÅ‚owa wartość pola" + +#: lib/RT/Ticket_Overlay.pm:413 +msgid "Invalid value for status" +msgstr "NieprawidÅ‚owy status" + +#: bin/rt-crontool:216 +msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." +msgstr "Bardzo ważne, aby nieuprawnieni użytkownicy nie posiadali uprawnieÅ„ do uruchomienia tej aplikacji." + +#: 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 "Sugeruje siÄ™, aby utworzyć nieuprawnionego użytkownika w odpowiedniej grupie o odpowiednim dostÄ™pie do RT, aby uruchomić tÄ™ aplikacjÄ™" + +#: bin/rt-crontool:188 +msgid "It takes several arguments:" +msgstr "Wymaga kilku argumentów:" + +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Items pending my approval" +msgstr "Pozycje oczekujÄ…ce na moje zatwierdzenie" + +#: lib/RT/Date.pm:437 +msgid "Jan." +msgstr "Sty." + +#: NOT FOUND IN SOURCE +msgid "January" +msgstr "StyczeÅ„" + +#: lib/RT/Group_Overlay.pm:174 +msgid "Join or leave this group" +msgstr "Dołącz albo opuść tÄ™ grupÄ™" + +#: lib/RT/Date.pm:443 +msgid "Jul." +msgstr "Lip." + +#: NOT FOUND IN SOURCE +msgid "July" +msgstr "Lipiec" + +#: html/Ticket/Elements/Tabs:122 +msgid "Jumbo" +msgstr "Wszystko" + +#: lib/RT/Date.pm:442 +msgid "Jun." +msgstr "Cze." + +#: NOT FOUND IN SOURCE +msgid "June" +msgstr "Czerwiec" + +#: NOT FOUND IN SOURCE +msgid "Keyword" +msgstr "SÅ‚owo kluczowe" + +#: NOT FOUND IN SOURCE +msgid "Lang" +msgstr "JÄ™zyk" + +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "JÄ™zyk" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 +msgid "Last" +msgstr "Ostatnie" + +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 +msgid "Last Contact" +msgstr "Ostatnia modyfikacja" + +#: html/Elements/SelectDateType:50 +msgid "Last Contacted" +msgstr "Ostatnio modyfikowane" + +#: NOT FOUND IN SOURCE +msgid "Last Notified" +msgstr "Ostatnio powiadomiony" + +#: html/Elements/SelectDateType:51 +msgid "Last Updated" +msgstr "Ostatnio zaktualizowane" + +#: NOT FOUND IN SOURCE +msgid "LastUpdated" +msgstr "OstAktualiz" + +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "OstAktPrzez" + +#: html/Ticket/Elements/ShowBasics:68 +msgid "Left" +msgstr "PozostaÅ‚y" + +#: html/Admin/Users/Modify.html:109 +msgid "Let this user access RT" +msgstr "UdostÄ™pnij temu użytkownikowi RT" + +#: html/Admin/Users/Modify.html:113 +msgid "Let this user be granted rights" +msgstr "Przydziel uprawnienia temu użytkownikowi" + +#: NOT FOUND IN SOURCE +msgid "Limiting owner to %1 %2" +msgstr "Ograniczenie wÅ‚aÅ›ciciela do %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Limiting queue to %1 %2" +msgstr "Ograniczenie kolejki do %1 %2" + +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 +msgid "Link already exists" +msgstr "Połączenie już istnieje" + +#: lib/RT/Record.pm:1306 +msgid "Link could not be created" +msgstr "Nie udaÅ‚o siÄ™ utworzyć połączenia" + +#: lib/RT/Record.pm:1312 +#. ($TransString) +msgid "Link created (%1)" +msgstr "Połączenie zostaÅ‚o utworzone (%1)" + +#: lib/RT/Record.pm:1373 +#. ($TransString) +msgid "Link deleted (%1)" +msgstr "Połączenie zostaÅ‚o usuniÄ™te (%1)" + +#: lib/RT/Record.pm:1379 +msgid "Link not found" +msgstr "Połączenie nie zostaÅ‚o odnalezione" + +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 +#. ($Ticket->Id) +msgid "Link ticket #%1" +msgstr "Powiąż zgÅ‚oszenie #%1" + +#: NOT FOUND IN SOURCE +msgid "Link ticket %1" +msgstr "Lier au ticket %1" + +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 +msgid "Links" +msgstr "PowiÄ…zania" + +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "ZaÅ‚aduj" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "ZaÅ‚aduj zapisane zapytanie:" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "ZaÅ‚adowane moduÅ‚y PERL" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 +msgid "Location" +msgstr "Lokalizacja" + +#: lib/RT.pm:212 +#. ($RT::LogDir) +msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." +msgstr "Åšcieżka logowania %1 nie zostaÅ‚a odnaleziona lub nie mógÅ‚a być zapisana.\\n Nie udaÅ‚o siÄ™ uruchomić RT" + +#: html/Elements/Header:94 +#. ("<b>".$session{'CurrentUser'}->Name."</b>") +msgid "Logged in as %1" +msgstr "Zalogowano jako %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 +msgid "Login" +msgstr "Zaloguj siÄ™" + +#: html/Elements/Header:91 +msgid "Logout" +msgstr "Wyloguj siÄ™" + +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "Faire attention aux types diffĂŠrents" + +#: html/Search/Bulk.html:104 +msgid "Make Owner" +msgstr "Wprowadź wÅ‚aÅ›ciciela" + +#: html/Search/Bulk.html:128 +msgid "Make Status" +msgstr "Wprowadź status" + +#: html/Search/Bulk.html:136 +msgid "Make date Due" +msgstr "Wprowadź termin realizacji" + +#: html/Search/Bulk.html:138 +msgid "Make date Resolved" +msgstr "Wprowadź datÄ™ zamkniÄ™cia" + +#: html/Search/Bulk.html:132 +msgid "Make date Started" +msgstr "Wprowadź datÄ™ rozpoczÄ™cia realizacji" + +#: html/Search/Bulk.html:130 +msgid "Make date Starts" +msgstr "Wprowadź datÄ™ rozpoczÄ™cia realizacji" + +#: html/Search/Bulk.html:134 +msgid "Make date Told" +msgstr "Wprowadź datÄ™ wpÅ‚ywu" + +#: html/Search/Bulk.html:124 +msgid "Make priority" +msgstr "Wprowadź priorytet" + +#: html/Search/Bulk.html:126 +msgid "Make queue" +msgstr "Wprowadź kolejkÄ™" + +#: html/Search/Bulk.html:122 +msgid "Make subject" +msgstr "Wprowadź temat" + +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "GĂŠrer les champs personnalisĂŠs et leur valeurs" + +#: html/Admin/index.html:69 +msgid "Manage groups and group membership" +msgstr "Administracja grupami i czÅ‚onkami grup" + +#: html/Admin/index.html:85 +msgid "Manage properties and configuration which apply to all queues" +msgstr "Administracja wÅ‚aÅ›ciwoÅ›ciami i konfiguracjÄ…, które dotyczÄ… wszystkich kolejek" + +#: html/Admin/index.html:74 +msgid "Manage queues and queue-specific properties" +msgstr "Administracja kolejkami i specyficznymi wÅ‚aÅ›ciwoÅ›ciami kolejek" + +#: html/Admin/index.html:64 +msgid "Manage users and passwords" +msgstr "Administracja użytkownikami i hasÅ‚ami" + +#: lib/RT/Date.pm:439 +msgid "Mar." +msgstr "Mar." + +#: NOT FOUND IN SOURCE +msgid "March" +msgstr "Marzec" + +#: NOT FOUND IN SOURCE +msgid "May" +msgstr "Maj" + +#: lib/RT/Date.pm:441 +msgid "May." +msgstr "Maj" + +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "CzÅ‚onek %1 dodany" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "CzÅ‚onek %1 usuniÄ™ty" + +#: lib/RT/Group_Overlay.pm:1008 +msgid "Member added" +msgstr "CzÅ‚onek grupy zostaÅ‚ dodany" + +#: lib/RT/Group_Overlay.pm:1170 +msgid "Member deleted" +msgstr "CzÅ‚onek grupy zostaÅ‚ usuniÄ™ty" + +#: lib/RT/Group_Overlay.pm:1174 +msgid "Member not deleted" +msgstr "CzÅ‚onek grupy nie zostaÅ‚ usuniÄ™ty" + +#: html/Elements/SelectLinkType:47 +msgid "Member of" +msgstr "CzÅ‚onek grupy" + +#: NOT FOUND IN SOURCE +msgid "MemberOf" +msgstr "CzÅ‚onekGrupy" + +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 +msgid "Members" +msgstr "CzÅ‚onkowie grup" + +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "CzÅ‚onkowstwo w %1 dodane" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "CzÅ‚onkowstwo w %1 usuniÄ™te" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "Affiliations" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "Affiliations de l'utilisateur %1" + +#: lib/RT/Ticket_Overlay.pm:2849 +msgid "Merge Successful" +msgstr "UdaÅ‚o siÄ™ połączyć" + +#: lib/RT/Ticket_Overlay.pm:2736 +msgid "Merge failed. Couldn't set EffectiveId" +msgstr "Nie udaÅ‚o siÄ™ połączyć. Nie udaÅ‚o siÄ™ ustawić efektywnego Id" + +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 +msgid "Merge into" +msgstr "Połączyć w" + +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Połączono z %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 +msgid "Message" +msgstr "Wiadomość" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "Wiadomość nie mogÅ‚a zostać zapisana" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Wiadomość zapisana" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "Powiadomienie o tym zgÅ‚oszeniu nie zostanie wysÅ‚ane do..." + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 +msgid "Missing a primary key?: %1" +msgstr "BrakujÄ…cy klucz główny?: %1:" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 +msgid "Mobile" +msgstr "Tel. komórkowy" + +#: NOT FOUND IN SOURCE +msgid "MobilePhone" +msgstr "Tel. komórkowy" + +#: NOT FOUND IN SOURCE +msgid "Modified" +msgstr "Zmieniony" + +#: NOT FOUND IN SOURCE +msgid "Modify" +msgstr "Zmodyfikuj" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "Modify Access Control List" +msgstr "Modyfikuj ListÄ™ Praw DostÄ™pu" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Field %1" +msgstr "Modyfikuj pole %1" + +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Modifier les champs personnalisĂŠs qui s'appliquent Ă tous les %1" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Fields which apply to all queues" +msgstr "Modyfikuj pola, które dotyczÄ… wszystkich kolejek" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Zmodyfikuj uprawnienia grup" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Modyfikuj CzÅ‚onków" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Zapisz uprawnienia" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "Modify Scrip templates for this queue" +msgstr "Modyfikuj szablony skryptów dla tej kolejki" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "Modify Scrips for this queue" +msgstr "Modyfikuj skrypty dla tej kolejki" + +#: NOT FOUND IN SOURCE +msgid "Modify System ACLS" +msgstr "Modifier ACLs système" + +#: NOT FOUND IN SOURCE +msgid "Modify Template %1" +msgstr "Modyfikuj szablon %1" + +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Zmodyfikuj uprawnienia użytkowników" + +#: html/Admin/Queues/CustomField.html:66 +#. ($QueueObj->Name()) +msgid "Modify a CustomField for queue %1" +msgstr "Modyfikuj pole dla kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Modify a CustomField which applies to all queues" +msgstr "Modyfikuj pole, które dotyczy wszystkich kolejek" + +#: html/Admin/Queues/Scrip.html:75 +#. ($QueueObj->Name) +msgid "Modify a scrip for queue %1" +msgstr "Modyfikuj skrypt dla kolejki %1" + +#: html/Admin/Global/Scrip.html:69 +msgid "Modify a scrip which applies to all queues" +msgstr "Modyfikuj skrypt, który dotyczy wszystkich kolejek" + +#: NOT FOUND IN SOURCE +msgid "Modify article #%1" +msgstr "Modyfikuj artykuÅ‚ #%1" + +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Modifier les objets associĂŠs Ă %1" + +#: NOT FOUND IN SOURCE +msgid "Modify dates for # %1" +msgstr "Modifier les dates pur n°%1" + +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 +#. ($TicketObj->Id) +msgid "Modify dates for #%1" +msgstr "Modyfikuj daty dla #%1" + +#: html/Ticket/ModifyDates.html:56 +#. ($TicketObj->Id) +msgid "Modify dates for ticket # %1" +msgstr "Modyfikuj daty dla zgÅ‚oszenia # %1" + +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Modyfikuj globalne uprawnienia grupowe" + +#: html/Admin/Global/GroupRights.html:54 +msgid "Modify global group rights." +msgstr "Modyfikuj globalne uprawnienia grupowe" + +#: NOT FOUND IN SOURCE +msgid "Modify global rights for groups" +msgstr "Modifier les droits globaux des groupes" + +#: NOT FOUND IN SOURCE +msgid "Modify global rights for users" +msgstr "Modifier les droits globaux des utilisateurs" + +#: NOT FOUND IN SOURCE +msgid "Modify global scrips" +msgstr "Modyfikuj globalne skrypty" + +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 +msgid "Modify global user rights" +msgstr "Modyfikuj globalne uprawnienia użytkowników" + +#: html/Admin/Global/UserRights.html:54 +msgid "Modify global user rights." +msgstr "Modyfikuj globalne uprawnienia użytkowników." + +#: lib/RT/Group_Overlay.pm:171 +msgid "Modify group metadata or delete group" +msgstr "Modyfikuj grupowe dane poÅ›rednie lub usuÅ„ grupÄ™" + +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Modyfikuj uprawnienia grupowe dla pola %1" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 +#. ($GroupObj->Name) +msgid "Modify group rights for group %1" +msgstr "Modyfikuj uprawnienia grupowe dla grupy %1" + +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 +#. ($QueueObj->Name) +msgid "Modify group rights for queue %1" +msgstr "Modyfikuj uprawnienia grupowe dla kolejki %1" + +#: lib/RT/Group_Overlay.pm:173 +msgid "Modify membership roster for this group" +msgstr "Modyfikuj listÄ™ czÅ‚onków tej grupy" + +#: lib/RT/System.pm:83 +msgid "Modify one's own RT account" +msgstr "Modyfikuj konto w RT" + +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 +#. ($QueueObj->Name) +msgid "Modify people related to queue %1" +msgstr "Modyfikuj użytkowników powiÄ…zanych z kolejkÄ… %1" + +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 +#. ($Ticket->id) +#. ($Ticket->Id) +msgid "Modify people related to ticket #%1" +msgstr "Modyfikuj użytkowników powiÄ…zanych ze zgÅ‚oszeniem %1" + +#: html/Admin/Queues/Scrips.html:67 +#. ($QueueObj->Name) +msgid "Modify scrips for queue %1" +msgstr "Modyfikuj skrypty dla kolejki %1" + +#: 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 "Modyfikuj skrypty, które dotyczÄ… wszystkich kolejek" + +#: 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) +msgid "Modify template %1" +msgstr "Edytuj szablon %1" + +#: html/Admin/Global/Templates.html:65 +msgid "Modify templates which apply to all queues" +msgstr "Modyfikuj szablony, które dotyczÄ… wszystkich kolejek" + +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 +#. ($Group->Name) +msgid "Modify the group %1" +msgstr "Modyfikuj grupÄ™ %1" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "Modify the queue watchers" +msgstr "Modyfikuj obserwatorów kolejki" + +#: html/Admin/Users/Modify.html:301 +#. ($UserObj->Name) +msgid "Modify the user %1" +msgstr "Modyfikuj użytkownika %1" + +#: html/Ticket/ModifyAll.html:58 +#. ($Ticket->Id) +msgid "Modify ticket # %1" +msgstr "Modyfikuj zgÅ‚oszenie %1" + +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 +#. ($TicketObj->Id) +msgid "Modify ticket #%1" +msgstr "Modyfikuj zgÅ‚oszenie %1" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "Modify tickets" +msgstr "Modyfikuj zgÅ‚oszenia" + +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Modifier les droits utilisateurs pour le champ personnalisĂŠ%1" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 +#. ($GroupObj->Name) +msgid "Modify user rights for group %1" +msgstr "Modyfikuj uprawnienia użytkowników dla grupy %1" + +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 +#. ($QueueObj->Name) +msgid "Modify user rights for queue %1" +msgstr "Modyfikuj uprawnienia użytkowników dla kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Modify watchers for queue '%1'" +msgstr "Modyfikuj obserwatorów kolejki %1" + +#: lib/RT/Queue_Overlay.pm:95 +msgid "ModifyACL" +msgstr "ModifyACL" + +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 +msgid "ModifyOwnMembership" +msgstr "ModifyOwnMembership" + +#: lib/RT/Queue_Overlay.pm:96 +msgid "ModifyQueueWatchers" +msgstr "ModifyQueueWatchers" + +#: lib/RT/Queue_Overlay.pm:101 +msgid "ModifyScrips" +msgstr "ModifyScrips" + +#: lib/RT/System.pm:83 +msgid "ModifySelf" +msgstr "ModifySelf" + +#: lib/RT/Queue_Overlay.pm:98 +msgid "ModifyTemplate" +msgstr "ModifyTemplate" + +#: lib/RT/Queue_Overlay.pm:114 +msgid "ModifyTicket" +msgstr "ModifyTicket" + +#: lib/RT/Date.pm:413 +msgid "Mon." +msgstr "Pon." + +#: html/Ticket/Elements/ShowRequestor:62 +#. ($name) +msgid "More about %1" +msgstr "WiÄ™cej o %1" + +#: NOT FOUND IN SOURCE +msgid "Move" +msgstr "DĂŠplacer" + +#: html/Admin/Elements/PickCustomFields:83 +msgid "Move down" +msgstr "PrzesuÅ„ w dół" + +#: html/Admin/Elements/PickCustomFields:75 +msgid "Move up" +msgstr "PrzesuÅ„ w górÄ™" + +#: html/Admin/Elements/SelectSingleOrMultiple:48 +msgid "Multiple" +msgstr "Wielokrotny" + +#: lib/RT/User_Overlay.pm:227 +msgid "Must specify 'Name' attribute" +msgstr "Należy okreÅ›lić atrybut 'Nazwa'" + +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "%1 moich zgÅ‚oszeÅ„" + +#: NOT FOUND IN SOURCE +msgid "My Approvals" +msgstr "Moje potwierdzenia" + +#: html/Approvals/index.html:46 html/Approvals/index.html:47 +msgid "My approvals" +msgstr "Moje potwierdzenia" + +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Moje zapytania" + +#: 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 +msgid "Name" +msgstr "Nazwa" + +#: lib/RT/User_Overlay.pm:234 +msgid "Name in use" +msgstr "Używana nazwa" + +#: NOT FOUND IN SOURCE +msgid "Name matches" +msgstr "Nazwa zgadza siÄ™ z" + +#: NOT FOUND IN SOURCE +msgid "Need approval from system administrator" +msgstr "Wymagane potwierdzenie od administratora systemu" + +#: html/Ticket/Elements/ShowDates:73 +msgid "Never" +msgstr "Nigdy" + +#: html/Elements/Quicksearch:51 +msgid "New" +msgstr "Nowe" + +#: NOT FOUND IN SOURCE +msgid "New Article" +msgstr "Nowy artykuÅ‚" + +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Nowe powiÄ…zania" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 +msgid "New Password" +msgstr "Nowe hasÅ‚o" + +#: etc/initialdata:332 +msgid "New Pending Approval" +msgstr "Nowe zgÅ‚oszenie oczekujÄ…ce na zatwierdzenie" + +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Nowe zapytanie" + +#: NOT FOUND IN SOURCE +msgid "New Relationships" +msgstr "Nowe powiÄ…zania" + +#: NOT FOUND IN SOURCE +msgid "New Search" +msgstr "Nowe wyszukiwanie" + +#: NOT FOUND IN SOURCE +msgid "New class" +msgstr "Nowa klasa" + +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 +msgid "New custom field" +msgstr "Nowe pole def. przez użytkownika" + +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 +msgid "New group" +msgstr "Nowa grupa" + +#: html/SelfService/Prefs.html:53 +msgid "New password" +msgstr "Nowe hasÅ‚o" + +#: lib/RT/User_Overlay.pm:817 +msgid "New password notification sent" +msgstr "Nowe hasÅ‚o zostaÅ‚o wysÅ‚ane" + +#: html/Admin/Elements/QueueTabs:95 +msgid "New queue" +msgstr "Nowa kolejka" + +#: NOT FOUND IN SOURCE +msgid "New request" +msgstr "Nouvelle demande" + +#: html/Admin/Elements/SelectRights:65 +msgid "New rights" +msgstr "Nowe uprawnienia" + +#: 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 "Nowy skrypt" + +#: NOT FOUND IN SOURCE +msgid "New search" +msgstr "Nowe wyszukiwanie" + +#: 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 "Nowy szablon" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "Nowe zgÅ‚oszenie" + +#: lib/RT/Ticket_Overlay.pm:2713 +msgid "New ticket doesn't exist" +msgstr "Nowe zgÅ‚oszenie nie istnieje" + +#: html/Admin/Elements/UserTabs:78 +msgid "New user" +msgstr "Nowy użytkownik" + +#: html/Admin/Elements/CreateUserCalled:47 +msgid "New user called" +msgstr "Nowy użytkownik zostaÅ‚ nazwany" + +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 +msgid "New watchers" +msgstr "Nowi obserwatorzy" + +#: NOT FOUND IN SOURCE +msgid "New window setting" +msgstr "Nowe ustawienia okna" + +#: html/Ticket/Elements/Tabs:92 +msgid "Next" +msgstr "NastÄ™pne" + +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "NastÄ™pna strona" + +#: NOT FOUND IN SOURCE +msgid "Next page" +msgstr "NastÄ™pna strona" + +#: NOT FOUND IN SOURCE +msgid "NickName" +msgstr "Pseudonim" + +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 +msgid "Nickname" +msgstr "Pseudonim" + +#: NOT FOUND IN SOURCE +msgid "No" +msgstr "Nie" + +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "Nie zdefiniowano klasy" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 +msgid "No CustomField" +msgstr "Brak pola definiowanego przez użytkownika" + +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Nie zdefiniowano pola def. przez użytkownika" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 +msgid "No Group defined" +msgstr "Nie zdefiniowano grupy" + +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Brak zapytania" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 +msgid "No Queue defined" +msgstr "Nie zdefiniowano kolejki" + +#: bin/rt-crontool:73 +msgid "No RT user found. Please consult your RT administrator.\\n" +msgstr "Nie odnaleziono użytkownika RT. ProszÄ™ skontaktować siÄ™ z administratorem RT.\\n" + +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 +msgid "No Template" +msgstr "Brak szablonu" + +#: NOT FOUND IN SOURCE +msgid "No Ticket specified. Aborting ticket " +msgstr "Nie okreÅ›lono zgÅ‚oszenia. Odrzucenie zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "No Ticket specified. Aborting ticket modifications\\n\\n" +msgstr "Nie okreÅ›lono zgÅ‚oszenia. Odrzucenie modyfikacji zgÅ‚oszenia\\n\\n" + +#: html/Approvals/Elements/Approve:67 +msgid "No action" +msgstr "Zawieszenie operacji" + +#: lib/RT/Record.pm:935 +msgid "No column specified" +msgstr "Nie okreÅ›lono kolumny" + +#: NOT FOUND IN SOURCE +msgid "No command found\\n" +msgstr "Nie udaÅ‚o siÄ™ wyszukać polecenia\\n" + +#: html/Ticket/Elements/ShowRequestor:68 +msgid "No comment entered about this user" +msgstr "Nie wprowadzono komentarza dotyczÄ…cego tego użytkownika" + +#: NOT FOUND IN SOURCE +msgid "No correspondence attached" +msgstr "Nie załączono korespondencji" + +#: 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) +msgid "No description for %1" +msgstr "Brak opisu dla %1" + +#: lib/RT/Users_Overlay.pm:185 +msgid "No group specified" +msgstr "Nie okreÅ›lono grupy" + +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Aucun groupe trouvĂŠd'après le critère de recherche." + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "Brak załączonej wiadomoÅ›ci" + +#: lib/RT/User_Overlay.pm:1035 +msgid "No password set" +msgstr "Nie ustawiono hasÅ‚a" + +#: lib/RT/Queue_Overlay.pm:358 +msgid "No permission to create queues" +msgstr "Brak uprawnieÅ„ do tworzenia kolejek" + +#: lib/RT/Ticket_Overlay.pm:409 +#. ($QueueObj->Name) +msgid "No permission to create tickets in the queue '%1'" +msgstr "Brak uprawnieÅ„ do tworzenia zgÅ‚oszeÅ„ w kolejce '%1'" + +#: lib/RT/User_Overlay.pm:187 +msgid "No permission to create users" +msgstr "Brak uprawnieÅ„ do tworzenia użytkowników" + +#: html/SelfService/Display.html:165 +msgid "No permission to display that ticket" +msgstr "Brak uprawnieÅ„ do wyÅ›wietlenia tego zgÅ‚oszenia" + +#: html/SelfService/Update.html:117 +msgid "No permission to view update ticket" +msgstr "Brak uprawnieÅ„ do przeglÄ…dania aktualizacji zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 +msgid "No principal specified" +msgstr "Nie okreÅ›lono zarzÄ…dzajÄ…cego" + +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 +msgid "No principals selected." +msgstr "Nie wybrano zarzÄ…dzajÄ…cych." + +#: html/Admin/Queues/index.html:57 +msgid "No queues matching search criteria found." +msgstr "Brak kolejek odpowiadajÄ…cych kryteriom wyszukiwania" + +#: html/Admin/Elements/SelectRights:106 +msgid "No rights found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać uprawnieÅ„" + +#: html/Admin/Elements/SelectRights:53 +msgid "No rights granted." +msgstr "Nie przyznano uprawnieÅ„." + +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 +msgid "No search to operate on." +msgstr "Brak kryteriów wyszukiwania" + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Brak tematu" + +#: NOT FOUND IN SOURCE +msgid "No ticket id specified" +msgstr "Nie okreÅ›lono numeru zgÅ‚oszenia" + +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 +msgid "No transaction type specified" +msgstr "Nie okreÅ›lono typu transakcji" + +#: NOT FOUND IN SOURCE +msgid "No user or email address specified" +msgstr "Aucun utilisateur ou adresse email spĂŠcifiĂŠ" + +#: html/Admin/Users/index.html:55 +msgid "No users matching search criteria found." +msgstr "Brak użytkowników odpowiadajÄ…cych kryteriom wyszukiwania" + +#: NOT FOUND IN SOURCE +msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" +msgstr "Brak aktualnego użytkownika RT. ProszÄ™ skontaktować siÄ™ z administratorem RT.\\n" + +#: lib/RT/Record.pm:932 +msgid "No value sent to _Set!\\n" +msgstr "Nie wysÅ‚ano wartoÅ›ci do zestawu!\\n" + +#: html/Elements/QuickCreate:61 +msgid "Nobody" +msgstr "Nikt" + +#: lib/RT/Record.pm:937 +msgid "Nonexistant field?" +msgstr "NieistniejÄ…ce pole?" + +#: NOT FOUND IN SOURCE +msgid "Not logged in" +msgstr "Nie udaÅ‚o siÄ™ zalogować" + +#: html/Elements/Header:96 +msgid "Not logged in." +msgstr "Nie udaÅ‚o siÄ™ zalogować." + +#: lib/RT/Date.pm:393 +msgid "Not set" +msgstr "Nie ustawiona" + +#: html/NoAuth/Reminder.html:48 +msgid "Not yet implemented." +msgstr "Jeszcze nie zaimplementowane." + +#: NOT FOUND IN SOURCE +msgid "Not yet implemented...." +msgstr "Jeszcze nie zaimplementowane..." + +#: html/Approvals/Elements/Approve:70 +msgid "Notes" +msgstr "Uwagi" + +#: lib/RT/User_Overlay.pm:820 +msgid "Notification could not be sent" +msgstr "Powiadomienie nie może zostać wysÅ‚ane" + +#: etc/initialdata:101 +msgid "Notify AdminCcs" +msgstr "WyÅ›lij powiadomienie do osób o uprawnieniach AdminCc" + +#: etc/initialdata:97 +msgid "Notify AdminCcs as Comment" +msgstr "WyÅ›lij powiadomienie do osób o uprawnieniach AdminCc jako komentarz" + +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "WyÅ›lij powiadomienia do osób o uprawnieniach Cc" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "WyÅ›lij powiadomienia do osób o uprawnieniach Cc jako komentarz" + +#: etc/initialdata:128 +msgid "Notify Other Recipients" +msgstr "WyÅ›lij powiadomienie do innych odbiorców" + +#: etc/initialdata:124 +msgid "Notify Other Recipients as Comment" +msgstr "WyÅ›lij powiadomienie do innych odbiorców jako komentarz" + +#: etc/initialdata:85 +msgid "Notify Owner" +msgstr "WyÅ›lij powiadomienie do wÅ‚aÅ›ciciela" + +#: etc/initialdata:81 +msgid "Notify Owner as Comment" +msgstr "WyÅ›lij powiadomienie do wÅ‚aÅ›ciciela jako komentarz" + +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "Powiadom WÅ‚aÅ›ciciela o odrzuceniu jego zgÅ‚oszenia" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "Powiadom ZgÅ‚aszajÄ…cego o zatwierdzeniu jego zgÅ‚oszenia przez wszystkich zatwierdzajÄ…cych" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "Powiadom ZgÅ‚aszajÄ…cego o zatwierdzeniu jego zgÅ‚oszenia przez niektórych zatwierdzajÄ…cych" + +#: etc/initialdata:334 +msgid "Notify Owners and AdminCcs of new items pending their approval" +msgstr "WyÅ›lij powiadomienie do wÅ‚aÅ›cicieli i osób o uprawnieniach AdminCc o nowych pozycjach oczekujÄ…cych na zatwierdzenie przez nich" + +#: etc/initialdata:77 +msgid "Notify Requestors" +msgstr "WyÅ›lij powiadomienie do zgÅ‚aszajÄ…cych" + +#: etc/initialdata:111 +msgid "Notify Requestors and Ccs" +msgstr "WyÅ›lij powiadomienie do zgÅ‚aszajÄ…cych i osób o uprawnieniach Cc" + +#: etc/initialdata:106 +msgid "Notify Requestors and Ccs as Comment" +msgstr "WyÅ›lij powiadomienie do zgÅ‚aszajÄ…cych i osób o uprawnieniach Cc jako komentarz" + +#: etc/initialdata:120 +msgid "Notify Requestors, Ccs and AdminCcs" +msgstr "WyÅ›lij powiadomienie do zgÅ‚aszajÄ…cych oraz osób o uprawnieniach Cc i AdminCc" + +#: etc/initialdata:116 +msgid "Notify Requestors, Ccs and AdminCcs as Comment" +msgstr "WyÅ›lij powiadomienie do zgÅ‚aszajÄ…cych oraz osób o uprawnieniach Cc i AdminCC jako komentarz" + +#: lib/RT/Date.pm:447 +msgid "Nov." +msgstr "Lis." + +#: NOT FOUND IN SOURCE +msgid "November" +msgstr "Listopad" + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 +msgid "Object could not be created" +msgstr "Nie udaÅ‚o siÄ™ utworzyć obiektu" + +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 +msgid "Object created" +msgstr "Obiekt zostaÅ‚ utworzony" + +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "Les objets de type %1 ne peuvent avoir de champs personnalisĂŠs" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "Le type d'objet ne correspond pas" + +#: lib/RT/Date.pm:446 +msgid "Oct." +msgstr "Paź." + +#: NOT FOUND IN SOURCE +msgid "October" +msgstr "Październik" + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Praca zdalna" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Zdalne modyfikacje" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "ZaÅ‚aduj modyfikowane zdalnie" + +#: html/Elements/SelectDateRelation:56 +msgid "On" +msgstr "dnia" + +#: etc/initialdata:163 +msgid "On Comment" +msgstr "w przypadku komentarza" + +#: etc/initialdata:156 +msgid "On Correspond" +msgstr "w przypadku korespondencji" + +#: etc/initialdata:145 +msgid "On Create" +msgstr "w przypadku rejestracji zgÅ‚oszeÅ„" + +#: etc/initialdata:184 +msgid "On Owner Change" +msgstr "w przypadku zmiany wÅ‚aÅ›ciciela" + +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "w przypadku zmiany priorytetu" + +#: etc/initialdata:192 +msgid "On Queue Change" +msgstr "w przypadku zmiany kolejki" + +#: etc/initialdata:198 +msgid "On Resolve" +msgstr "w przypadku zamykania zgÅ‚oszeÅ„" + +#: etc/initialdata:169 +msgid "On Status Change" +msgstr "w przypadku zmiany statusu" + +#: etc/initialdata:150 +msgid "On Transaction" +msgstr "w przypadku transakcji" + +#: html/Approvals/Elements/PendingMyApproval:71 +#. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") +msgid "Only show approvals for requests created after %1" +msgstr "WyÅ›wietl tylko potwierdzenia dotyczÄ…ce zgÅ‚oszeÅ„ zarejestrowanych po %1" + +#: html/Approvals/Elements/PendingMyApproval:69 +#. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") +msgid "Only show approvals for requests created before %1" +msgstr "WyÅ›wietl tylko potwierdzenia dotyczÄ…ce zgÅ‚oszeÅ„ zarejestrowanych przed %1" + +#: html/Elements/Quicksearch:52 +msgid "Open" +msgstr "Otwarte" + +#: NOT FOUND IN SOURCE +msgid "Open Tickets" +msgstr "Otwórz zgÅ‚oszenia" + +#: html/Ticket/Elements/Tabs:159 +msgid "Open it" +msgstr "Otwórz" + +#: NOT FOUND IN SOURCE +msgid "Open requests" +msgstr "Ouvrir les demandes" + +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "Otwórz zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in a new window" +msgstr "Otwórz zgÅ‚oszenia (z listy) w nowym oknie" + +#: NOT FOUND IN SOURCE +msgid "Open tickets (from listing) in another window" +msgstr "Otwórz zgÅ‚oszenia (z listy) w innym oknie" + +#: etc/initialdata:140 +msgid "Open tickets on correspondence" +msgstr "Otwórz zgÅ‚oszenia, które sÄ… w trakcie ustalania (wymiany korespondencji)" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "UporzÄ…dkuj wg" + +#: NOT FOUND IN SOURCE +msgid "Ordering and sorting" +msgstr "PorzÄ…dkowanie i sortowanie" + +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 +msgid "Organization" +msgstr "Firma" + +#: html/Approvals/Elements/Approve:54 +#. ($approving->Id, $approving->Subject) +msgid "Originating ticket: #%1" +msgstr "ZgÅ‚oszenie źródÅ‚owe: #%1" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "Mail sortant suite Ă l'enregistrement d'un commentaire" +msgstr "Zarejestrowano wychodzÄ…cÄ… wiadomość o komentarzu" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "Zarejestrowano wiadomość wychodzÄ…cÄ…" + +#: html/Admin/Queues/Modify.html:90 +msgid "Over time, priority moves toward" +msgstr "Z upÅ‚ywem czasu priorytet wzrasta do" + +#: NOT FOUND IN SOURCE +msgid "Overview" +msgstr "PrzeglÄ…d" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "Own tickets" +msgstr "Moje zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:113 +msgid "OwnTicket" +msgstr "OwnTicket" + +#: 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 +msgid "Owner" +msgstr "WÅ‚aÅ›ciciel" + +#: NOT FOUND IN SOURCE +msgid "Owner changed from %1 to %2" +msgstr "WÅ‚aÅ›ciciel zmieniÅ‚ siÄ™ z %1 na %2" + +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "WÅ‚aÅ›ciciel nie mógÅ‚ być ustanowiony." + +#: lib/RT/Transaction_Overlay.pm:661 +#. ($Old->Name , $New->Name) +msgid "Owner forcibly changed from %1 to %2" +msgstr "Wymuszono zmianÄ™ wÅ‚aÅ›ciciela z %1 na %2" + +#: NOT FOUND IN SOURCE +msgid "Owner is" +msgstr "WÅ‚aÅ›cicielem" + +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Strona %1 z %2" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 +msgid "Pager" +msgstr "Pager" + +#: NOT FOUND IN SOURCE +msgid "PagerPhone" +msgstr "Nr pager'a" + +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 +msgid "Parents" +msgstr "ZgÅ‚oszenia nadrzÄ™dne" + +#: html/Elements/Login:74 html/User/Prefs.html:105 +msgid "Password" +msgstr "HasÅ‚o" + +#: html/NoAuth/Reminder.html:46 +msgid "Password Reminder" +msgstr "Przypomnienie o haÅ›le" + +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Password too short" +msgstr "HasÅ‚o jest zbyt krótkie" + +#: html/User/Prefs.html:232 +#. (loc_fuzzy($msg)) +msgid "Password: %1" +msgstr "HasÅ‚o: %1" + +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "HasÅ‚a sÄ… różne." + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "HasÅ‚a sÄ… różne. Twoje hasÅ‚o nie zostaÅ‚o zmienione." + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 +msgid "People" +msgstr "Osoby" + +#: etc/initialdata:133 +msgid "Perform a user-defined action" +msgstr "Wykonaj operacjÄ™ zdefiniowanÄ… przez użytkownika" + +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Konfiguracja PERL" + +#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm: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 +msgid "Permission Denied" +msgstr "Odmowa dostÄ™pu" + +#: html/User/Elements/Tabs:56 +msgid "Personal Groups" +msgstr "Grupy prywatne" + +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 +msgid "Personal groups" +msgstr "Grupy prywatne" + +#: html/User/Elements/DelegateRights:58 +msgid "Personal groups:" +msgstr "Grupy prywatne:" + +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 +msgid "Phone numbers" +msgstr "Numery tel." + +#: NOT FOUND IN SOURCE +msgid "Placeholder" +msgstr "Placeholder" + +#: 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 +msgid "Preferences" +msgstr "WÅ‚aÅ›ciwoÅ›ci" + +#: NOT FOUND IN SOURCE +msgid "Prefs" +msgstr "WÅ‚aÅ›ciwoÅ›ci" + +#: lib/RT/Action/Generic.pm:196 +msgid "Prepare Stubbed" +msgstr "Informacja o przygotowaniu zostaÅ‚a wysÅ‚ana do zgÅ‚aszajÄ…cego" + +#: html/Ticket/Elements/Tabs:84 +msgid "Prev" +msgstr "Poprzednie" + +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "Poprzednia strona" + +#: NOT FOUND IN SOURCE +msgid "Previous page" +msgstr "Poprzednia strona" + +#: NOT FOUND IN SOURCE +msgid "Pri" +msgstr "Poprzedni" + +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 +#. ($args{'PrincipalId'}) +msgid "Principal %1 not found." +msgstr "Nie udaÅ‚o siÄ™ wyszukać zarzÄ…dzajÄ…cego %1." + +#: 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 +msgid "Priority" +msgstr "Priorytet" + +#: html/Admin/Queues/Modify.html:86 +msgid "Priority starts at" +msgstr "Priorytet rozpoczyna siÄ™ od" + +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "Prywatne:" + +#: etc/initialdata:25 +msgid "Privileged" +msgstr "Uprawnieni" + +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 +#. (loc_fuzzy($msg)) +msgid "Privileged status: %1" +msgstr "Uprawniony status: %1" + +#: html/Admin/Users/index.html:102 +msgid "Privileged users" +msgstr "Uprawnieni użytkownicy" + +#: NOT FOUND IN SOURCE +msgid "Projects" +msgstr "Projets" + +#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 +msgid "Pseudogroup for internal use" +msgstr "Grupa do użytku wewnÄ™trznego" + +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "Zapytanie" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "Kreator zapytaÅ„" + +#: 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 +msgid "Queue" +msgstr "Kolejka " + +#: 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) +msgid "Queue %1 not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać kolejki %1" + +#: NOT FOUND IN SOURCE +msgid "Queue '%1' not found\\n" +msgstr "Nie udaÅ‚o siÄ™ wyszukać kolejki '%1 '\\n" + +#: NOT FOUND IN SOURCE +msgid "Queue Keyword Selections" +msgstr "SĂŠlection des mots clĂŠde queue" + +#: html/Admin/Queues/Modify.html:64 +msgid "Queue Name" +msgstr "Nazwa kolejki" + +#: NOT FOUND IN SOURCE +msgid "Queue Scrips" +msgstr "Skrypty kolejki" + +#: lib/RT/Queue_Overlay.pm:362 +msgid "Queue already exists" +msgstr "Kolejka już istnieje" + +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 +msgid "Queue could not be created" +msgstr "Nie udaÅ‚o siÄ™ utworzyć kolejki" + +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 +msgid "Queue could not be loaded." +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować kolejki" + +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 +msgid "Queue created" +msgstr "Kolejka zostaÅ‚a utworzona" + +#: NOT FOUND IN SOURCE +msgid "Queue is not specified." +msgstr "Kolejka nie zostaÅ‚a okreÅ›lona." + +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 +msgid "Queue not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać kolejki" + +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 +msgid "Queues" +msgstr "Kolejki" + +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "Szybkie wyszukiwanie" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "Szybkie tworzenie zgÅ‚oszeÅ„" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS (XML)" + +#: html/Elements/Login:66 +#. ($RT::VERSION) +msgid "RT %1" +msgstr "RT %1" + +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 +#. ($RT::VERSION, $RT::rtname) +msgid "RT %1 for %2" +msgstr "RT %1 dla %2" + +#: NOT FOUND IN SOURCE +msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." +msgstr "RT %1 wyprodukowany przez <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." + +#: NOT FOUND IN SOURCE +msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" +msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" + +#: NOT FOUND IN SOURCE +msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" +msgstr "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" + +#: html/Admin/index.html:46 html/Admin/index.html:47 +msgid "RT Administration" +msgstr "Administracja RT" + +#: NOT FOUND IN SOURCE +msgid "RT Authentication error." +msgstr "Błąd autoryzacji w RT" + +#: NOT FOUND IN SOURCE +msgid "RT Bounce: %1" +msgstr "Odbicie zgÅ‚oszenia przez RT: %1" + +#: NOT FOUND IN SOURCE +msgid "RT Configuration error" +msgstr "Błąd konfiguracji RT" + +#: NOT FOUND IN SOURCE +msgid "RT Critical error. Message not recorded!" +msgstr "Błąd krytyczny RT. Nie udaÅ‚o siÄ™ zapisać wiadomoÅ›ci!" + +#: html/Elements/Error:65 html/SelfService/Error.html:62 +msgid "RT Error" +msgstr "Błąd RT" + +#: NOT FOUND IN SOURCE +msgid "RT Received mail (%1) from itself." +msgstr "RT otrzymaÅ‚ e-mail (%1) z RT" + +#: NOT FOUND IN SOURCE +msgid "RT Recieved mail (%1) from itself." +msgstr "RT a reçu du courrier (%1) de lui mĂŞme" + +#: NOT FOUND IN SOURCE +msgid "RT Self Service" +msgstr "SamoobsÅ‚uga RT" + +#: NOT FOUND IN SOURCE +msgid "RT Self Service / Closed Tickets" +msgstr "RT Self Service / Tickets rĂŠsolus" + +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "Zmienne RT" + +#: html/index.html:72 html/index.html:75 +msgid "RT at a glance" +msgstr "RT - przeglÄ…d podstawowych informacji" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't authenticate you" +msgstr "Nieudana autoryzacja w RT" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't find requestor via its external database lookup" +msgstr "Nie udaÅ‚o siÄ™ wyszukać zgÅ‚aszajÄ…cego przez przejrzenie zewnÄ™trznej bazy" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't find the queue: %1" +msgstr "Nie udaÅ‚o siÄ™ wyszukać kolejki: %1" + +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "RT couldn't validate this PGP signature. \\n" +msgstr "Nie udaÅ‚o siÄ™ zatwierdzić tego podpisu PGP.\\n" + +#: html/Elements/PageLayout:108 +#. ($RT::rtname) +msgid "RT for %1" +msgstr "RT dla %1" + +#: NOT FOUND IN SOURCE +msgid "RT for %1: %2" +msgstr "RT dla %1: %2" + +#: NOT FOUND IN SOURCE +msgid "RT has proccessed your commands" +msgstr "RT wykonaÅ‚ twoje polecenia" + +#: NOT FOUND IN SOURCE +msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +msgstr "RT © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Jest dystrybuowane jako <a href=\"http://www.gnu.org/copyleft/gpl.html\">Wersja 2 GNU General Public License.</a>" + +#: NOT FOUND IN SOURCE +msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +msgstr "RT est © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. DistribuĂŠsous <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 de la licence gĂŠnĂŠrale GNU.</a>" + +#: NOT FOUND IN SOURCE +msgid "RT thinks this message may be a bounce" +msgstr "Wg RT ta wiadomość może być informacjÄ… odbitÄ…" + +#: NOT FOUND IN SOURCE +msgid "RT will process this message as if it were unsigned.\\n" +msgstr "RT bÄ™dzie postÄ™powaÅ‚ z tÄ… wiadomoÅ›ciÄ… tak, jakby byÅ‚a niepodpisana.\\n" + +#: NOT FOUND IN SOURCE +msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." +msgstr "Email w RT wymaga autoryzacji podpisu PGP. Albo nie podpisaÅ‚eÅ› wiadomoÅ›ci, albo Twój podpis nie może być zweryfikowany." + +#: NOT FOUND IN SOURCE +msgid "RTFM Error" +msgstr "Błąd RTFM" + +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 +msgid "Real Name" +msgstr "ImiÄ™ i nazwisko" + +#: NOT FOUND IN SOURCE +msgid "RealName" +msgstr "RealName" + +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "PowiÄ…zanie %1 dodane" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "PowiÄ…zanie %1 usuniÄ™te" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "PowiÄ…zanie z %1 dodane" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "PowiÄ…zanie z %1 usuniÄ™te" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 +msgid "Referred to by" +msgstr "ZgÅ‚oszenia powiÄ…zane" + +#: 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 +msgid "Refers to" +msgstr "PowiÄ…zane z" + +#: NOT FOUND IN SOURCE +msgid "RefersTo" +msgstr "PowiÄ…zaneZ" + +#: NOT FOUND IN SOURCE +msgid "Refine" +msgstr "Popraw" + +#: NOT FOUND IN SOURCE +msgid "Refine search" +msgstr "Wprowadź szczegółowe kryteria wyszukiwania" + +#: html/Elements/Refresh:57 +#. ($value/60) +msgid "Refresh this page every %1 minutes." +msgstr "OdÅ›wieżaj tÄ™ stronÄ™ co %1 minut." + +#: NOT FOUND IN SOURCE +msgid "Relationships" +msgstr "PowiÄ…zania" + +#: html/Search/Bulk.html:116 +msgid "Remove AdminCc" +msgstr "UsuÅ„ AdminCc" + +#: html/Search/Bulk.html:112 +msgid "Remove Cc" +msgstr "UsuÅ„ Cc" + +#: html/Search/Bulk.html:108 +msgid "Remove Requestor" +msgstr "UsuÅ„ zgÅ‚aszajÄ…cego" + +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 +msgid "Reply" +msgstr "Odpowiedz" + +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "Adres odpowiedzi" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Odpowiedz zgÅ‚aszajÄ…cym" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "Reply to tickets" +msgstr "Odpowiedz na zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:111 +msgid "ReplyToTicket" +msgstr "ReplyToTicket" + +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 +msgid "Requestor" +msgstr "ZgÅ‚aszajÄ…cy" + +#: NOT FOUND IN SOURCE +msgid "Requestor email address" +msgstr "Adres e-mail zgÅ‚aszajÄ…cego" + +#: NOT FOUND IN SOURCE +msgid "Requestor(s)" +msgstr "ZgÅ‚aszajÄ…cy" + +#: NOT FOUND IN SOURCE +msgid "RequestorAddresses" +msgstr "AdresZgÅ‚aszajÄ…cego" + +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 +msgid "Requestors" +msgstr "ZgÅ‚aszajÄ…cy" + +#: html/Admin/Queues/Modify.html:96 +msgid "Requests should be due in" +msgstr "ZgÅ‚oszenia powinny być zrealizowane w ciÄ…gu" + +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Wymagany atrybut '%1' nie zostaÅ‚ okreÅ›lony" + +#: html/Elements/Submit:104 +msgid "Reset" +msgstr "Zresetuj" + +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 +msgid "Residence" +msgstr "Tel. domowy" + +#: html/Ticket/Elements/Tabs:155 +msgid "Resolve" +msgstr "Zamknij" + +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Resolve ticket #%1 (%2)" +msgstr "Zamknij zgÅ‚oszenie nr %1 (%2)" + +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 +msgid "Resolved" +msgstr "ZamkniÄ™te" + +#: NOT FOUND IN SOURCE +msgid "Response to requestors" +msgstr "Odpowiedź dla zgÅ‚aszajÄ…cych" + +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 +msgid "Results" +msgstr "Wyniki" + +#: NOT FOUND IN SOURCE +msgid "Results per page" +msgstr "Wyniki - liczba na stronÄ™" + +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 +msgid "Retype Password" +msgstr "Wpisz ponownie hasÅ‚o" + +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Przywróć" + +#: NOT FOUND IN SOURCE +msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" +msgstr "Uprawnienie %1 nie zostaÅ‚o wyszukane dla %2 %3 w zakresie %4 (%5)\\n" + +#: lib/RT/ACE_Overlay.pm:631 +msgid "Right Delegated" +msgstr "Uprawnienie zostaÅ‚o przekazane" + +#: lib/RT/ACE_Overlay.pm:321 +msgid "Right Granted" +msgstr "Uprawnienie zostaÅ‚o przyznane" + +#: lib/RT/ACE_Overlay.pm:179 +msgid "Right Loaded" +msgstr "Uprawnienie zostaÅ‚o zaÅ‚adowane" + +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 +msgid "Right could not be revoked" +msgstr "Uprawnienie nie może być odebrane" + +#: html/User/Delegation.html:85 +msgid "Right not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać uprawnienia" + +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 +msgid "Right not loaded." +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować uprawnienia" + +#: lib/RT/ACE_Overlay.pm:713 +msgid "Right revoked" +msgstr "Uprawnienie zostaÅ‚o odebrane" + +#: html/Admin/Elements/UserTabs:67 +msgid "Rights" +msgstr "Uprawnienia" + +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 +#. ($object_type) +msgid "Rights could not be granted for %1" +msgstr "Nie udaÅ‚o siÄ™ przydzielić uprawnieÅ„ dla %1" + +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 +#. ($object_type) +msgid "Rights could not be revoked for %1" +msgstr "Nie udaÅ‚o siÄ™ odebrać uprawnieÅ„ dla %1" + +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 +msgid "Roles" +msgstr "Role" + +#: NOT FOUND IN SOURCE +msgid "RootApproval" +msgstr "RootApproval" + +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Linii na stronie" + +#: lib/RT/Date.pm:418 +msgid "Sat." +msgstr "Sob." + +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Zapisz" + +#: 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 +msgid "Save Changes" +msgstr "Zapisz zmiany" + +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Zapisz" + +#: html/Ticket/Elements/PreviewScrips:124 +msgid "Save changes" +msgstr "Zapisz zmiany" + +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Zapisane zapytania" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) +#. ($ARGS{'id'}) +msgid "Scrip #%1" +msgstr "Skrypt #%1" + +#: lib/RT/Scrip_Overlay.pm:205 +msgid "Scrip Created" +msgstr "Skrypt zostaÅ‚ utworzony" + +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "Atrybuty skryptu" + +#: html/Admin/Elements/EditScrips:107 +msgid "Scrip deleted" +msgstr "Skrypt zostaÅ‚ usuniÄ™ty" + +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 +msgid "Scrips" +msgstr "Skrypty" + +#: NOT FOUND IN SOURCE +msgid "Scrips for %1\\n" +msgstr "Skrypty dla %1\\n" + +#: html/Admin/Queues/Scrips.html:55 +msgid "Scrips which apply to all queues" +msgstr "Skrypty, które dotyczÄ… wszystkich kolejek" + +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 +msgid "Search" +msgstr "Wyszukaj" + +#: NOT FOUND IN SOURCE +msgid "Search Criteria" +msgstr "Kryteria wyszukiwania" + +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +# nie jestem pewien! +#: html/Approvals/Elements/PendingMyApproval:60 +msgid "Search for approvals" +msgstr "Wyszukaj oczekujÄ…ce potwierdzenia" + +#: NOT FOUND IN SOURCE +msgid "Search for articles" +msgstr "Wyszukaj artykuÅ‚y" + +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Searches can't be associated with that kind of object" +msgstr "Les recherches ne peuvent ĂŞtre associĂŠes Ă ce type d'objet" + +#: bin/rt-crontool:213 +msgid "Security:" +msgstr "Zabezpieczenie:" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "Voir les champs personnalisĂŠs" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "Zobacz dosÅ‚owne wiadomoÅ›ci wychodzÄ…ce i ich odbiorców" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "Zobacz prywatne komentarze do zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "Zobacz podsumowania zgÅ‚oszeÅ„" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "DostDoPólUżytk" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 +msgid "SeeQueue" +msgstr "SeeQueue" + +#: NOT FOUND IN SOURCE +msgid "Select" +msgstr "Selectionner" + +#: NOT FOUND IN SOURCE +msgid "Select a Class" +msgstr "Wybierz klasÄ™" + +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "Wybierz pole definiowane przez użytkownika" + +#: NOT FOUND IN SOURCE +msgid "Select a Custom Fields" +msgstr "Wybierz pole definiowane przez użytkownika" + +#: html/Admin/Groups/index.html:78 +msgid "Select a group" +msgstr "Wybierz grupÄ™" + +#: html/Admin/Queues/index.html:54 +msgid "Select a queue" +msgstr "Wybierz kolejkÄ™" + +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 +msgid "Select a user" +msgstr "Wybierz użytkownika" + +#: NOT FOUND IN SOURCE +msgid "Select class" +msgstr "Wybierz klasÄ™" + +#: html/Admin/Elements/CustomFieldTabs:90 +msgid "Select custom field" +msgstr "Wybierz pole" + +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 +msgid "Select group" +msgstr "Wybierz grupÄ™" + +#: lib/RT/CustomField_Overlay.pm:59 +msgid "Select multiple values" +msgstr "Wybór wielu wartoÅ›ci" + +#: lib/RT/CustomField_Overlay.pm:60 +msgid "Select one value" +msgstr "Wybór jednej wartoÅ›ci" + +#: html/Admin/Elements/QueueTabs:92 +msgid "Select queue" +msgstr "Wybierz kolejkÄ™" + +#: 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 "Wybierz skrypt" + +#: 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 "Wybierz szablon" + +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Choisir un maximum de %1 valeurs " + +#: html/Admin/Elements/UserTabs:75 +msgid "Select user" +msgstr "Wybierz użytkownika" + +#: NOT FOUND IN SOURCE +msgid "SelectMultiple" +msgstr "Wybór wielu wartoÅ›ci" + +#: NOT FOUND IN SOURCE +msgid "SelectSingle" +msgstr "Wybór jednej wartoÅ›ci" + +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Champs personnalisĂŠs sĂŠlectionnĂŠs" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Objets sĂŠlectionnĂŠs" + +#: NOT FOUND IN SOURCE +msgid "Self Service" +msgstr "SamoobsÅ‚uga" + +#: etc/initialdata:121 +msgid "Send mail to all watchers" +msgstr "WyÅ›lij e-mail do wszystkich obserwatorów" + +#: etc/initialdata:117 +msgid "Send mail to all watchers as a \"comment\"" +msgstr "WyÅ›lij e-mail do wszystkich obserwatorów jako \"komentarz\"" + +#: etc/initialdata:112 +msgid "Send mail to requestors and Ccs" +msgstr "WyÅ›lij e-mail do zgÅ‚aszajÄ…cych i osób o uprawnieniach Cc"" + +#: etc/initialdata:107 +msgid "Send mail to requestors and Ccs as a comment" +msgstr "WyÅ›lij e-mail do zgÅ‚aszajÄ…cych i osób o uprawnieniach Cc jako komentarz" + +#: etc/initialdata:78 +msgid "Sends a message to the requestors" +msgstr "WysyÅ‚a wiadomość do zgÅ‚aszajÄ…cych" + +#: etc/initialdata:125 etc/initialdata:129 +msgid "Sends mail to explicitly listed Ccs and Bccs" +msgstr "WysyÅ‚a e-mail do osób wymienionych w Cc i Bcc " + +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "WysyÅ‚a e-mail do użytkowników o uprawnieniach CC" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "WysyÅ‚a e-mail jako komentarz do użytkowników o uprawnieniach CC" + +#: etc/initialdata:102 +msgid "Sends mail to the administrative Ccs" +msgstr "WysyÅ‚a e-mail do osób wymienionych w administracyjnym Cc" + +#: etc/initialdata:98 +msgid "Sends mail to the administrative Ccs as a comment" +msgstr "WysyÅ‚a e-mail do osób wymienionych w administracyjnym Cc jako komentarz" + +#: etc/initialdata:82 etc/initialdata:86 +msgid "Sends mail to the owner" +msgstr "WysyÅ‚a e-mail do wÅ‚aÅ›ciciela" + +#: lib/RT/Date.pm:445 +msgid "Sep." +msgstr "Wrz." + +#: NOT FOUND IN SOURCE +msgid "Seperate multiple URLs with spaces" +msgstr "Oddziel spacjami adresy URL" + +#: NOT FOUND IN SOURCE +msgid "September" +msgstr "WrzesieÅ„" + +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Pokaż" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Pokazuj potwierdzenia" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "WyÅ›wietlane kolumny" + +#: html/Ticket/Elements/Tabs:201 +msgid "Show Results" +msgstr "WyÅ›wietl wyniki" + +#: NOT FOUND IN SOURCE +msgid "Show advanced search options..." +msgstr "WyÅ›wietl zaawansowane opcje wyszukiwania..." + +#: html/Approvals/Elements/PendingMyApproval:65 +msgid "Show approved requests" +msgstr "WyÅ›wietl zatwierdzone zgÅ‚oszenia" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show basics" +msgstr "WyÅ›wietl podstawowe informacje" + +#: html/Approvals/Elements/PendingMyApproval:66 +msgid "Show denied requests" +msgstr "WyÅ›wietl odrzucone zgÅ‚oszenia" + +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 +msgid "Show details" +msgstr "WyÅ›wietl szczegóły" + +#: html/Approvals/Elements/PendingMyApproval:64 +msgid "Show pending requests" +msgstr "WyÅ›wietl zgÅ‚oszenia oczekujÄ…ce na zatwierdzenie" + +#: html/Approvals/Elements/PendingMyApproval:67 +msgid "Show requests awaiting other approvals" +msgstr "WyÅ›wietl zgÅ‚oszenia oczekujÄ…ce na pozostaÅ‚e zatwierdzenia" + +#: NOT FOUND IN SOURCE +msgid "Show ticket private commentary" +msgstr "WyÅ›wietl prywatny komentarz do zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Show ticket summaries" +msgstr "WyÅ›wietl streszczenia zgÅ‚oszeÅ„" + +#: lib/RT/Queue_Overlay.pm:94 +msgid "ShowACL" +msgstr "ShowACL" + +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "PodglÄ…dPocztyWychodz" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "PodglÄ…dZapytaÅ„Zapis" + +#: lib/RT/Queue_Overlay.pm:103 +msgid "ShowScrips" +msgstr "ShowScrips" + +#: lib/RT/Queue_Overlay.pm:100 +msgid "ShowTemplate" +msgstr "ShowTemplate" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "ShowTicket" +msgstr "ShowTicket" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "ShowTicketComments" +msgstr "ShowTicketComments" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Sign up as a ticket Requestor or ticket or queue Cc" +msgstr "Podpisz jako zgÅ‚aszajÄ…cy lub osoba o uprawnieniach Cc dla zgÅ‚oszenia lub kolejki" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "Sign up as a ticket or queue AdminCc" +msgstr "Podpisz jako osoba o uprawnieniach AdminCc dla zgÅ‚oszenia lub kolejki" + +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 +msgid "Signature" +msgstr "Podpis" + +#: NOT FOUND IN SOURCE +msgid "Signed in as %1" +msgstr "Wpisany jako %1" + +#: html/Admin/Elements/SelectSingleOrMultiple:47 +msgid "Single" +msgstr "Pojedynczy" + +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 +msgid "Skip Menu" +msgstr "PomiÅ„ menu" + +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "Sortuj" + +#: NOT FOUND IN SOURCE +msgid "Sort Order" +msgstr "Kryterium sortowania" + +#: NOT FOUND IN SOURCE +msgid "Sort key" +msgstr "Klucz sortowania" + +#: NOT FOUND IN SOURCE +msgid "Sort results by" +msgstr "Sortuj wyniki wg" + +#: NOT FOUND IN SOURCE +msgid "SortOrder" +msgstr "SortOrder" + +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "Etap" + +#: NOT FOUND IN SOURCE +msgid "Stalled" +msgstr "Zamrożone" + +#: NOT FOUND IN SOURCE +msgid "Start page" +msgstr "Strona powitalna" + +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 +msgid "Started" +msgstr "Realizacja rozpoczÄ™ta" + +#: NOT FOUND IN SOURCE +msgid "Started date '%1' could not be parsed" +msgstr "Data rozpoczÄ™cia realizacji '%1' nie może być rozpoznana" + +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 +msgid "Starts" +msgstr "PoczÄ…tek realizacji" + +#: NOT FOUND IN SOURCE +msgid "Starts By" +msgstr "PoczÄ…tek realizacji od" + +#: NOT FOUND IN SOURCE +msgid "Starts date '%1' could not be parsed" +msgstr "Data rozpoczÄ™cia realizacji '%1' nie może być rozpoznana" + +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 +msgid "State" +msgstr "Województwo" + +#: 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 +msgid "Status" +msgstr "Status " + +#: etc/initialdata:309 +msgid "Status Change" +msgstr "Zmiana statusu" + +#: NOT FOUND IN SOURCE +msgid "Status changed from %1 to %2" +msgstr "Status zmieniony z %1 na %2" + +#: NOT FOUND IN SOURCE +msgid "StatusChange" +msgstr "Zmiana statusu" + +#: html/Ticket/Elements/Tabs:170 +msgid "Steal" +msgstr "Przejmij" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Przejmij zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "PrzejecieZgloszen" + +#: lib/RT/Transaction_Overlay.pm:667 +#. ($Old->Name) +msgid "Stolen from %1" +msgstr "PrzejÄ™te od %1" + +#: NOT FOUND IN SOURCE +msgid "Stolen from %1 " +msgstr "PrzejÄ™te od %1 " + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 +msgid "Subject" +msgstr "Temat" + +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 +#. ($self->Data) +msgid "Subject changed to %1" +msgstr "Temat zostaÅ‚ zmieniony na %1" + +#: html/Elements/Submit:97 +msgid "Submit" +msgstr "Zastosuj" + +#: NOT FOUND IN SOURCE +msgid "Submit Query" +msgstr "Wykonaj zapytanie" + +#: NOT FOUND IN SOURCE +msgid "Submit Workflow" +msgstr "Wprowadź obieg (Workflow)" + +#: lib/RT/Group_Overlay.pm:782 +msgid "Succeeded" +msgstr "PowiodÅ‚o siÄ™" + +#: NOT FOUND IN SOURCE +msgid "Summary" +msgstr "Streszczenie" + +#: NOT FOUND IN SOURCE +msgid "Summary matches" +msgstr "Streszczenie zgadza siÄ™ z" + +#: lib/RT/Date.pm:419 +msgid "Sun." +msgstr "Nie." + +#: lib/RT/System.pm:76 +msgid "SuperUser" +msgstr "SuperUser" + +#: html/User/Elements/DelegateRights:98 +msgid "System" +msgstr "System" + +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "Konfiguracja systemu" + +#: 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 "Błąd systemowy" + +#: NOT FOUND IN SOURCE +msgid "System Error. Right not granted." +msgstr "Erreur Système. Droit non dĂŠlĂŠguĂŠ." + +#: NOT FOUND IN SOURCE +msgid "System Error. right not granted" +msgstr "Erreur Système. Droit non dĂŠlĂŠguĂŠ" + +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "NarzÄ™dzia systemowe" + +#: lib/RT/ACE_Overlay.pm:634 +msgid "System error. Right not delegated." +msgstr "Błąd systemowy. Uprawnienie nie zostaÅ‚o przekazane" + +#: 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 "Błąd systemowy. Uprawnienie nie zostaÅ‚o przydzielone" + +#: NOT FOUND IN SOURCE +msgid "System error. Unable to grant rights." +msgstr "Erreur Système. Imposible de dĂŠlĂŠguer les droits" + +#: 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 "Grupy systemowe" + +#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 +msgid "SystemRolegroup for internal use" +msgstr "Grupa ról systemowych do użytku wewnÄ™trznego" + +#: 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 +msgid "Take" +msgstr "Przyjmij" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "Przyjmij zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "PrzyjÄ™cieZgÅ‚oszeÅ„" + +#: lib/RT/Transaction_Overlay.pm:652 +msgid "Taken" +msgstr "PrzyjÄ™ty" + +#: NOT FOUND IN SOURCE +msgid "Task" +msgstr "Tâche" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 +msgid "Template" +msgstr "Szablon" + +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 +#. ($TemplateObj->Id()) +msgid "Template #%1" +msgstr "Szablon #%1" + +#: html/Admin/Elements/EditTemplates:110 +msgid "Template deleted" +msgstr "Szablon zostaÅ‚ usuniÄ™ty" + +#: lib/RT/Scrip_Overlay.pm:181 +msgid "Template not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać szablonu" + +#: NOT FOUND IN SOURCE +msgid "Template not found\\n" +msgstr "Nie udaÅ‚o siÄ™ wyszukać szablonu\\n" + +#: lib/RT/Template_Overlay.pm:376 +msgid "Template parsed" +msgstr "Szablon nie zostaÅ‚ rozpoznany" + +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 +msgid "Templates" +msgstr "Szablony" + +#: NOT FOUND IN SOURCE +msgid "Templates for %1\\n" +msgstr "Szablony dla %1\\n" + +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "Texte" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 +msgid "That is already the current value" +msgstr "To już jest aktualna wartość" + +#: lib/RT/CustomField_Overlay.pm:407 +msgid "That is not a value for this custom field" +msgstr "To nie jest wartość tego pola" + +#: lib/RT/Ticket_Overlay.pm:1955 +msgid "That is the same value" +msgstr "To jest ta sama wartość" + +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "Ten użytkownik/ grupa już dysponujÄ… tym prawem" + +#: lib/RT/Queue_Overlay.pm:750 +#. ($args{'Type'}) +msgid "That principal is already a %1 for this queue" +msgstr "Ten zarzÄ…dzajÄ…cy jest już %1 dla tej kolejki" + +#: lib/RT/Ticket_Overlay.pm:1396 +#. ($self->loc($args{'Type'})) +msgid "That principal is already a %1 for this ticket" +msgstr "Ten zarzÄ…dzajÄ…cy jest już %1 dla tego zgÅ‚oszenia" + +#: lib/RT/Queue_Overlay.pm:849 +#. ($args{'Type'}) +msgid "That principal is not a %1 for this queue" +msgstr "Ten zarzÄ…dzajÄ…cy nie jest %1 dla tej kolejki" + +#: NOT FOUND IN SOURCE +msgid "That principal is not a %1 for this ticket" +msgstr "Ten zarzÄ…dzajÄ…cy nie jest %1 dla tego zgÅ‚oszenia" + +#: lib/RT/Ticket_Overlay.pm:1951 +msgid "That queue does not exist" +msgstr "Ta kolejka nie istnieje" + +#: lib/RT/Ticket_Overlay.pm:3189 +msgid "That ticket has unresolved dependencies" +msgstr "To zgÅ‚oszenie ma niewykonane zgÅ‚oszenia zależne" + +#: NOT FOUND IN SOURCE +msgid "That user already has that right" +msgstr "Ten użytkownik już posiada to uprawnienie" + +#: lib/RT/Ticket_Overlay.pm:2993 +msgid "That user already owns that ticket" +msgstr "Ten użytkownik już jest wÅ‚aÅ›cicielem tego zgÅ‚oszenia" + +#: lib/RT/Ticket_Overlay.pm:2965 +msgid "That user does not exist" +msgstr "Taki użytkownik nie istnieje" + +#: lib/RT/User_Overlay.pm:390 +msgid "That user is already privileged" +msgstr "Ten użytkownik już posiada to uprawnienie" + +#: lib/RT/User_Overlay.pm:411 +msgid "That user is already unprivileged" +msgstr "Ten użytkownik nie jest uprawniony" + +#: lib/RT/User_Overlay.pm:403 +msgid "That user is now privileged" +msgstr "Ten użytkownik jest już uprawniony" + +#: lib/RT/User_Overlay.pm:424 +msgid "That user is now unprivileged" +msgstr "Ten użytkownik jest teraz nieuprawniony" + +#: NOT FOUND IN SOURCE +msgid "That user is now unprivilegedileged" +msgstr "Cet utilisateur a perdu ses droits" + +#: lib/RT/Ticket_Overlay.pm:2986 +msgid "That user may not own tickets in that queue" +msgstr "Ten użytkownik może nie posiadać zgÅ‚oszeÅ„ w tej kolejce" + +#: lib/RT/Link_Overlay.pm:234 +msgid "That's not a numerical id" +msgstr "To nie jest id typu liczbowego" + +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 +msgid "The Basics" +msgstr "Podstawowe informacje" + +#: lib/RT/ACE_Overlay.pm:113 +msgid "The CC of a ticket" +msgstr "CC zgÅ‚oszenia" + +#: lib/RT/ACE_Overlay.pm:114 +msgid "The administrative CC of a ticket" +msgstr "Administracyjne CC zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "The comment has been recorded" +msgstr "Komentarz zostaÅ‚ zapisany" + +#: 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 "NastÄ™pujÄ…ce polecenie wyszuka wszystkie aktywne zgÅ‚oszenia w kolejce głównej i ustawi ich priorytet na 99, jeÅ›li nie zostaÅ‚y zmodyfikowane w ciÄ…gu ostatnich 4 godzin:" + +#: NOT FOUND IN SOURCE +msgid "The following commands were not proccessed:\\n\\n" +msgstr "NastÄ™pujÄ…ce polecenia nie zostaÅ‚y wykonane:\\n\\n" + +#: lib/RT/Record.pm:934 +msgid "The new value has been set." +msgstr "Ustawiono nowÄ… wartość." + +#: lib/RT/ACE_Overlay.pm:111 +msgid "The owner of a ticket" +msgstr "WÅ‚aÅ›ciciel zgÅ‚oszenia" + +#: lib/RT/ACE_Overlay.pm:112 +msgid "The requestor of a ticket" +msgstr "ZgÅ‚aszajÄ…cy" + +#: html/Admin/Elements/EditUserComments:47 +msgid "These comments aren't generally visible to the user" +msgstr "Te komentarze nie sÄ… generalnie widoczne dla użytkownika" + +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "Ce champ personnalisĂŠne s'applique pas Ă cet objet" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Ta funkcja jest dostÄ™pna tylko dla administratora systemu" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Ta wiadomość zostanie wysÅ‚ana do..." + +#: NOT FOUND IN SOURCE +msgid "This ticket %1 %2 (%3)\\n" +msgstr "To zgÅ‚oszenie %1 %2 (%3)\\n" + +#: bin/rt-crontool:214 +msgid "This tool allows the user to run arbitrary perl modules from within RT." +msgstr "Ta aplikacja pozwala użytkownikowi na przypadkowe uruchomienie tzw. perl modułów z RT" + +#: lib/RT/Transaction_Overlay.pm:288 +msgid "This transaction appears to have no content" +msgstr "Nie okreÅ›lono zawartoÅ›ci tej transakcji" + +#: html/Ticket/Elements/ShowRequestor:70 +#. ($rows) +msgid "This user's %1 highest priority tickets" +msgstr "%1 zgÅ‚oszeÅ„ tego użytkownika o najwyższym priorytecie" + +#: NOT FOUND IN SOURCE +msgid "This user's 25 highest priority tickets" +msgstr "25 zgÅ‚oszeÅ„ tego użytkownika o najwyższym priorytecie" + +#: lib/RT/Date.pm:416 +msgid "Thu." +msgstr "Czw." + +#: NOT FOUND IN SOURCE +msgid "Ticket # %1 %2" +msgstr "ZgÅ‚oszenie nr %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Ticket # %1 Jumbo update: %2" +msgstr "Ticket n°%1 Jumbo update: %2" + +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket #%1 Jumbo update: %2" +msgstr "PeÅ‚na aktualizacja: %2 zgÅ‚oszenia nr %1" + +#: html/Approvals/Elements/ShowDependency:67 +#. ($link->BaseObj->Id, $link->BaseObj->Subject) +msgid "Ticket #%1: %2" +msgstr "ZgÅ‚oszenie nr %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) +msgid "Ticket %1" +msgstr "ZgÅ‚oszenie %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 +#. ($self->Id, $QueueObj->Name) +msgid "Ticket %1 created in queue '%2'" +msgstr "ZgÅ‚oszenie %1 zostaÅ‚o utworzone w kolejce '%2'" + +#: NOT FOUND IN SOURCE +msgid "Ticket %1 loaded\\n" +msgstr "ZgÅ‚oszenie %1 zostaÅ‚o zaÅ‚adowane\\n" + +#: html/Search/Bulk.html:269 +#. ($Ticket->Id,$_) +msgid "Ticket %1: %2" +msgstr "ZgÅ‚oszenie %1: %2" + +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Champs personnalisĂŠs du ticket" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 +#. ($Ticket->Id, $Ticket->Subject) +msgid "Ticket History # %1 %2" +msgstr "Historia zgÅ‚oszenia nr %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Ticket Id" +msgstr "Nr zgÅ‚oszenia" + +#: etc/initialdata:324 +msgid "Ticket Resolved" +msgstr "ZgÅ‚oszenie zamkniÄ™te" + +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Transactions du ticket" + +#: NOT FOUND IN SOURCE +msgid "Ticket attachment" +msgstr "Załącznik do zgÅ‚oszenia, którego" + +#: lib/RT/Tickets_Overlay.pm:1648 +msgid "Ticket content" +msgstr "Zawartość zgÅ‚oszenia" + +#: lib/RT/Tickets_Overlay.pm:1697 +msgid "Ticket content type" +msgstr "Typ zawartoÅ›ci zgÅ‚oszenia" + +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 +msgid "Ticket could not be created due to an internal error" +msgstr "Nie udaÅ‚o siÄ™ utworzyć zgÅ‚oszenia z powodu wewnÄ™trznego błędu" + +#: NOT FOUND IN SOURCE +msgid "Ticket created" +msgstr "ZgÅ‚oszenie zostaÅ‚o utworzone" + +#: NOT FOUND IN SOURCE +msgid "Ticket creation failed" +msgstr "Nie udaÅ‚o siÄ™ utworzyć zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Ticket deleted" +msgstr "ZgÅ‚oszenie zostaÅ‚o usuniÄ™te" + +#: NOT FOUND IN SOURCE +msgid "Ticket id not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać numeru zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Ticket killed" +msgstr "Ticket effacĂŠ" + +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Meta-dane zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Ticket not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać zgÅ‚oszenia" + +#: etc/initialdata:310 +msgid "Ticket status changed" +msgstr "ZmieniÅ‚ siÄ™ status zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Ticket watchers" +msgstr "Obserwatorzy zgÅ‚oszenia" + +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "ZgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Tickets %1 %2" +msgstr "ZgÅ‚oszenia %1 %2" + +#: NOT FOUND IN SOURCE +msgid "Tickets %1 by %2" +msgstr "ZgÅ‚oszenia %1 do %2" + +#: NOT FOUND IN SOURCE +msgid "Tickets from %1" +msgstr "ZgÅ‚oszenia od %1" + +#: html/Approvals/Elements/ShowDependency:48 +msgid "Tickets which depend on this approval:" +msgstr "ZgÅ‚oszenia, które zależą od tego zatwierdzenia:" + +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "Szacowany czas" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 +msgid "Time Left" +msgstr "PozostaÅ‚y czas" + +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 +msgid "Time Worked" +msgstr "Czas realizacji" + +#: lib/RT/Tickets_Overlay.pm:1619 +msgid "Time left" +msgstr "PozostaÅ‚y czas" + +#: html/Elements/Footer:71 +msgid "Time to display" +msgstr "WyÅ›wietlany czas" + +#: lib/RT/Tickets_Overlay.pm:1594 +msgid "Time worked" +msgstr "Czas realizacji" + +#: NOT FOUND IN SOURCE +msgid "TimeLeft" +msgstr "PozostaÅ‚yCzas" + +#: lib/RT/Ticket_Overlay.pm:1143 +msgid "TimeWorked" +msgstr "Czas realizacji" + +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:" +msgstr "Aby wygenerować różnice tego zatwierdzenia:" + +#: NOT FOUND IN SOURCE +msgid "To generate a diff of this commit:\\n" +msgstr "Aby wygenerować różnice tego zatwierdzenia:\\n" + +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "WiÄ™cej o wsparciu, szkoleniach, rozwoju i licencjonowaniu dostÄ™pne jest w %1." + +#: lib/RT/Ticket_Overlay.pm:1146 +msgid "Told" +msgstr "WpÅ‚ynęło" + +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "NarzÄ™dzia" + +#: etc/initialdata:252 +msgid "Transaction" +msgstr "Transakcja" + +#: lib/RT/Transaction_Overlay.pm:794 +#. ($self->Data) +msgid "Transaction %1 purged" +msgstr "Transakcja %1 zostaÅ‚a wyczyszczona" + +#: lib/RT/Transaction_Overlay.pm:174 +msgid "Transaction Created" +msgstr "Transakcja zostaÅ‚a utworzona" + +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Champs personnalisĂŠes de la transaction" + +#: NOT FOUND IN SOURCE +msgid "Transaction->Create couldn't, as you didn't specify a ticket id" +msgstr "Transakcja-> Nie udaÅ‚o siÄ™ utworzyć, ponieważ nie okreÅ›lono numeru zgÅ‚oszenia" + +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "Transation->Create a ĂŠchouĂŠcar vous n'avez pas spĂŠcifiĂŠde type d'objet et d'id" + +#: lib/RT/Transaction_Overlay.pm:838 +msgid "Transactions are immutable" +msgstr "Transakcje nie sÄ… możliwe do powielenia" + +#: NOT FOUND IN SOURCE +msgid "Trying to delete a right: %1" +msgstr "Próba usuniÄ™cia uprawnienia: %1" + +#: lib/RT/Date.pm:414 +msgid "Tue." +msgstr "Wto." + +#: 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 +msgid "Type" +msgstr "Typ" + +#: NOT FOUND IN SOURCE +msgid "Unable to load article" +msgstr "Nie udaÅ‚o siÄ™ zaÅ‚adować artykuÅ‚u" + +#: lib/RT/ScripCondition_Overlay.pm:129 +msgid "Unimplemented" +msgstr "Niezaimplementowane" + +#: html/Admin/Users/Modify.html:89 +msgid "Unix login" +msgstr " Unix login" + +#: NOT FOUND IN SOURCE +msgid "UnixUsername" +msgstr "Nazwa użytkownika typu 'unix'" + +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 +#. ($self->ContentEncoding) +#. ($ContentEncoding) +msgid "Unknown ContentEncoding %1" +msgstr "Nieznany Typ ZawartoÅ›ci %1" + +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 +msgid "Unlimited" +msgstr "Nieograniczona" + +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "Zapytanie bezimienne" + +#: etc/initialdata:32 +msgid "Unprivileged" +msgstr "Nieuprawnieni" + +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "Champs personnalisĂŠs non sĂŠlectionnĂŠs" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "Objets non sĂŠlectionnĂŠs" + +#: lib/RT/Transaction_Overlay.pm:648 +msgid "Untaken" +msgstr "Niepobrany" + +#: NOT FOUND IN SOURCE +msgid "Untitled search" +msgstr "Recherche sans titre" + +#: html/Search/Bulk.html:54 +msgid "Update" +msgstr "Zaktualizuj" + +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Zaktualizuj wszystko" + +#: NOT FOUND IN SOURCE +msgid "Update ID" +msgstr "Zaktualizuj ID" + +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Zaktualizuj zgÅ‚oszenie" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 +msgid "Update Type" +msgstr "Zaktualizuj typ" + +#: NOT FOUND IN SOURCE +msgid "Update all these tickets at once" +msgstr "Zaktualizuj wszystkie te zgÅ‚oszenia jednoczeÅ›nie" + +#: NOT FOUND IN SOURCE +msgid "Update email" +msgstr "Zaktualizuj e-mail" + +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Zaktualizuj wiele zgÅ‚oszeÅ„ jednoczeÅ›nie" + +#: NOT FOUND IN SOURCE +msgid "Update name" +msgstr "Zaktualizuj nazwÄ™" + +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 +msgid "Update not recorded." +msgstr "Aktualizacja nie zostaÅ‚a zapisana." + +#: html/Search/Bulk.html:99 +msgid "Update selected tickets" +msgstr "Zaktualizuj wybrane zgÅ‚oszenia" + +#: NOT FOUND IN SOURCE +msgid "Update signature" +msgstr "Zaktualizuj podpis" + +#: html/Ticket/ModifyAll.html:84 +msgid "Update ticket" +msgstr "Zaktualizuj zgÅ‚oszenie" + +#: NOT FOUND IN SOURCE +msgid "Update ticket # %1" +msgstr "Zaktualizuj zgÅ‚oszenie nr %1" + +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 +#. ($Ticket->id) +msgid "Update ticket #%1" +msgstr "Zaktualizuj zgÅ‚oszenie nr %1" + +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) +msgid "Update ticket #%1 (%2)" +msgstr "Zaktualizuj zgÅ‚oszenie nr %1 (%2)" + +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 +msgid "Update type was neither correspondence nor comment." +msgstr "Aktualizacja nie dotyczyÅ‚a korespondencji ani komentarza." + +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 +msgid "Updated" +msgstr "Zaktualizowane" + +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Zapisz" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Uploader plusieurs fichiers" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Uploader plusieurs images" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Uploader un fichier" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Uploader une image" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "Uploader un maximum de %1 fichiers" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "Uploader un maximum de %1 images" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "Zapisz swoje zmiany" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Use the dropdown menus to select which transactions you want to extract into a new RTFM article" +msgstr "Użyj rozwijalnych list, aby wybrać transakcje, z których chcesz utworzyć nowy artykuÅ‚ RTFM" + +#: NOT FOUND IN SOURCE +msgid "User %1 %2: %3\\n" +msgstr "Użytkownik %1 %2: %3 \\n" + +#: NOT FOUND IN SOURCE +msgid "User %1 Password: %2\\n" +msgstr "HasÅ‚o użytkownika %1: %2\\n" + +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "Nie można znaleźć użytkownika %1." + +#: NOT FOUND IN SOURCE +msgid "User '%1' not found" +msgstr "Nie udaÅ‚o siÄ™ wyszukać użytkownika '%1'" + +#: NOT FOUND IN SOURCE +msgid "User '%1' not found\\n" +msgstr "Nie udaÅ‚o siÄ™ wyszukać użytkownika '%1'\\n" + +#: etc/initialdata:132 etc/initialdata:206 +msgid "User Defined" +msgstr "Definiowany przez użytkownika" + +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Warunki i operacje zdefiniowane przez użytkownika" + +#: NOT FOUND IN SOURCE +msgid "User ID" +msgstr "Id" + +#: NOT FOUND IN SOURCE +msgid "User Id" +msgstr "Id" + +#: 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 "Uprawnienia użytkowników" + +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "L'utilisateur a demandĂŠun type de mise Ă jour non connu pour le champ personnalisĂŠ%1 de l'objet %2Â%3" + +#: html/Admin/Users/Modify.html:293 +#. ($msg) +msgid "User could not be created: %1" +msgstr "Nie udaÅ‚o siÄ™ utworzyć użytkownika: %1" + +#: lib/RT/User_Overlay.pm:331 +msgid "User created" +msgstr "Użytkownik zostaÅ‚ utworzony" + +#: 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 "Grupy def. przez użytkownika" + +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Użytkownik zaÅ‚adowany" + +#: NOT FOUND IN SOURCE +msgid "User notified" +msgstr "Użytkownik zostaÅ‚ powiadomiony" + +#: NOT FOUND IN SOURCE +msgid "User view" +msgstr "Widok użytkownika" + +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Groupe dĂŠfinis par l'utilisateur" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 +msgid "Username" +msgstr "Nazwa" + +#: 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 +msgid "Users" +msgstr "Użytkownicy" + +#: html/Admin/Users/index.html:85 +msgid "Users matching search criteria" +msgstr "Użytkownicy odpowiadajÄ…cy kryteriom wyszukiwania" + +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Sprawdź zapytanie" + +#: NOT FOUND IN SOURCE +msgid "ValueOfQueue" +msgstr "Wartość kolejki" + +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 +msgid "Values" +msgstr "WartoÅ›ci" + +#: lib/RT/Queue_Overlay.pm:108 +msgid "Watch" +msgstr "Obserwuj" + +#: lib/RT/Queue_Overlay.pm:109 +msgid "WatchAsAdminCc" +msgstr "WatchAsAdminCc" + +#: NOT FOUND IN SOURCE +msgid "Watcher loaded" +msgstr "Observateur chargĂŠ" + +#: html/Admin/Elements/QueueTabs:63 +msgid "Watchers" +msgstr "Obserwatorzy" + +#: NOT FOUND IN SOURCE +msgid "WebEncoding" +msgstr "Web-kodowanie" + +#: lib/RT/Date.pm:415 +msgid "Wed." +msgstr "Åšro." + +#: etc/initialdata:521 +msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" +msgstr "Po zatwierdzeniu zgÅ‚oszenia przez wszystkich zatwierdzajÄ…cych, dodaj korespondencjÄ™ do oryginalnego zgÅ‚oszenia" + +#: etc/initialdata:485 +msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" +msgstr "Po zatwierdzeniu zgÅ‚oszenia przez któregokolwiek z zatwierdzajÄ…cych, dodaj korespondencjÄ™ do oryginalnego zgÅ‚oszenia" + +#: etc/initialdata:146 +msgid "When a ticket is created" +msgstr "Po utworzeniu zgÅ‚oszenia" + +#: etc/initialdata:418 +msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" +msgstr "Po utworzeniu zgÅ‚oszenia podlegajÄ…cego zatwierdzeniu, powiadom wÅ‚aÅ›ciciela i osoby o uprawnieniach AdminCc o zadaniu oczekujÄ…cym zatwierdzenie przez nich" + +#: etc/initialdata:151 +msgid "When anything happens" +msgstr "JeÅ›li cokolwiek siÄ™ wydarzy" + +#: etc/initialdata:199 +msgid "Whenever a ticket is resolved" +msgstr "Zawsze gdy zgÅ‚oszenie bÄ™dzie zamykane" + +#: etc/initialdata:185 +msgid "Whenever a ticket's owner changes" +msgstr "Zawsze gdy zmieni siÄ™ wÅ‚aÅ›ciciel zgÅ‚oszenia" + +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "Zawsze gdy zmieni siÄ™ priorytet zgÅ‚oszenia" + +#: etc/initialdata:193 +msgid "Whenever a ticket's queue changes" +msgstr "Zawsze gdy zmieni siÄ™ kolejka zgÅ‚oszenia" + +#: etc/initialdata:170 +msgid "Whenever a ticket's status changes" +msgstr "Zawsze gdy zmieni siÄ™ status zgÅ‚oszenia" + +#: etc/initialdata:207 +msgid "Whenever a user-defined condition occurs" +msgstr "Zawsze gdy wystÄ…pi warunek definiowany przez użytkownika" + +#: etc/initialdata:164 +msgid "Whenever comments come in" +msgstr "Zawsze gdy wystÄ…piÄ… komentarze" + +#: etc/initialdata:157 +msgid "Whenever correspondence comes in" +msgstr "Zawsze gdy wpÅ‚ynie korespondencja" + +#: NOT FOUND IN SOURCE +msgid "Which are referred to by " +msgstr "Które sÄ… zgÅ‚oszeniami powiÄ…zanymi" + +#: NOT FOUND IN SOURCE +msgid "Which refer to" +msgstr "Które dotyczÄ…" + +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 +msgid "Work" +msgstr "Praca" + +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Praca zdalna" + +#: NOT FOUND IN SOURCE +msgid "WorkPhone" +msgstr "Tel. do pracy" + +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 +msgid "Worked" +msgstr "Czas pracy" + +#: NOT FOUND IN SOURCE +msgid "XXX CHANGEME You are not an authorized user" +msgstr "XXX CHANGEME Nie jesteÅ› użytkownikiem z uprawnieniami" + +#: NOT FOUND IN SOURCE +msgid "Yes" +msgstr "Tak" + +#: lib/RT/Ticket_Overlay.pm:3096 +msgid "You already own this ticket" +msgstr "JesteÅ› już wÅ‚aÅ›cicielem tego zgÅ‚oszenia" + +#: html/autohandler:158 html/autohandler:166 +msgid "You are not an authorized user" +msgstr "Nie jesteÅ› autoryzowanym użytkownikiem" + +#: lib/RT/Ticket_Overlay.pm:2978 +msgid "You can only reassign tickets that you own or that are unowned" +msgstr "Możesz ponownie przydzielić tylko te zgÅ‚oszenia, których jesteÅ› wÅ‚aÅ›cicielem lub te, które nie majÄ… wÅ‚aÅ›ciciela" + +#: NOT FOUND IN SOURCE +msgid "You don't have permission to view that ticket.\\n" +msgstr "Nie masz uprawnieÅ„ do przeglÄ…dania tego zgÅ‚oszenia.\\n" + +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 +#. ($num, $queue) +msgid "You found %1 tickets in queue %2" +msgstr "WyszukaÅ‚eÅ› zgÅ‚oszenia %1 w kolejce %2" + +#: html/NoAuth/Logout.html:52 +msgid "You have been logged out of RT." +msgstr "ZostaÅ‚eÅ› wylogowany z RT" + +#: html/SelfService/Display.html:109 +msgid "You have no permission to create tickets in that queue." +msgstr "Nie masz uprawnieÅ„ do rejestrowania zgÅ‚oszeÅ„ w tej kolejce." + +#: lib/RT/Ticket_Overlay.pm:1964 +msgid "You may not create requests in that queue." +msgstr "Nie możesz rejestrować zgÅ‚oszeÅ„ w tej kolejce." + +#: html/NoAuth/Logout.html:56 +msgid "You're welcome to login again" +msgstr "ProszÄ™ zalogować siÄ™ ponownie" + +#: NOT FOUND IN SOURCE +msgid "Your %1 requests" +msgstr "Twoje zgÅ‚oszenia %1" + +#: NOT FOUND IN SOURCE +msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" +msgstr "Administrator RT niewÅ‚aÅ›ciwie skonfigurowaÅ‚ aliasy maila, które wywoÅ‚ujÄ… RT" + +#: etc/initialdata:502 +msgid "Your request has been approved by %1. Other approvals may still be pending." +msgstr "Twoje zgÅ‚oszenie zostaÅ‚o zatwierdzone przez %1. Może nadal oczekiwać na inne zatwierdzenia." + +#: etc/initialdata:540 +msgid "Your request has been approved." +msgstr "Twoje zgÅ‚oszenie zostaÅ‚o zatwierdzone." + +#: NOT FOUND IN SOURCE +msgid "Your request was rejected" +msgstr "Twoje zgÅ‚oszenie zostaÅ‚o odrzucone" + +#: etc/initialdata:445 +msgid "Your request was rejected." +msgstr "Twoje zgÅ‚oszenie zostaÅ‚o odrzucone" + +#: html/autohandler:193 +msgid "Your username or password is incorrect" +msgstr "Nazwa użytkownika lub hasÅ‚o jest nieprawidÅ‚owe" + +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 +msgid "Zip" +msgstr "Kod pocztowy" + +#: NOT FOUND IN SOURCE +msgid "[no subject]" +msgstr "[Pas de sujet]" + +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "and is not" +msgstr "i nie jest" + +#: NOT FOUND IN SOURCE +msgid "and not" +msgstr "i nie" + +#: html/User/Elements/DelegateRights:80 +#. ($right->PrincipalObj->Object->SelfDescription) +msgid "as granted to %1" +msgstr "tak jak przydzielone dla %1" + +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "zamkniÄ™te" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 +msgid "contains" +msgstr "zawiera" + +#: NOT FOUND IN SOURCE +msgid "content" +msgstr "zawartość" + +#: NOT FOUND IN SOURCE +msgid "content-type" +msgstr "typ zawartoÅ›ci" + +#: NOT FOUND IN SOURCE +msgid "correspondence (probably) not sent" +msgstr "korespondencja (prawdopodobnie) nie zostaÅ‚a wysÅ‚ana" + +#: NOT FOUND IN SOURCE +msgid "correspondence sent" +msgstr "korespondencja zostaÅ‚a wysÅ‚ana" + +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 +msgid "days" +msgstr "dniami" + +#: NOT FOUND IN SOURCE +msgid "dead" +msgstr "effacĂŠ" + +#: NOT FOUND IN SOURCE +msgid "delete" +msgstr "usuÅ„" + +#: lib/RT/Queue_Overlay.pm:88 +msgid "deleted" +msgstr "usuniÄ™te" + +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 +msgid "does not match" +msgstr "nie zgadza siÄ™ z" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 +msgid "doesn't contain" +msgstr "nie zawiera" + +#: NOT FOUND IN SOURCE +msgid "email address" +msgstr "adresse email" + +#: html/Elements/SelectEqualityOperator:59 +msgid "equal to" +msgstr "równy" + +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "false" +msgstr "faux" + +#: NOT FOUND IN SOURCE +msgid "filename" +msgstr "nazwa pliku" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "greater than" +msgstr "wiÄ™kszy od" + +#: lib/RT/Group_Overlay.pm:222 +#. ($self->Name) +msgid "group '%1'" +msgstr "grupy '%1'" + +#: lib/RT/Date.pm:338 +msgid "hours" +msgstr "godz." + +#: html/Search/Elements/PickBasics:48 +msgid "id" +msgstr "Numer" + +#: NOT FOUND IN SOURCE +msgid "in class %1" +msgstr "w ramach klasy %1" + +#: 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 +msgid "is" +msgstr "jest" + +#: 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 +msgid "isn't" +msgstr "nie jest" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 +msgid "less than" +msgstr "mniejszy od" + +#: html/Search/Elements/PickBasics:60 +msgid "matches" +msgstr "zgadza siÄ™ z" + +#: lib/RT/Date.pm:334 +msgid "min" +msgstr "min." + +#: html/Ticket/Update.html:64 +msgid "minutes" +msgstr "minuty" + +#: NOT FOUND IN SOURCE +msgid "modifications\\n\\n" +msgstr "modyfikacje\\n\\n" + +#: lib/RT/Date.pm:350 +msgid "months" +msgstr "miesiÄ…cami" + +#: lib/RT/Queue_Overlay.pm:83 +msgid "new" +msgstr "nowe" + +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "bez nazwy" + +#: html/Admin/Elements/EditScrips:64 +msgid "no value" +msgstr "brak wartoÅ›ci" + +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 +msgid "none" +msgstr "żaden" + +#: html/Elements/SelectEqualityOperator:59 +msgid "not equal to" +msgstr "różny od" + +#: NOT FOUND IN SOURCE +msgid "notlike" +msgstr "necontientpas" + +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 +msgid "open" +msgstr "otwarte" + +#: lib/RT/Group_Overlay.pm:227 +#. ($self->Name, $user->Name) +msgid "personal group '%1' for user '%2'" +msgstr "prywatna grupa '%1' użytkownika '%2'" + +#: lib/RT/Group_Overlay.pm:235 +#. ($queue->Name, $self->Type) +msgid "queue %1 %2" +msgstr "kolejka %1 %2" + +#: lib/RT/Queue_Overlay.pm:87 +msgid "rejected" +msgstr "odrzucone" + +#: lib/RT/Queue_Overlay.pm:86 +msgid "resolved" +msgstr "zamkniÄ™te" + +#: lib/RT/Date.pm:330 +msgid "sec" +msgstr "sek." + +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "Arkusz kalk." + +#: lib/RT/Queue_Overlay.pm:85 +msgid "stalled" +msgstr "zamrożone" + +#: lib/RT/Group_Overlay.pm:230 +#. ($self->Type) +msgid "system %1" +msgstr "system %1" + +#: lib/RT/Group_Overlay.pm:241 +#. ($self->Type) +msgid "system group '%1'" +msgstr "grupy systemowej '%1'" + +#: html/Elements/Error:66 html/SelfService/Error.html:63 +msgid "the calling component did not specify why" +msgstr "przywoÅ‚ywany komponent nie okreÅ›liÅ‚ powodu" + +#: NOT FOUND IN SOURCE +msgid "ticket #%1" +msgstr "ticket n°%1" + +#: lib/RT/Group_Overlay.pm:238 +#. ($self->Instance, $self->Type) +msgid "ticket #%1 %2" +msgstr "zgÅ‚oszenie #%1 %2" + +#: NOT FOUND IN SOURCE +msgid "till" +msgstr "do" + +#: NOT FOUND IN SOURCE +msgid "true" +msgstr "vrai" + +#: lib/RT/Group_Overlay.pm:244 +#. ($self->Id) +msgid "undescribed group %1" +msgstr "nieopisana grupa %1" + +#: NOT FOUND IN SOURCE +msgid "undescripbed group %1" +msgstr "nieopisana grupa %1" + +#: lib/RT/Group_Overlay.pm:219 +#. ($user->Object->Name) +msgid "user %1" +msgstr "użytkownika %1" + +#: lib/RT/Date.pm:346 +msgid "weeks" +msgstr "tygodniami" + +#: NOT FOUND IN SOURCE +msgid "with template %1" +msgstr "wg szablonu %1" + +#: lib/RT/Date.pm:354 +msgid "years" +msgstr "rokiem/latami" + diff --git a/rt/lib/RT/I18N/pt_br.po b/rt/lib/RT/I18N/pt_br.po index 6962ecbc8..cbf92c594 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 2003-07-15 13:16:28 ivan Exp $ +# $Id: pt_br.po,v 1.1.1.4 2005-10-15 09:10:38 ivan Exp $ msgid "" msgstr "" "Project-Id-Version: RT 2.1.x\n" @@ -10,56 +10,62 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) -msgid "#%1" -msgstr "" - -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->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 +#. ($Ticket->id, $Ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "#%1: %2" -#: lib/RT/Date.pm:337 +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "" + +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) +#: NOT FOUND IN SOURCE msgid "%1 %2 %3" msgstr "%1 %2 %3" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %2 %3 %4:%5:%6 %7" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" msgstr "%1 %2 adicionado" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "%1 %2 atrás" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 alterado para %3" -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" @@ -69,7 +75,7 @@ msgstr "%1 %2 removido" msgid "%1 %2 of group %3" msgstr "%1 %2 do grupo %3" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" msgstr "%1 %2 com modelo %3" @@ -78,44 +84,85 @@ msgstr "%1 %2 com modelo %3" msgid "%1 (%2) %3 this ticket\\n" msgstr "%1 (%2) %3 este tÃquete\\n" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "" + +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "%1 - %2 shown" msgstr "%1 - %2 apresentados" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - Um argumento para passar para %2" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - Mostra atualizações de estado no STDOUT" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "%1 - Especifica o módulo de ação que você quer usar" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "%1 - Especifica o módulo de condição que você quer usar" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "%1 - Especifica o módulo de busca que você quer usar" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "ScripAction %1 carregado" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 usado como um valor de %2" @@ -132,27 +179,31 @@ msgstr "Aliases %1 requerem um TicketId no qual trabalhar " msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "Aliases %1 requerem um TicketId no qual trabalhar (de %2) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "%1 parece ser um objeto local, mas não pode ser encontrado no banco de dados" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 por %2" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 alterado de %2 para %3" -#: lib/RT/Interface/Web.pm:857 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "%1 não pôde ser alterado para %2" @@ -160,38 +211,49 @@ msgstr "%1 não pôde ser alterado para %2" msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1 não pôde iniciar uma transação (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 não pôde alterar estado para resolvido. O banco de dados do RT pode estar inconsistente." -#: html/Elements/MyTickets:25 +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." msgstr "%1 tÃquetes de mais alta prioridade que eu possuo..." -#: html/Elements/MyRequests:25 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." msgstr "%1 tÃquetes de mais alta prioridade que eu requeri..." -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "%1 é uma ferramenta para modificar tÃquetes a partir de uma ferramenta de agenda externa, como o cron." -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 não é mais um %2 para esta fila." -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1 não é mais um %2 para este tÃquete." -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 não é mais um valor para o campo personalizado %2" @@ -199,16 +261,29 @@ msgstr "%1 não é mais um valor para o campo personalizado %2" msgid "%1 isn't a valid Queue id." msgstr "%1 não é um identificador de fila válido." -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 min" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1 não mostrado" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "%1 direitos" @@ -229,7 +304,7 @@ msgstr "Tipo %1 desconhecido para %2" msgid "%1 was created without a CurrentUser\\n" msgstr "%1 foi criado sem um CurrentUser\\n" -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 resolverá todos os membros de um grupo de tÃquetes resolvidos." @@ -238,22 +313,36 @@ msgstr "%1 resolverá todos os membros de um grupo de tÃquetes resolvidos." msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." msgstr "%1 colocará como pendente uma BASE [local] se for dependente [ou membro] de uma requisição ligada." -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: nenhum arquivo anexo especificado" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1b" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' é um valor inválido para o estado" @@ -270,7 +359,7 @@ msgstr "(Assinale para remover o membro do grupo)" msgid "(Check box to delete scrip)" msgstr "(Assinale para remover o scrip)" -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(Assinale para remover)" @@ -278,37 +367,49 @@ msgstr "(Assinale para remover)" msgid "(Check boxes to delete)" msgstr "(Assinale para remover)" -#: html/Ticket/Create.html:178 -msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Entre com identificadores de tÃquetes ou URLs, separados por espaços)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "(Se deixado em branco, será entendido como %1" +msgid "(If left blank, will default to %1)" +msgstr "(Se deixado em branco, será entendido como %)" #: NOT FOUND IN SOURCE msgid "(No Value)" msgstr "(Sem Valor)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "(Nenhum campo personalizado)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Sem membros)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(Sem scrips)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "(Nenhum esquema)" -#: html/Ticket/Update.html:85 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "" + +#: 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 "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços de email separados por vÃrgula. <b>Não</b> altera quem vai receber atualizações futuras.)" @@ -316,11 +417,11 @@ msgstr "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de ender msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços eletrônicos separados por vÃrgulas. <b>Não</b> altera o destinatário de atualizações futuras.)" -#: html/Ticket/Create.html:79 +#: 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 "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços eletrônicos separados por vÃrgulas. <b>Não</b> altera o destinatário de atualizações futuras.)" -#: html/Ticket/Update.html:81 +#: 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 "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de endereços eletrônicos separados por vÃrgulas. <b>Não</b> altera o destinatário de atualizações futuras.)" @@ -328,35 +429,47 @@ msgstr "(Envia uma cópia-cega (Bcc) desta atualização para uma lista de ender msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(Envia uma cópia desta atualização para uma lista de endereços eletrônicos separados por vÃrgulas. <b>Não</b> altera o destinatário de atualizações futuras.)" -#: html/Ticket/Create.html:69 +#: 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 "(Envia uma cópia desta atualização para uma lista de endereços eletrônicos separados por vÃrgulas. Estas pessoas <b>receberão</b> as atualizações futuras.)" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "" + +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(vazio)" -#: html/Admin/Users/index.html:39 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "(nenhum nome listado)" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(Sem assunto)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(sem valor)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(somente um tÃquete)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(aguardando aprovação)" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" msgstr "(aguardando outros tÃquetes)" @@ -364,11 +477,11 @@ msgstr "(aguardando outros tÃquetes)" msgid "(requestor's group)" msgstr "(grupo do requisitante)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(requerido)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(sem tÃtulo)" @@ -380,27 +493,35 @@ msgstr "25 tÃquetes mais prioritários que possuo..." msgid "25 highest priority tickets I requested..." msgstr "25 tÃquetes mais prioritários que requisitei..." -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "<% $_ %>" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"Novo tÃquete em\"> %1" -#: NOT FOUND IN SOURCE -msgid "??????" -msgstr "" - -#: etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "Um modelo vazio" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + #: NOT FOUND IN SOURCE msgid "ACE Deleted" msgstr "ACE Removida" @@ -417,52 +538,72 @@ msgstr "ACE não pôde ser removida" msgid "ACE could not be found" msgstr "ACE não pode ser encontrada" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE não encontrado" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACEs só podem ser criados e removidos." -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" msgstr "Abortando para evitar modificações indesejadas no tÃquete.\\n" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "Sobre mim" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "Controle de acesso" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "Ação" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "Ação %1 não encontrada" -#: bin/rt-crontool:123 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "Ação confirmada." -#: bin/rt-crontool:119 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "Ação preparada..." -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "Adicionar AdminCc" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "Adicionar Cc" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" msgstr "Adicionar Mais Arquivos" @@ -470,10 +611,14 @@ msgstr "Adicionar Mais Arquivos" msgid "Add Next State" msgstr "Adicionar Próximo Estado" -#: html/Search/Bulk.html:88 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "Adicionar Requisitante" +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Add a Scrip to this queue" msgstr "Adicionar um Scrip nesta fila" @@ -494,57 +639,65 @@ msgstr "Adicionar um novo scrip global" msgid "Add a scrip to this queue" msgstr "Adicionar um scrip a esta fila" -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" msgstr "Adicionar um scrip que se aplicará a todas as filas" -#: html/Search/Bulk.html:118 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "Adicionar comentários ou respostas aos tÃquetes selecionados" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "Adicionar membros" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Adicionar novos observadores" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "AddNextState" msgstr "AddNextState" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "Principal adicionado como um %1 para esta fila" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "Principal adicionado como um %1 para este tÃquete" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "Endereço 1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "Endereço 2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "Admin Cc" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "Comentário do Administrador" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "Correspondência do Administrador" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "Administração de filas" @@ -552,7 +705,7 @@ msgstr "Administração de filas" msgid "Admin users" msgstr "Administração de usuários" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "Administração da configuração global" @@ -560,7 +713,7 @@ msgstr "Administração da configuração global" msgid "Admin/Groups" msgstr "Administração de Grupos" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "Administração de uma fila" @@ -568,7 +721,7 @@ msgstr "Administração de uma fila" msgid "AdminAllPersonalGroups" msgstr "AdminAllPersonalGroups" -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "AdminCc" @@ -580,31 +733,35 @@ msgstr "AdminComment" msgid "AdminCorrespondence" msgstr "AdminCorrespondence" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" msgstr "AdminCustomFields" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "AdminGroup" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "AdminGroupMembership" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "AdminOwnPersonalGroups" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "AdminQueue" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "AdminUsers" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "Cc Administrativo" @@ -612,11 +769,15 @@ msgstr "Cc Administrativo" msgid "Admins" msgstr "Administradores" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "Busca avançada" -#: html/Elements/SelectDateRelation:36 +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "Depois" @@ -624,19 +785,23 @@ msgstr "Depois" msgid "Age" msgstr "Idade" -#: NOT FOUND IN SOURCE -msgid "Alias" +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" msgstr "" #: NOT FOUND IN SOURCE msgid "Alias for" msgstr "Alias para" -#: html/Admin/Elements/EditCustomFields:96 +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "All Custom Fields" msgstr "Todos os Campos Personalizados" -#: html/Admin/Queues/index.html:53 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "Todas as filas" @@ -644,24 +809,39 @@ msgstr "Todas as filas" msgid "Always sends a message to the requestors independent of message sender" msgstr "Sempre envia uma mensagem para os requisitantes independentemente do remetente" -#: html/Elements/Tabs:58 +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "" + +#: html/Elements/Tabs:74 msgid "Approval" msgstr "Aprovação" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" msgstr "Aprovação #%1: %2" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "Aprovação #%1: Notas não registradas devido a um erro de sistema" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "Aprovação #%1: Notas registradas" @@ -670,19 +850,27 @@ msgstr "Aprovação #%1: Notas registradas" msgid "Approval Details" msgstr "Detalhes da Aprovação" +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Approval diagram" msgstr "Diagrama da aprovação" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "Aprove" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "Notas do aprovador: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "Abr." @@ -690,39 +878,52 @@ msgstr "Abr." msgid "April" msgstr "Abril" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "Ascendente" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Anexar" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "Anexar arquivo" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "Arquivo anexado" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Arquivo anexo '%1' não pôde ser carregado" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "Arquivo anexo criado" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "Nome do arquivo anexo" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "Arquivos anexos" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "Ago." @@ -730,11 +931,11 @@ msgstr "Ago." msgid "August" msgstr "Agosto" -#: html/Admin/Elements/ModifyUser:66 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "Sistema de autenticação" -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "Autoreply" @@ -750,33 +951,31 @@ msgstr "AutoreplyToRequestors" msgid "Bad PGP Signature: %1\\n" msgstr "Assinatura PGP inválida: %1\\n" -#: html/SelfService/Attachment/dhandler:40 +#: NOT FOUND IN SOURCE msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "Identificador de arquivo anexo inválido. Não pude encontrar o arquivo '%1'\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "Dados inválidos em %1" -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) +#: NOT FOUND IN SOURCE msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "Número inválido de transação para o arquivo anexo. %1 deveria ser %2\\n" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "Básicos" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Bcc" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Não se esqueça de salvar suas alterações" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "Antes" @@ -784,83 +983,120 @@ msgstr "Antes" msgid "Begin Approval" msgstr "IncÃcio da Aprovação" -#: etc/initialdata:202 +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: etc/initialdata:217 msgid "Blank" msgstr "Vazio" -#: html/Search/Listing.html:79 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "URL para guardar esta busca em seus marcadores" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "Cabeçalhos resumidos" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "Atualização de tÃquetes em lote" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "Não posso modificar os usuários do sistema" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "Este principal pode ver esta fila" -#: lib/RT/CustomField_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "Não posso adicionar um valor de campo personalizado sem um nome" -#: lib/RT/Link_Overlay.pm:132 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "Não posso ligar um tÃquete a ele mesmo" -#: lib/RT/Ticket_Overlay.pm:2787 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "Não posso unir a um tÃquete já unido. Você nunca deve obter este erro" -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "Não especifique origem e destino simultaneamente" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "Não posso criar o usuário: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "Cc" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "Mudar a senha" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "Assinale para remover" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "Assinalar para revogar o direito de acesso" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Filhos" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "Cidade" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "Fechado" -#: html/SelfService/Elements/Tabs:60 +#: NOT FOUND IN SOURCE msgid "Closed requests" msgstr "Requisições fechadas" +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Code" msgstr "Código" @@ -869,11 +1105,11 @@ msgstr "Código" msgid "Command not understood!\\n" msgstr "Comando não entendido!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Comentário" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "Endereço de Comentário" @@ -881,40 +1117,39 @@ msgstr "Endereço de Comentário" msgid "Comment not recorded" msgstr "Comentário não registrado" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "Comente sobre os tÃquetes" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "CommentOnTicket" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "Comentários" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "Comentários (não enviados aos requisitantes)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "Comentários (não enviados aos requisitantes)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "Comentários sobre %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "Comentários sobre este usuário" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "Comentários adicionados" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "" @@ -922,27 +1157,27 @@ msgstr "" msgid "Compile Restrictions" msgstr "Compilar restrições" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "Condição" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "Condição satisfeita..." -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "Condição não encontrada" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "Configuração" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "Confirmar" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "Informação de contato" @@ -950,23 +1185,31 @@ msgstr "Informação de contato" msgid "Contacted date '%1' could not be parsed" msgstr "Data de contato '%1' não pôde ser entendida" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "Conteúdo" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Coould not create group" msgstr "Não pude criar o grupo" -#: etc/initialdata:266 +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "" + +#: etc/initialdata:286 msgid "Correspondence" msgstr "Correspondência" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "Endereço de correspondência" -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "Correspondência adicionada" @@ -974,7 +1217,7 @@ msgstr "Correspondência adicionada" msgid "Correspondence not recorded" msgstr "Correspondência não registrada" -#: lib/RT/Ticket_Overlay.pm:3458 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "Não pude adicionar novo valor de campo personalizado para o tÃquete. " @@ -982,29 +1225,43 @@ msgstr "Não pude adicionar novo valor de campo personalizado para o tÃquete. " msgid "Could not add new custom field value for ticket. %1 " msgstr "Não pude adicionar novo valor de campo personalizado para o tÃquete. %1" -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "Não pude alterar o proprietário. " -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "Não pude criar CampoPersonalizado" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "Não pude criar o grupo" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "Não pude criar o modelo: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "Não pude criar o tÃquete. Fila não selecionada" -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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 "Não pude criar o usuário" @@ -1020,11 +1277,11 @@ msgstr "Não pude encontrar um tÃquete com identificador %1" msgid "Could not find group %1." msgstr "Não pude encontrar o grupo %1." -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "Não pude encontrar ou criar o usuário" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "Não pude encontrar este principal" @@ -1032,35 +1289,51 @@ msgstr "Não pude encontrar este principal" msgid "Could not find user %1." msgstr "Não pude encontrar o usuário %1." -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "Não pude carregar o grupo" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "Não pude fazer este principal um %1 para esta fila" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "Não pude fazer este principal um %1 para este tÃquete" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "Não pude remover este principal como um %1 para esta fila" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "Não pude remover este principal como um %1 para este tÃquete" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "Não pude adicionar o membro no grupo" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "Não pude criar uma transação: %1" @@ -1073,15 +1346,15 @@ msgstr "Não sei o que fazer com a resposta do gpg\\n" msgid "Couldn't find group\\n" msgstr "Não encontrei o grupo\\n" -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "Não pude encontrar o registro" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "Não encontrei este principal" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "Não encontrei este valor" @@ -1093,11 +1366,21 @@ msgstr "Não pude encontrar este observador" msgid "Couldn't find user\\n" msgstr "Não pude encontrar o usuário\\n" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "Não pude carregar %1 do banco de dados de usuários.\\n" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Couldn't load KeywordSelects." msgstr "Não pude carregar os KeywordSelects." @@ -1110,21 +1393,26 @@ msgstr "Não pude carregar o arquivo de configuração do RT '%1' %2" msgid "Couldn't load Scrips." msgstr "Não pude carregar os Scrips." -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "Não pude carregar o grupo %1" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "Não pude carregar a ligação" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "Não pude carregar a fila" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "Não pude carregar a fila %1" @@ -1137,38 +1425,47 @@ msgstr "Não pude carregar o scrip" msgid "Couldn't load template" msgstr "Não pude carregar o modelo" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "Não pude carregar este usuário (%1)" -#: html/SelfService/Display.html:166 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "Não pude carregar o tÃquete '%1'" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "PaÃs" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "Criar" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "Criar TÃquetes" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "Criar um CampoPersonalizado" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "Criar um Campo Personalizado para a fila %1" -#: html/Admin/Global/CustomField.html:48 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" msgstr "Criar um Campo Personalizado para todas as filas" @@ -1184,11 +1481,11 @@ msgstr "Criar um novo Scrip global" msgid "Create a new global scrip" msgstr "Criar um novo scrip global" -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "Criar um novo grupo" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "Criar um novo grupo pessoal" @@ -1204,15 +1501,15 @@ msgstr "Criar um novo scrip" msgid "Create a new template" msgstr "Criar um novo modelo" -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "Criar um novo tÃquete" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "Criar um novo usuário" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "Criar uma fila" @@ -1220,19 +1517,23 @@ msgstr "Criar uma fila" msgid "Create a queue called" msgstr "Criar uma fila chamada" -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 +#: NOT FOUND IN SOURCE msgid "Create a request" msgstr "Criar uma requisição" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "Criar um scrip para a fila %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "Criar um modelo" +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Create failed: %1 / %2 / %3 " msgstr "Criação falhou: %1 / %2 / %3 " @@ -1241,23 +1542,23 @@ msgstr "Criação falhou: %1 / %2 / %3 " msgid "Create failed: %1/%2/%3" msgstr "Criação falhou: %1/%2/%3" -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "Criar novos tÃquetes baseados no esquema deste scrip" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "Criar um tÃquete" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "Criar tÃquetes nesta fila" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "Criar, remover e modificar campos personalizados" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "Criar, remover e modificar filas" @@ -1265,23 +1566,27 @@ msgstr "Criar, remover e modificar filas" msgid "Create, delete and modify the members of any user's personal groups" msgstr "Criar, remover e modificar os membros dos grupos pessoais de qualquer usuário" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "Criar, remover e modificar os membros de grupos pessoais" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "Criar, remover e modificar usuários" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "CreateTicket" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "Criado" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "CampoPersonalizado %1 criado" @@ -1290,80 +1595,87 @@ msgstr "CampoPersonalizado %1 criado" msgid "Created template %1" msgstr "Modelo %1 criado" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Relações atuais" -#: html/Admin/Elements/EditScrips:30 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "Scrips correntes" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Membros atuais" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Direitos de acesso atuais" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" msgstr "Critério de busca atual" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Observadores atuais" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) +#: NOT FOUND IN SOURCE msgid "Custom Field #%1" msgstr "Campo Personalizado #%1" -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "Campos Personalizados" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "Código de finalização da ação customizada" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "Código de preparação da ação customizada" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "Condição customizada" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "Campo personalizado %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "O campo personalizado %1 tem um valor." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "O campo personalizado %1 não tem valor." -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "Campo personalizado %1 não encontrado" -#: html/Admin/Elements/EditCustomFields:197 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" msgstr "Campo personalizado removido" -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "Campo personalizado não encontrado" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "O valor de campo %1 não pôde ser encontrado para o campo personalizado %2" @@ -1372,19 +1684,19 @@ msgstr "O valor de campo %1 não pôde ser encontrado para o campo personalizado msgid "Custom field value changed from %1 to %2" msgstr "O valor do campo personalizado foi alterado de %1 para %2" -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "O valor do campo personalizado não pôde ser removido" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "O valor de campo personalizado não pôde ser encontrado" -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "Valor do campo personalizado removido" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "" @@ -1392,11 +1704,11 @@ msgstr "" msgid "Data error" msgstr "Erro de dado" -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Datas" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "Dez." @@ -1408,68 +1720,92 @@ msgstr "Dezembro" msgid "Default Autoresponse Template" msgstr "Esquema Padrão de Autoresposta" -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "Esquema padrão de Autoresposta" -#: etc/initialdata:275 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "Esquema padrão de comentário administrativo" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "Esquema padrão de correspondência administrativa" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "Esquema padrão de correspondência" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "Esquema padrão de transação" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" msgstr "Padrão: %1/%2 mudou de %3 para %4" -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" msgstr "Delegar direitos de acesso" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "Delegar direitos especÃficos que foram outorgados a você." -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "DelegateRights" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "Delegação" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "Remover" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "Remover tÃquetes" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "DeleteTicket" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "Ao remover este objeto você pode quebrar a integridade referencial" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "Ao remover este objeto você quebra a integridade referencial" -#: lib/RT/User_Overlay.pm:430 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Ao remover este objeto você viola a integridade referencial" @@ -1481,11 +1817,11 @@ msgstr "Remover este objeto violaria a integridade referencial" msgid "Deleting this object would violate referential integrity. That's bad." msgstr "Remover este objeto violaria a integridade referencial. Isto é mau." -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "Negue" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" msgstr "Dependem deste tÃquete" @@ -1493,7 +1829,27 @@ msgstr "Dependem deste tÃquete" msgid "Dependencies: \\n" msgstr "Dependências: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "" + +#: 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 msgid "Depends on" msgstr "Depende de" @@ -1501,64 +1857,83 @@ msgstr "Depende de" msgid "DependsOn" msgstr "DependsOn" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "Descendente" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "Descreva o problema abaixo" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "Descrição" -#: html/SelfService/Elements/MyRequests:44 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "Detalhes" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Apresentação" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "Mostrar Lista de Controle de Acesso" -#: lib/RT/Queue_Overlay.pm:75 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "Mostras os esquemas de Scrip para esta fila" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "Mostrar os Scrips para esta fila" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "Modo de apresentação" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "Apresentar o tÃquete #%1" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "Fazer qualquer coisa" -#: html/Elements/Refresh:30 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "Não recarregar esta página." -#: html/Search/Elements/PickRestriction:114 +#: NOT FOUND IN SOURCE msgid "Don't show search results" msgstr "Não mostrar resultados da busca" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "Baixar" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "" + +#: 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 msgid "Due" msgstr "Vencido" @@ -1566,8 +1941,7 @@ msgstr "Vencido" msgid "Due date '%1' could not be parsed" msgstr "A data de vencimento '%1' não pôde ser entendida" -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "ERRO: Não pude carregar o tÃquete '%1': %2.\\n" @@ -1579,16 +1953,32 @@ msgstr "Editar" msgid "Edit Conditions" msgstr "Editar Condições" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "Editar Campos Personalizados para %1" -#: html/Ticket/ModifyLinks.html:36 -msgid "Edit Relationships" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "Editar Relacionamentos" -#: html/Admin/Queues/Templates.html:41 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "" + +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "Editar Esquemas para a fila %1" @@ -1597,11 +1987,15 @@ msgstr "Editar Esquemas para a fila %1" msgid "Edit keywords" msgstr "Editar palavras chave" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Edit scrips" msgstr "Editar scrips" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "Editar os modelos do sistema" @@ -1609,28 +2003,30 @@ msgstr "Editar os modelos do sistema" msgid "Edit templates for %1" msgstr "Editar os modelos para %1" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "Editando a configuração para a fila %1" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "Editando a configuração para o usuário %1" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "Editando o campo %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "Editando os membros do grupo %1" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "Editando os membros do grupo pessoal %1" @@ -1639,64 +2035,81 @@ msgstr "Editando os membros do grupo pessoal %1" msgid "Editing template %1" msgstr "Editando o modelo %1" -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "Você deve especificar a origem ou o destinatário" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Email" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "O endereço de email já está em uso" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "Correio Eletrônico" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "Codificação de Email" -#: html/Admin/Elements/EditCustomField:36 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "Habilitado (Deselecionando este Ãtem desabilita este campo personalizado)" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "Habilitado (Deselecionando este Ãtem desabilita este grupo)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "Habilitado (desassinalando desabilita esta fila)" -#: html/Admin/Elements/EditCustomFields:99 +#: NOT FOUND IN SOURCE msgid "Enabled Custom Fields" msgstr "Campos Personalizados Habilitados" -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "Filas Habilitadas" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" msgstr "Estado %1 habilitado" -#: lib/RT/CustomField_Overlay.pm:361 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "Entre com múltiplos valores" -#: lib/RT/CustomField_Overlay.pm:358 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "Entre com um valor" -#: html/Ticket/Elements/EditLinks:112 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." msgstr "Entre com identificadores de tÃquete ou URIs que levam ao tÃquete. Separe entradas múltiplas com espaços." -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "" + +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Erro" @@ -1704,56 +2117,81 @@ msgstr "Erro" msgid "Error adding watcher" msgstr "Erro ao adicionar um observador" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "Erro nos parâmetros para Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Queue->DelWatcher" msgstr "Erro nos parâmetros para Queue->DelWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Erro nos parâmetros para Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Ticket->DelWatcher" msgstr "Erro nos parâmetros para Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "" + #: etc/initialdata:20 msgid "Everyone" msgstr "Todos" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "Exemplo:" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "ExternalAuthId" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "ExternalContactInfoId" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "Informação adicional" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "Não pude encontrar o pseudogrupo de usuários 'Privileged'." -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "Não pude encontrar o pseudogrupo de usuários 'Unprivileged'" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "Falhou ao carregar o módulo %1. (%2)" -#: lib/RT/Date.pm:412 +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "Fev." @@ -1761,31 +2199,63 @@ msgstr "Fev." msgid "February" msgstr "Fevereiro" +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Fin" msgstr "Fin" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Prioridade Final" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" msgstr "FinalPriority" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 +#: NOT FOUND IN SOURCE msgid "Find group whose" msgstr "Encontrar o grupo cujo" -#: html/Elements/Quicksearch:25 +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Find new/open tickets" msgstr "Encontrar tÃquetes novos/abertos" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "Encontrar pessoas que" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "Encontrar tÃquetes" @@ -1793,68 +2263,80 @@ msgstr "Encontrar tÃquetes" msgid "Finish Approval" msgstr "Terminar Aprovação" -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Primeiro" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "Primeira página" -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "Foo!" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" msgstr "Force alteração" -#: html/Search/Listing.html:106 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "Encontrado %quant(%1,tÃquete)" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "Objeto Encontrado" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "FreeformContactInfo" -#: lib/RT/CustomField_Overlay.pm:38 +#: NOT FOUND IN SOURCE msgid "FreeformMultiple" msgstr "FreeformMultiple" -#: lib/RT/CustomField_Overlay.pm:37 +#: NOT FOUND IN SOURCE msgid "FreeformSingle" msgstr "FreeformSingle" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Sex." -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "Cabeçalhos completos" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "Obtendo o usuário corrente a partir de uma assinatura pgp\\n" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "Dado a %1" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "Global" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Global Keyword Selections" msgstr "Seleções de Palavras Chave Globais" @@ -1863,12 +2345,20 @@ msgstr "Seleções de Palavras Chave Globais" msgid "Global Scrips" msgstr "Scrips Globais" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" + +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "Esquema global: %1" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "" + +#: 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 msgid "Go!" msgstr "Ir!" @@ -1876,19 +2366,15 @@ msgstr "Ir!" msgid "Good pgp sig from %1\\n" msgstr "Assinatura pgp válida de %1\\n" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "Ir para a página" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "Ir para o tÃquete" -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "" - -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "Grupo" @@ -1896,11 +2382,11 @@ msgstr "Grupo" msgid "Group %1 %2: %3" msgstr "Grupo %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "Direitos de Acesso do Grupo" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "O grupo já tem um membro" @@ -1908,20 +2394,20 @@ msgstr "O grupo já tem um membro" msgid "Group could not be created." msgstr "O grupo não pôde ser criado." -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "O grupo não pôde ser criado: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "Grupo criado" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "O grupo não contém este membro" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Grupo não encontrado" @@ -1933,36 +2419,54 @@ msgstr "Grupo não encontrado.\\n" msgid "Group not specified.\\n" msgstr "Grupo não especificado.\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Grupos" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "Grupos não podem ser membros de seus próprios membros" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "Olá!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "Olá, %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "Histórico" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "Telefone Residencial" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "Homepage" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "Eu tenho %quant(%1,concrete mixer)." @@ -1971,55 +2475,79 @@ msgstr "Eu tenho %quant(%1,concrete mixer)." msgid "I have [quant,_1,concrete mixer]." msgstr "Tenho [quant,_1,concrete mixer]." -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "Identificador" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "Identidade" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "Se uma aprovação é rejeitada, rejeite a original e remova as aprovações pendentes" -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "" + +#: 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 "Se esta ferramenta fosse setgid, um usuário local mal-intencionado poderia usá-la para obter acesso administrativo ao RT." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "Se você alterou qualquer coisa acima, não se esqueça de" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "Valor ilegal para %1" -#: lib/RT/Interface/Web.pm:863 +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "Campo imutável" -#: html/Admin/Elements/EditCustomFields:74 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." msgstr "Incluir campoas personalizados desabilitados na listagem." -#: html/Admin/Queues/index.html:43 +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "" + +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "Incluir filas desabilitadas na listagem." -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "Incluir usuários desabilitados na busca." -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "Prioridade Inicial" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" msgstr "InitialPriority" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Erro de entrada" @@ -2027,20 +2555,20 @@ msgstr "Erro de entrada" msgid "Interest noted" msgstr "Interesse notado" -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "Erro Interno" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "Erro Interno: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "Tipo Inválido de Grupo" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "Direito Inválido" @@ -2048,52 +2576,56 @@ msgstr "Direito Inválido" msgid "Invalid Type" msgstr "Tipo Inválido" -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "Dado inválido" -#: lib/RT/Ticket_Overlay.pm:438 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." msgstr "Proprietário inválido. Usando 'nobody'." -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "Fila inválida" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "Direito de acesso inválido" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "Valor inválido para %1" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "Valor inválido para o campo personalizado" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "Valor inválido para o estado" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "É extremamente importante que usuários não privilegiados não possam executar esta ferramenta." -#: bin/rt-crontool:192 +#: 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 "Sugere-se que você crie um usuário UNIX não privilegiado com o grupo e acesso RT corretos para executar esta ferramenta." -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "Requer vários argumentos:" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Items pending my approval" msgstr "Itens requerendo minha aprovação" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "Jan." @@ -2101,11 +2633,11 @@ msgstr "Jan." msgid "January" msgstr "Janeiro" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "Entre ou deixe este grupo" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Jul." @@ -2113,11 +2645,11 @@ msgstr "Jul." msgid "July" msgstr "Julho" -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "Jumbo" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "Jun." @@ -2129,27 +2661,35 @@ msgstr "Junho" msgid "Keyword" msgstr "Palavra chave" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "LÃng" -#: html/Ticket/Elements/Tabs:73 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "Último" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "Último Contato" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "Contactado em" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" msgstr "Notificado em" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "Atualizado em" @@ -2157,15 +2697,19 @@ msgstr "Atualizado em" msgid "LastUpdated" msgstr "LastUpdated" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "Resta" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "Deixar este usuário acessar RT" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "Deixar este usuário receber direitos de acesso adicionais" @@ -2177,29 +2721,33 @@ msgstr "Limitando proprietário a %1 %2" msgid "Limiting queue to %1 %2" msgstr "Limitando fila a %1 %2" -#: lib/RT/Ticket_Overlay.pm:2697 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "A ligação já existe" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "A ligação não pôde ser criada" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "Ligação criada (%1)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "Ligação removida (%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "Ligação não encontrada" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "Ligar o tÃquete #%1" @@ -2208,89 +2756,122 @@ msgstr "Ligar o tÃquete #%1" msgid "Link ticket %1" msgstr "Ligar o tÃquete %1" -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "Ligações" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "Localização" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "O diretório de log %1 não foi encontrado ou não pôde ser alterado.\\n RT não pode funcionar desta maneira." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "Assinado como %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" msgstr "Entrar" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Sair" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "Definir como proprietário" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "Definir o estado" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "Definir o prazo final" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "Definir a data de resolução" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "Definir a data de iniciado" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "Definir a data inÃcio" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "Definir a data de última alteração" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "Definir a prioridade" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "Definir a fila" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "Definir o assunto" -#: html/Admin/index.html:33 +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "Administrar grupos e seus membros" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "Administrar propriedades e configurações aplicáveis a todas as filas" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "Administrar filas e suas propriedades especÃficas" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "Administrar usuários e senhas" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "Mar." @@ -2302,23 +2883,33 @@ msgstr "Março" msgid "May" msgstr "Maio" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "Mai." -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "Membro adicionado" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "Membro removido" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "Membro não removido" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "Membro de" @@ -2326,39 +2917,83 @@ msgstr "Membro de" msgid "MemberOf" msgstr "MemberOf" -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "Membros" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "União bem sucedida" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "União falhou. Não pude definir o EffectiveId" -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "Unir a" -#: html/Ticket/Update.html:102 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "Mensagem" -#: lib/RT/Interface/Web.pm:867 +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "" + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "Faltando uma chave primária?: %1" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "Móvel" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "Celular" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "Modificar Lista de Controle de Acesso" @@ -2366,15 +3001,37 @@ msgstr "Modificar Lista de Controle de Acesso" msgid "Modify Custom Field %1" msgstr "Modificar o campo personalizado %1" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Modify Custom Fields which apply to all queues" msgstr "Modificar Campos Personalizados que se aplicam a todas as filas" -#: lib/RT/Queue_Overlay.pm:73 +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" msgstr "Modificar esquemas de Scrip para esta fila" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" msgstr "Modificar Scrips para esta fila" @@ -2386,43 +3043,56 @@ msgstr "Modificar ACLs do Sistema" msgid "Modify Template %1" msgstr "Modificar Esquema %1" -#: html/Admin/Queues/CustomField.html:45 +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "" + +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" msgstr "Modificar um Campo Personalizado para a fila %1" -#: html/Admin/Global/CustomField.html:53 +#: NOT FOUND IN SOURCE msgid "Modify a CustomField which applies to all queues" msgstr "Modificar um Campo Personalizado que se aplica a todas as filas" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "Modificar um scrip para a fila %1" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "Modificar um scrip aplicável a todas as filas" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Modify dates for # %1" msgstr "Modificar datas para # %1" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "Modificar as datas para #%1" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "Modificar as datas para o tÃquete # %1" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Modificar direitos de acesso globais de grupo" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "Modificar direitos de acesso globais de grupo." @@ -2438,100 +3108,110 @@ msgstr "Modificar direitos globais para usuários" msgid "Modify global scrips" msgstr "Modificar scrips globais" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "Modificar direitos de acesso globais de usuário" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "Modificar direitos de acesso globais de usuário." -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "Modificar metadados do grupo ou removê-lo" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" msgstr "Modificar os direitos de acesso do grupo %1" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "Modificar os direitos de acesso de grupo para a fila %1" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "Modificar lista de membros deste grupo" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "Modificar sua própria conta RT" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "Modificar as pessoas relacionadas à fila %1" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "Modificar as pessoas relacionadas ao tÃquete #%1" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "Modificar os scrips da fila %1" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "Modificar scrips aplicáveis a todas as filas" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" msgstr "Modificar o modelo %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "Modificar esquemas que se aplicam a todas as filas" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "Modificar o grupo %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "Modificar os observadores da fila" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "Modificar o usuário %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "Modificar o tÃquete # %1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "Modificar o tÃquete #%1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "Modificar tÃquetes" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "Modificar os direitos de acesso de usuário para o grupo %1" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "Modificar os direitos de acesso de usuário para a fila %1" @@ -2540,72 +3220,85 @@ msgstr "Modificar os direitos de acesso de usuário para a fila %1" msgid "Modify watchers for queue '%1'" msgstr "Modificar os observadores para a fila '%1'" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "ModifyACL" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "ModifyOwnMembership" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "ModifyQueueWatchers" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "ModifyScrips" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "ModifySelf" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "ModifyTemplate" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "ModifyTicket" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Seg." -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "Mais sobre %1" -#: html/Admin/Elements/EditCustomFields:61 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "Descer" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "Subir" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "Múltiplo" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "O atributo 'Name' deve ser especificado" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "" + #: NOT FOUND IN SOURCE msgid "My Approvals" msgstr "Minhas Aprovações" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "Minhas aprovações" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "" + +#: 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 msgid "Name" msgstr "Nome" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Nome em uso" @@ -2613,59 +3306,63 @@ msgstr "Nome em uso" msgid "Need approval from system administrator" msgstr "Precisa de aprovação do administrador do sistema" -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "Nunca" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Novo" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Novos Relacionamentos" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Nova Senha" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "Nova Aprovação Pendente" -#: html/Ticket/Elements/EditLinks:111 -msgid "New Relationships" -msgstr "Novos Relacionamentos" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "" -#: html/Ticket/Elements/Tabs:36 +#: NOT FOUND IN SOURCE msgid "New Search" msgstr "Nova busca" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "Novo campo personalizado" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "Novo grupo" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Nova senha" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Notificação de nova senha enviada" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "Nova fila" -#: html/SelfService/Elements/Tabs:63 +#: NOT FOUND IN SOURCE msgid "New request" msgstr "Nova requisição" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Novos direitos de acesso" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "Novo scrip" @@ -2673,67 +3370,87 @@ msgstr "Novo scrip" msgid "New search" msgstr "Nova busca" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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 "Novo esquema" -#: lib/RT/Ticket_Overlay.pm:2771 +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "O novo tÃquete não existe" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "Novo usuário" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Novo usuário chamado" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Novos observadores" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "Abrir nova janela" -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Próximo" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "Próxima página" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "Apelido" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "Apelido" -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "Não há Campo Personalizado" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "Não há Grupo definido" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" msgstr "Não há Fila definida" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "Nenhum usuário RT foi encontrado. Favor consultar o administrador do RT.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "Não há Modelo" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "Não há TÃquete especificado. Abortando o tÃquete " @@ -2741,11 +3458,11 @@ msgstr "Não há TÃquete especificado. Abortando o tÃquete " msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "Não há TÃquete especificado. Abortando modificações no tÃquete\\n\\n" -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "Não há ação" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "Não há coluna especificada" @@ -2753,77 +3470,93 @@ msgstr "Não há coluna especificada" msgid "No command found\\n" msgstr "Comando não encontrado\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "Não há comentário sobre este usuário" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "Não há nenhum arquivo anexado" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "Não há descrição para %1" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Não há grupo especificado" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "Não há senha especificada" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "Não há permissão para criar filas" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "Sem permissão para criar tÃquetes na fila '%1'" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "Sem permissão para criar usuários" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "Sem permissão para mostrar o tÃquete" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "sem permissão para ver modificar o tÃquete" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "Não há principal especificado" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "Não há principal selecionado." -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "Não há fila satisfazendo o critério de busca." -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "Nenhum direito encontrado" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "Nenhum direito outorgado." -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "Não há busca a realizar" +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "" + #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "Não há identificador de tÃquete especificado" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "Não há tipo de transação especificada" @@ -2831,103 +3564,123 @@ msgstr "Não há tipo de transação especificada" msgid "No user or email address specified" msgstr "Não há usuário ou endereço de email especificado" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "Nenhum usuário satisfazendo o critério de busca foi encontrado." -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "Nenhum usuário RT válido foi encontrado. O tratador de CVS do RT está desabilitado. Por favor, consulte o administrador do RT.\\n" -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "Nenhum valor enviado a _Set!\\n" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "Ninguém" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "Campo inexistente?" -#: html/Elements/Login:99 +#: NOT FOUND IN SOURCE msgid "Not logged in" msgstr "Não logado" -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "Não entrou." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Não definido" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "Ainda não implementado." -#: html/Admin/Groups/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Not yet implemented...." msgstr "Ainda não implementado..." -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "Notas" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "A notificação não pôde ser enviada" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "Notificar AdminCcs" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "Notificar AdminCcs como Comentário" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "Notificar Outros Destinatários" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "Notificar Outros Destinatários como Comentário" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "Notificar Proprietário" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "Notificar Proprietário como Comentário" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "" + +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "Notificar Proprietários e AdminCcs sobre novos itens pendendo suas aprovações" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "Notificar Requisitantes" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "Notificar Requisitantes e Ccs" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "Notificar Requisitantes e Ccs como Comentário" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "Notificar Requisitantes, Ccs e AdminCcs" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "Notificar Requisitantes, Ccs e AdminCcs como Comentário" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "Nov." @@ -2935,15 +3688,37 @@ msgstr "Nov." msgid "November" msgstr "Novembro" -#: lib/RT/Record.pm:157 +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "Objeto não pôde ser criado" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "Objeto criado" -#: lib/RT/Date.pm:420 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Out." @@ -2951,124 +3726,164 @@ msgstr "Out." msgid "October" msgstr "Outubro" -#: html/Elements/SelectDateRelation:35 +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "Em" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" msgstr "Sobre Comentário" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "Sobre Correspondência" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "Sobre Criação" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "Sobre Mudança de Propriedade" -#: etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "Sobre Mudança de Fila" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "Sobre Resolução" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "Sobre Mudança de Estado" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "Sobre Transação" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "Só mostrar aprovações para requisições criadas depois de %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "Só mostrar aprovações para requisições criadas antes de %1" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Aberto" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Abrir" -#: html/SelfService/Elements/Tabs:57 +#: NOT FOUND IN SOURCE msgid "Open requests" msgstr "Requisições abertas" -#: html/Admin/Users/Prefs.html:41 +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "Abrir tÃquetes (da listagem) em uma nova janela" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "Abrir tÃquetes (da listagem) em outra janela" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "Abrir tÃquetes na correspondência" -#: html/Search/Elements/PickRestriction:101 +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "Requisitando e ordenando" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "Organização" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "TÃquete originador: #%1" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "Após a data, a prioridade tende a" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "Próprios tÃquetes" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "OwnTicket" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "Proprietário" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) +#: NOT FOUND IN SOURCE msgid "Owner changed from %1 to %2" msgstr "Proprietário mudou de %1 para %2" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "Proprietário alterado à força de %1 para %2" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "O proprietário é" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Pager" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "Telefone do Pager" @@ -3076,64 +3891,85 @@ msgstr "Telefone do Pager" msgid "Parent" msgstr "Pai" -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Pais" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Senha" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "Lembrete de Senha" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "Senha muito curta" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Senha: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "" + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "Pessoas" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "Realizar uma ação definida pelo usuário" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "" + +#: 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 msgid "Permission Denied" msgstr "Permissão Negada" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "Grupoas Pessoais" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Grupos pessoais" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Grupos pessoais:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Telefones" -#: html/Admin/Users/Rights.html:25 -msgid "Placeholder" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Pref" -msgstr "" - -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" msgstr "Preferências" @@ -3141,15 +3977,19 @@ msgstr "Preferências" msgid "Prefs" msgstr "Prefs" -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Anterior" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "Página anterior" @@ -3157,29 +3997,33 @@ msgstr "Página anterior" msgid "Pri" msgstr "Pri" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "Principal %1 não encontrado." -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Prioridade" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "A prioridade inicia em" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "" + #: etc/initialdata:25 msgid "Privileged" msgstr "Privilegiado" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "Estado privilegiado: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "Usuários privilegiados" @@ -3187,11 +4031,19 @@ msgstr "Usuários privilegiados" msgid "Pseudogroup for internal use" msgstr "Falso-grupo para uso interno" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "" + +#: 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 msgid "Queue" msgstr "Fila" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" @@ -3205,7 +4057,7 @@ msgstr "A fila '%1' não foi encontrada\\n" msgid "Queue Keyword Selections" msgstr "Seleções de Palavras-chave da Fila" -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "Nome da Fila" @@ -3213,19 +4065,19 @@ msgstr "Nome da Fila" msgid "Queue Scrips" msgstr "Scrips da Fila" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "A fila já existe" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "A fila não pôde ser criada" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "A fila não pôde ser carregada" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "Fila criada" @@ -3233,26 +4085,37 @@ msgstr "Fila criada" msgid "Queue is not specified." msgstr "A fila não foi especificada." -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "Fila não encontrada" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "Filas" -#: html/Elements/Login:34 +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 para %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "RT %1 por <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." @@ -3264,7 +4127,7 @@ msgstr "RT %1. Direitos reservados 1996-%1 Jesse Vincent <jesse\\@bestpractical. msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Direitos reservados 1996-2002 Jesse Vincent <jesse\\\\@bestpractical.com>\\\\n" -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "Adiministração do RT" @@ -3284,7 +4147,7 @@ msgstr "Erro de configuração do RT" msgid "RT Critical error. Message not recorded!" msgstr "Erro crÃtico no RT. A mensagem não foi registrada!" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "Erro no RT" @@ -3296,11 +4159,15 @@ msgstr "O RT recebeu email (%1) dele próprio." msgid "RT Recieved mail (%1) from itself." msgstr "O RT recebeu email (%1) de si próprio." -#: html/SelfService/Closed.html:25 +#: NOT FOUND IN SOURCE msgid "RT Self Service / Closed Tickets" msgstr "Auto-serviço do RT / TÃquetes Fechados" -#: html/index.html:25 html/index.html:28 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT por alto" @@ -3316,11 +4183,15 @@ msgstr "O RT não pôde encontrar o requisitante através de consulta ao banco d msgid "RT couldn't find the queue: %1" msgstr "O RT não pôde encontrar a fila: %1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "O RT não pôde validar esta assinatura PGP. \\n" -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "RT para %1" @@ -3333,8 +4204,7 @@ msgstr "RT para %1: %2" msgid "RT has proccessed your commands" msgstr "O RT processou seus comandos" -#: html/Elements/Login:83 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RT tem © Direitos Reservados 1996-%1 Jesse Vincent <jesse@bestpractical.com>. Ele é distribuÃdo sob a <a href=\"http://www.gnu.org/copyleft/gpl.html\">Versão 2 da Licença Pública Geral GNU (GPL).</a>" @@ -3354,19 +4224,39 @@ msgstr "O RT vai processar esta mensagem como se não fosse assinada.\\n" msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." msgstr "O modo de comandos por email do RT requer autenticação PGP. Ou você não assinou sua mensagem ou sua assinatura não pôde ser verificada." -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "Nome real" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "Nome real" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "Referenciado por" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "Faz referência a" @@ -3378,48 +4268,52 @@ msgstr "RefersTo" msgid "Refine" msgstr "Refinar" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "Refinar a Busca" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "Recarregar esta página a cada %1 minutos." -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 -msgid "Relationships" -msgstr "Relacionamentos" - -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Remover AdminCc" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Remover Cc" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "Remover Requisitante" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Responder" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "Responder aos tÃquetes" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "ReplyToTicket" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "Requisitante" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "Endereço eletrônico do requisitante" @@ -3431,98 +4325,107 @@ msgstr "Requisitante(s)" msgid "RequestorAddresses" msgstr "RequestorAddresses" -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "Requisitantes" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "A requisições vencem em" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "Restaurar" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Residência" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "Resolver" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "Resolver tÃquete #%1 (%2)" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "Resolvido" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "Resposta aos requisitantes" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "Resultados" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "Resultados por página" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "Confirmar a Senha" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "Direito de acesso %1 não encontrado para %2 %3 referente a %4 (%5)\\n" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Direito de Acesso Delegado" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Direito de Acesso Outorgado" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Direito de Acesso Carregado" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "Direito de acesso não pôde ser revogado" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Direito de acesso não encontrado" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "Direito de acesso não carregado." -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "Direito de acesso revogado" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Direitos de Acesso" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "Direitos de acesso não puderam ser outorgados a %1" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "Direitos de acesso não puderam ser revogados de %1" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "Papéis" @@ -3530,32 +4433,59 @@ msgstr "Papéis" msgid "RootApproval" msgstr "RootApproval" -#: lib/RT/Date.pm:393 +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "" + +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "Sáb." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "" + +#: 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 msgid "Save Changes" msgstr "Salvar as Alterações" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Salvar as alterações" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "Scrip #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "Scrip Criado" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "Scrip removido" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "Scrips" @@ -3563,11 +4493,11 @@ msgstr "Scrips" msgid "Scrips for %1\\n" msgstr "Scrips para %1\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "Scrips aplicáveis a todas as filas" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "Buscar" @@ -3575,111 +4505,188 @@ msgstr "Buscar" msgid "Search Criteria" msgstr "Critérios de Busca" -#: html/Approvals/Elements/PendingMyApproval:39 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "Buscar por aprovações" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "Segurança:" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "SeeQueue" -#: html/Admin/Groups/index.html:40 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "Selecionar um grupo" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "Selecionar uma fila" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "Selecionar um usuário" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "Selecionar um campo personalizado" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "Selecionar um grupo" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "Selecionar múltiplos valores" -#: lib/RT/CustomField_Overlay.pm:352 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "Selecionar um valor" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "Selecionar uma fila" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "Selecionar um scrip" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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 "Selecionar um esquema" -#: html/Admin/Elements/UserTabs:49 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "Selecionar um usuário" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" msgstr "SelectMultiple" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectSingle" msgstr "SelectSingle" -#: html/SelfService/index.html:25 +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Self Service" msgstr "Auto-serviço" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "Enviar mensagem a todos os observadores" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "Enviar mensagem a todos os observadores como um \"comentário\"" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "Enviar mensagem aos requisitantes e Ccs" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "Enviar mensagem aos requisitantes e Ccs como um comentário" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "Envia uma mensagem aos requisitantes" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "Envia uma mensagem aos Ccs e Bccs explicitamente listados" -#: etc/initialdata:95 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "Envia uma mensagem aos Ccs administrativos" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "Envia uma mensagem aos Ccs administrativos como um comentário" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "Envia uma mensagem ao proprietário" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Set." @@ -3687,99 +4694,138 @@ msgstr "Set." msgid "September" msgstr "Setembro" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "Mostrar os Resultados" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "Mostrar requisições aprovadas" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "Mostrar o sumário" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "Mostrar requisições negadas" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "Mostrar os detalhes" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "Mostrar requisições pendentes" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "Mostrar requisições aguardando outras aprovações" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" msgstr "Mostrar comentário privado do tÃquete" -#: lib/RT/Queue_Overlay.pm:79 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" msgstr "Mostrar sumários do tÃquete" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "ShowACL" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "ShowScrips" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "ShowTemplate" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "ShowTicket" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "ShowTicketComments" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "Cadastrar como um Requisitante de tÃquete ou um Cc de tÃquete ou fila" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "Cadastrar como um AdminCC de tÃquete ou fila" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "Assinatura" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) +#: NOT FOUND IN SOURCE msgid "Signed in as %1" msgstr "Assinado como %1" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Único" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "Saltar Menu" -#: html/Admin/Elements/EditCustomFieldValues:31 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Sort key" msgstr "Chave de ordenação" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "Ordenar os resultados por" -#: html/Admin/Elements/AddCustomFieldValue:25 +#: NOT FOUND IN SOURCE msgid "SortOrder" msgstr "Ordenação" +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Stalled" msgstr "Pendente" @@ -3788,7 +4834,7 @@ msgstr "Pendente" msgid "Start page" msgstr "Página inicial" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "Iniciado" @@ -3796,7 +4842,7 @@ msgstr "Iniciado" msgid "Started date '%1' could not be parsed" msgstr "A data de inÃciado '%1' não pôde ser compreendida" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "Inicia" @@ -3808,20 +4854,19 @@ msgstr "Inicia Por" msgid "Starts date '%1' could not be parsed" msgstr "A data de inÃcio '%1' não pôde ser compreendida" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "Estado" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "Estado" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" msgstr "Mudança de Estado" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Estado alterado de %1 para %2" @@ -3829,25 +4874,41 @@ msgstr "Estado alterado de %1 para %2" msgid "StatusChange" msgstr "StatusChange" -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "Roubar" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) +msgid "Stolen from %1" +msgstr "Roubado de %1" + +#: NOT FOUND IN SOURCE msgid "Stolen from %1 " msgstr "Roubado de %1 " -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "Assunto" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "Assunto modou para %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" msgstr "Enviar" @@ -3855,23 +4916,27 @@ msgstr "Enviar" msgid "Submit Workflow" msgstr "Enviar Workflow" -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "Deu certo" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Dom." -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "SuperUser" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "Sistema" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "" + +#: 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 "Erro do Sistema" @@ -3883,11 +4948,20 @@ msgstr "Erro de sistema. Direito não outorgado." msgid "System Error. right not granted" msgstr "Erro de sistema. direito não outorgado" -#: lib/RT/ACE_Overlay.pm:616 +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "Erro do sistema. Direito de acesso não delegado." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "Erro do sistema. Direito de acesso não outorgado." @@ -3895,7 +4969,7 @@ msgstr "Erro do sistema. Direito de acesso não outorgado." msgid "System error. Unable to grant rights." msgstr "Erro de sistema. Não posso outorgar direitos de acesso." -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "Grupos do sistema" @@ -3903,32 +4977,40 @@ msgstr "Grupos do sistema" msgid "SystemRolegroup for internal use" msgstr "SystemRolegroup para uso interno" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRING" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "Tomar" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "Tomado" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Modelo" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "Esquema #%1" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "Esquema removido" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Modelo não encontrado" @@ -3936,11 +5018,11 @@ msgstr "Modelo não encontrado" msgid "Template not found\\n" msgstr "Modelo não encontrado\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Modelo processado" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Modelos" @@ -3948,71 +5030,74 @@ msgstr "Modelos" msgid "Templates for %1\\n" msgstr "Modelos de %1\\n" -#: lib/RT/Interface/Web.pm:858 +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "Este já é o valor atual" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Este não é um valor para este campo personalizado" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Este é o mesmo valor" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "Este principal já é um %1 para esta fila" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "Este principal já é um %1 para este tÃquete" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "Este principal não é um %1 para esta fila" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "Este principal não é um %1 para este tÃquete" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "Esta fila não existe" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "Este tÃquete tem dependências não resolvidas" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: NOT FOUND IN SOURCE msgid "That user already has that right" msgstr "Este usuário já tem este direito de acesso" -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "Este usuário já possui este tÃquete" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Este usuário não existe" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "Este usuário já tem privilégios" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "Este usuário já não tem privilégios" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "Este usuário agora tem privilégios" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "Este usuário agora não tem privilégios" @@ -4020,67 +5105,79 @@ msgstr "Este usuário agora não tem privilégios" msgid "That user is now unprivilegedileged" msgstr "Este usuário agora é não privilegiado" -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "Este usuário não pode possuir tÃquetes nesta fila" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "Este não é um identificador numérico" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "Sumário" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "O CC de um tÃquete" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "O CC administrativo de um tÃquete" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "O comentário foi registrado" -#: bin/rt-crontool:198 +#: 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 "O seguinte comando procurará por todos os tÃquetes ativos na fila 'geral' e alterar sua prioridade para 99 se eles não tiverem sido alterados em 4 horas:" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "Os seguintes comandos não foram processados:\\n\\n" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "O novo valor foi atribuÃdo." -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "O proprietário de um tÃquete" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "O requisitante de um tÃquete" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Estes comandos geralmente não estão visÃveis para o usuário" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "" + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "Este tÃquete %1 %2 (%3)\\n" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "Esta ferramenta permite o usuário invocar módulos Perl arbitrários de dentro do RT." -#: lib/RT/Transaction_Overlay.pm:253 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "Parece que esta transação não tem conteúdo" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "Os %1 tÃquetes mais prioritários deste usuário" @@ -4089,7 +5186,7 @@ msgstr "Os %1 tÃquetes mais prioritários deste usuário" msgid "This user's 25 highest priority tickets" msgstr "Os 25 tÃquetes de mais alta prioridade deste usuário" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Qui." @@ -4105,61 +5202,75 @@ msgstr "TÃquete # %1 %2" msgid "Ticket # %1 Jumbo update: %2" msgstr "TÃquete # %1 atualização jumbo: %2" -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "TÃquete #%1 Atualização jumbo: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "TÃquete #%1: %2" -#: lib/RT/Ticket_Overlay.pm:608 +#: 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) +msgid "Ticket %1" +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "TÃquete %1 criado na fila '%2'" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "TÃquete %1 carregado\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "TÃquete %1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "Histórico do TÃquete # %1 %2" -#: html/SelfService/Display.html:34 +#: NOT FOUND IN SOURCE msgid "Ticket Id" msgstr "Identificador do tÃquete" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "TÃquete Resolvido" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "Arquivo anexo do tÃquete" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "Conteúdo do tÃquete" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "Tipo do conteúdo do tÃquete" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "O tÃquete não pôde ser criado devido a um erro interno" -#: lib/RT/Transaction_Overlay.pm:522 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "TÃquete criado" @@ -4167,11 +5278,11 @@ msgstr "TÃquete criado" msgid "Ticket creation failed" msgstr "A criação do tÃquete falhou" -#: lib/RT/Transaction_Overlay.pm:527 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "TÃquete removido" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" msgstr "Id de tÃquete não encontrado" @@ -4179,58 +5290,68 @@ msgstr "Id de tÃquete não encontrado" msgid "Ticket killed" msgstr "TÃquete destruÃdo" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "TÃquete não encontrado" -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "O estado do tÃquete mudou" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "Observadores do tÃquete" -#: html/Elements/Tabs:49 +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" msgstr "TÃquetes" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" msgstr "TÃquetes %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" msgstr "TÃquetes %1 por %2" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "TÃquetes de %1" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "TÃquetes dependentes desta aprovação:" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "Tempo Restante" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "Tempo Trabalhado" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "Tempo restante" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "Tempo de apresentação" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "Tempo trabalhado" @@ -4238,40 +5359,61 @@ msgstr "Tempo trabalhado" msgid "TimeLeft" msgstr "TimeLeft" -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "TimeWorked" -#: bin/rt-commit-handler:402 +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "Para gerar as diferenças desta transação" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "Para gerar as diferenças desta transação:\\n" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Última atualização" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "" + +#: etc/initialdata:252 msgid "Transaction" msgstr "Transação" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "Transação %1 removida" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "Transação Criada" -#: lib/RT/Transaction_Overlay.pm:89 +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" msgstr "Transaction->Create não pôde, já que você não especificou um id de tÃquete" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "Transações são imutáveis" @@ -4279,106 +5421,170 @@ msgstr "Transações são imutáveis" msgid "Trying to delete a right: %1" msgstr "Tentando remover um direito de acesso: %1" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Ter." -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "Tipo" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Não implementado" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Usuário Unix" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "Usuário Unix" -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "Codificação de conteúdo desconhecida %1" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "Ilimitado" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "" + #: etc/initialdata:32 msgid "Unprivileged" msgstr "Não privilegiado" -#: lib/RT/Transaction_Overlay.pm:571 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "Não tomado" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Atualizar" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "Identificador de atualização" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Tipo de atualização" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "Atualizar todos estes tÃquetes de uma vez" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "Atualizar email" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "Atualizar nome" -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "Atualização não registrada." -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "Atualizar os tÃquetes selecionados" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "Atualizar assinatura" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "Atualizar o tÃquete" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) +#: NOT FOUND IN SOURCE msgid "Update ticket # %1" msgstr "Atualizar o tÃquete # %1" -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "Atualizar o tÃquete #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "Atualizar tÃquete #%1 (%2)" -#: lib/RT/Interface/Web.pm:373 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "O tipo da atualização não foi nem correspondência e nem comentário." -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "Atualizado" +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" msgstr "Usuário %1 %2: %3\\n" @@ -4387,6 +5593,11 @@ msgstr "Usuário %1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "Usuário %1 Senha: %2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "Usuário '%1' não encontrado" @@ -4395,72 +5606,89 @@ msgstr "Usuário '%1' não encontrado" msgid "User '%1' not found\\n" msgstr "Usuário '%1' não encontrado\\n" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "Definido pelo Usuário" -#: html/Admin/Users/Prefs.html:59 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "Identificador de usuário" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "Identificador do usuário" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "Direitos de Acesso de Usuário" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "O usuário não pôde ser criado: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "Usuário criado" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "Grupos definidos pelo usuário" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "Usuário notificado" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "Visualização de usuário" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "Nome de usuário" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Usuários" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "Usuários que satisfazem o critério de busca" -#: html/Search/Elements/PickRestriction:51 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "Valor da fila" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "Valores" -#: NOT FOUND IN SOURCE -msgid "VrijevormEnkele" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "Observar" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "WatchAsAdminCc" @@ -4468,87 +5696,95 @@ msgstr "WatchAsAdminCc" msgid "Watcher loaded" msgstr "Observador carregado" -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Observadores" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "Codificação de Web" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Qua." -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "Quando um tÃquete for aprovado por todos os aprovadores, adicione uma correspondência ao tÃquete original" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "Quando um tÃquete for aprovado por qualquer aprovador, adicione uma correspondência ao tÃquete original" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "Quando um tÃquete é criado" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "Quando um tÃquete de aprovação é criado, notificar o Proprietário e o AdminCc do item aguardando sua aprovação" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "Quando acontecer qualquer coisa" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "Sempre que um tÃquete for resolvido" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "Sempre que mudar o proprietário de um tÃquete" -#: etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "Sempre que um tÃquete mudar de fila" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "Sempre que o estado de um tÃquete mudar" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "Sempre que ocorrer uma condição definida por usuário" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "Sempre que um novo comentário é adicionado" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "Sempre que uma nova correspondência é adicionada" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Trabalho" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "Telefone de trabalho" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Trabalhado" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "Você já é proprietário deste tÃquete" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "Você não é um usuário autorizado" -#: lib/RT/Ticket_Overlay.pm:2930 +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "Você só pode reatribuir seus próprios tÃquetes ou aqueles que não têm dono" @@ -4556,29 +5792,28 @@ msgstr "Você só pode reatribuir seus próprios tÃquetes ou aqueles que não t msgid "You don't have permission to view that ticket.\\n" msgstr "Você não tem permissão para ver este tÃquete.\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "Você encontrou %1 tÃquetes na fila %2" -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "Você foi desconectado do RT." -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "Você não tem permissão para criar tÃquetes nesta fila." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "Você não pode criar requisições nesta fila." -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "Volte sempre" -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) +#: NOT FOUND IN SOURCE msgid "Your %1 requests" msgstr "Suas %1 requisições" @@ -4586,11 +5821,11 @@ msgstr "Suas %1 requisições" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "Seu administrador do RT configurou erradamente os endereços eletrônicos que invocam o RT" -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "Sua requisição foi aprovada por %1. Outras aprovações ainda podem estar pendentes." -#: etc/initialdata:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "Sua requisição foi aprovada." @@ -4598,15 +5833,15 @@ msgstr "Sua requisição foi aprovada." msgid "Your request was rejected" msgstr "Sua requisição foi rejeitada" -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "Sua requisição foi rejeitada." -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "Nome de usuário ou senha incorretos" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "CEP" @@ -4614,32 +5849,48 @@ msgstr "CEP" msgid "[no subject]" msgstr "[sem assunto]" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "como outorgado a %1" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "contém" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" msgstr "content" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "content-type" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "correspondência (provavelmente) não enviada" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "correspondência enviada" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "dias" @@ -4647,96 +5898,128 @@ msgstr "dias" msgid "dead" msgstr "morto" -#: html/Search/Listing.html:75 +#: NOT FOUND IN SOURCE msgid "delete" msgstr "remover" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "removido" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "não satisfaz" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "não contém" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "igual a" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + #: NOT FOUND IN SOURCE msgid "false" msgstr "falso" -#: html/Elements/SelectAttachmentField:28 +#: NOT FOUND IN SOURCE msgid "filename" msgstr "filename" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "maior que" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "grupo '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "horas" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "identificador" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "é" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "não é" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "menor que" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "satisfaz" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "min" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "minutos" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "modificações\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "meses" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "novo" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "sem valor" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "nenhum" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "diferente de" @@ -4744,51 +6027,59 @@ msgstr "diferente de" msgid "notlike" msgstr "diferente" -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "aberto" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "grupo pessoal '%1' para o usuário '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "fila %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "rejeitado" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "resolvido" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "seg" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "pendente" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "sistema %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "grupo do sistema '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "o componente chamador não especificou por que" -#: lib/RT/Group_Overlay.pm:210 +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "tÃquete #%1 %2" @@ -4797,7 +6088,7 @@ msgstr "tÃquete #%1 %2" msgid "true" msgstr "verdadeiro" -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "grupo %1 não descrito" @@ -4806,12 +6097,12 @@ msgstr "grupo %1 não descrito" msgid "undescripbed group %1" msgstr "grupo sem descrição %1" -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "usuário %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "semanas" @@ -4819,11 +6110,7 @@ msgstr "semanas" msgid "with template %1" msgstr "com modelo %1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "anos" -#: NOT FOUND IN SOURCE -msgid "ニックãƒãƒ¼ãƒ " -msgstr "" - diff --git a/rt/lib/RT/I18N/ru.po b/rt/lib/RT/I18N/ru.po index eb1434606..cd93e0412 100644 --- a/rt/lib/RT/I18N/ru.po +++ b/rt/lib/RT/I18N/ru.po @@ -1,214 +1,279 @@ +# translation of ru-nortfm.po to Russian +# translation of ru.po to Russian +# Andrew Kornilov <andy@eva.dp.ua>, 2004, 2005. msgid "" msgstr "" -"Last-Translator: Kirill Pushkin <kirill@mns.ru>\n" -"PO-Revision-Date: 2002-10-04 19:28+0400\n" +"Last-Translator: Andrew Kornilov <andy@eva.dp.ua>\n" +"PO-Revision-Date: 2005-03-11 15:38+0200\n" "Language-Team: Russian <ru@li.org>\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: KBabel 0.9.6\n" +"X-Generator: KBabel 1.9.1\n" +"Project-Id-Version: ru\n" +"MIME-Version: 1.0\n" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 +#: NOT FOUND IN SOURCE msgid "#" msgstr "№" -#: html/Admin/Queues/Scrip.html:55 -#. ($QueueObj->id) -msgid "#%1" -msgstr "" - -#: html/Approvals/Elements/ShowDependency:50 html/Ticket/Display.html:26 html/Ticket/Display.html:30 -#. ($Ticket->Id, $Ticket->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 +#. ($Ticket->id, $Ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "" -#: lib/RT/Date.pm:337 -#. ($s, $time_unit) -msgid "%1 %2" +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" msgstr "" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) -msgid "%1 %2 %3" +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" msgstr "" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:361 +#. ($s, $time_unit) +msgid "%1 %2" +msgstr "" + +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%1 %2 %3 %4:%5:%6 %7" -#: lib/RT/Ticket_Overlay.pm:3438 lib/RT/Transaction_Overlay.pm:559 lib/RT/Transaction_Overlay.pm:601 +#: 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) msgid "%1 %2 added" -msgstr "" +msgstr "%1 %2 добавлен" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "%1 %2 назад" -#: lib/RT/Ticket_Overlay.pm:3444 lib/RT/Transaction_Overlay.pm:566 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 %2 изменено на %3" -#: lib/RT/Ticket_Overlay.pm:3441 lib/RT/Transaction_Overlay.pm:562 lib/RT/Transaction_Overlay.pm:607 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" -msgstr "" +msgstr "%1 %2 удален" #: NOT FOUND IN SOURCE msgid "%1 %2 of group %3" -msgstr "" +msgstr "%1 %2 of group %3" -#: html/Admin/Elements/EditScrips:44 html/Admin/Elements/ListGlobalScrips:28 +#: 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)) msgid "%1 %2 with template %3" -msgstr "" +msgstr "%1 %2 Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼ %3" #: NOT FOUND IN SOURCE msgid "%1 (%2) %3 this ticket\\n" -msgstr "%1 (%2) %3 Ñтот тикет\\n" +msgstr "%1 (%2) %3 Ñта заÑвка\\n" -#: html/Search/Listing.html:57 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) -msgid "%1 - %2 shown" +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" msgstr "" -#: bin/rt-crontool:169 bin/rt-crontool:176 bin/rt-crontool:182 +#: 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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (Ðе менÑть)" + +#: NOT FOUND IN SOURCE +msgid "%1 - %2 shown" +msgstr "%1 - %2 показано" + +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" -msgstr "" +msgstr "%1 - Ðргумент Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ´Ð°Ñ‡Ð¸ в %2" -#: bin/rt-crontool:185 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "" -#: bin/rt-crontool:179 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "" -#: bin/rt-crontool:173 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "" -#: bin/rt-crontool:166 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "" -#: lib/RT/ScripAction_Overlay.pm:122 + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" -msgstr "%1 Ñкрипт загружен" +msgstr "%1 СкриплетÐаДейÑтвие загружен" -#: lib/RT/Ticket_Overlay.pm:3471 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "%1 добавлено как значение Ð´Ð»Ñ %2" #: NOT FOUND IN SOURCE msgid "%1 aliases require a TicketId to work on" -msgstr "%1 алиаÑÑ‹ требуют идентификатор тикета Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹" +msgstr "%1 пÑевдонимы требуют идентификатор заÑвки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹" #: NOT FOUND IN SOURCE msgid "%1 aliases require a TicketId to work on " -msgstr "%1 алиаÑÑ‹ требуют идентификатор тикета Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ " +msgstr "%1 пÑевдонимы требуют идентификатор заÑвки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ " #: NOT FOUND IN SOURCE msgid "%1 aliases require a TicketId to work on (from %2) %3" -msgstr "%1 алиаÑÑ‹ требуют идентификатор тикета Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ над (от %2) %3" +msgstr "%1 пÑевдонимы требуют идентификатор заÑвки Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ над (от %2) %3" -#: lib/RT/Link_Overlay.pm:117 lib/RT/Link_Overlay.pm:124 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" -msgstr "" +msgstr "%1 ÑвлÑетÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ñ‹Ð¼ объектом, но не найден в базе данных" -#: html/Ticket/Elements/ShowDates:52 lib/RT/Transaction_Overlay.pm:483 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 пользователем %2" -#: lib/RT/Transaction_Overlay.pm:537 lib/RT/Transaction_Overlay.pm:626 lib/RT/Transaction_Overlay.pm:635 lib/RT/Transaction_Overlay.pm:638 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" -msgstr "%1 изменилоÑÑŒ Ñ %2 на %3" +msgstr "%1 изменена Ñ %2 на %3" + +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "%1 копиÑ" -#: lib/RT/Interface/Web.pm:857 +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." -msgstr "" +msgstr "%1 невозможно уÑтановить в %2." #: NOT FOUND IN SOURCE msgid "%1 couldn't init a transaction (%2)\\n" -msgstr "" +msgstr "%1 не может инициировать транзакцию (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2813 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." -msgstr "%1 не могу закрыть тикет. Возможно, база данных RT иÑпорчена." +msgstr "%1 не может изменить ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° Решено. Возможно, база данных RT иÑпорчена." + +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "%1 Ñоздана" -#: html/Elements/MyTickets:25 +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "%1 удалена" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "%1 ваших заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." -msgstr "" +msgstr "%1 ваших заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами..." -#: html/Elements/MyRequests:25 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." -msgstr "" +msgstr "%1 заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами, Ñозданных вами..." -#: bin/rt-crontool:161 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 больше не ÑвлÑетÑÑ %2 Ð´Ð»Ñ Ñтой очереди." -#: lib/RT/Ticket_Overlay.pm:1570 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." -msgstr "%1 больше не ÑвлÑетÑÑ %2 Ð´Ð»Ñ Ñтого тикета." +msgstr "%1 больше не ÑвлÑетÑÑ %2 Ð´Ð»Ñ Ñтой заÑвки." -#: lib/RT/Ticket_Overlay.pm:3527 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" -msgstr "%1 больше не ÑвлÑетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ Ð´Ð»Ñ Ð½ÐµÑтандартного Ð¿Ð¾Ð»Ñ %2" +msgstr "%1 больше не ÑвлÑетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸ÐµÐ¼ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ %2" #: NOT FOUND IN SOURCE msgid "%1 isn't a valid Queue id." -msgstr "" +msgstr "%1 неверный идентификатор очереди." + +#: NOT FOUND IN SOURCE +msgid "%1 matches" +msgstr "%1 Ñовпадений" -#: html/Ticket/Elements/ShowBasics:36 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 мин" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "%1 поÑледних неназначенных заÑвок" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "%1 не отображаетÑÑ" -#: html/User/Elements/DelegateRights:76 +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 объектов" + +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" -msgstr "" +msgstr "Права %1" #: NOT FOUND IN SOURCE msgid "%1 succeeded\\n" @@ -224,324 +289,403 @@ msgstr "%1 тип не извеÑтен Ð´Ð»Ñ %2" #: NOT FOUND IN SOURCE msgid "%1 was created without a CurrentUser\\n" -msgstr "" +msgstr "%1 была Ñоздана без ТекущегоПользователÑ\\n" -#: lib/RT/Action/ResolveMembers.pm:42 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." -msgstr "%1 закроет вÑе тикеты, входÑщие в групповой запроÑ" +msgstr "%1 решит вÑе заÑвки, входÑщие в групповой запроÑ" #: NOT FOUND IN SOURCE msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." -msgstr "%1 отложит тикеты, которые завиÑÑÑ‚ запроÑа или включены в него" +msgstr "%1 приоÑтановит заÑвки, которые завиÑÑÑ‚ от запроÑа или включены в него" -#: lib/RT/Transaction_Overlay.pm:435 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%1 %2 объектов" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "%1 Ñохраненных запроÑов" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1: без вложений" -#: html/Ticket/Elements/ShowTransaction:102 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" -msgstr "" +msgstr "%1б" -#: html/Ticket/Elements/ShowTransaction:99 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" -msgstr "" +msgstr "%1к" -#: lib/RT/Ticket_Overlay.pm:1140 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' ÑвлÑетÑÑ Ð½ÐµÐ²ÐµÑ€Ð½Ñ‹Ð¼ значением ÑтатуÑа" #: NOT FOUND IN SOURCE msgid "'%1' not a recognized action. " -msgstr "Что делать ? : '%1'" +msgstr "'%1' не ÑвлÑетÑÑ Ð·Ð°Ñ€ÐµÐ³Ð¸Ñтрированным дейÑтвием." #: NOT FOUND IN SOURCE msgid "(Check box to delete group member)" -msgstr "" +msgstr "(Выделите пользователей Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· группы)" #: NOT FOUND IN SOURCE msgid "(Check box to delete scrip)" -msgstr "" +msgstr "(Выделите Ñкриплеты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ)" -#: html/Admin/Elements/EditQueueWatchers:29 html/Admin/Elements/EditScrips:35 html/Admin/Elements/EditTemplates:36 html/Admin/Groups/Members.html:52 html/Ticket/Elements/EditLinks:33 html/Ticket/Elements/EditPeople:46 html/User/Groups/Members.html:55 +#: 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 "(Пометьте то, что хотите удалить)" +msgstr "(Выделите пункты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ)" #: NOT FOUND IN SOURCE msgid "(Check boxes to delete)" -msgstr "" +msgstr "(Выделите пункты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ)" + +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(Выделите получателей Ð´Ð»Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð· ÑпиÑка уведомлÑемых)" -#: html/Ticket/Create.html:178 +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(Выделите получателей Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² ÑпиÑок уведомлÑемых)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" +msgstr "(Введите идентификаторы или ÑÑылки на заÑвки, разделенные пробелами)" + +#: NOT FOUND IN SOURCE msgid "(Enter ticket ids or URLs, seperated with spaces)" -msgstr "(Введите номера или ÑÑылки на тикеты. ÐеÑколько тикетов разделÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸.)" +msgstr "(Введите идентификаторы или ÑÑылки на заÑвки, разделенные пробелами)" -#: html/Admin/Queues/Modify.html:54 html/Admin/Queues/Modify.html:60 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" -msgstr "" +msgid "(If left blank, will default to %1)" +msgstr "(ЕÑли пуÑтое, то по-умолчанию равно %1)" #: NOT FOUND IN SOURCE msgid "(No Value)" -msgstr "" +msgstr "(Ðет значениÑ)" -#: html/Admin/Elements/EditCustomFields:33 html/Admin/Elements/ListGlobalCustomFields:32 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" -msgstr "" +msgstr "(Ðет дополнительных полей)" -#: html/Admin/Groups/Members.html:50 html/User/Groups/Members.html:53 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(Ðет пользователей)" -#: html/Admin/Elements/EditScrips:32 html/Admin/Elements/ListGlobalScrips:32 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" -msgstr "(Ðет Ñкриптов)" +msgstr "(Ðет Ñкриплетов)" -#: html/Admin/Elements/EditTemplates:31 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" -msgstr "" +msgstr "(Ðет шаблонов)" -#: html/Ticket/Update.html:85 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(Ðет)" + +#: 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 "" +msgstr "(Отправить Ñкрытую копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать Ñкрытые копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± обновлениÑÑ…, <b>не</b> будет изменен.)" #: NOT FOUND IN SOURCE msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" -msgstr "(Ðа Ñти адреÑа [разделенные запÑтой] отправлÑÑŽÑ‚ÑÑ ÐºÐ¾Ð¿Ð¸Ð¸ ÑообщениÑ. СпиÑок Ñтих адреÑатов в пиÑьме не виден. ÐдреÑа <b>не</b> ÑохранÑÑŽÑ‚ÑÑ Ð´Ð»Ñ Ð¿Ð¾Ñледующих уведомлений.)" +msgstr "(Отправить Ñкрытую копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать Ñкрытые копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± обновлениÑÑ…, <b>не</b> будет изменен.)" -#: html/Ticket/Create.html:79 +#: 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 "" +msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Ðти получатели в дальнейшем <b>будут</b> получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± обновлениÑÑ….)" -#: html/Ticket/Update.html:81 +#: 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 "" +msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± обновлениÑÑ…, <b>не</b> будет изменен.)" #: NOT FOUND IN SOURCE msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" -msgstr "(Ðа Ñти адреÑа [разделенные запÑтой] отправлÑÑŽÑ‚ÑÑ ÐºÐ¾Ð¿Ð¸Ð¸ ÑообщениÑ. ÐдреÑа не ÑохранÑÑŽÑ‚ÑÑ Ð´Ð»Ñ Ð¿Ð¾Ñледующих уведомлений.)" +msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. СпиÑок получателей, которые в дальнейшем будут получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± обновлениÑÑ…, <b>не</b> будет изменен.)" -#: html/Ticket/Create.html:69 +#: 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 "" +msgstr "(Отправить копию ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтом обновлении на Ñти адреÑа [разделÑÑŽÑ‚ÑÑ Ð·Ð°Ð¿Ñтой]. Ðти получатели в дальнейшем <b>будут</b> получать копии ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± обновлениÑÑ….)" + +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(ИÑпользуйте Ñти Ð¿Ð¾Ð»Ñ Ð¿Ñ€Ð¸ выборе 'Задано пользователем' Ð´Ð»Ñ ÑƒÐ»Ð¾Ð²Ð¸Ð¹ или дейÑтвий)" -#: html/Admin/Groups/index.html:33 html/User/Groups/index.html:33 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(пуÑто)" -#: html/Admin/Users/index.html:39 +#: NOT FOUND IN SOURCE +msgid "(no Summary)" +msgstr "(нет Ñводной информации)" + +#: html/Admin/Users/index.html:60 msgid "(no name listed)" -msgstr "" +msgstr "(имена не указаны)" + +#: NOT FOUND IN SOURCE +msgid "(no name)" +msgstr "(нет имени)" -#: html/Elements/MyRequests:43 html/Elements/MyTickets:45 +#: NOT FOUND IN SOURCE msgid "(no subject)" -msgstr "(без темы)" +msgstr "(нет темы)" -#: html/Admin/Elements/SelectRights:48 html/Elements/SelectCustomFieldValue:30 html/Ticket/Elements/EditCustomField:59 html/Ticket/Elements/ShowCustomFields:36 lib/RT/Transaction_Overlay.pm:536 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(нет значениÑ)" -#: html/Ticket/Elements/EditLinks:116 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(нет значений)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" -msgstr "(только один тикет)" +msgstr "(только одна заÑвка)" -#: html/Elements/MyRequests:52 html/Elements/MyTickets:55 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" -msgstr "" +msgstr "(в ожидании подтверждениÑ)" -#: html/Elements/MyRequests:54 html/Elements/MyTickets:57 +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(в ожидании Ñ€ÐµÑˆÐµÐ½Ð¸Ñ ÑвÑзанных заÑвок)" + +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" -msgstr "" +msgstr "(в ожидании других заÑвок)" #: NOT FOUND IN SOURCE msgid "(requestor's group)" -msgstr "" +msgstr "(группа автора заÑвки)" -#: html/Admin/Users/Modify.html:50 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(требуетÑÑ)" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" -msgstr "" +msgstr "(без названиÑ)" #: NOT FOUND IN SOURCE msgid "25 highest priority tickets I own..." -msgstr "25 важнейших моих тикетов..." +msgstr "25 ваших заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами..." #: NOT FOUND IN SOURCE msgid "25 highest priority tickets I requested..." -msgstr "25 Ñамых важных моих запроÑов..." +msgstr "25 заÑвок Ñ Ð½Ð°Ð¸Ð²Ñ‹Ñшими приоритетами, Ñозданные ваши..." -#: html/Ticket/Elements/ShowBasics:32 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:27 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:26 -#. ($m->scomp('/Elements/SelectNewTicketQueue')) -msgid "<input type=\"submit\" value=\"New ticket in\"> %1" -msgstr "<input type=\"submit\" value=\"Создать тикет в очереди\"> %1" - -#: NOT FOUND IN SOURCE -msgid "??????" +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" msgstr "" -#: etc/initialdata:203 -msgid "A blank template" +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" msgstr "" -#: NOT FOUND IN SOURCE -msgid "ACE Deleted" -msgstr "" +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 +#. ($m->scomp('/Elements/SelectNewTicketQueue')) +msgid "<input type=\"submit\" value=\"New ticket in\"> %1" +msgstr "<input type=\"submit\" value=\"Создать заÑвку в очереди\"> %1" -#: NOT FOUND IN SOURCE -msgid "ACE Loaded" +#: etc/initialdata:218 +msgid "A blank template" +msgstr "ПуÑтой шаблон" + +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." msgstr "" #: NOT FOUND IN SOURCE msgid "ACE could not be deleted" -msgstr "" +msgstr "Ðевозможно удалить ACE" #: NOT FOUND IN SOURCE msgid "ACE could not be found" -msgstr "" +msgstr "Ðевозможно найти ACE" -#: lib/RT/ACE_Overlay.pm:157 lib/RT/Principal_Overlay.pm:181 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "ACE не найден" -#: lib/RT/ACE_Overlay.pm:831 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ACEÑ‹ можно только Ñоздавать и удалÑть" -#: bin/rt-commit-handler:755 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" -msgstr "Прекращаем работу во избежание нежелательного Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚Ð¸ÐºÐµÑ‚Ð°.\\n" +msgstr "Прекращаем работу во избежание нежелательного Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ñвки.\\n" -#: html/User/Elements/Tabs:32 +#: html/User/Elements/Tabs:53 msgid "About me" -msgstr "" +msgstr "Обо мне" -#: html/Admin/Users/Modify.html:80 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "Права доÑтупа" -#: html/Admin/Elements/EditScrip:57 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "ДейÑтвие" -#: lib/RT/Scrip_Overlay.pm:147 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" -msgstr "" +msgstr "ДейÑтвие %1 не найдено" -#: bin/rt-crontool:123 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "ДейÑтвие принÑто." -#: bin/rt-crontool:119 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "ДейÑтвие подготовлено..." -#: html/Search/Bulk.html:92 +#: html/Search/Build.html:85 +msgid "Add" +msgstr "Добавить" + +#: html/Search/Bulk.html:114 msgid "Add AdminCc" -msgstr "Добавить админиÑтративную копию" +msgstr "Добавить ÐдминиÑтративнуюКопию" -#: html/Search/Bulk.html:90 +#: html/Search/Bulk.html:110 msgid "Add Cc" -msgstr "Добавить копию" +msgstr "Добавить Копию" -#: html/Ticket/Create.html:114 html/Ticket/Update.html:100 -msgid "Add More Files" +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" msgstr "" +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "Добавить критерий" + +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 +msgid "Add More Files" +msgstr "Добавить еще файлы" + #: NOT FOUND IN SOURCE msgid "Add Next State" -msgstr "" +msgstr "Добавить Ñледующее ÑоÑтоÑние" -#: html/Search/Bulk.html:88 +#: html/Search/Bulk.html:106 msgid "Add Requestor" -msgstr "Добавить проÑителÑ" +msgstr "Добавить автора заÑвки" + +#: html/Admin/Elements/AddCustomFieldValue:46 +msgid "Add Value" +msgstr "Добавить значение" #: NOT FOUND IN SOURCE msgid "Add a Scrip to this queue" -msgstr "" +msgstr "Добавить Ñкриплет Ð´Ð»Ñ Ñтой очереди" #: NOT FOUND IN SOURCE msgid "Add a Scrip which will apply to all queues" -msgstr "" - -#: NOT FOUND IN SOURCE -msgid "Add a keyword selection to this queue" -msgstr "" +msgstr "Добавить Ñкриплет, который будет дейÑтвовать на вÑе очереди" #: NOT FOUND IN SOURCE msgid "Add a new a global scrip" -msgstr "" +msgstr "Добавить новый глобальный Ñкриплет" #: NOT FOUND IN SOURCE msgid "Add a scrip to this queue" -msgstr "" +msgstr "Добавить Ñкриплет Ð´Ð»Ñ Ñтой очереди" -#: html/Admin/Global/Scrip.html:55 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" -msgstr "Добавить Ñкрипт, который будет дейÑтвовать на вÑе очереди" +msgstr "Добавить Ñкриплет, который будет дейÑтвовать на вÑе очереди" -#: html/Search/Bulk.html:118 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "Добавить дополнительный критерий" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" -msgstr "Добавить комментарии или ответы на выбранные тикеты" +msgstr "Добавить комментарии или ответы на выбранные заÑвки" -#: html/Admin/Groups/Members.html:42 html/User/Groups/Members.html:39 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "Добавить пользователей" -#: html/Admin/Queues/People.html:66 html/Ticket/Elements/AddWatchers:28 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "Добавить наблюдателей" +# Manual merge by Andrew Kornilov <andy@eva.dp.ua> +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "Добавить, удалить или изменить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… полей Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð¾Ð²" + #: NOT FOUND IN SOURCE msgid "AddNextState" -msgstr "" +msgstr "ДобавлÑтьСледующееСоÑтоÑние" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" -msgstr "Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 Ð´Ð»Ñ Ñтой очереди" +msgstr "Пользователь добавлен как %1 Ð´Ð»Ñ Ñтой очереди" -#: lib/RT/Ticket_Overlay.pm:1454 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" -msgstr "Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 Ð´Ð»Ñ Ñтого тикета" +msgstr "Пользователь добавлен как %1 Ð´Ð»Ñ Ñтой заÑвки" -#: html/Admin/Elements/ModifyUser:76 html/Admin/Users/Modify.html:122 html/User/Prefs.html:88 +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "ÐдреÑ1" -#: html/Admin/Elements/ModifyUser:78 html/Admin/Users/Modify.html:127 html/User/Prefs.html:90 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "ÐдреÑ2" -#: html/Ticket/Create.html:74 +#: html/Ticket/Create.html:95 msgid "Admin Cc" -msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ" +msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐšÐ¾Ð¿Ð¸Ñ" -#: etc/initialdata:274 +#: etc/initialdata:295 msgid "Admin Comment" -msgstr "" +msgstr "ÐдминиÑтративный Комментарий" -#: etc/initialdata:256 +#: etc/initialdata:274 msgid "Admin Correspondence" -msgstr "" +msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐšÐ¾Ñ€Ñ€ÐµÑпонденциÑ" -#: html/Admin/Queues/index.html:25 html/Admin/Queues/index.html:28 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "Управление очередÑми" @@ -549,328 +693,431 @@ msgstr "Управление очередÑми" msgid "Admin users" msgstr "Управление пользователÑми" -#: html/Admin/Global/index.html:26 html/Admin/Global/index.html:28 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "Общие наÑтройки" #: NOT FOUND IN SOURCE msgid "Admin/Groups" -msgstr "Группы" +msgstr "Управление группами" -#: html/Admin/Queues/Modify.html:25 html/Admin/Queues/Modify.html:29 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" -msgstr "Параметры очереди" +msgstr "ОÑновные параметры очереди" #: NOT FOUND IN SOURCE msgid "AdminAllPersonalGroups" -msgstr "" +msgstr "ÐдминиÑтрироватьВÑеПерÑональныеГруппы" -#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:39 html/Ticket/Update.html:50 lib/RT/ACE_Overlay.pm:89 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" -msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ" +msgstr "ÐдминиÑтративнаÑКопиÑ" #: NOT FOUND IN SOURCE msgid "AdminComment" -msgstr "" +msgstr "ÐдминиÑтрироватьКомментарий" #: NOT FOUND IN SOURCE msgid "AdminCorrespondence" -msgstr "" +msgstr "ÐдминиÑтрироватьКорреÑпонденцию" + +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "ÐдминиÑтрироватьДополнительноеПоле" -#: lib/RT/Queue_Overlay.pm:72 +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" -msgstr "" +msgstr "ÐдминиÑтрироватьДополнительныеПолÑ" -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" -msgstr "" +msgstr "ÐдминиÑтрироватьГруппу" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" -msgstr "" +msgstr "ÐдминиÑтрироватьЧленÑтвоВГруппах" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" -msgstr "" +msgstr "ÐдминиÑтрироватьСобÑтвенныеГруппы" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" -msgstr "" +msgstr "ÐдминиÑтрироватьОчередь" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "AdminUsers" -msgstr "" +msgstr "ÐдминиÑтрироватьПользователей" -#: html/Admin/Queues/People.html:48 html/Ticket/Elements/EditPeople:54 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" -msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ" +msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐšÐ¾Ð¿Ð¸Ñ" #: NOT FOUND IN SOURCE msgid "Admins" -msgstr "" +msgstr "ÐдминиÑтраторы" + +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "Дополнительно" #: NOT FOUND IN SOURCE msgid "Advanced Search" -msgstr "" +msgstr "РаÑширенный поиÑк" -#: html/Elements/SelectDateRelation:36 +#: NOT FOUND IN SOURCE +msgid "Advanced Search Criteria" +msgstr "Критерии раÑширенного поиÑка" + +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "ПоÑле" #: NOT FOUND IN SOURCE msgid "Age" +msgstr "ВозраÑÑ‚" + +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" msgstr "" #: NOT FOUND IN SOURCE msgid "Alias" -msgstr "" +msgstr "ПÑевдоним" #: NOT FOUND IN SOURCE msgid "Alias for" -msgstr "" +msgstr "ПÑевдоним длÑ" -#: html/Admin/Elements/EditCustomFields:96 +#: etc/initialdata:363 +msgid "All Approvals Passed" +msgstr "Ð’Ñе Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ñ‹" + +#: NOT FOUND IN SOURCE msgid "All Custom Fields" -msgstr "" +msgstr "Ð’Ñе дополнительные полÑ" -#: html/Admin/Queues/index.html:53 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "Ð’Ñе очереди" #: NOT FOUND IN SOURCE msgid "Always sends a message to the requestors independent of message sender" +msgstr "Ð’Ñегода отправлÑть ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð°Ð¼ заÑвок незавиÑимо от Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ ÑообщениÑ" + +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" msgstr "" -#: html/Elements/Tabs:58 +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "ПрименÑетÑÑ Ðº" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "Применить" + +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "Применить ваши изменениÑ" + +#: html/Elements/Tabs:74 msgid "Approval" -msgstr "" +msgstr "ПодтверждениÑ" -#: html/Approvals/Display.html:46 html/Approvals/Elements/Approve:27 html/Approvals/Elements/ShowDependency:42 html/Approvals/index.html:65 +#: html/Approvals/Display.html:67 html/Approvals/Elements/ShowDependency:63 html/Approvals/index.html:86 #. ($Ticket->Id, $Ticket->Subject) #. ($ticket->id, $msg) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Approval #%1: %2" -msgstr "Виза #%1: %2" +msgstr "Подтверждение #%1: %2" -#: html/Approvals/index.html:54 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" -msgstr "Виза #%1: ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð½Ðµ Ñохранены из-за ошибки ÑиÑтемы" +msgstr "Подтверждение #%1: ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð½Ðµ Ñохранены из-за ÑиÑтемной ошибки" -#: html/Approvals/index.html:52 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" -msgstr "Виза #%1: ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñаны" +msgstr "Подтверждение #%1: ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñаны" #: NOT FOUND IN SOURCE msgid "Approval Details" -msgstr "" +msgstr "Детали подтверждениÑ" + +#: etc/initialdata:351 +msgid "Approval Passed" +msgstr "Подтверждение получено" + +#: etc/initialdata:374 +msgid "Approval Rejected" +msgstr "Подтверждение отклонено" #: NOT FOUND IN SOURCE msgid "Approval diagram" -msgstr "" +msgstr "Диаграмма подтверждений" -#: html/Approvals/Elements/Approve:45 +#: html/Approvals/Elements/Approve:65 msgid "Approve" -msgstr "Завизировать" +msgstr "Подтвердить" -#: etc/initialdata:431 etc/upgrade/2.1.71:148 +#: etc/initialdata:504 msgid "Approver's notes: %1" -msgstr "" +msgstr "ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ð²ÑˆÐµÐ³Ð¾: %1" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "Ðпр." #: NOT FOUND IN SOURCE msgid "April" -msgstr "" +msgstr "Ðпрель" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "Ð’ порÑдке возраÑтаниÑ" -#: html/Search/Bulk.html:127 html/SelfService/Update.html:36 html/Ticket/ModifyAll.html:83 html/Ticket/Update.html:100 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "Ðазначение и удаление дополнительных полей" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "ÐазначатьДополнительныеПолÑ" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "Вложение" -#: html/SelfService/Create.html:67 html/Ticket/Create.html:110 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "Вложить файл" -#: html/Ticket/Create.html:98 html/Ticket/Update.html:89 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" -msgstr "" +msgstr "Вложенный файл" -#: html/SelfService/Attachment/dhandler:36 +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "Вложение '%1' не может быть загружено" -#: lib/RT/Transaction_Overlay.pm:443 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" -msgstr "Создано вложение" +msgstr "Вложение Ñоздано" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" -msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" +msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° Ð´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ" -#: html/Ticket/Elements/ShowAttachments:26 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "ВложениÑ" -#: lib/RT/Date.pm:418 +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "Ðтрибут удален" + +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "Ðвг." #: NOT FOUND IN SOURCE msgid "August" -msgstr "" +msgstr "ÐвгуÑÑ‚" -#: html/Admin/Elements/ModifyUser:66 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "Тип региÑтрации" -#: etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" -msgstr "" +msgstr "Ðвтоответ" #: etc/initialdata:72 msgid "Autoreply To Requestors" -msgstr "" +msgstr "Ðвтоответ Ðвторам ЗаÑвки" #: NOT FOUND IN SOURCE msgid "AutoreplyToRequestors" -msgstr "" +msgstr "ÐвтоответÐвторатЗаÑвки" + +#: NOT FOUND IN SOURCE +msgid "Available Columns" +msgstr "ДоÑтупные колонки" #: NOT FOUND IN SOURCE msgid "Bad PGP Signature: %1\\n" msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ PGP: %1\\n" -#: html/SelfService/Attachment/dhandler:40 +#: NOT FOUND IN SOURCE msgid "Bad attachment id. Couldn't find attachment '%1'\\n" -msgstr "Ðеверный идентификатор вложениÑ. ОтÑутÑтвует вложение '%1'\\n" +msgstr "Ðеверный идентификатор вложениÑ. Ðевозможно найти вложение '%1'\\n" -#: bin/rt-commit-handler:827 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "ÐÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ Ð´Ð°Ñ‚Ð° в %1" -#: html/SelfService/Attachment/dhandler:43 -#. ($trans, $AttachmentObj->TransactionId()) +#: NOT FOUND IN SOURCE msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "Ðеправильный номер транзакции Ð´Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ. %1 должен быть %2\\n" -#: html/Admin/Elements/GroupTabs:39 html/Admin/Elements/QueueTabs:39 html/Admin/Elements/UserTabs:38 html/Ticket/Elements/Tabs:90 html/User/Elements/GroupTabs:38 +#: 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 "Главное" +msgstr "ОÑновное" -#: html/Ticket/Update.html:83 +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "Ð¡ÐºÑ€Ñ‹Ñ‚Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ" -#: html/Admin/Elements/EditScrip:88 html/Admin/Global/GroupRights.html:85 html/Admin/Global/Template.html:46 html/Admin/Global/UserRights.html:54 html/Admin/Groups/GroupRights.html:73 html/Admin/Groups/Members.html:81 html/Admin/Groups/Modify.html:56 html/Admin/Groups/UserRights.html:55 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:45 html/Admin/Queues/UserRights.html:54 html/User/Groups/Modify.html:56 +#: 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 "Ðе забудьте Ñохранить наÑтройки" -#: html/Elements/SelectDateRelation:34 lib/RT/CurrentUser.pm:322 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "До" #: NOT FOUND IN SOURCE msgid "Begin Approval" +msgstr "Ðачать подтверждение" + +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" msgstr "" -#: etc/initialdata:202 +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "Двоичный" + +#: etc/initialdata:217 msgid "Blank" +msgstr "ПуÑтой" + +#: html/Search/Elements/EditFormat:84 +msgid "Bold" msgstr "" -#: html/Search/Listing.html:79 +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" -msgstr "Получить URL Ð´Ð»Ñ Ñтого поиÑка" +msgstr "СÑылка на Ñтот Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² избранное" + +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "СÑылка Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² избранное" -#: html/Ticket/Elements/ShowHistory:39 html/Ticket/Elements/ShowHistory:45 +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" -msgstr "Сокращенный" +msgstr "Сокращенные заголовки" -#: html/Search/Bulk.html:25 html/Search/Bulk.html:26 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" -msgstr "Изменение одним махом" +msgstr "МножеÑтвенное обновление заÑвки" -#: lib/RT/User_Overlay.pm:1331 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" -msgstr "Ðе могу изменÑть ÑиÑтемных пользователей" +msgstr "Ðевомзожно изменить ÑиÑтемных пользователей" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" -msgstr "" +msgstr "Может ли данный пользователь проÑматривать Ñту очередь" -#: lib/RT/CustomField_Overlay.pm:144 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" -msgstr "Ðе могу добавить значение Ð¿Ð¾Ð»Ñ Ð±ÐµÐ· имени" +msgstr "Ðевозможно добавление Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»ÑŒÐ½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ Ð±ÐµÐ· наименованиÑ" + +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" -#: lib/RT/Link_Overlay.pm:132 +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "Ðевозможно найти Ñохраненный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½Ð¸Ð¼" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" -msgstr "Тикет не может быть ÑвÑзан Ñ Ñамим Ñобой" +msgstr "Ðевозможно ÑвÑзать заÑвку Ñаму Ñ Ñобой" -#: lib/RT/Ticket_Overlay.pm:2787 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" -msgstr "Ðе могу Ñоединить Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð½Ñ‹Ð¼ тикетом (Ñта ошибка никогда не должна проиÑходить)." +msgstr "Ðевозможно объединить Ñ Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð½Ð¾Ð¹ заÑвкой (Ñта ошибка никогда не должна проиÑходить)." + +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "Ðевозможно Ñохранить Ñтот запроÑ" -#: lib/RT/Ticket_Overlay.pm:2605 lib/RT/Ticket_Overlay.pm:2674 +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" -msgstr "Ðе могу указать одновременно и иÑточник, и Ð°Ð´Ñ€ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ" +msgstr "Ðевозможно указывать одновременно и иÑточник и Ð°Ð´Ñ€ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ" -#: html/autohandler:112 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" -msgstr "Ðе могу Ñоздать пользователÑ: %1" +msgstr "Ðевозможно Ñоздать пользователÑ: %1" -#: etc/initialdata:50 html/Admin/Queues/People.html:44 html/SelfService/Create.html:51 html/SelfService/Display.html:50 html/Ticket/Create.html:64 html/Ticket/Elements/EditPeople:51 html/Ticket/Elements/ShowPeople:35 html/Ticket/Update.html:45 html/Ticket/Update.html:78 lib/RT/ACE_Overlay.pm:88 +#: 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 msgid "Cc" msgstr "КопиÑ" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:52 msgid "Change password" -msgstr "Сменить пароль" +msgstr "Изменить пароль" -#: html/Ticket/Create.html:101 html/Ticket/Update.html:92 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "Выбрать вÑе" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" -msgstr "" +msgstr "Выделите пункты Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ" -#: html/Admin/Elements/SelectRights:31 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" -msgstr "Выберите права, которые хотите отозвать" +msgstr "Выделите права, которые хотите отозвать" -#: html/Ticket/Create.html:183 html/Ticket/Elements/EditLinks:131 html/Ticket/Elements/EditLinks:69 html/Ticket/Elements/ShowLinks:51 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "Потомки" -#: html/Admin/Elements/ModifyUser:80 html/Admin/Users/Modify.html:132 html/User/Prefs.html:92 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "Город" -#: html/Ticket/Elements/ShowDates:47 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "ОчиÑтить вÑе" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" -msgstr "" +msgstr "Закрыто" + +#: NOT FOUND IN SOURCE +msgid "Closed Tickets" +msgstr "Закрытые заÑвки" -#: html/SelfService/Elements/Tabs:60 +#: NOT FOUND IN SOURCE msgid "Closed requests" msgstr "Закрытые запроÑÑ‹" +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 +msgid "Closed tickets" +msgstr "Закрытые заÑвки" + #: NOT FOUND IN SOURCE msgid "Code" -msgstr "" +msgstr "Код" #: NOT FOUND IN SOURCE msgid "Command not understood!\\n" -msgstr "Чего-чего?\\n" +msgstr "Команда не раÑпознана!\\n" -#: html/Ticket/Elements/ShowTransaction:179 html/Ticket/Elements/Tabs:153 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "Комментировать" -#: html/Admin/Elements/ModifyQueue:45 html/Admin/Queues/Modify.html:58 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸ÐµÐ²" @@ -878,338 +1125,395 @@ msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸ÐµÐ²" msgid "Comment not recorded" msgstr "Комментарий не запиÑан" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" -msgstr "" +msgstr "Комментарии заÑвки" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" -msgstr "" +msgstr "КомментироватьЗаÑвку" -#: html/Admin/Elements/ModifyUser:35 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "Комментарии" -#: html/Ticket/ModifyAll.html:70 html/Ticket/Update.html:70 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" -msgstr "Комментарии (Ðе отправлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾ÑителÑм)" +msgstr "Комментарии (Ðе отправлÑÑŽÑ‚ÑÑ Ð°Ð²Ñ‚Ð¾Ñ€Ð°Ð¼ заÑвки)" -#: html/Search/Bulk.html:122 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" -msgstr "Комментарии (не отправлÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ñителю)" +msgstr "Комментарии (Ðе отправлÑÑŽÑ‚ÑÑ Ð°Ð²Ñ‚Ð¾Ñ€Ð°Ð¼ заÑвки)" -#: html/Elements/ViewUser:27 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" -msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ %1" +msgstr "Комментарии о %1" -#: html/Admin/Users/Modify.html:185 html/Ticket/Elements/ShowRequestor:44 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" -msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± Ñтом пользователе" +msgstr "Комментарии об Ñтом пользователе" -#: lib/RT/Transaction_Overlay.pm:545 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" -msgstr "Добавлены комментарии" +msgstr "Комментарии добавлены" -#: lib/RT/Action/Generic.pm:140 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" -msgstr "ДейÑтвие не реализовано" +msgstr "" #: NOT FOUND IN SOURCE msgid "Compile Restrictions" msgstr "Применить ограничениÑ" -#: html/Admin/Elements/EditScrip:41 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "УÑловие" -#: bin/rt-crontool:109 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "ПодходÑщее уÑловие..." -#: lib/RT/Scrip_Overlay.pm:160 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "УÑловие не найдено" -#: html/Elements/Tabs:52 +#: html/Elements/Tabs:81 msgid "Configuration" -msgstr "ÐаÑтройка" +msgstr "КонфигурациÑ" -#: html/SelfService/Prefs.html:33 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "Подтвердить" -#: html/Admin/Elements/ModifyUser:60 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "ÐšÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ" #: NOT FOUND IN SOURCE msgid "Contacted date '%1' could not be parsed" -msgstr "Ðе могу разобрать дату поÑледнего контакта '%1'" +msgstr "Ðевезможно идентифицировать дату поÑледнего контакта '%1'" -#: html/Admin/Elements/ModifyTemplate:44 html/Ticket/ModifyAll.html:87 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" -msgstr "ТекÑÑ‚" +msgstr "Содержимое" + +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "Тип-СодержаниÑ" #: NOT FOUND IN SOURCE msgid "Coould not create group" -msgstr "" +msgstr "Ðевозможно Ñоздать группу" + +#: html/Search/Elements/EditSearches:64 +msgid "Copy" +msgstr "КопиÑ" -#: etc/initialdata:266 +#: etc/initialdata:286 msgid "Correspondence" -msgstr "" +msgstr "КорреÑпонденциÑ" -#: html/Admin/Elements/ModifyQueue:39 html/Admin/Queues/Modify.html:51 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" -msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ Ñообщений" +msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ñ€Ñ€ÐµÑпонденции" -#: lib/RT/Transaction_Overlay.pm:541 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" -msgstr "Добавлено Ñообщение" +msgstr "КорреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð°" #: NOT FOUND IN SOURCE msgid "Correspondence not recorded" -msgstr "Сообщение не запиÑано" +msgstr "КорреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ Ð½Ðµ запиÑана" -#: lib/RT/Ticket_Overlay.pm:3458 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " -msgstr "Ðе могу добавить новое поле Ñ Ñ‚Ð°ÐºÐ¸Ð¼ значением." +msgstr "Ðевозможно добавить новое значение дополнительного Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвки." #: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. %1 " +msgstr "Ðевозможно добавить новое значение дополнительного Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвки. %1" + +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " msgstr "" -#: lib/RT/Ticket_Overlay.pm:2963 lib/RT/Ticket_Overlay.pm:2971 lib/RT/Ticket_Overlay.pm:2987 +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ полÑ. %1" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " -msgstr "Ðе могу Ñменить владельца. " +msgstr "Ðевозможно изменить ответÑтвенного." -#: html/Admin/Elements/EditCustomField:68 html/Admin/Elements/EditCustomFields:166 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" -msgstr "Ðе могу добавить поле" +msgstr "Ðевозможно Ñоздать дополнительное поле" -#: html/User/Groups/Modify.html:77 lib/RT/Group_Overlay.pm:474 lib/RT/Group_Overlay.pm:481 +#: html/Admin/Elements/EditCustomField:113 +#. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" -msgstr "Ðе могу Ñоздать группу" +msgstr "Ðевозможно Ñоздать группу" -#: html/Admin/Global/Template.html:75 html/Admin/Queues/Template.html:72 +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" -msgstr "Ðе могу Ñоздать шаблон: %1" +msgstr "Ðевозможно Ñоздать шаблон: %1" -#: lib/RT/Ticket_Overlay.pm:1073 lib/RT/Ticket_Overlay.pm:333 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" -msgstr "Ðе могу Ñоздать тикет. Очередь не определена." +msgstr "Ðевозможно Ñоздать заÑвку. Ðе задана очередь." -#: lib/RT/User_Overlay.pm:208 lib/RT/User_Overlay.pm:220 lib/RT/User_Overlay.pm:238 lib/RT/User_Overlay.pm:414 +#: 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 "Ðе могу Ñоздать пользователÑ" +msgstr "Ðевозможно Ñоздать пользователÑ" #: NOT FOUND IN SOURCE msgid "Could not create watcher for requestor" -msgstr "" +msgstr "Ðевозможно Ñоздать Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð° заÑвки" #: NOT FOUND IN SOURCE msgid "Could not find a ticket with id %1" -msgstr "Ðе могу найти тикет по идентификатору %1" +msgstr "Ðевозможно найти заÑвку Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ %1" #: NOT FOUND IN SOURCE msgid "Could not find group %1." -msgstr "Ðе найдена группа %1." +msgstr "Ðевозможно найти группу %1." -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1422 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" -msgstr "Ðе могу найти или Ñоздать Ñтого пользователÑ" +msgstr "Ðевозможно найти или Ñоздать Ñтого пользователÑ" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1501 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" -msgstr "Ðе могу найти Ñтого пользователÑ" +msgstr "Ðевозможно найти Ñтого пользователÑ" #: NOT FOUND IN SOURCE msgid "Could not find user %1." -msgstr "Ðе найден пользователь %1." +msgstr "Ðевозможно найти Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1." -#: html/Admin/Groups/Members.html:88 html/User/Groups/Members.html:90 html/User/Groups/Modify.html:82 +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "Ðевозможно загрузить дополнительное поле %1" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" -msgstr "Ðе могу загрузить группу" +msgstr "Ðевозможно загрузить группу" + +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" -msgstr "Ðе могу назначить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1 Ð´Ð»Ñ Ñтой очереди" +msgstr "Ðевозможно назначить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1 Ð´Ð»Ñ Ñтой очереди" -#: lib/RT/Ticket_Overlay.pm:1443 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" -msgstr "Ðе могу назначить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1 Ð´Ð»Ñ Ñтого тикета" +msgstr "Ðевозможно назначить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1 Ð´Ð»Ñ Ñтой заÑвки" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" -msgstr "Ðе могу отобрать функции у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 в Ñтой очереди" +msgstr "Ðевозможно отозвать функции у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 Ð´Ð»Ñ Ñтой очереди" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" -msgstr "Ðе могу отобрать функции у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 Ð´Ð»Ñ Ñтого тикета" +msgstr "Ðевозможно отозвать функции у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ°Ðº %1 Ð´Ð»Ñ Ñтой заÑвки" -#: lib/RT/Group_Overlay.pm:985 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "Ðевозможно уÑтановить информацию о пользователе" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" -msgstr "Ðе могу добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² группу" +msgstr "Ðевозможно добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² группу" -#: lib/RT/Ticket_Overlay.pm:3468 lib/RT/Ticket_Overlay.pm:3524 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" -msgstr "Ðе могу Ñоздать транзакцию: %1" +msgstr "Ðевозможно Ñоздать транзакцию: %1" #: NOT FOUND IN SOURCE msgid "Couldn't figure out what to do from gpg's reply\\n" -msgstr "Ðе пойму что делать из ответа gpg\\n" +msgstr "Ðевозможно определить дальнейшие дейÑÑ‚Ð²Ð¸Ñ Ð¸Ð· ответа gpg\\n" #: NOT FOUND IN SOURCE msgid "Couldn't find group\\n" -msgstr "Ðе найти группу\\n" +msgstr "Ðевезможно найти группу\\n" -#: lib/RT/Interface/Web.pm:866 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" -msgstr "" +msgstr "Ðевозможно найти Ñтроку" -#: lib/RT/Group_Overlay.pm:959 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" -msgstr "Ðе найти Ñтого пользователÑ" +msgstr "Ðевозможно найти Ñтого пользователÑ" -#: lib/RT/CustomField_Overlay.pm:175 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" -msgstr "Ðе найти Ñтого значениÑ" +msgstr "Ðевозможно найти Ñто значение" #: NOT FOUND IN SOURCE msgid "Couldn't find that watcher" -msgstr "" +msgstr "Ðевозможно найти Ñтого наблюдателÑ" #: NOT FOUND IN SOURCE msgid "Couldn't find user\\n" -msgstr "Пользователь не найден\\n" +msgstr "Ðевозможно найти пользователÑ\\n" -#: lib/RT/CurrentUser.pm:112 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" -msgstr "Ðе загрузить %1 из базы пользователей.\\n" +msgstr "Ðевозможно загрузить %1 из базы пользователей.\\n" -#: NOT FOUND IN SOURCE -msgid "Couldn't load KeywordSelects." +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" msgstr "" +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "Ðевозможно загрузить дополнительное поле %1" + #: NOT FOUND IN SOURCE msgid "Couldn't load RT config file '%1' %2" -msgstr "Ðе загрузить файл наÑтроек RT '%1' %2" +msgstr "Ðевозможно загрузить файл наÑтроек RT '%1' %2" #: NOT FOUND IN SOURCE msgid "Couldn't load Scrips." -msgstr "" +msgstr "Ðевозможно загрузить Ñкриплеты." -#: html/Admin/Groups/GroupRights.html:88 html/Admin/Groups/UserRights.html:75 +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" -msgstr "Ðе загрузить группу %1" +msgstr "Ðевозможно загрузить группу %1" -#: lib/RT/Link_Overlay.pm:175 lib/RT/Link_Overlay.pm:184 lib/RT/Link_Overlay.pm:211 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" -msgstr "Ðе загрузить ÑÑылку" +msgstr "Ðевозможно загрузить ÑÑылку" + +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "Ðевозможно загрузить объект %1" -#: html/Admin/Elements/EditCustomFields:147 html/Admin/Queues/People.html:121 +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" -msgstr "Ðе загрузить очередь" +msgstr "Ðевозможно загрузить очередь" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:72 +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" -msgstr "Ðе загрузить очередь %1" +msgstr "Ðевозможно загрузить очередь %1" #: NOT FOUND IN SOURCE msgid "Couldn't load scrip" -msgstr "Ðе загрузить Ñкрипт" +msgstr "Ðевозможно загрузить Ñкриплет" #: NOT FOUND IN SOURCE msgid "Couldn't load template" -msgstr "Ðе загрузить шаблон" +msgstr "Ðевозможно загрузить шаблон" -#: html/Admin/Users/Prefs.html:79 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" -msgstr "Ðе загрузить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (%1)" +msgstr "Ðевозможно загрузить Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (%1)" -#: html/SelfService/Display.html:166 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" -msgstr "Ðе загрузить тикет '%1'" +msgstr "Ðевозможно загрузить заÑвку '%1'" + +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" -#: html/Admin/Elements/ModifyUser:86 html/Admin/Users/Modify.html:149 html/User/Prefs.html:98 +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "Страна" -#: html/Admin/Elements/CreateUserCalled:26 html/Ticket/Create.html:135 html/Ticket/Create.html:195 +#: 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 msgid "Create" msgstr "Создать" -#: etc/initialdata:128 +#: etc/initialdata:135 msgid "Create Tickets" -msgstr "" +msgstr "Создать заÑвки" -#: html/Admin/Elements/EditCustomField:58 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" -msgstr "Добавить поле" +msgstr "Создать дополнительное поле" -#: html/Admin/Queues/CustomField.html:48 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" -msgstr "" +msgstr "Создать дополнительное поле Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ 1" -#: html/Admin/Global/CustomField.html:48 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" -msgstr "" +msgstr "Создать дополнительное поле Ð´Ð»Ñ Ð²Ñех очередей" #: NOT FOUND IN SOURCE msgid "Create a new Custom Field" -msgstr "Добавить новое поле" +msgstr "Добавить новое дополнительное поле" #: NOT FOUND IN SOURCE msgid "Create a new global Scrip" -msgstr "" +msgstr "Создать новый глобальный Ñкриплет" #: NOT FOUND IN SOURCE msgid "Create a new global scrip" -msgstr "" +msgstr "Создать новый глобальный Ñкриплет" -#: html/Admin/Groups/Modify.html:67 html/Admin/Groups/Modify.html:93 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" -msgstr "Добавить новую группу" +msgstr "Создать новую группу" -#: html/User/Groups/Modify.html:67 html/User/Groups/Modify.html:92 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" -msgstr "Добавить новую личную группу" +msgstr "Создать новую личную группу" #: NOT FOUND IN SOURCE msgid "Create a new queue" -msgstr "Добавить новую очередь" +msgstr "Создать новую очередь" #: NOT FOUND IN SOURCE msgid "Create a new scrip" -msgstr "Добавить новый Ñкрипт" +msgstr "Создать новый Ñкриплет" #: NOT FOUND IN SOURCE msgid "Create a new template" -msgstr "Добавить новый шаблон" +msgstr "Создать новый шаблон" -#: html/SelfService/Create.html:30 html/Ticket/Create.html:25 html/Ticket/Create.html:28 html/Ticket/Create.html:36 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" -msgstr "Добавить новый тикет" +msgstr "Создать новую заÑвку" -#: html/Admin/Users/Modify.html:214 html/Admin/Users/Modify.html:241 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" -msgstr "Добавить нового пользователÑ" +msgstr "Создать нового пользователÑ" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "Создать очередь" @@ -1217,708 +1521,917 @@ msgstr "Создать очередь" msgid "Create a queue called" msgstr "Создать очередь Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼" -#: html/SelfService/Create.html:25 html/SelfService/Create.html:27 +#: NOT FOUND IN SOURCE msgid "Create a request" msgstr "Создать запроÑ" -#: html/Admin/Queues/Scrip.html:59 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" -msgstr "Создать Ñкрипт Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" +msgstr "Создать Ñкриплет Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" -#: html/Admin/Global/Template.html:69 html/Admin/Queues/Template.html:65 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" -msgstr "Создать запроÑ" +msgstr "Создать шаблон" + +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 +msgid "Create a ticket" +msgstr "Создать заÑвку" #: NOT FOUND IN SOURCE msgid "Create failed: %1 / %2 / %3 " -msgstr "" +msgstr "Ошибка ÑозданиÑ: %1 / %2 / %3 " #: NOT FOUND IN SOURCE msgid "Create failed: %1/%2/%3" -msgstr "" +msgstr "Ошибка ÑозданиÑ: %1/%2/%3" -#: etc/initialdata:130 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" -msgstr "" +msgstr "Создать новые заÑвки на оÑнове Ñтого шаблона Ñкриплета" -#: html/SelfService/Create.html:81 +#: html/SelfService/Create.html:105 msgid "Create ticket" -msgstr "Создать тикет" +msgstr "Создать заÑвку" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" -msgstr "" +msgstr "Создать заÑвки в Ñтой очереди" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" -msgstr "" +msgstr "Создать, удалить или изменить дополнительные полÑ" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" -msgstr "" +msgstr "Создать, удалить или изменить очереди" #: NOT FOUND IN SOURCE msgid "Create, delete and modify the members of any user's personal groups" -msgstr "" +msgstr "Создать, удалить или изменить членов любой пользовательÑкой перÑональной группы" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" -msgstr "" +msgstr "Создать, удалить или изменить членов перÑональных групп" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" +msgstr "Создать, удалить или изменить пользователей" + +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" msgstr "" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" -msgstr "" +msgstr "Создать ЗаÑвку" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/ShowDates:27 lib/RT/Ticket_Overlay.pm:1167 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" -msgstr "Создан" +msgstr "Создана" -#: html/Admin/Elements/EditCustomField:71 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" -msgstr "Добавлено поле %1" +msgstr "Создано дополнительное поле %1" + +#: NOT FOUND IN SOURCE +msgid "Created by" +msgstr "Создано пользователем" + +#: NOT FOUND IN SOURCE +msgid "Created during" +msgstr "Создано во времÑ" #: NOT FOUND IN SOURCE msgid "Created template %1" msgstr "Создан шаблон %1" -#: html/Ticket/Elements/EditLinks:28 -msgid "Current Relationships" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "Ðвтор заÑвки" + +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "Текущие ÑвÑзи" -#: html/Admin/Elements/EditScrips:30 +#: NOT FOUND IN SOURCE +msgid "Current Relationships" +msgstr "Текущие взаимоÑвÑзи" + +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" -msgstr "Текущие Ñкрипты" +msgstr "Текущие Ñкриплеты" -#: html/Admin/Groups/Members.html:39 html/User/Groups/Members.html:42 +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "Текущие пользователи" -#: html/Admin/Elements/SelectRights:29 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "Текущие права" -#: html/Search/Listing.html:71 +#: NOT FOUND IN SOURCE msgid "Current search criteria" -msgstr "" +msgstr "Текущие критерии поиÑка" -#: html/Admin/Queues/People.html:41 html/Ticket/Elements/EditPeople:45 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "Текущие наблюдатели" -#: html/Admin/Global/CustomField.html:55 -#. ($CustomField) +#: NOT FOUND IN SOURCE msgid "Custom Field #%1" -msgstr "" +msgstr "Дополнительное поле #%1" -#: html/Admin/Elements/QueueTabs:53 html/Admin/Elements/SystemTabs:40 html/Admin/Global/index.html:50 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "Дополнительные полÑ" -#: html/Admin/Elements/EditScrip:73 +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "Дополнительные Ð¿Ð¾Ð»Ñ Ð´Ð»Ñ %1" + +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" -msgstr "ПользовательÑкий код очиÑтки" +msgstr "ПользовательÑкий код очиÑтки дейÑтвиÑ" -#: html/Admin/Elements/EditScrip:65 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" -msgstr "ПользовательÑкий подготовительный код" +msgstr "ПользовательÑкий код подготовки дейÑтвиÑ" -#: html/Admin/Elements/EditScrip:49 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "ПользовательÑкое уÑловие" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "Дополнительное поле %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: NOT FOUND IN SOURCE +msgid "Custom field %1 does not apply to this object" +msgstr "Дополнительное поле %1 не отноÑитÑÑ Ðº Ñтому объекту" + +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "Дополнительное поле %1 имеет значение." -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "Дополнительное поле %1 не имеет значениÑ." -#: lib/RT/Ticket_Overlay.pm:3360 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" -msgstr "Дополнительное поле %1 не найдено" +msgstr "Ðевозможно найти дополнительное поле %1" -#: html/Admin/Elements/EditCustomFields:197 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" -msgstr "" +msgstr "Дополнительное поле удалено" -#: lib/RT/Ticket_Overlay.pm:3510 +#: NOT FOUND IN SOURCE msgid "Custom field not found" -msgstr "Дополнительное поле не найдено" +msgstr "Ðевозможно найти дополнительное поле" -#: lib/RT/CustomField_Overlay.pm:283 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" -msgstr "Значение %1 не может быть найдено Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ %2" +msgstr "Ðевозможно найти значение %1 дополнительного Ð¿Ð¾Ð»Ñ %2" #: NOT FOUND IN SOURCE msgid "Custom field value changed from %1 to %2" -msgstr "Значение Ð¿Ð¾Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñ %1 на %2" +msgstr "Значение дополнительного Ð¿Ð¾Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¾ Ñ %1 на %2" -#: lib/RT/CustomField_Overlay.pm:185 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" -msgstr "Значение дополнительного Ð¿Ð¾Ð»Ñ Ð½Ðµ может быть удалено" +msgstr "Ðевозможно удалить значение дополнительного полÑ" -#: lib/RT/CustomField_Overlay.pm:289 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" -msgstr "Значение дополнительного Ð¿Ð¾Ð»Ñ Ð½Ðµ найдено" +msgstr "Ðевозможно найти значение дополнительного Ð¿Ð¾Ð»Ñ " -#: lib/RT/CustomField_Overlay.pm:183 lib/RT/CustomField_Overlay.pm:291 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" -msgstr "Значение дополнительного Ð¿Ð¾Ð»Ñ Ð±Ñ‹Ð»Ð¾ удалено" +msgstr "Значение дополнительного Ð¿Ð¾Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¾" -#: lib/RT/Transaction_Overlay.pm:550 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" -msgstr "" +msgstr "ДополнительноеПоле" #: NOT FOUND IN SOURCE msgid "Data error" -msgstr "" +msgstr "Ошибка данных" -#: html/Ticket/Create.html:161 html/Ticket/Elements/ShowSummary:53 html/Ticket/Elements/Tabs:93 html/Ticket/ModifyAll.html:44 +#: 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 msgid "Dates" msgstr "Даты" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "Дек." #: NOT FOUND IN SOURCE msgid "December" -msgstr "" +msgstr "Декабрь" #: NOT FOUND IN SOURCE msgid "Default Autoresponse Template" -msgstr "" +msgstr "Шаблон автоответа по умолчанию" -#: etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" -msgstr "" +msgstr "Шаблон автоответа по умолчанию" -#: etc/initialdata:275 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "Очередь по умолчанию" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "Ðвтор заÑвки по умолчанию" + +#: etc/initialdata:296 msgid "Default admin comment template" -msgstr "" +msgstr "Шаблон админиÑтративного ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚Ð°Ñ€Ð¸Ñ Ð¿Ð¾ умолчанию" -#: etc/initialdata:257 +#: etc/initialdata:275 msgid "Default admin correspondence template" -msgstr "" +msgstr "Шаблон админиÑтративной корреÑпонденции по умолчанию" -#: etc/initialdata:267 +#: etc/initialdata:287 msgid "Default correspondence template" -msgstr "" +msgstr "Шаблон корреÑпонденции по умолчанию" -#: etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" -msgstr "" +msgstr "Шаблон транзакции по умолчанию" -#: lib/RT/Transaction_Overlay.pm:645 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" -msgstr "" +msgstr "Умолчание: %1/%2 изменено Ñ %3 на %4" -#: html/User/Delegation.html:25 html/User/Delegation.html:28 +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" -msgstr "Передача прав" +msgstr "Делегирование прав" -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." -msgstr "" +msgstr "Делегирование отдельных прав, которые выданы вам." -#: lib/RT/System.pm:63 +#: lib/RT/System.pm:85 msgid "DelegateRights" -msgstr "" +msgstr "ДелегироватьПрава" -#: html/User/Elements/Tabs:38 +#: html/User/Elements/Tabs:59 msgid "Delegation" -msgstr "" +msgstr "Делегирование прав" -#: NOT FOUND IN SOURCE +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" +msgstr "Удалить" + +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "Удалить шаблон" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" msgstr "" -#: lib/RT/Queue_Overlay.pm:90 +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "Удалить выбранные Ñкриплеты" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" -msgstr "" +msgstr "Удалить заÑвки" -#: lib/RT/Queue_Overlay.pm:90 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" +msgstr "УдалÑтьЗаÑвку" + +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" msgstr "" -#: lib/RT/Transaction_Overlay.pm:187 +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "Удаление Ñтого объекта может нарушить ÑÑылочную целоÑтноÑть" -#: lib/RT/Queue_Overlay.pm:292 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑть" -#: lib/RT/User_Overlay.pm:430 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑть" #: NOT FOUND IN SOURCE msgid "Deleting this object would violate referential integrity." -msgstr "" +msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑть." #: NOT FOUND IN SOURCE msgid "Deleting this object would violate referential integrity. That's bad." -msgstr "" +msgstr "Удаление Ñтого объекта нарушит ÑÑылочную целоÑтноÑть." -#: html/Approvals/Elements/Approve:46 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "Отказать" -#: html/Ticket/Create.html:181 html/Ticket/Elements/EditLinks:123 html/Ticket/Elements/EditLinks:47 html/Ticket/Elements/ShowDependencies:32 html/Ticket/Elements/ShowLinks:35 +#: 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 msgid "Depended on by" -msgstr "От него завиÑÑÑ‚" +msgstr "От неё завиÑÑÑ‚" #: NOT FOUND IN SOURCE msgid "Dependencies: \\n" msgstr "ЗавиÑимоÑти: \\n" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:180 html/Ticket/Elements/EditLinks:119 html/Ticket/Elements/EditLinks:36 html/Ticket/Elements/ShowDependencies:25 html/Ticket/Elements/ShowLinks:27 +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "Добавлено требование заÑвкой %1" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "Удалено требование заÑвкой %1" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "Добавлена завиÑимоÑть от %1" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "Удалена завиÑимоÑть от %1" + +#: 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 msgid "Depends on" msgstr "ЗавиÑит от" #: NOT FOUND IN SOURCE msgid "DependsOn" -msgstr "" +msgstr "ЗавиÑит от" -#: html/Elements/SelectSortOrder:35 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "Ð’ порÑдке убываниÑ" -#: html/SelfService/Create.html:75 html/Ticket/Create.html:119 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "Опишите проблему" -#: html/Admin/Elements/AddCustomFieldValue:27 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/EditScrip:34 html/Admin/Elements/ModifyQueue:36 html/Admin/Elements/ModifyTemplate:36 html/Admin/Groups/Modify.html:49 html/Admin/Queues/Modify.html:48 html/Elements/SelectGroups:27 html/User/Groups/Modify.html:49 +#: 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 "ОпиÑание" -#: html/SelfService/Elements/MyRequests:44 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "ПодробноÑти" -#: html/Ticket/Elements/Tabs:85 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "Показать" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" -msgstr "" +msgstr "Показать ÑпиÑок прав доÑтупа" + +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "Показать колонки" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" -msgstr "" +msgstr "Показать шаблоны Ñкриплетов Ð´Ð»Ñ Ñтой очереди" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" -msgstr "" +msgstr "Показать Ñкриплеты Ð´Ð»Ñ Ñтой очереди" -#: html/Ticket/Elements/ShowHistory:35 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" -msgstr "Режим показа" +msgstr "Режим отображениÑ" -#: html/SelfService/Display.html:25 html/SelfService/Display.html:29 -#. ($Ticket->id) +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "Показать Ñохраненные запроÑÑ‹ Ð´Ð»Ñ Ñтой группы" + +#: NOT FOUND IN SOURCE msgid "Display ticket #%1" -msgstr "Показать тикет #%1" +msgstr "Показать заÑвку #%1" -#: lib/RT/System.pm:54 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "РаÑпроÑтранÑетÑÑ Ð¿Ð¾ верÑии 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> GNU GPL.</a>" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" +msgstr "Делать вÑе и везде" + +#: html/Search/Build.html:112 +msgid "Do the Search" msgstr "" -#: html/Elements/Refresh:30 +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "Ðе обновлÑть Ñту Ñтраницу" -#: html/Search/Elements/PickRestriction:114 +#: NOT FOUND IN SOURCE msgid "Don't show search results" -msgstr "" +msgstr "Ðе показывать результаты поиÑка" -#: html/Ticket/Elements/ShowTransaction:105 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" -msgstr "Скачать" +msgstr "Загрузить" + +#: NOT FOUND IN SOURCE +msgid "Download all the tickets as a tab delimited file" +msgstr "Загрузить вÑе заÑвки как файл Ñо значениÑми, разделенными табулÑцией" + +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "Загрузить как файл Ñо значениÑми, разделенными табулÑцией" -#: html/Elements/SelectDateType:32 html/Ticket/Create.html:167 html/Ticket/Elements/EditDates:45 html/Ticket/Elements/ShowDates:43 lib/RT/Ticket_Overlay.pm:1171 +#: 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 msgid "Due" msgstr "Дан Ñрок" #: NOT FOUND IN SOURCE msgid "Due date '%1' could not be parsed" -msgstr "Ðе могу прочеÑть Ñрок Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹ '%1'" +msgstr "Ðевозможно разобрать Ñрок Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹ '%1'" -#: bin/rt-commit-handler:754 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" -msgstr "ОШИБКÐ: Ðе могу загрузить тикет '%1': %2.\\n" +msgstr "ОШИБКÐ: Ðевозможно загрузить заÑвку '%1': %2.\\n" #: NOT FOUND IN SOURCE msgid "Edit" -msgstr "Изменить" +msgstr "Редактировать" #: NOT FOUND IN SOURCE msgid "Edit Conditions" -msgstr "" +msgstr "Редактировать уÑловиÑ" -#: html/Admin/Queues/CustomFields.html:45 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" -msgstr "Изменение дополнительных полей Ð´Ð»Ñ %1" +msgstr "Редактирование дополнительных полей Ð´Ð»Ñ %1" -#: html/Ticket/ModifyLinks.html:36 +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" +msgstr "Редактировать ÑвÑзи" + +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "Редактировать запроÑ" + +#: NOT FOUND IN SOURCE msgid "Edit Relationships" -msgstr "Изменение ÑвÑзей" +msgstr "Редактировать взаимоÑвÑзи" -#: html/Admin/Queues/Templates.html:41 +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" -msgstr "" +msgstr "Редактировать шаблоны Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" #: NOT FOUND IN SOURCE msgid "Edit keywords" -msgstr "" +msgstr "Редактировать ключевые Ñлова" + +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "Редактировать Ñохраненные запроÑÑ‹ Ñтой группы" #: NOT FOUND IN SOURCE msgid "Edit scrips" -msgstr "" +msgstr "Редактировать Ñкриплеты" -#: html/Admin/Global/index.html:46 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" -msgstr "Изменение ÑиÑтемных шаблонов" +msgstr "Редактировать ÑиÑтемные шаблоны" #: NOT FOUND IN SOURCE msgid "Edit templates for %1" -msgstr "Изменение шаблонов Ð´Ð»Ñ %1" +msgstr "Редактирование шаблонов Ð´Ð»Ñ %1" -#: html/Admin/Elements/ModifyQueue:25 html/Admin/Queues/Modify.html:117 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "РедактироватьСохраненныеЗапроÑÑ‹" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" -msgstr "Изменение наÑтроек очереди %1" +msgstr "Редактирование наÑтроек очереди %1" -#: html/Admin/Elements/ModifyUser:25 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" -msgstr "Изменение наÑтроек Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1" +msgstr "Редактирование наÑтроек Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" -msgstr "Изменение Ð¿Ð¾Ð»Ñ %1" +msgstr "Редактирование Ð¿Ð¾Ð»Ñ %1" -#: html/Admin/Groups/Members.html:32 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" -msgstr "Пользователи в группе %1" +msgstr "Редактирование ÑпиÑка пользователей группы %1" -#: html/User/Groups/Members.html:129 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" -msgstr "Пользователи в личной группе %1" +msgstr "Редактирование ÑпиÑка пользователей перÑональной группы %1" #: NOT FOUND IN SOURCE msgid "Editing template %1" -msgstr "Изменение шаблона %1" +msgstr "Редактирование шаблона %1" -#: lib/RT/Ticket_Overlay.pm:2615 lib/RT/Ticket_Overlay.pm:2683 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "Ðужно указать либо иÑточник, либо Ð°Ð´Ñ€ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ" -#: html/Admin/Users/Modify.html:53 html/Admin/Users/Prefs.html:46 html/Elements/SelectUsers:27 html/Ticket/Elements/AddWatchers:56 html/User/Prefs.html:42 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "Email" -#: lib/RT/User_Overlay.pm:188 +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" -msgstr "Email уже занÑÑ‚" +msgstr "Email Ð°Ð´Ñ€ÐµÑ ÑƒÐ¶Ðµ занÑÑ‚" -#: html/Admin/Elements/ModifyUser:42 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "EmailAddress" -#: html/Admin/Elements/ModifyUser:54 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "EmailEncoding" -#: html/Admin/Elements/EditCustomField:36 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" -msgstr "" +msgstr "ИÑпользуетÑÑ (ÑнÑтие отметки отключает иÑпользование Ñтого дополнительного полÑ)" -#: html/Admin/Groups/Modify.html:53 html/User/Groups/Modify.html:53 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" -msgstr "" +msgstr "ИÑпользуетÑÑ (ÑнÑтие отметки отключает иÑпользование Ñтой группы)" -#: html/Admin/Queues/Modify.html:84 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" -msgstr "Включена (СнÑÑ‚Ð°Ñ Ð³Ð°Ð»Ð¾Ñ‡ÐºÐ° означает отключенную очередь)" +msgstr "ИÑпользуетÑÑ (ÑнÑтие отметки отключает иÑпользование Ñтой очереди)" -#: html/Admin/Elements/EditCustomFields:99 +#: NOT FOUND IN SOURCE msgid "Enabled Custom Fields" -msgstr "" +msgstr "ИÑпользуемые дополнительные полÑ" -#: html/Admin/Queues/index.html:56 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" -msgstr "Включенные очереди" +msgstr "ИÑпользуемые очереди" -#: html/Admin/Elements/EditCustomField:90 html/Admin/Groups/Modify.html:117 html/Admin/Queues/Modify.html:138 html/Admin/Users/Modify.html:283 html/User/Groups/Modify.html:117 +#: 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)) msgid "Enabled status %1" -msgstr "Включен ÑÑ‚Ð°Ñ‚ÑƒÑ %1" +msgstr "Ðктивирован ÑÑ‚Ð°Ñ‚ÑƒÑ %1" + +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "Ðктивирован ÑтатуÑ: %1" -#: lib/RT/CustomField_Overlay.pm:361 +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" -msgstr "" +msgstr "Введите неÑколько значений" + +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "Введите объекты или ÑÑылки на объекты. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸." -#: lib/RT/CustomField_Overlay.pm:358 +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" -msgstr "" +msgstr "Введите одно значение" + +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "Введите оxthtlb или ÑÑылки на оxthtlb. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸." + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "Введите заÑвки или ÑÑылки на заÑвки. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸." -#: html/Ticket/Elements/EditLinks:112 +#: NOT FOUND IN SOURCE msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "Введите номера или ÑÑылки на тикеты. ÐеÑколько тикетов разделÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸." +msgstr "Введите заÑвки или ÑÑылки на заÑвки. Ð—Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð´ÐµÐ»ÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¾Ð±ÐµÐ»Ð°Ð¼Ð¸." + +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "Введите до %1 значений" -#: html/Elements/Login:29 html/SelfService/Error.html:25 html/SelfService/Error.html:26 +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "Ошибка" #: NOT FOUND IN SOURCE msgid "Error adding watcher" -msgstr "" +msgstr "Ошибка Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð°Ð±Ð»ÑŽÐ´Ð°Ñ‚ÐµÐ»Ñ" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "Ошибка в параметрах Queue->AddWatcher" -#: lib/RT/Queue_Overlay.pm:713 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Queue->DelWatcher" msgstr "Ошибка в параметрах Queue->DelWatcher" -#: lib/RT/Ticket_Overlay.pm:1356 +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" +msgstr "Ошибка в параметрах Queue->DeleteWatcher" + +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "Ошибка в параметрах Ticket->AddWatcher" -#: lib/RT/Ticket_Overlay.pm:1532 +#: NOT FOUND IN SOURCE msgid "Error in parameters to Ticket->DelWatcher" msgstr "Ошибка в параметрах Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" +msgstr "Ошибка в параметрах Ticket->DeleteWatcher" + +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "РаÑширить заÑвки" + +#: NOT FOUND IN SOURCE +msgid "Estimate" +msgstr "РаÑчетно" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "РаÑчетное" + #: etc/initialdata:20 msgid "Everyone" -msgstr "" +msgstr "Ð’Ñе" -#: bin/rt-crontool:194 +#: bin/rt-crontool:219 msgid "Example:" msgstr "Пример:" -#: html/Admin/Elements/ModifyUser:64 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "ExternalAuthId" -#: html/Admin/Elements/ModifyUser:58 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "ExternalContactInfoId" -#: html/Admin/Users/Modify.html:73 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" -msgstr "Доп. информациÑ" +msgstr "Ð”Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ" -#: lib/RT/User_Overlay.pm:302 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "Ðе могу найти пÑевдо-группу 'Полномочных' пользователей" +msgstr "Ðевозможно найти пÑевдо-группу 'Привилегированные'" -#: lib/RT/User_Overlay.pm:309 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "Ðе могу найти пÑевдо-группу 'Ðеполномочных' пользователей" +msgstr "Ðевозможно найти пÑевдо-группу 'Ðепривилегированные'" -#: bin/rt-crontool:138 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" +msgstr "Ошибка загрузки Ð¼Ð¾Ð´ÑƒÐ»Ñ %1. (%2)" + +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" msgstr "" -#: lib/RT/Date.pm:412 +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "Фев." #: NOT FOUND IN SOURCE msgid "February" +msgstr "Февраль" + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "Заполнить неÑколько текÑтовых полей" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "Заполнить одно текÑтоввое поле" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "Заполнить до %1 текÑтовых полей" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" msgstr "" #: NOT FOUND IN SOURCE msgid "Fin" msgstr "Конец" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:59 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" msgstr "Конечный приоритет" -#: lib/RT/Ticket_Overlay.pm:1162 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" -msgstr "" +msgstr "Конечный приоритет" -#: html/Admin/Queues/People.html:61 html/Ticket/Elements/EditPeople:34 +#: NOT FOUND IN SOURCE msgid "Find group whose" -msgstr "" +msgstr "Ðайти группы, которые" -#: html/Elements/Quicksearch:25 +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "Ðайти группы, которые" + +#: NOT FOUND IN SOURCE msgid "Find new/open tickets" -msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ тикетах" +msgstr "Ðайти новые/открытые заÑвки" -#: html/Admin/Queues/People.html:57 html/Admin/Users/index.html:46 html/Ticket/Elements/EditPeople:30 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" -msgstr "Ðайти людей, у которых" +msgstr "Ðайти пользователей, у которых" -#: html/Search/Listing.html:108 +#: html/Search/Results.html:109 msgid "Find tickets" -msgstr "" +msgstr "ПоиÑк заÑвок" #: NOT FOUND IN SOURCE msgid "Finish Approval" -msgstr "" +msgstr "Подтвердить" -#: html/Ticket/Elements/Tabs:58 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "Ðачало" -#: html/Search/Listing.html:41 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "ÐŸÐµÑ€Ð²Ð°Ñ Ñтраница" -#: docs/design_docs/string-extraction-guide.txt:33 +#: 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 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "Foo!" -#: html/Search/Bulk.html:87 +#: html/Search/Bulk.html:105 msgid "Force change" -msgstr "Изменить Ñилой" +msgstr "Изменить принудительно" + +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" -#: html/Search/Listing.html:106 +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" -msgstr "" +msgstr "Ðайдено %quant(%1,ticket)" -#: lib/RT/Interface/Web.pm:868 +#: lib/RT/Record.pm:942 msgid "Found Object" -msgstr "" +msgstr "Ðайден объект" -#: html/Admin/Elements/ModifyUser:44 +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "FreeformContactInfo" -#: lib/RT/CustomField_Overlay.pm:38 -msgid "FreeformMultiple" -msgstr "" - -#: lib/RT/CustomField_Overlay.pm:37 -msgid "FreeformSingle" -msgstr "" - -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "Птн." -#: html/Ticket/Elements/ShowHistory:41 html/Ticket/Elements/ShowHistory:51 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" -msgstr "Полный" +msgstr "Ð’Ñе заголовки" + +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "ВзÑть шаблон из файла" #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "Берем текущего Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· pgp подпиÑи\\n" -#: lib/RT/Transaction_Overlay.pm:595 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" -msgstr "" +msgstr "Ðазначено %1" -#: html/Admin/Elements/Tabs:41 html/Admin/index.html:38 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "Общие" -#: NOT FOUND IN SOURCE -msgid "Global Keyword Selections" -msgstr "" +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "Общие дополнительные полÑ" #: NOT FOUND IN SOURCE msgid "Global Scrips" +msgstr "Общие Ñкриплеты" + +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" msgstr "" -#: html/Admin/Elements/SelectTemplate:38 +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" -msgstr "" +msgstr "Общий шаблон: %1" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "Отправить" -#: html/Admin/Elements/EditCustomFields:75 html/Admin/Queues/People.html:59 html/Admin/Queues/People.html:63 html/Admin/Queues/index.html:44 html/Admin/Users/index.html:49 html/Ticket/Elements/EditPeople:32 html/Ticket/Elements/EditPeople:36 html/index.html:41 +#: 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 msgid "Go!" -msgstr "Поехали!" +msgstr "Отправить!" #: NOT FOUND IN SOURCE msgid "Good pgp sig from %1\\n" -msgstr "Ð¥Ð¾Ñ€Ð¾ÑˆÐ°Ñ pgp подпиÑÑŒ от %1\\n" +msgstr "ÐŸÑ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ð°Ñ pgp подпиÑÑŒ от %1\\n" -#: html/Search/Listing.html:50 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "Перейти на Ñтраницу" -#: html/Elements/GotoTicket:25 html/SelfService/Elements/GotoTicket:25 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" -msgstr "Показать тикет" +msgstr "Показать заÑвку" -#: NOT FOUND IN SOURCE -msgid "Grand" -msgstr "" - -#: html/Ticket/Elements/AddWatchers:46 html/User/Elements/DelegateRights:78 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" -msgstr "" +msgstr "Групповые" #: NOT FOUND IN SOURCE msgid "Group %1 %2: %3" msgstr "Группа %1 %2: %3" -#: html/Admin/Elements/GroupTabs:45 html/Admin/Elements/QueueTabs:57 html/Admin/Elements/SystemTabs:44 html/Admin/Global/index.html:55 +#: 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 "Права группы" -#: lib/RT/Group_Overlay.pm:965 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "Пользователь уже входит в группу" #: NOT FOUND IN SOURCE msgid "Group could not be created." -msgstr "" +msgstr "Ðевозможно Ñоздать группу." -#: html/Admin/Groups/Modify.html:77 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" -msgstr "Ðе могу Ñоздать группу: %1" +msgstr "Ðевозможно Ñоздать группу: %1" -#: lib/RT/Group_Overlay.pm:497 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" -msgstr "Создана группа" +msgstr "Группа Ñоздана" -#: lib/RT/Group_Overlay.pm:1133 +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" -msgstr "" +msgstr "Ð’ группе нет такого пользователÑ" -#: lib/RT/Group_Overlay.pm:945 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1429 lib/RT/Ticket_Overlay.pm:1507 +#: 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 msgid "Group not found" msgstr "Группа не найдена" @@ -1930,1223 +2443,1621 @@ msgstr "Группа не найдена.\\n" msgid "Group not specified.\\n" msgstr "Ðе задана группа.\\n" -#: html/Admin/Elements/SelectNewGroupMembers:35 html/Admin/Elements/Tabs:35 html/Admin/Groups/Members.html:64 html/Admin/Queues/People.html:83 html/Admin/index.html:32 html/User/Groups/Members.html:67 +#: 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 msgid "Groups" msgstr "Группы" -#: lib/RT/Group_Overlay.pm:971 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "Группы не могут быть членами входÑщих в них пользователей" -#: lib/RT/Interface/CLI.pm:73 lib/RT/Interface/CLI.pm:73 +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "Группы, удовлетворÑющие уÑловию поиÑка" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "Группы, в которых ÑоÑтоит Ñтот пользователь" + +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "ЗдравÑтвуйте!" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" -msgstr "Hello, %1" +msgstr "ЗдравÑтвуйте, %1" -#: html/Ticket/Elements/ShowHistory:30 html/Ticket/Elements/Tabs:88 +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "ИÑториÑ" -#: html/Admin/Elements/ModifyUser:68 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ %1" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1" + +#: NOT FOUND IN SOURCE msgid "HomePhone" -msgstr "HomePhone" +msgstr "Домашний телефон" -#: html/Elements/Tabs:46 +#: html/Elements/Tabs:65 msgid "Homepage" -msgstr "Домой" +msgstr "Ð’ начало" -#: lib/RT/Base.pm:74 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." -msgstr "" +msgstr "ИмеетÑÑ %quant(%1,concrete mixer)." #: NOT FOUND IN SOURCE msgid "I have [quant,_1,concrete mixer]." -msgstr "I have [quant,_1,concrete mixer]." +msgstr "ИмеетÑÑ [quant,_1,concrete mixer]." + +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" -#: html/Ticket/Elements/ShowBasics:27 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" -msgstr "Тикет" +msgstr "ЗаÑвка" -#: html/Admin/Users/Modify.html:44 html/User/Prefs.html:39 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "ЛичноÑть" -#: etc/upgrade/2.1.71:86 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" -msgstr "" +msgstr "ЕÑли подтверждение отклонено, отклонить заÑвку-первоиÑточник и удалить ожидающие подтверждениÑ" + +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "ЕÑли не указан Ðвтор, Ñоздать заÑвки от имени Ñтого Ðвтора." -#: bin/rt-crontool:190 +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "ЕÑли очередь не указана, то Ñоздавать заÑвки в Ñтой очереди." + +#: 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 "ЕÑли бы Ñта программа имела уÑтановленный бит setgid, то зловредный пользователь мог бы воÑпользоватьÑÑ Ñтим Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтративных полномочий в RT." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: 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 "ЕÑли вы что-либо изменили, то удоÑтоверьтеÑÑŒ, что" +msgstr "ПоÑле любых изменений необходимо" -#: lib/RT/Interface/Web.pm:860 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" -msgstr "" +msgstr "ÐедопуÑтимое значение Ð´Ð»Ñ %1" -#: lib/RT/Interface/Web.pm:863 +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "Изображение" + +#: lib/RT/Record.pm:936 msgid "Immutable field" -msgstr "" +msgstr "ÐеизменÑемое поле" -#: html/Admin/Elements/EditCustomFields:74 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." -msgstr "" +msgstr "Показывать неиÑпользуемые дополнительные полÑ." -#: html/Admin/Queues/index.html:43 +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "Показывать неиÑпользуемые группы." + +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." -msgstr "Показывать отключенные очереди." +msgstr "Показывать неиÑпользуемые очереди." -#: html/Admin/Users/index.html:47 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." -msgstr "Показать отключенных пользователей." +msgstr "Показывать отключенных пользователей." + +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" msgstr "Ðачальный приоритет" -#: lib/RT/Ticket_Overlay.pm:1161 lib/RT/Ticket_Overlay.pm:1163 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" -msgstr "" +msgstr "Ðачальный приоритет" -#: lib/RT/ScripAction_Overlay.pm:105 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "Ошибка ввода" -#: NOT FOUND IN SOURCE -msgid "Interest noted" -msgstr "" - -#: lib/RT/Ticket_Overlay.pm:3729 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°" -#: lib/RT/Record.pm:143 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" -msgstr "" +msgstr "ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ°: %1" -#: lib/RT/Group_Overlay.pm:644 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" -msgstr "Ðеправильный тип группы" +msgstr "ÐедопуÑтимый тип группы" -#: lib/RT/Principal_Overlay.pm:128 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" -msgstr "" +msgstr "ÐедопуÑтимое право" #: NOT FOUND IN SOURCE msgid "Invalid Type" -msgstr "" +msgstr "ÐедопуÑтимый тип" -#: lib/RT/Interface/Web.pm:865 +#: lib/RT/Record.pm:938 msgid "Invalid data" -msgstr "" +msgstr "ÐедопуÑтимые данные" -#: lib/RT/Ticket_Overlay.pm:438 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "Владелец отÑутÑтвует. ЗаменÑем его на 'nobody'." +msgstr "ÐеÑущеÑтвующий ответÑтвенный. ИÑпользуем 'nobody'." -#: lib/RT/Scrip_Overlay.pm:134 lib/RT/Template_Overlay.pm:251 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" -msgstr "ÐÐµÐ²ÐµÑ€Ð½Ð°Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´ÑŒ" +msgstr "ÐедопуÑÑ‚Ð¸Ð¼Ð°Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´ÑŒ" -#: lib/RT/ACE_Overlay.pm:244 lib/RT/ACE_Overlay.pm:253 lib/RT/ACE_Overlay.pm:259 lib/RT/ACE_Overlay.pm:270 lib/RT/ACE_Overlay.pm:275 +#: 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 "Ðеверные права" +msgstr "ÐедопуÑтимое право" -#: lib/RT/Record.pm:118 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" -msgstr "Ðеправильное значение Ð´Ð»Ñ %1" +msgstr "ÐедопуÑтимое значение Ð´Ð»Ñ %1" -#: lib/RT/Ticket_Overlay.pm:3367 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" -msgstr "Ðеправильное значение Ð´Ð»Ñ Ñтого полÑ" +msgstr "ÐедопуÑтимое значение дополнительного полÑ" -#: lib/RT/Ticket_Overlay.pm:345 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" -msgstr "Такого ÑтатуÑа не бывает" +msgstr "ÐедопуÑтимое значение ÑтатуÑа" -#: bin/rt-crontool:191 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." -msgstr "Обратите внимание, что обычные пользователи не имеют права запуÑкать Ñту программу." +msgstr "Обратите внимание, что непривилегированные пользователи не имеют права запуÑкать Ñту программу." -#: bin/rt-crontool:192 +#: 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 "ПредполагаетÑÑ, что Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñтой программы вы должны Ñоздать учетную запиÑÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Unix Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼Ð¸ уÑтановками групп и доÑтупом к RT." +msgstr "ПредполагаетÑÑ, что Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка Ñтой программы вы должны Ñоздать непривилегированную учетную запиÑÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Unix Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ñ‹Ð¼Ð¸ уÑтановками групп и доÑтупом к RT." -#: bin/rt-crontool:163 +#: bin/rt-crontool:188 msgid "It takes several arguments:" -msgstr "Она требует неÑколько параметров:" +msgstr "Ðто требует неÑколько параметров:" + +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" #: NOT FOUND IN SOURCE msgid "Items pending my approval" -msgstr "Тикеты, ожидающие моей визы" +msgstr "ЗаÑвки, ожидающие вашего подтверждениÑ" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "Янв." #: NOT FOUND IN SOURCE msgid "January" -msgstr "" +msgstr "Январь" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" -msgstr "" +msgstr "ПриÑоединитьÑÑ Ð¸Ð»Ð¸ покинуть Ñту группу" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." msgstr "Июл." #: NOT FOUND IN SOURCE msgid "July" -msgstr "" +msgstr "Июль" -#: html/Ticket/Elements/Tabs:99 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" -msgstr "Ð’Ñе вмеÑте" +msgstr "Ð’Ñе данные" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." msgstr "Июн." #: NOT FOUND IN SOURCE msgid "June" -msgstr "" +msgstr "Июнь" #: NOT FOUND IN SOURCE msgid "Keyword" msgstr "Ключевое Ñлово" -#: html/Admin/Elements/ModifyUser:52 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "Язык" -#: html/Ticket/Elements/Tabs:73 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "Язык" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "Конец" -#: html/Ticket/Elements/EditDates:38 html/Ticket/Elements/ShowDates:39 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" -msgstr "Контакт" +msgstr "ПоÑледний контакт" + +#: NOT FOUND IN SOURCE +msgid "Last Contact</a>" +msgstr "ПоÑледний контакт</a>" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" -msgstr "Контакт" +msgstr "ПоÑледний контакт" -#: html/Search/Elements/TicketHeader:41 +#: NOT FOUND IN SOURCE msgid "Last Notified" -msgstr "" +msgstr "ПоÑледнее уведомление" -#: html/Elements/SelectDateType:30 +#: html/Elements/SelectDateType:51 msgid "Last Updated" -msgstr "Обновлен" +msgstr "ПоÑледнее обновление" #: NOT FOUND IN SOURCE msgid "LastUpdated" -msgstr "" +msgstr "ПоÑледнее обновление" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "ПоÑледний раз обновлено" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "ОÑталоÑÑŒ" -#: html/Admin/Users/Modify.html:83 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "Разрешить доÑтуп к RT" -#: html/Admin/Users/Modify.html:87 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" -msgstr "Пользователь может иметь права" +msgstr "ПредоÑтавить пользователю права" #: NOT FOUND IN SOURCE msgid "Limiting owner to %1 %2" -msgstr "Ограничиваем владельца %1 %2" +msgstr "Ограничиваем ответÑтвенного Ð´Ð»Ñ %1 %2" #: NOT FOUND IN SOURCE msgid "Limiting queue to %1 %2" msgstr "Ограничиваем очередь Ð´Ð»Ñ %1 %2" -#: lib/RT/Ticket_Overlay.pm:2697 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "СвÑзь уже ÑущеÑтвует" -#: lib/RT/Ticket_Overlay.pm:2709 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" -msgstr "Ðе могу ÑвÑзать тикеты" +msgstr "Ðевозможно Ñоздать ÑвÑзь" -#: lib/RT/Ticket_Overlay.pm:2717 lib/RT/Ticket_Overlay.pm:2727 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" -msgstr "" +msgstr "СвÑзь Ñоздана (%1)" -#: lib/RT/Ticket_Overlay.pm:2638 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" -msgstr "Удалена ÑвÑзь (%1)" +msgstr "СвÑзь удалена (%1)" -#: lib/RT/Ticket_Overlay.pm:2644 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "СвÑзь не найдена" -#: html/Ticket/ModifyLinks.html:25 html/Ticket/ModifyLinks.html:29 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" -msgstr "СвÑзываем тикет #%1" +msgstr "СвÑзать заÑвку #%1" #: NOT FOUND IN SOURCE msgid "Link ticket %1" -msgstr "" +msgstr "СвÑзать заÑвку %1" -#: html/Ticket/Elements/Tabs:97 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "СвÑзи" -#: html/Admin/Users/Modify.html:114 html/User/Prefs.html:85 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "Загрузить" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "Загрузить Ñохраненный запроÑ:" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "Загруженные модули perl" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "МеÑтонахождение" -#: lib/RT.pm:158 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "Ðе найден каталог Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ %1 или не доÑтупен на запиÑÑŒ.\\n RT не может продолжить работу." -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "ЗарегиÑтрирован как %1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:25 html/Elements/Login:34 html/Elements/Login:45 +#: 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 msgid "Login" -msgstr "Логин" +msgstr "Войти" -#: html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "Выйти" -#: html/Search/Bulk.html:86 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "" + +#: html/Search/Bulk.html:104 msgid "Make Owner" -msgstr "Ðазначить владельцем" +msgstr "Ðазначить ответÑтвенного" -#: html/Search/Bulk.html:102 +#: html/Search/Bulk.html:128 msgid "Make Status" -msgstr "Ðазначить ÑтатуÑ" +msgstr "УÑтановить ÑтатуÑ" -#: html/Search/Bulk.html:109 +#: html/Search/Bulk.html:136 msgid "Make date Due" -msgstr "Ðазначить Ñрок" +msgstr "УÑтановить конечный Ñрок" -#: html/Search/Bulk.html:110 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" -msgstr "Изменить дату решениÑ" +msgstr "УÑтановить дату решениÑ" -#: html/Search/Bulk.html:107 +#: html/Search/Bulk.html:132 msgid "Make date Started" -msgstr "Изменить дату 'ÐачалÑÑ'" +msgstr "УÑтановить дату 'Ðачато'" -#: html/Search/Bulk.html:106 +#: html/Search/Bulk.html:130 msgid "Make date Starts" -msgstr "Изменить дату 'ÐачинаетÑÑ'" +msgstr "УÑтановить дату 'ÐачинаетÑÑ'" -#: html/Search/Bulk.html:108 +#: html/Search/Bulk.html:134 msgid "Make date Told" -msgstr "Изменить дату поÑледнего контакта" +msgstr "УÑтановить дату поÑледнего контакта" -#: html/Search/Bulk.html:99 +#: html/Search/Bulk.html:124 msgid "Make priority" -msgstr "Ðазначить приоритет" +msgstr "УÑтановить приоритет" -#: html/Search/Bulk.html:100 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "Ðазначить очередь" -#: html/Search/Bulk.html:98 +#: html/Search/Bulk.html:122 msgid "Make subject" -msgstr "Изменить тему" +msgstr "УÑтановить тему" + +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "Управление дополнительными полÑми и их значениÑми" -#: html/Admin/index.html:33 +#: html/Admin/index.html:69 msgid "Manage groups and group membership" -msgstr "ÐаÑтройка групп и их пользователей" +msgstr "Управление группами и членами групп" -#: html/Admin/index.html:39 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" -msgstr "ÐаÑтройки Ð´Ð»Ñ Ð²Ñех очередей" +msgstr "Управление ÑвойÑтвами и наÑтройками, которые применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑем очередÑм" -#: html/Admin/index.html:36 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" -msgstr "ÐаÑтройка очередей и их параметров" +msgstr "Управление очередÑми и их параметрами" -#: html/Admin/index.html:30 +#: html/Admin/index.html:64 msgid "Manage users and passwords" -msgstr "ÐаÑтройка пользователей и их паролей" +msgstr "Управление пользователÑми и паролÑми" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "Мар." #: NOT FOUND IN SOURCE msgid "March" -msgstr "" +msgstr "Март" #: NOT FOUND IN SOURCE msgid "May" -msgstr "" +msgstr "Май" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "Май" -#: lib/RT/Group_Overlay.pm:982 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "УчаÑтник %1 добавлен" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "УчаÑтник %1 удален" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "Пользователь добавлен в группу" -#: lib/RT/Group_Overlay.pm:1140 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "Пользователь удален из группы" -#: lib/RT/Group_Overlay.pm:1144 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" msgstr "Пользователь не удален из группы" -#: html/Elements/SelectLinkType:26 +#: html/Elements/SelectLinkType:47 msgid "Member of" -msgstr "Входит в" +msgstr "СоÑтоит в" #: NOT FOUND IN SOURCE msgid "MemberOf" -msgstr "" +msgstr "СоÑтоит в" -#: html/Admin/Elements/GroupTabs:42 html/User/Elements/GroupTabs:42 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" -msgstr "Пользователи" +msgstr "УчаÑтники" + +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "УчаÑтие в %1 добавлено" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "УчаÑтие в %1 удалено" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "УчаÑтие в группах" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "УчаÑтие в группах данного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1" -#: lib/RT/Ticket_Overlay.pm:2843 +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" -msgstr "Тикеты уÑпешно Ñклеены" +msgstr "ЗаÑвки уÑпешно объединены" -#: lib/RT/Ticket_Overlay.pm:2804 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" -msgstr "Склейка не удалаÑÑŒ. Ðе Ñмогла уÑтановить идентификатор тикета." +msgstr "Ошибка объединениÑ. Ðевозможно уÑтановить идентификатор заÑвки." -#: html/Ticket/Elements/EditLinks:115 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" -msgstr "Приклеить к" +msgstr "Объединить Ñ Ð·Ð°Ñвкой" + +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "Объединено в %1" -#: html/Ticket/Update.html:102 +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" -msgstr "ТекÑÑ‚" +msgstr "Сообщение" -#: lib/RT/Interface/Web.pm:867 -msgid "Missing a primary key?: %1" +#: NOT FOUND IN SOURCE +msgid "Message body not shown because it is too large or is not plain text." +msgstr "Тело ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ðµ показано потому, что оно или Ñлишком большое или не ÑвлÑетÑÑ Ñ‚ÐµÐºÑтом." + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "Ðевозможно запиÑать Ñообщение" + +#: NOT FOUND IN SOURCE +msgid "Message recipients" +msgstr "Получатели ÑообщениÑ" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "Сообщение запиÑано" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± Ñтой заÑвке не будет отправлены..." + +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" msgstr "" -#: html/Admin/Users/Modify.html:169 html/User/Prefs.html:54 +#: lib/RT/Record.pm:940 +msgid "Missing a primary key?: %1" +msgstr "Пропущен первичный ключ?: %1" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" -msgstr "Мобильник" +msgstr "Мобильный" -#: html/Admin/Elements/ModifyUser:72 +#: NOT FOUND IN SOURCE msgid "MobilePhone" -msgstr "MobilePhone" +msgstr "Мобильный телефон" -#: lib/RT/Queue_Overlay.pm:70 +#: NOT FOUND IN SOURCE +msgid "Modified" +msgstr "Изменено" + +#: NOT FOUND IN SOURCE +msgid "Modify" +msgstr "Изменить" + +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" -msgstr "" +msgstr "Изменить ÑпиÑок ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñ Ð´Ð¾Ñтупа" #: NOT FOUND IN SOURCE msgid "Modify Custom Field %1" -msgstr "Изменение дополнительного Ð¿Ð¾Ð»Ñ %1" +msgstr "Изменить дополнительное поле %1" -#: html/Admin/Global/CustomFields.html:44 html/Admin/Global/index.html:51 -msgid "Modify Custom Fields which apply to all queues" +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" msgstr "" -#: lib/RT/Queue_Overlay.pm:73 +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "Изменить дополнительные полÑ, применÑемые ко вÑем %1" + +#: NOT FOUND IN SOURCE +msgid "Modify Custom Fields which apply to all queues" +msgstr "Изменить дополнительные полÑ, применÑемые ко вÑем очередÑм" + +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "Изменить права группы" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "Изменить учаÑтников" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "Изменить права" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" -msgstr "" +msgstr "Изменить шаблоны Ñкриплетов Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ очереди" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" -msgstr "" +msgstr "Изменить Ñкриплеты Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ очереди" #: NOT FOUND IN SOURCE msgid "Modify System ACLS" -msgstr "" +msgstr "Изменить ÑиÑтемные права доÑтупа" #: NOT FOUND IN SOURCE msgid "Modify Template %1" -msgstr "" +msgstr "Изменить шаблон %1" + +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "Изменить права пользователÑ" -#: html/Admin/Queues/CustomField.html:45 +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" -msgstr "" +msgstr "Изменить дополнительное поле Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" -#: html/Admin/Global/CustomField.html:53 +#: NOT FOUND IN SOURCE msgid "Modify a CustomField which applies to all queues" -msgstr "" +msgstr "Изменить дополнительное поле, которое применÑетÑÑ ÐºÐ¾ вÑем очередÑм" -#: html/Admin/Queues/Scrip.html:54 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" -msgstr "Изменить Ñкрипт Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" +msgstr "Изменить Ñкриплет Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" -#: html/Admin/Global/Scrip.html:48 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" -msgstr "Изменение Ñкрипта, который дейÑтвует Ð´Ð»Ñ Ð²Ñех очередей" +msgstr "Изменить Ñкриплет, который дейÑтвует Ð´Ð»Ñ Ð²Ñех очередей" + +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "Изменить аÑÑоциированные объекты Ð´Ð»Ñ %1" #: NOT FOUND IN SOURCE msgid "Modify dates for # %1" -msgstr "" +msgstr "Изменить даты заÑвки #%1" -#: html/Ticket/ModifyDates.html:25 html/Ticket/ModifyDates.html:29 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" -msgstr "Изменение дат в тикете #%1" +msgstr "Изменить даты заÑвки #%1" -#: html/Ticket/ModifyDates.html:35 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" -msgstr "Изменение дат в тикете #%1" +msgstr "Изменить даты заÑвки #%1" -#: html/Admin/Global/GroupRights.html:25 html/Admin/Global/GroupRights.html:28 html/Admin/Global/index.html:56 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "Изменение глобальных прав группы" +msgstr "Изменить общие права группы" -#: html/Admin/Global/GroupRights.html:33 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." -msgstr "Изменение глобальных прав группы" +msgstr "Изменить общие права группы." #: NOT FOUND IN SOURCE msgid "Modify global rights for groups" -msgstr "" +msgstr "Изменить общие права Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿" #: NOT FOUND IN SOURCE msgid "Modify global rights for users" -msgstr "" +msgstr "Изменить общие права Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹" #: NOT FOUND IN SOURCE msgid "Modify global scrips" -msgstr "" +msgstr "Изменить общие Ñкриплеты" -#: html/Admin/Global/UserRights.html:25 html/Admin/Global/UserRights.html:28 html/Admin/Global/index.html:60 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" -msgstr "" +msgstr "Изменить общие права пользователÑ" -#: html/Admin/Global/UserRights.html:33 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." -msgstr "Изменение глобальных прав пользователÑ" +msgstr "Изменить общие права пользователÑ." -#: lib/RT/Group_Overlay.pm:146 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" -msgstr "" +msgstr "Изменить метаданные группы или удалить ее" -#: html/Admin/Groups/GroupRights.html:25 html/Admin/Groups/GroupRights.html:29 html/Admin/Groups/GroupRights.html:35 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "Изменить права группы на дополнительное поле %1" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" -msgstr "Изменение прав групп Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ðµ %1" +msgstr "Изменить права группы на группу %1" -#: html/Admin/Queues/GroupRights.html:25 html/Admin/Queues/GroupRights.html:29 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" -msgstr "Изменение прав групп Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" +msgstr "Изменить права группы на очередь %1" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" -msgstr "" +msgstr "Изменить ÑпиÑок учаÑтников Ñтой группы" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" -msgstr "" +msgstr "Изменить ÑобÑтвенную учетную запиÑÑŒ RT" -#: html/Admin/Queues/People.html:25 html/Admin/Queues/People.html:29 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" -msgstr "Изменение пользователей отноÑÑщихÑÑ Ðº очереди %1" +msgstr "Изменить пользователей, отноÑÑщихÑÑ Ðº очереди %1" -#: html/Ticket/ModifyPeople.html:25 html/Ticket/ModifyPeople.html:29 html/Ticket/ModifyPeople.html:35 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" -msgstr "Изменение пользователей отноÑÑщихÑÑ Ðº тикету #%1" +msgstr "Изменить пользователей, отноÑÑщихÑÑ Ðº заÑвке #%1" -#: html/Admin/Queues/Scrips.html:44 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" -msgstr "Изменить Ñкрипты Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" +msgstr "Изменить Ñкриплеты Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" -#: html/Admin/Global/Scrips.html:44 html/Admin/Global/index.html:42 +#: 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 "Изменение Ñкриптов, которые дейÑтвуют на вÑе очереди" +msgstr "Изменить Ñкриплеты, которые дейÑтвуют на вÑе очереди" -#: html/Admin/Global/Template.html:25 html/Admin/Global/Template.html:30 html/Admin/Global/Template.html:81 html/Admin/Queues/Template.html:78 +#: 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) msgid "Modify template %1" -msgstr "Изменение шаблона %1" +msgstr "Изменить шаблон %1" -#: html/Admin/Global/Templates.html:44 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" -msgstr "" +msgstr "Изменить шаблоны, которые применÑÑŽÑ‚ÑÑ ÐºÐ¾ вÑем очередÑм" -#: html/Admin/Groups/Modify.html:87 html/User/Groups/Modify.html:86 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" -msgstr "ÐаÑтройки Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ %1" +msgstr "Изменить группу %1" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" -msgstr "" +msgstr "Изменить очередь наблюдателей" -#: html/Admin/Users/Modify.html:236 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" -msgstr "ÐаÑтройки Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1" +msgstr "Изменить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1" -#: html/Ticket/ModifyAll.html:37 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" -msgstr "Изменение тикета # %1" +msgstr "Изменить заÑвку # %1" -#: html/Ticket/Modify.html:25 html/Ticket/Modify.html:28 html/Ticket/Modify.html:34 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" -msgstr "Изменение тикета # %1" +msgstr "Изменить заÑвку # %1" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" -msgstr "" +msgstr "Изменить заÑвки" -#: html/Admin/Groups/UserRights.html:25 html/Admin/Groups/UserRights.html:29 html/Admin/Groups/UserRights.html:35 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "Изменить права Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° дополнительное поле %1" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" -msgstr "Изменение прав Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ %1" +msgstr "Изменить права пользователей группы %1" -#: html/Admin/Queues/UserRights.html:25 html/Admin/Queues/UserRights.html:29 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" -msgstr "Изменение прав Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ %1" +msgstr "Изменить права Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° очередь %1" #: NOT FOUND IN SOURCE msgid "Modify watchers for queue '%1'" -msgstr "Изменение наблюдателей Ð´Ð»Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸ '%1'" +msgstr "Изменить наблюдателей очереди '%1'" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" -msgstr "" +msgstr "ИзменÑтьПраваДоÑтупа" -#: lib/RT/Group_Overlay.pm:149 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "ИзменÑтьДополнительноеПоле" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" -msgstr "" +msgstr "ИзменÑтьСобÑтвенноеУчаÑтиеВГруппах" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" -msgstr "" +msgstr "ИзменÑтьÐаблюдателейОчереди" -#: lib/RT/Queue_Overlay.pm:76 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" -msgstr "" +msgstr "ИзменÑтьСкриплеты" -#: lib/RT/System.pm:61 +#: lib/RT/System.pm:83 msgid "ModifySelf" -msgstr "" +msgstr "ИзменÑтьСебÑ" -#: lib/RT/Queue_Overlay.pm:73 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" -msgstr "" +msgstr "ИзменÑтьШаблон" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" -msgstr "" +msgstr "ИзменÑтьЗаÑвку" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "Пнд." -#: html/Ticket/Elements/ShowRequestor:42 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ %1" -#: html/Admin/Elements/EditCustomFields:61 +#: NOT FOUND IN SOURCE +msgid "Move" +msgstr "ПеремеÑтить" + +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" -msgstr "" +msgstr "ПеремеÑтить вниз" -#: html/Admin/Elements/EditCustomFields:53 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" -msgstr "" +msgstr "ПеремеÑтить вверх" -#: html/Admin/Elements/SelectSingleOrMultiple:27 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "ÐеÑколько значений" -#: lib/RT/User_Overlay.pm:179 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "Ð’Ñ‹ должны указать ИмÑ" +#: html/SelfService/Elements/MyRequests:70 +#. ($friendly_status) +msgid "My %1 tickets" +msgstr "%1 ваших заÑвок" + #: NOT FOUND IN SOURCE msgid "My Approvals" -msgstr "Мои визы" +msgstr "Ваши подтверждениÑ" -#: html/Approvals/index.html:25 html/Approvals/index.html:26 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" -msgstr "" +msgstr "Ваши подтверждениÑ" + +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "Ваши Ñохраненные запроÑÑ‹" -#: html/Admin/Elements/AddCustomFieldValue:26 html/Admin/Elements/EditCustomField:32 html/Admin/Elements/ModifyTemplate:28 html/Admin/Elements/ModifyUser:30 html/Admin/Groups/Modify.html:44 html/Elements/SelectGroups:26 html/Elements/SelectUsers:28 html/User/Groups/Modify.html:44 +#: 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 msgid "Name" msgstr "ИмÑ" -#: lib/RT/User_Overlay.pm:186 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "Ð˜Ð¼Ñ ÑƒÐ¶Ðµ иÑпользуетÑÑ" #: NOT FOUND IN SOURCE +msgid "Name matches" +msgstr "Совпадение имен" + +#: NOT FOUND IN SOURCE msgid "Need approval from system administrator" -msgstr "" +msgstr "Ðеобходимо подтверждение ÑиÑтемного админиÑтратора" -#: html/Ticket/Elements/ShowDates:52 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" -msgstr "" +msgstr "Ðикогда" -#: html/Elements/Quicksearch:30 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "Ðовых" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:93 html/User/Prefs.html:65 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "Ðовые ÑвÑзи" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "Ðовый пароль" -#: etc/initialdata:311 etc/upgrade/2.1.71:16 +#: etc/initialdata:332 msgid "New Pending Approval" -msgstr "" +msgstr "Ðовое ожидающее подтверждение" -#: html/Ticket/Elements/EditLinks:111 +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "Ðовый запроÑ" + +#: NOT FOUND IN SOURCE msgid "New Relationships" msgstr "Ðовые ÑвÑзи" -#: html/Ticket/Elements/Tabs:36 +#: NOT FOUND IN SOURCE msgid "New Search" -msgstr "" +msgstr "Ðовый поиÑк" -#: html/Admin/Global/CustomField.html:41 html/Admin/Global/CustomFields.html:39 html/Admin/Queues/CustomField.html:52 html/Admin/Queues/CustomFields.html:40 +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" -msgstr "" +msgstr "Ðовое дополнительное поле" -#: html/Admin/Elements/GroupTabs:54 html/User/Elements/GroupTabs:52 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" -msgstr "" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð°" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "Ðовый пароль" -#: lib/RT/User_Overlay.pm:639 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "Отправлено Ñообщение Ñ Ð½Ð¾Ð²Ñ‹Ð¼ паролем" -#: html/Admin/Elements/QueueTabs:70 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" -msgstr "" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´ÑŒ" -#: html/SelfService/Elements/Tabs:63 +#: NOT FOUND IN SOURCE msgid "New request" msgstr "Ðовый запроÑ" -#: html/Admin/Elements/SelectRights:42 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "Ðовые права" -#: html/Admin/Global/Scrip.html:40 html/Admin/Global/Scrips.html:39 html/Admin/Queues/Scrip.html:43 html/Admin/Queues/Scrips.html:53 +#: 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 "" +msgstr "Ðовый Ñкриплет" #: NOT FOUND IN SOURCE msgid "New search" msgstr "Ðовый поиÑк" -#: html/Admin/Global/Template.html:60 html/Admin/Global/Templates.html:39 html/Admin/Queues/Template.html:58 html/Admin/Queues/Templates.html:46 +#: 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 "" +msgstr "Ðовый шаблон" + +#: html/SelfService/Elements/Tabs:69 +msgid "New ticket" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ñвка" -#: lib/RT/Ticket_Overlay.pm:2771 +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" -msgstr "Ðовый тикет не ÑущеÑтвует" +msgstr "ÐÐ¾Ð²Ð°Ñ Ð·Ð°Ñвка не ÑущеÑтвует" -#: html/Admin/Elements/UserTabs:52 +#: html/Admin/Elements/UserTabs:78 msgid "New user" -msgstr "" +msgstr "Ðовый пользователь" -#: html/Admin/Elements/CreateUserCalled:26 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼" -#: html/Admin/Queues/People.html:55 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "Ðовые наблюдатели" -#: html/Admin/Users/Prefs.html:42 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "Ðовые наÑтройки окна" -#: html/Ticket/Elements/Tabs:69 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "Вперед" -#: html/Search/Listing.html:48 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница" -#: html/Admin/Elements/ModifyUser:50 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "ПÑевдоним" -#: html/Admin/Users/Modify.html:63 html/User/Prefs.html:46 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "ПÑевдоним" -#: html/Admin/Elements/EditCustomField:73 html/Admin/Elements/EditCustomFields:105 +#: NOT FOUND IN SOURCE +msgid "No" +msgstr "Ðет" + +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" -msgstr "Ðет такого полÑ" +msgstr "Ðет дополнительного полÑ" -#: html/Admin/Groups/GroupRights.html:84 html/Admin/Groups/UserRights.html:71 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "Дополнительное поле не указано" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" -msgstr "Ðет такой группы" +msgstr "Группа не указана" + +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "Ðет запроÑа" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:68 +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" -msgstr "Ðет такой очереди" +msgstr "Очередь не указана" -#: bin/rt-crontool:56 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "Пользователь RT не найден. ПожалуйÑта, обратитеÑÑŒ к вашему админиÑтратору RT.\\n" -#: html/Admin/Global/Template.html:79 html/Admin/Queues/Template.html:76 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" -msgstr "Шаблон не определен" +msgstr "Ðет шаблона" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " -msgstr "Тикет не задан. Ðичего не делаем." +msgstr "ЗаÑвка не указана. Отмена." #: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket modifications\\n\\n" -msgstr "Тикет не задан. ОтменÑем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ‚Ð¸ÐºÐµÑ‚Ð°\\n\\n" +msgstr "ЗаÑвка не указана. ОтменÑем Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ñвки\\n\\n" -#: html/Approvals/Elements/Approve:47 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "Ðет дейÑтвиÑ" -#: lib/RT/Interface/Web.pm:862 +#: lib/RT/Record.pm:935 msgid "No column specified" -msgstr "" +msgstr "Колонка не указана" #: NOT FOUND IN SOURCE msgid "No command found\\n" msgstr "Команда не найдена\\n" -#: html/Elements/ViewUser:36 html/Ticket/Elements/ShowRequestor:45 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" -msgstr "Без комментариев" +msgstr "Ðет комментариев о пользователе" -#: lib/RT/Ticket_Overlay.pm:2189 lib/RT/Ticket_Overlay.pm:2257 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "ПуÑтое Ñообщение" -#: lib/RT/Action/Generic.pm:150 lib/RT/Condition/Generic.pm:176 lib/RT/Search/ActiveTicketsInQueue.pm:56 lib/RT/Search/Generic.pm:113 +#: 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) msgid "No description for %1" msgstr "Ðет опиÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ %1" -#: lib/RT/Users_Overlay.pm:151 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "Ðе указана группа" -#: lib/RT/User_Overlay.pm:857 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "Группы, удовелÑтворÑющие уÑловию поиÑка, не найдены." + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "Ðет приÑоединенных Ñообщений" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" -msgstr "ОтÑутÑтвует пароль" +msgstr "Пароль не уÑтановлен" -#: lib/RT/Queue_Overlay.pm:259 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" -msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ права на Ñоздание очереди" +msgstr "Ðет прав Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´ÐµÐ¹" -#: lib/RT/Ticket_Overlay.pm:341 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" -msgstr "" +msgstr "Ðет прав Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ñвок в очереди '%1'" -#: lib/RT/User_Overlay.pm:151 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" -msgstr "Ð’Ñ‹ не имеете права Ñоздавать пользователей" +msgstr "Ðет прав Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹" -#: html/SelfService/Display.html:174 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" -msgstr "Показ Ñтого тикета запрещен" +msgstr "Ðет прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра Ñтой заÑвки" -#: html/SelfService/Update.html:55 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" -msgstr "Запрещен показ изменений Ñтого тикета" +msgstr "Ðет прав Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра обновлений Ñтой заÑвки" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1488 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "Пользователь не указан" -#: html/Admin/Queues/People.html:154 html/Admin/Queues/People.html:164 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "Пользователи не выбраны." -#: html/Admin/Queues/index.html:35 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." -msgstr "Ðичего подходÑщего не найдено." +msgstr "Очереди, удовелÑтворÑющие уÑловию поиÑка, не найдены." -#: html/Admin/Elements/SelectRights:81 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" -msgstr "" +msgstr "Права не найдены" -#: html/Admin/Elements/SelectRights:33 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." -msgstr "Ðет прав." +msgstr "Права не выданы." -#: html/Search/Bulk.html:149 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." -msgstr "Ðечего делать." +msgstr "Ðет запроÑа Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка." + +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "Ðет темы" #: NOT FOUND IN SOURCE msgid "No ticket id specified" -msgstr "Ðе указан номер тикета" +msgstr "Идентификатор заÑвки не указан" -#: lib/RT/Transaction_Overlay.pm:480 lib/RT/Transaction_Overlay.pm:518 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" -msgstr "Ðе указан тип транзакции" +msgstr "Тип транзакции не указан" #: NOT FOUND IN SOURCE msgid "No user or email address specified" -msgstr "" +msgstr "Пользователь или Ð°Ð´Ñ€ÐµÑ email не указан" -#: html/Admin/Users/index.html:36 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." -msgstr "Ðи одного подходÑщего Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ðµ найдено." +msgstr "Пользователи, удовелÑтворÑющие уÑловию поиÑка, не найдены." -#: bin/rt-commit-handler:644 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "Ðе найден пользователь RT. Обработчик CVS отключен. ОбратитеÑÑŒ к админиÑтратору RT.\\n" -#: lib/RT/Interface/Web.pm:859 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" -msgstr "" +msgstr "Ðикакое значение не отправлено _Set!\\n" -#: html/Search/Elements/TicketRow:37 +#: html/Elements/QuickCreate:61 msgid "Nobody" -msgstr "" +msgstr "Ðикто" -#: lib/RT/Interface/Web.pm:864 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" -msgstr "" +msgstr "ÐеÑущеÑтвующее поле?" -#: html/Elements/Login:99 +#: NOT FOUND IN SOURCE msgid "Not logged in" -msgstr "" +msgstr "Ðе зарегиÑтрирован" -#: html/Elements/Header:59 html/SelfService/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "Ðе зарегиÑтрирован." -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "Ðе уÑтановлено" -#: html/NoAuth/Reminder.html:27 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "Еще не реализовано." -#: html/Admin/Groups/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Not yet implemented...." msgstr "Еще не реализовано..." -#: html/Approvals/Elements/Approve:50 +#: html/Approvals/Elements/Approve:70 msgid "Notes" -msgstr "Примечание" +msgstr "ПримечаниÑ" -#: lib/RT/User_Overlay.pm:642 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" -msgstr "Ðе могу отоÑлать уведомление" +msgstr "Ðевозможно отправить уведомление" -#: etc/initialdata:94 +#: etc/initialdata:101 msgid "Notify AdminCcs" -msgstr "" +msgstr "УведомлÑть ÐдминиÑтративныеКопии" -#: etc/initialdata:90 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" -msgstr "" +msgstr "УведомлÑть ÐдминиÑтративныеКопии как Комментарий" -#: etc/initialdata:121 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "УведомлÑть Копии" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "УведомлÑть Копии как Комментарий" + +#: etc/initialdata:128 msgid "Notify Other Recipients" -msgstr "" +msgstr "УведомлÑть других Получателей" -#: etc/initialdata:117 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" -msgstr "" +msgstr "УведомлÑть других Получателей как Комментарий" -#: etc/initialdata:86 +#: etc/initialdata:85 msgid "Notify Owner" -msgstr "" +msgstr "УведомлÑть ОтветÑтвенного" -#: etc/initialdata:82 +#: etc/initialdata:81 msgid "Notify Owner as Comment" -msgstr "" +msgstr "УведомлÑть ОтветÑтвенного как Комментарий" + +#: etc/initialdata:376 +msgid "Notify Owner of their rejected ticket" +msgstr "УведомлÑть ОтветÑтвенного об отклонении заÑвки" -#: etc/initialdata:313 etc/upgrade/2.1.71:17 +#: etc/initialdata:365 +msgid "Notify Owner of their ticket has been approved by all approvers" +msgstr "УведомлÑть ОтветÑтвенного о подтверждении заÑвки вÑеми подтверждающими" + +#: etc/initialdata:353 +msgid "Notify Owner of their ticket has been approved by some approver" +msgstr "УведомлÑть ОтветÑтвенного о подтверждении заÑвки одним из подтверждающих" + +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" -msgstr "" +msgstr "УведомлÑть ОтветÑтвенных и ÐдминиÑтративныеКопии о новых, ожидающих их подтверждениÑÑ…" -#: etc/initialdata:78 +#: etc/initialdata:77 msgid "Notify Requestors" -msgstr "" +msgstr "УведомлÑть ÐвторовЗаÑвки" -#: etc/initialdata:104 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" -msgstr "" +msgstr "УведомлÑть ÐвторовЗаÑвки и Копии" -#: etc/initialdata:99 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" -msgstr "" +msgstr "УведомлÑть ÐвторовЗаÑвки и Копии как Комментарий" -#: etc/initialdata:113 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" -msgstr "" +msgstr "УведомлÑть Ðвторов заÑвки, Копии и ÐдминиÑтративныеКопии" -#: etc/initialdata:109 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" -msgstr "" +msgstr "УведомлÑть Ðвторов заÑвки, Копии и ÐдминиÑтративныеКопии как Комментарии" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "ÐоÑ." #: NOT FOUND IN SOURCE msgid "November" +msgstr "ÐоÑбрь" + +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" msgstr "" -#: lib/RT/Record.pm:157 +#: lib/RT/Record.pm:319 msgid "Object could not be created" -msgstr "Ðе могу Ñоздать объект" +msgstr "Ðевозможно Ñоздать объект" -#: lib/RT/Record.pm:176 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" -msgstr "Создан объект" +msgstr "Объект Ñоздан" + +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" -#: lib/RT/Date.pm:420 +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "Тип объекта %1 не может Ñодержать дополнительные полÑ" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "ÐеÑовпадение типа объекта" + +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "Окт." #: NOT FOUND IN SOURCE msgid "October" -msgstr "" +msgstr "ОктÑбрь" + +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "Ðвтономно" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "Ðвтономное редактирование" -#: html/Elements/SelectDateRelation:35 +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "ÐÐ²Ñ‚Ð¾Ð½Ð¾Ð¼Ð½Ð°Ñ Ð·Ð°ÐºÐ°Ñ‡ÐºÐ°" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "Ðа" -#: etc/initialdata:155 +#: etc/initialdata:163 msgid "On Comment" -msgstr "" +msgstr "Ðа комментарий" -#: etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" -msgstr "" +msgstr "При КорреÑпонденции" -#: etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" -msgstr "" +msgstr "При Создании" -#: etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" -msgstr "" +msgstr "При Изменении ОтветÑтвенного" + +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "При Изменении Приоритета" -#: etc/initialdata:177 +#: etc/initialdata:192 msgid "On Queue Change" -msgstr "" +msgstr "При Изменении Очереди" -#: etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" -msgstr "" +msgstr "При Решении" -#: etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" -msgstr "" +msgstr "При Изменении СтатуÑа" -#: etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" -msgstr "" +msgstr "При Транзакции" -#: html/Approvals/Elements/PendingMyApproval:50 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" -msgstr "Показывать визы только Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов Ñозданных поÑле %1" +msgstr "Показывать Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов, Ñозданных поÑле %1" -#: html/Approvals/Elements/PendingMyApproval:48 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" -msgstr "Показывать визы только Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов Ñозданных до %1" +msgstr "Показывать Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов Ñозданных до %1" -#: html/Elements/Quicksearch:31 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "Открытых" -#: html/Ticket/Elements/Tabs:136 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "Открыть" -#: html/SelfService/Elements/Tabs:57 +#: NOT FOUND IN SOURCE msgid "Open requests" msgstr "Открыть запроÑÑ‹" -#: html/Admin/Users/Prefs.html:41 +#: html/SelfService/Elements/Tabs:63 +msgid "Open tickets" +msgstr "Открыть заÑвки" + +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" -msgstr "Открыть тикеты (из ÑпиÑка) в новом окне" +msgstr "Открыть заÑвки (из ÑпиÑка) в новом окне" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" -msgstr "Открыть тикеты (из ÑпиÑка) в другом окне" +msgstr "Открыть заÑвки (из ÑпиÑка) в другом окне" -#: etc/initialdata:133 +#: etc/initialdata:140 msgid "Open tickets on correspondence" -msgstr "" +msgstr "Открыть заÑвки при корреÑпонденции" + +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "Сортировать по" -#: html/Search/Elements/PickRestriction:101 +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "ПорÑдок и Ñортировка" -#: html/Admin/Elements/ModifyUser:46 html/Admin/Users/Modify.html:117 html/Elements/SelectUsers:29 html/User/Prefs.html:86 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "ОрганизациÑ" -#: html/Approvals/Elements/Approve:34 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" -msgstr "" +msgstr "ЗаÑвка-первоиÑточник: #%1" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "ИÑходÑÑ‰Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° о комментарии запиÑана" -#: html/Admin/Elements/ModifyQueue:55 html/Admin/Queues/Modify.html:69 +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "ИÑходÑÑ‰Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° запиÑана" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "Со временем поднÑть приоритет до" -#: lib/RT/Queue_Overlay.pm:87 +#: NOT FOUND IN SOURCE +msgid "Overview" +msgstr "Обзор" + +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" -msgstr "" +msgstr "Ðазначить ÑебÑ" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" -msgstr "" +msgstr "БытьОтветÑтвеннымЗаЗаÑвку" -#: etc/initialdata:38 html/Elements/MyRequests:32 html/SelfService/Elements/MyRequests:30 html/Ticket/Create.html:48 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/EditPeople:44 html/Ticket/Elements/ShowPeople:27 html/Ticket/Update.html:63 lib/RT/ACE_Overlay.pm:86 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" -msgstr "Владелец" +msgstr "ОтветÑтвенный" -#: lib/RT/Ticket_Overlay.pm:3004 -#. ($OldOwnerObj->Name, $NewOwnerObj->Name) +#: NOT FOUND IN SOURCE msgid "Owner changed from %1 to %2" -msgstr "" +msgstr "ОтветÑтвенный изменен Ñ %1 на %2" -#: lib/RT/Transaction_Overlay.pm:584 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "ОтветÑтвенный не может быть назначен" + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" -msgstr "Владелец Ñилой изменен Ñ %1 на %2" +msgstr "ОтветÑтвенный принудительно изменен Ñ %1 на %2" -#: html/Search/Elements/PickRestriction:31 +#: NOT FOUND IN SOURCE msgid "Owner is" -msgstr "Владелец" +msgstr "ОтветÑтвенный" -#: html/Admin/Users/Modify.html:174 html/User/Prefs.html:56 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "Страница %1 из %2" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "Пейджер" -#: html/Admin/Elements/ModifyUser:74 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "Телефон пейджера" #: NOT FOUND IN SOURCE msgid "Parent" -msgstr "" +msgstr "Предок" -#: html/Ticket/Create.html:182 html/Ticket/Elements/EditLinks:127 html/Ticket/Elements/EditLinks:58 html/Ticket/Elements/ShowLinks:43 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "Предки" -#: html/Elements/Login:43 html/User/Prefs.html:61 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "Пароль" -#: html/NoAuth/Reminder.html:25 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "ПодÑказка к паролю" -#: lib/RT/User_Overlay.pm:168 lib/RT/User_Overlay.pm:860 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "Пароль Ñлишком короткий" -#: html/Admin/Users/Modify.html:291 html/User/Prefs.html:172 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "Пароль: %1" -#: html/Ticket/Elements/ShowSummary:43 html/Ticket/Elements/Tabs:96 html/Ticket/ModifyAll.html:51 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 +msgid "Passwords do not match." +msgstr "Пароли не Ñовпадают" + +#: html/User/Prefs.html:234 +msgid "Passwords do not match. Your password has not been changed" +msgstr "Пароли не Ñовпадают. Ваш пароль не был изменен" + +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" -msgstr "Люди" +msgstr "Пользователи" -#: etc/initialdata:126 +#: etc/initialdata:133 msgid "Perform a user-defined action" -msgstr "" +msgstr "Выволнить дейÑтвие, указанное пользователем" + +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Perl" -#: lib/RT/ACE_Overlay.pm:231 lib/RT/ACE_Overlay.pm:237 lib/RT/ACE_Overlay.pm:563 lib/RT/ACE_Overlay.pm:573 lib/RT/ACE_Overlay.pm:583 lib/RT/ACE_Overlay.pm:648 lib/RT/CurrentUser.pm:83 lib/RT/CurrentUser.pm:92 lib/RT/CustomField_Overlay.pm:445 lib/RT/CustomField_Overlay.pm:451 lib/RT/Group_Overlay.pm:1095 lib/RT/Group_Overlay.pm:1099 lib/RT/Group_Overlay.pm:1108 lib/RT/Group_Overlay.pm:1159 lib/RT/Group_Overlay.pm:1163 lib/RT/Group_Overlay.pm:1169 lib/RT/Group_Overlay.pm:426 lib/RT/Group_Overlay.pm:518 lib/RT/Group_Overlay.pm:596 lib/RT/Group_Overlay.pm:604 lib/RT/Group_Overlay.pm:701 lib/RT/Group_Overlay.pm:705 lib/RT/Group_Overlay.pm:711 lib/RT/Group_Overlay.pm:904 lib/RT/Group_Overlay.pm:908 lib/RT/Group_Overlay.pm:921 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:126 lib/RT/Scrip_Overlay.pm:137 lib/RT/Scrip_Overlay.pm:197 lib/RT/Scrip_Overlay.pm:430 lib/RT/Template_Overlay.pm:284 lib/RT/Template_Overlay.pm:88 lib/RT/Template_Overlay.pm:94 lib/RT/Ticket_Overlay.pm:1341 lib/RT/Ticket_Overlay.pm:1351 lib/RT/Ticket_Overlay.pm:1365 lib/RT/Ticket_Overlay.pm:1518 lib/RT/Ticket_Overlay.pm:1527 lib/RT/Ticket_Overlay.pm:1540 lib/RT/Ticket_Overlay.pm:1875 lib/RT/Ticket_Overlay.pm:2013 lib/RT/Ticket_Overlay.pm:2177 lib/RT/Ticket_Overlay.pm:2244 lib/RT/Ticket_Overlay.pm:2596 lib/RT/Ticket_Overlay.pm:2668 lib/RT/Ticket_Overlay.pm:2762 lib/RT/Ticket_Overlay.pm:2777 lib/RT/Ticket_Overlay.pm:2910 lib/RT/Ticket_Overlay.pm:3139 lib/RT/Ticket_Overlay.pm:3337 lib/RT/Ticket_Overlay.pm:3499 lib/RT/Ticket_Overlay.pm:3551 lib/RT/Ticket_Overlay.pm:3716 lib/RT/Transaction_Overlay.pm:468 lib/RT/Transaction_Overlay.pm:475 lib/RT/Transaction_Overlay.pm:504 lib/RT/Transaction_Overlay.pm:511 lib/RT/User_Overlay.pm:1334 lib/RT/User_Overlay.pm:562 lib/RT/User_Overlay.pm:597 lib/RT/User_Overlay.pm:853 lib/RT/User_Overlay.pm:941 +#: 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 msgid "Permission Denied" -msgstr "Ð’ доÑтупе отказано" +msgstr "Ðет доÑтупа" -#: html/User/Elements/Tabs:35 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" -msgstr "" +msgstr "Личные группы" -#: html/User/Groups/index.html:30 html/User/Groups/index.html:40 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "Личные группы" -#: html/User/Elements/DelegateRights:37 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "Личные группы:" -#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:49 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "Ðомера телефонов" -#: html/Admin/Users/Rights.html:25 +#: NOT FOUND IN SOURCE msgid "Placeholder" msgstr "Заполнитель" -#: NOT FOUND IN SOURCE -msgid "Pref" -msgstr "" - -#: html/Elements/Header:52 html/Elements/Tabs:55 html/SelfService/Prefs.html:25 html/User/Prefs.html:25 html/User/Prefs.html:28 +#: 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 msgid "Preferences" -msgstr "ПредпочтениÑ" +msgstr "ÐаÑтройки" #: NOT FOUND IN SOURCE msgid "Prefs" -msgstr "ПредпочтениÑ" +msgstr "ÐаÑтройки" -#: lib/RT/Action/Generic.pm:160 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "Подготовка не реализована" -#: html/Ticket/Elements/Tabs:61 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "Ðазад" -#: html/Search/Listing.html:44 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница" @@ -3154,102 +4065,125 @@ msgstr "ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ñтраница" msgid "Pri" msgstr "Приоритет" -#: lib/RT/ACE_Overlay.pm:133 lib/RT/ACE_Overlay.pm:208 lib/RT/ACE_Overlay.pm:552 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." -msgstr "" +msgstr "Пользователь %1 не найден." -#: html/Search/Elements/PickRestriction:54 html/SelfService/Display.html:76 html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:54 html/Ticket/Elements/ShowBasics:39 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "Приоритет" -#: html/Admin/Elements/ModifyQueue:51 html/Admin/Queues/Modify.html:65 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "Приоритет начинаетÑÑ Ñ" +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "КонфиденциальноÑть:" + #: etc/initialdata:25 msgid "Privileged" -msgstr "" +msgstr "Привилегированные" -#: html/Admin/Users/Modify.html:271 html/User/Prefs.html:163 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" -msgstr "СоÑтоÑние полномочий: %1" +msgstr "СоÑтоÑние привилегий: %1" -#: html/Admin/Users/index.html:62 +#: html/Admin/Users/index.html:102 msgid "Privileged users" -msgstr "Полномочные пользователи" +msgstr "Привилегированные пользователи" + +#: NOT FOUND IN SOURCE +msgid "Projects" +msgstr "Проекты" #: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 msgid "Pseudogroup for internal use" -msgstr "" +msgstr "ПÑевдогруппы Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ иÑпользованиÑ" + +#: html/Search/Elements/EditQuery:47 +msgid "Query" +msgstr "ЗапроÑ" + +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "ПоÑтроитель запроÑа" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Elements/Quicksearch:29 html/Search/Elements/PickRestriction:46 html/SelfService/Create.html:35 html/SelfService/Display.html:68 html/Ticket/Create.html:38 html/Ticket/Elements/EditBasics:64 html/Ticket/Elements/ShowBasics:43 html/User/Elements/DelegateRights:80 lib/RT/Tickets_Overlay.pm:883 +#: 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 msgid "Queue" msgstr "Очередь" -#: html/Admin/Queues/CustomField.html:42 html/Admin/Queues/Scrip.html:50 html/Admin/Queues/Scrips.html:46 html/Admin/Queues/Templates.html:43 +#: 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) msgid "Queue %1 not found" -msgstr "Ðе найдена очередь %1" +msgstr "Очередь %1 не найдена" #: NOT FOUND IN SOURCE msgid "Queue '%1' not found\\n" -msgstr "Ðе найдена очередь '%1'\\n" - -#: NOT FOUND IN SOURCE -msgid "Queue Keyword Selections" -msgstr "" +msgstr "Очередь '%1' не найдена\\n" -#: html/Admin/Elements/ModifyQueue:31 html/Admin/Queues/Modify.html:43 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" -msgstr "Ð˜Ð¼Ñ Ð¾Ñ‡ÐµÑ€ÐµÐ´Ð¸" +msgstr "Ðаименование очереди" #: NOT FOUND IN SOURCE msgid "Queue Scrips" -msgstr "" +msgstr "Скриплеты очереди" -#: lib/RT/Queue_Overlay.pm:263 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "Очередь уже ÑущеÑтвует" -#: lib/RT/Queue_Overlay.pm:272 lib/RT/Queue_Overlay.pm:278 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" -msgstr "Ðе могу Ñоздать очередь" +msgstr "Ðевозможно Ñоздать очередь" -#: html/Ticket/Create.html:209 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." -msgstr "Ðе могу загрузить очередь" +msgstr "Ðевозможно загрузить очередь" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:282 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" -msgstr "Создана очередь" +msgstr "Очередь Ñоздана" #: NOT FOUND IN SOURCE msgid "Queue is not specified." -msgstr "" +msgstr "Очередь не указана." -#: html/SelfService/Display.html:129 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" -msgstr "Ðет такой очереди" +msgstr "Очередь не найдена" -#: html/Admin/Elements/Tabs:38 html/Admin/index.html:35 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "Очереди" -#: html/Elements/Login:34 +#: html/Elements/Quicksearch:46 +msgid "Quick search" +msgstr "БыÑтрый поиÑк" + +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "БыÑтрое Ñоздание заÑвки" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "RT %1 Ð´Ð»Ñ %2" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "RT %1 от <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." @@ -3257,11 +4191,7 @@ msgstr "RT %1 от <a href=\"http://bestpractical.com\">Best Practical Solutions msgid "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1. Copyright 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: NOT FOUND IN SOURCE -msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" -msgstr "" - -#: html/Admin/index.html:25 html/Admin/index.html:26 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "ÐаÑтройка RT" @@ -3281,7 +4211,7 @@ msgstr "Ошибка конфигурации RT" msgid "RT Critical error. Message not recorded!" msgstr "КритичеÑÐºÐ°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° RT: Сообщение не было Ñохранено!" -#: html/Elements/Error:41 html/SelfService/Error.html:41 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "Ошибка RT" @@ -3291,15 +4221,23 @@ msgstr "RT получил Ñвое ÑобÑтвенное Ñообщение (%1 #: NOT FOUND IN SOURCE msgid "RT Recieved mail (%1) from itself." -msgstr "" +msgstr "RT получил Ñвое ÑобÑтвенное Ñообщение (%1)" + +#: NOT FOUND IN SOURCE +msgid "RT Self Service" +msgstr "СамообÑлуживание RT" -#: html/SelfService/Closed.html:25 +#: NOT FOUND IN SOURCE msgid "RT Self Service / Closed Tickets" -msgstr "СамообÑлуживание RT / Закрытые тикеты" +msgstr "СамообÑлуживание RT / Закрытые заÑвки" + +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "Переменные RT" -#: html/index.html:25 html/index.html:28 +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" -msgstr "" +msgstr "Обзор RT" #: NOT FOUND IN SOURCE msgid "RT couldn't authenticate you" @@ -3307,37 +4245,44 @@ msgstr "RT не может зарегиÑтрировать ваÑ" #: NOT FOUND IN SOURCE msgid "RT couldn't find requestor via its external database lookup" -msgstr "RT не Ñмог найти проÑÐ¸Ñ‚ÐµÐ»Ñ Ð²Ð¾ внешней базе данных" +msgstr "RT не Ñмог найти автора заÑвки во внешней базе данных" #: NOT FOUND IN SOURCE msgid "RT couldn't find the queue: %1" -msgstr "RT не Ñмог найти очередь: %1" +msgstr "RT не может найти очередь: %1" + +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" -msgstr "RT не Ñмог проверить Ñту подпиÑÑŒ PGP. \\n" +msgstr "RT не может проверить Ñту подпиÑÑŒ PGP. \\n" -#: html/Elements/PageLayout:26 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" -msgstr "" +msgstr "RT Ð´Ð»Ñ %1" #: NOT FOUND IN SOURCE msgid "RT for %1: %2" -msgstr "" +msgstr "RT Ð´Ð»Ñ %1: %2" #: NOT FOUND IN SOURCE msgid "RT has proccessed your commands" msgstr "RT выполнил ваши команды" -#: html/Elements/Login:83 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "Ð’Ñе права на RT защищены и охранÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð¼. © 1996-%1 Jesse Vincent <jesse@bestpractical.com>. ПО раÑпроÑтранÑетÑÑ Ð¿Ð¾Ð´ <a href=\"http://www.gnu.org/copyleft/gpl.html\">Стандартной ОбщеÑтвенной Лицензией GNU ВерÑии 2.</a>" #: NOT FOUND IN SOURCE +msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" +msgstr "Ð’Ñе права на RT защищены и охранÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð¼. © 1996-%1 Jesse Vincent <jesse@bestpractical.com>. ПО раÑпроÑтранÑетÑÑ Ð¿Ð¾Ð´ <a href=\"http://www.gnu.org/copyleft/gpl.html\">Стандартной ОбщеÑтвенной Лицензией GNU ВерÑии 2.</a>" + +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-2002 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" -msgstr "" +msgstr "Ð’Ñе права на RT защищены и охранÑÑŽÑ‚ÑÑ Ð·Ð°ÐºÐ¾Ð½Ð¾Ð¼. © 1996-%1 Jesse Vincent <jesse@bestpractical.com>. ПО раÑпроÑтранÑетÑÑ Ð¿Ð¾Ð´ <a href=\"http://www.gnu.org/copyleft/gpl.html\">Стандартной ОбщеÑтвенной Лицензией GNU ВерÑии 2.</a>" #: NOT FOUND IN SOURCE msgid "RT thinks this message may be a bounce" @@ -3349,443 +4294,647 @@ msgstr "RT будет обрабатывать Ñто Ñообщение как #: NOT FOUND IN SOURCE msgid "RT's email command mode requires PGP authentication. Either you didn't sign your message, or your signature could not be verified." -msgstr "Командный режим RT требует иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи .PGP. Ð’Ñ‹ либо не подпиÑали Ñообщение, либо ваша подпиÑÑŒ не может быть проверена." +msgstr "Командный режим RT email требует иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи .PGP. Ð’Ñ‹ либо не подпиÑали Ñообщение, либо ваша подпиÑÑŒ не может быть проверена." -#: html/Admin/Users/Modify.html:58 html/Admin/Users/Prefs.html:52 html/User/Prefs.html:44 +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" -msgstr "ИмÑ" +msgstr "Полное имÑ" -#: html/Admin/Elements/ModifyUser:48 +#: NOT FOUND IN SOURCE msgid "RealName" -msgstr "ИмÑ" +msgstr "Полное имÑ" -#: html/Ticket/Create.html:185 html/Ticket/Elements/EditLinks:139 html/Ticket/Elements/EditLinks:94 html/Ticket/Elements/ShowLinks:63 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "СÑылка на заÑвку заÑвки %1 добавлена" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "СÑылка на заÑвку заÑвки %1 удалена" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "СÑылка на %1 добавлена" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "СÑылка на %1 удалена" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" -msgstr "Ðа него ÑÑылаютÑÑ" +msgstr "Ðа неё ÑÑылаютÑÑ" -#: html/Elements/SelectLinkType:28 html/Ticket/Create.html:184 html/Ticket/Elements/EditLinks:135 html/Ticket/Elements/EditLinks:80 html/Ticket/Elements/ShowLinks:55 +#: 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 msgid "Refers to" msgstr "СÑылаетÑÑ Ð½Ð°" #: NOT FOUND IN SOURCE msgid "RefersTo" -msgstr "" +msgstr "СÑылаетÑÑ Ð½Ð°" #: NOT FOUND IN SOURCE msgid "Refine" -msgstr "Улучшить" +msgstr "ОчиÑтить" -#: html/Search/Elements/PickRestriction:27 +#: NOT FOUND IN SOURCE msgid "Refine search" -msgstr "Улучшить поиÑк" +msgstr "ОчиÑтить запроÑ" -#: html/Elements/Refresh:36 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "ОбновлÑть Ñту Ñтраницу каждые %1 минут." -#: html/Ticket/Create.html:174 html/Ticket/Elements/ShowSummary:60 html/Ticket/ModifyAll.html:57 +#: NOT FOUND IN SOURCE msgid "Relationships" msgstr "СвÑзи" -#: html/Search/Bulk.html:93 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "Удалить админиÑтративную копию" -#: html/Search/Bulk.html:91 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "Удалить копию" -#: html/Search/Bulk.html:89 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" -msgstr "Удалить проÑителÑ" +msgstr "Удалить Ðвтора ЗаÑвки" -#: html/Ticket/Elements/ShowTransaction:173 html/Ticket/Elements/Tabs:122 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "Ответить" -#: lib/RT/Queue_Overlay.pm:85 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "ÐÐ´Ñ€ÐµÑ Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð°" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "Отвечать авторам заÑвки" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" -msgstr "" +msgstr "Отвечать на заÑвки" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" -msgstr "" +msgstr "ОтвечатьÐаЗаÑвку" -#: etc/initialdata:44 html/Ticket/Update.html:40 lib/RT/ACE_Overlay.pm:87 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" -msgstr "ПроÑитель" +msgstr "Ðвтор заÑвки" -#: html/Search/Elements/PickRestriction:38 +#: NOT FOUND IN SOURCE msgid "Requestor email address" -msgstr "Email проÑителÑ" +msgstr "Email автора заÑвки" #: NOT FOUND IN SOURCE msgid "Requestor(s)" -msgstr "" +msgstr "Ðвтор(-Ñ‹)" #: NOT FOUND IN SOURCE msgid "RequestorAddresses" -msgstr "" +msgstr "ÐÐ´Ñ€ÐµÑ Ðвтора заÑвки" -#: html/SelfService/Create.html:43 html/SelfService/Display.html:42 html/Ticket/Create.html:56 html/Ticket/Elements/EditPeople:48 html/Ticket/Elements/ShowPeople:31 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" -msgstr "ПроÑители" +msgstr "Ðвторы заÑвок" -#: html/Admin/Elements/ModifyQueue:61 html/Admin/Queues/Modify.html:75 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "ЗапроÑÑ‹ должны быть обработаны за" -#: html/Elements/Submit:62 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "Ðеобходимый параметр '%1' не указан" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "ОчиÑтить" -#: html/Admin/Users/Modify.html:159 html/User/Prefs.html:50 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "Домашний" -#: html/Ticket/Elements/Tabs:132 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" -msgstr "Закрыть" +msgstr "Решить" -#: html/Ticket/Update.html:133 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" -msgstr "" +msgstr "Решить заÑвка #%1 (%2)" -#: etc/initialdata:302 html/Elements/SelectDateType:28 lib/RT/Ticket_Overlay.pm:1170 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" -msgstr "Закрыт" +msgstr "Решено" -#: html/Search/Bulk.html:123 html/Ticket/ModifyAll.html:73 html/Ticket/Update.html:73 +#: NOT FOUND IN SOURCE msgid "Response to requestors" -msgstr "Ответ проÑителÑм" +msgstr "Ответ авторам заÑвки" -#: html/Elements/ListActions:26 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" -msgstr "Отчет" +msgstr "Результаты" -#: html/Search/Elements/PickRestriction:105 +#: NOT FOUND IN SOURCE msgid "Results per page" -msgstr "Тикетов на Ñтраницу" +msgstr "Результатов на Ñтранице" -#: html/Admin/Elements/ModifyUser:33 html/Admin/Users/Modify.html:100 html/User/Prefs.html:72 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "Повторите пароль" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "Обратить" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "Право %1 не найдено Ð´Ð»Ñ %2 %3 в рамках %4 (%5)\\n" -#: lib/RT/ACE_Overlay.pm:613 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "Право делегировано" -#: lib/RT/ACE_Overlay.pm:303 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "Право выдано" -#: lib/RT/ACE_Overlay.pm:161 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "Право загружено" -#: lib/RT/ACE_Overlay.pm:678 lib/RT/ACE_Overlay.pm:693 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" -msgstr "Право не может быть отобрано" +msgstr "Право не может быть отозвано" -#: html/User/Delegation.html:64 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "Право не найдено" -#: lib/RT/ACE_Overlay.pm:543 lib/RT/ACE_Overlay.pm:638 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "Право не загружено" -#: lib/RT/ACE_Overlay.pm:689 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" -msgstr "Право отобрано" +msgstr "Право отозвано" -#: html/Admin/Elements/UserTabs:41 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "Права" -#: lib/RT/Interface/Web.pm:758 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" -msgstr "" +msgstr "Ðевозможно выдать права Ð´Ð»Ñ %1" -#: lib/RT/Interface/Web.pm:791 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" -msgstr "" +msgstr "Ðевозможно отозвать права %1" -#: html/Admin/Global/GroupRights.html:51 html/Admin/Queues/GroupRights.html:52 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "ПÑевдо-группы" -#: NOT FOUND IN SOURCE -msgid "RootApproval" -msgstr "" +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "Строк на Ñтранице" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "Суб." -#: html/Admin/Queues/People.html:105 html/Ticket/Modify.html:39 html/Ticket/ModifyAll.html:94 html/Ticket/ModifyPeople.html:38 +#: html/Search/Elements/EditSearches:70 +msgid "Save" +msgstr "Сохранить" + +#: 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 msgid "Save Changes" msgstr "Сохранить изменениÑ" -#: html/Ticket/ModifyLinks.html:39 +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "Сохранить наÑтройки" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "Сохранить изменениÑ" -#: html/Admin/Global/Scrip.html:49 +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "Сохраненные запроÑÑ‹" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" -msgstr "" +msgstr "Скриплет #%1" -#: lib/RT/Scrip_Overlay.pm:176 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" -msgstr "Создан Ñкрипт" +msgstr "Скриплет Ñоздан" -#: html/Admin/Elements/EditScrips:84 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "ÐŸÐ¾Ð»Ñ Ñкриплетов" + +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" -msgstr "Удален Ñкрипт" +msgstr "Скриплет удален" -#: html/Admin/Elements/QueueTabs:46 html/Admin/Elements/SystemTabs:33 html/Admin/Global/index.html:41 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" -msgstr "Скрипты" +msgstr "Скриплеты" #: NOT FOUND IN SOURCE msgid "Scrips for %1\\n" -msgstr "Скрипты Ð´Ð»Ñ %1\\n" +msgstr "Скриплеты Ð´Ð»Ñ %1\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" -msgstr "Скрипты, которые дейÑтвуют Ð´Ð»Ñ Ð²Ñех очередей" +msgstr "Скриплеты, которые дейÑтвуют Ð´Ð»Ñ Ð²Ñех очередей" -#: html/Elements/SimpleSearch:27 html/Search/Elements/PickRestriction:126 html/Ticket/Elements/Tabs:159 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "ПоиÑк" #: NOT FOUND IN SOURCE msgid "Search Criteria" -msgstr "Параметры поиÑка" +msgstr "Критерии поиÑка" + +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" -#: html/Approvals/Elements/PendingMyApproval:39 +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" -msgstr "ИÑкать визы" +msgstr "ПоиÑк подтверждений" -#: bin/rt-crontool:188 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Searches can't be associated with that kind of object" +msgstr "ЗапроÑÑ‹ не могут быть аÑÑоциированы Ñ Ñ‚Ð°ÐºÐ¸Ð¼ типом объекта" + +#: bin/rt-crontool:213 msgid "Security:" msgstr "БезопаÑноÑть:" -#: lib/RT/Queue_Overlay.pm:67 -msgid "SeeQueue" +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "ПроÑмотреть дополнительные полÑ" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "ПроÑмотреть полноÑтью иÑходÑщую почту и ее получателей" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "ПроÑмотреть конфиденциальный комментарий заÑвки" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "ПроÑмотреть Ñводную информацию заÑвки" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "ПроÑматриватьДополнительныеПолÑ" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" msgstr "" -#: html/Admin/Groups/index.html:40 -msgid "Select a group" -msgstr "Выбор группы" +#: lib/RT/Queue_Overlay.pm:92 +msgid "SeeQueue" +msgstr "ПроÑмативатьОчередь" #: NOT FOUND IN SOURCE +msgid "Select" +msgstr "Выбрать" + +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "Выберите дополнительное поле" + +#: NOT FOUND IN SOURCE +msgid "Select a Custom Fields" +msgstr "Выберите дополнительные полÑ" + +#: html/Admin/Groups/index.html:78 +msgid "Select a group" +msgstr "Выберите группу" + +#: html/Admin/Queues/index.html:54 msgid "Select a queue" -msgstr "Выбор очереди" +msgstr "Выберите очередь" + +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "Выберите очередь Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ¹ новой заÑвки" -#: html/Admin/Users/index.html:25 html/Admin/Users/index.html:28 +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" -msgstr "Выбор пользователÑ" +msgstr "Выберите пользователÑ" -#: html/Admin/Global/CustomField.html:38 html/Admin/Global/CustomFields.html:36 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" +msgstr "Выберите дополнительное поле" + +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" msgstr "" -#: html/Admin/Elements/GroupTabs:52 html/User/Elements/GroupTabs:50 -msgid "Select group" +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" msgstr "" -#: lib/RT/CustomField_Overlay.pm:355 -msgid "Select multiple values" +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" msgstr "" -#: lib/RT/CustomField_Overlay.pm:352 -msgid "Select one value" +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" msgstr "" -#: html/Admin/Elements/QueueTabs:67 +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 +msgid "Select group" +msgstr "Выберите группу" + +#: lib/RT/CustomField_Overlay.pm:59 +msgid "Select multiple values" +msgstr "Выбрать неÑколько значений" + +#: lib/RT/CustomField_Overlay.pm:60 +msgid "Select one value" +msgstr "Выбрать одно значение" + +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" -msgstr "" +msgstr "Выберите очередь" -#: html/Admin/Global/Scrip.html:37 html/Admin/Global/Scrips.html:36 html/Admin/Queues/Scrip.html:40 html/Admin/Queues/Scrips.html:50 +#: 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 "" +msgstr "Выберите Ñкриплет" -#: html/Admin/Global/Template.html:57 html/Admin/Global/Templates.html:36 html/Admin/Queues/Template.html:55 +#: 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 "" +msgstr "Выберите шаблон" + +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "Выберите до %1 значений" -#: html/Admin/Elements/UserTabs:49 +#: html/Admin/Elements/UserTabs:75 msgid "Select user" -msgstr "" +msgstr "Выберите пользователÑ" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" -msgstr "" +msgstr "Выбрать неÑколько" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectSingle" -msgstr "" +msgstr "Выбрать одно" + +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "Выбранные дополнительные полÑ" -#: html/SelfService/index.html:25 +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "Выбранные объекты" + +#: NOT FOUND IN SOURCE msgid "Self Service" msgstr "СамообÑлуживание" -#: etc/initialdata:114 +#: etc/initialdata:121 msgid "Send mail to all watchers" -msgstr "" +msgstr "Отправить Ñообщение вÑем наблюдателÑм" -#: etc/initialdata:110 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" -msgstr "" +msgstr "Отправить Ñообщение вÑем наблюдателÑм как \"комментарий\"" -#: etc/initialdata:105 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" -msgstr "" +msgstr "Отправить Ñообщение вÑем Ðвторам заÑвки и КопиÑм" -#: etc/initialdata:100 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" -msgstr "" +msgstr "Отправить Ñообщение вÑем Ðвторам заÑвки и КопиÑм" -#: etc/initialdata:79 +#: etc/initialdata:78 msgid "Sends a message to the requestors" -msgstr "" +msgstr "ОтправлÑет Ñообщение авторам заÑвки" -#: etc/initialdata:118 etc/initialdata:122 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" -msgstr "" +msgstr "ОтправлÑть почту Ñвно указанным КопиÑм и СкрытымКопиÑм" + +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "ОтправлÑть почту КопиÑм" -#: etc/initialdata:95 +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "ОтправлÑть почту КопиÑм как комментарий" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" -msgstr "" +msgstr "ОтправлÑть почту ÐдминиÑтративнымКопиÑм" -#: etc/initialdata:91 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" -msgstr "" +msgstr "ОтправлÑть почту ÐдминиÑтративнымКопиÑм как комментарий" -#: etc/initialdata:83 etc/initialdata:87 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" -msgstr "" +msgstr "ОтправлÑть почту ОтветÑтвенному" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "Сен." #: NOT FOUND IN SOURCE -msgid "September" -msgstr "" +msgid "Seperate multiple URLs with spaces" +msgstr "РазделÑйте неÑколько ÑÑылок пробелами" #: NOT FOUND IN SOURCE +msgid "September" +msgstr "СентÑбрь" + +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "Показать" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "Показать подтверждениÑ" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "Показать колонки" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" -msgstr "ИÑкать" +msgstr "Показать результаты" + +#: NOT FOUND IN SOURCE +msgid "Show advanced search options..." +msgstr "Показать дополнительные параметры поиÑка..." -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" -msgstr "Показать завизированные запроÑÑ‹" +msgstr "Показать подтвержденные запроÑÑ‹" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" -msgstr "Показать главное" +msgstr "Показать оÑновное" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" -msgstr "Показать отвергнутые запроÑÑ‹" +msgstr "Показать отклоненные запроÑÑ‹" -#: html/Ticket/Create.html:144 html/Ticket/Create.html:34 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" -msgstr "Показать вÑе" +msgstr "Показать подробноÑти" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "Показать ожидающие запроÑÑ‹" -#: html/Approvals/Elements/PendingMyApproval:46 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" -msgstr "" +msgstr "Показать запроÑÑ‹, ждущие других подтверждений" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" -msgstr "" +msgstr "Показать конфиденциальный комментарий заÑвки" -#: lib/RT/Queue_Overlay.pm:79 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" -msgstr "" +msgstr "Показать Ñводную информацию заÑвки" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" +msgstr "ПоказыватьПраваДоÑтупа" + +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" msgstr "" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "ПоказыватьИÑходÑщуюПочту" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "ПоказыватьСохраненныеЗапроÑÑ‹" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" -msgstr "" +msgstr "ПоказыватьСкриплеты" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" -msgstr "" +msgstr "ПоказыватьШаблон" -#: lib/RT/Queue_Overlay.pm:79 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" -msgstr "" +msgstr "ПоказыватьЗаÑвку" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" -msgstr "" +msgstr "ПоказыватьКомментарииЗаÑвки" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" -msgstr "" +msgstr "ПодпиÑатьÑÑ ÐºÐ°Ðº Ðвтор заÑвки или ÐšÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки или очереди" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" -msgstr "" +msgstr "ПодпиÑатьÑÑ ÐºÐ°Ðº ÐдминиÑтративнаÑÐšÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки или очереди" -#: html/Admin/Elements/ModifyUser:39 html/Admin/Users/Modify.html:191 html/Admin/Users/Prefs.html:32 html/SelfService/Prefs.html:37 html/User/Prefs.html:112 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "ПодпиÑÑŒ" -#: html/SelfService/Elements/Header:52 -#. ($session{'CurrentUser'}->Name) +#: NOT FOUND IN SOURCE msgid "Signed in as %1" -msgstr "" +msgstr "ЗарегиÑтрирован как %1" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "Одно значение" -#: html/Elements/Header:51 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" +msgstr "ПропуÑтить меню" + +#: html/Search/Elements/EditFormat:78 +msgid "Small" msgstr "" -#: html/Admin/Elements/EditCustomFieldValues:31 +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 +msgid "Sort" +msgstr "Сортировка" + +#: NOT FOUND IN SOURCE +msgid "Sort Order" +msgstr "Метод Ñортировки" + +#: NOT FOUND IN SOURCE msgid "Sort key" msgstr "Ключ Ð´Ð»Ñ Ñортировки" -#: html/Search/Elements/PickRestriction:109 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "Сортировать по полю" -#: html/Admin/Elements/AddCustomFieldValue:25 +#: NOT FOUND IN SOURCE msgid "SortOrder" msgstr "ПорÑдок Ñортировки" #: NOT FOUND IN SOURCE +msgid "Squelched message recipients" +msgstr "Скрытые получатели ÑообщениÑ" + +#: html/Admin/Elements/EditScrip:87 +msgid "Stage" +msgstr "СтадиÑ" + +#: NOT FOUND IN SOURCE msgid "Stalled" -msgstr "Отложенных" +msgstr "ПриоÑтановленных" #: NOT FOUND IN SOURCE msgid "Start page" msgstr "ÐÐ°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñтраница" -#: html/Elements/SelectDateType:27 html/Ticket/Elements/EditDates:32 html/Ticket/Elements/ShowDates:35 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "ÐачалÑÑ" @@ -3793,139 +4942,191 @@ msgstr "ÐачалÑÑ" msgid "Started date '%1' could not be parsed" msgstr "Ðе могу разобрать дату 'ÐачалÑÑ': '%1'" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:27 html/Ticket/Elements/ShowDates:31 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "ÐачнетÑÑ" #: NOT FOUND IN SOURCE msgid "Starts By" -msgstr "ЗапуÑки" +msgstr "Ðачато" #: NOT FOUND IN SOURCE msgid "Starts date '%1' could not be parsed" -msgstr "Ðе могу разобрать дату 'ЗапуÑки': '%1'" +msgstr "Ðе могу разобрать дату 'Ðачато': '%1'" -#: html/Admin/Elements/ModifyUser:82 html/Admin/Users/Modify.html:138 html/User/Prefs.html:94 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "СоÑтоÑние" -#: html/Elements/MyRequests:31 html/Elements/MyTickets:31 html/Search/Elements/PickRestriction:74 html/SelfService/Display.html:59 html/SelfService/Elements/MyRequests:29 html/SelfService/Update.html:31 html/Ticket/Create.html:42 html/Ticket/Elements/EditBasics:38 html/Ticket/Elements/ShowBasics:31 html/Ticket/Update.html:60 lib/RT/Ticket_Overlay.pm:1164 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "СтатуÑ" -#: etc/initialdata:288 +#: etc/initialdata:309 msgid "Status Change" -msgstr "" +msgstr "Изменение ÑтатуÑа" -#: lib/RT/Transaction_Overlay.pm:530 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½ Ñ %1 на %2" #: NOT FOUND IN SOURCE msgid "StatusChange" -msgstr "" +msgstr "ИзменÑтьСтатуÑ" -#: html/Ticket/Elements/Tabs:147 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" -msgstr "Отобрать" +msgstr "Переназначать Ñебе" + +#: lib/RT/Queue_Overlay.pm:118 +msgid "Steal tickets" +msgstr "Переназначить заÑвки Ñебе" -#: lib/RT/Transaction_Overlay.pm:589 +#: lib/RT/Queue_Overlay.pm:118 +msgid "StealTicket" +msgstr "ПереназначатьЗаÑвкуСебе" + +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) +msgid "Stolen from %1" +msgstr "ОтветÑтвенный переназначен Ñ %1" + +#: NOT FOUND IN SOURCE msgid "Stolen from %1 " -msgstr "Отобран у %1" +msgstr "ОтветÑтвенный переназначен Ñ %1 " -#: html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Search/Bulk.html:126 html/Search/Elements/PickRestriction:43 html/SelfService/Create.html:59 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:35 html/Ticket/Create.html:84 html/Ticket/Elements/EditBasics:28 html/Ticket/ModifyAll.html:79 html/Ticket/Update.html:77 lib/RT/Ticket_Overlay.pm:1160 lib/RT/Tickets_Overlay.pm:987 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: 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 msgid "Subject" msgstr "Тема" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:611 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" -msgstr "" +msgstr "Тема изменена на %1" -#: html/Elements/Submit:59 +#: html/Elements/Submit:97 msgid "Submit" -msgstr "Готово" +msgstr "Отправить" + +#: NOT FOUND IN SOURCE +msgid "Submit Query" +msgstr "Отправить запроÑ" #: NOT FOUND IN SOURCE msgid "Submit Workflow" -msgstr "" +msgstr "Отправить поÑледовательноÑть дейÑтвий" -#: lib/RT/Group_Overlay.pm:749 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" -msgstr "" +msgstr "УÑпешно" + +#: NOT FOUND IN SOURCE +msgid "Summary" +msgstr "Ð¡Ð²Ð¾Ð´Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ" + +#: NOT FOUND IN SOURCE +msgid "Summary matches" +msgstr "Ð’Ñего Ñовпадений" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "Ð’Ñк." -#: lib/RT/System.pm:54 +#: lib/RT/System.pm:76 msgid "SuperUser" -msgstr "" +msgstr "ÐдминиÑтратор" -#: html/User/Elements/DelegateRights:77 +#: html/User/Elements/DelegateRights:98 msgid "System" -msgstr "" +msgstr "СиÑтемные" + +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ" -#: html/Admin/Elements/SelectRights:81 lib/RT/ACE_Overlay.pm:567 lib/RT/Interface/Web.pm:757 lib/RT/Interface/Web.pm:790 +#: 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 "Ошибка ÑиÑтемы" +msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" #: NOT FOUND IN SOURCE msgid "System Error. Right not granted." -msgstr "" +msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не выдано" #: NOT FOUND IN SOURCE msgid "System Error. right not granted" +msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не выдано" + +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" msgstr "" -#: lib/RT/ACE_Overlay.pm:616 +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "СиÑтемные утилиты" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." -msgstr "Ошибка ÑиÑтемы. Право не было делегировано." +msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не делегировано." -#: lib/RT/ACE_Overlay.pm:146 lib/RT/ACE_Overlay.pm:223 lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:898 +#: 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 "Ошибка ÑиÑтемы. Право не было выдано." +msgstr "CиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Право не выдано." #: NOT FOUND IN SOURCE msgid "System error. Unable to grant rights." -msgstr "" +msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. Ðевозможно выдать права" -#: html/Admin/Global/GroupRights.html:35 html/Admin/Groups/GroupRights.html:37 html/Admin/Queues/GroupRights.html:36 +#: 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 "СиÑтемные группы" #: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 msgid "SystemRolegroup for internal use" -msgstr "" +msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¿Ñевдо-группа Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€ÐµÐ½Ð½ÐµÐ³Ð¾ иÑпользованиÑ" -#: lib/RT/CurrentUser.pm:320 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRING" -#: html/Ticket/Elements/Tabs:143 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" -msgstr "ВзÑть" +msgstr "ВзÑть Ñебе" + +#: lib/RT/Queue_Overlay.pm:116 +msgid "Take tickets" +msgstr "ВзÑть заÑвки ÑебÑ" -#: lib/RT/Transaction_Overlay.pm:575 +#: lib/RT/Queue_Overlay.pm:116 +msgid "TakeTicket" +msgstr "БратьЗаÑвкуСебе" + +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" -msgstr "ВзÑÑ‚" +msgstr "ВзÑта" + +#: NOT FOUND IN SOURCE +msgid "Task" +msgstr "Задача" -#: html/Admin/Elements/EditScrip:81 +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "Шаблон" -#: html/Admin/Global/Template.html:91 html/Admin/Queues/Template.html:90 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" -msgstr "" +msgstr "Шаблон #%1" -#: html/Admin/Elements/EditTemplates:89 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" -msgstr "" +msgstr "Шаблон удален" -#: lib/RT/Scrip_Overlay.pm:153 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "Шаблон не найден" @@ -3933,11 +5134,11 @@ msgstr "Шаблон не найден" msgid "Template not found\\n" msgstr "Шаблон не найден\\n" -#: lib/RT/Template_Overlay.pm:347 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "Шаблон обработан" -#: html/Admin/Elements/QueueTabs:49 html/Admin/Elements/SystemTabs:36 html/Admin/Global/index.html:45 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "Шаблоны" @@ -3945,436 +5146,568 @@ msgstr "Шаблоны" msgid "Templates for %1\\n" msgstr "Шаблоны Ð´Ð»Ñ %1\\n" -#: lib/RT/Interface/Web.pm:858 +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "ТекÑÑ‚" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" -msgstr "" +msgstr "Ðто уже текущее значение" -#: lib/RT/CustomField_Overlay.pm:178 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "Ðто поле не может иметь такого значениÑ" -#: lib/RT/Ticket_Overlay.pm:1886 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "Значение не изменилоÑÑŒ" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 +msgid "That principal already has that right" +msgstr "Ðтот пользователь уже имеет Ñто право." + +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "Ðтот пользователь уже %1 Ð´Ð»Ñ Ñтой очереди" -#: lib/RT/Ticket_Overlay.pm:1434 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" -msgstr "Ðтот пользователь уже %1 Ð´Ð»Ñ Ñтого тикета" +msgstr "Ðтот пользователь уже %1 Ð´Ð»Ñ Ñтой заÑвки " -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" -msgstr "Ðтот пользователь не %1 Ñтой очереди" +msgstr "Ðтот пользователь не %1 Ð´Ð»Ñ Ñтой очереди" -#: lib/RT/Ticket_Overlay.pm:1551 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" -msgstr "Ðтот пользователь не %1 Ñтому тикету" +msgstr "Ðтот пользователь не %1 Ð´Ð»Ñ Ñтой заÑвки" -#: lib/RT/Ticket_Overlay.pm:1882 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" -msgstr "Ðтой очереди не ÑущеÑтвует" +msgstr "Ðта очередь не ÑущеÑтвует" -#: lib/RT/Ticket_Overlay.pm:3143 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" -msgstr "Ðтот тикет имеет неразрешенные завиÑимоÑти" +msgstr "Ðта заÑвка имеет неразрешенные завиÑимоÑти" -#: lib/RT/ACE_Overlay.pm:288 lib/RT/ACE_Overlay.pm:597 +#: NOT FOUND IN SOURCE msgid "That user already has that right" msgstr "Пользователь уже имеет Ñто право" -#: lib/RT/Ticket_Overlay.pm:2952 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" -msgstr "Пользователь уже владеет Ñтим тикетом" +msgstr "Пользователь уже ответÑтвенен за Ñту заÑвку" -#: lib/RT/Ticket_Overlay.pm:2918 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "Пользователь не ÑущеÑтвует" -#: lib/RT/User_Overlay.pm:315 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" -msgstr "Ðтот пользователь уже имеет вÑе полномочиÑ" +msgstr "Ðтот пользователь уже привилегированный" -#: lib/RT/User_Overlay.pm:332 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" -msgstr "Ðтот пользователь уже не имеет полномочий" +msgstr "Ðтот пользователь уже непривилегированный" -#: lib/RT/User_Overlay.pm:327 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" -msgstr "Ðтот пользователь теперь имеет вÑе полномочиÑ" +msgstr "Ðтот пользователь теперь привилегированный" -#: lib/RT/User_Overlay.pm:344 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" -msgstr "Ðтот пользователь теперь не имеет полномочий" +msgstr "Ðтот пользователь теперь непривилегированный" #: NOT FOUND IN SOURCE msgid "That user is now unprivilegedileged" -msgstr "" +msgstr "Пользователь теперь непривилегированный" -#: lib/RT/Ticket_Overlay.pm:2944 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" -msgstr "Ðтот пользователь не может владеть тикетами из Ñтой очереди" +msgstr "Ðтот пользователь не может быть ответÑтвенным за заÑвки в Ñтой очереди" -#: lib/RT/Link_Overlay.pm:206 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "Ðто не чиÑловой идентификатор" -#: html/Ticket/Create.html:150 html/Ticket/Elements/ShowSummary:28 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" -msgstr "Главное" +msgstr "ОÑновное" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" -msgstr "" +msgstr "ÐšÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки" -#: lib/RT/ACE_Overlay.pm:89 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" -msgstr "" +msgstr "ÐдминиÑÑ‚Ñ€Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ ÐºÐ¾Ð¿Ð¸Ñ Ð·Ð°Ñвки" -#: lib/RT/Ticket_Overlay.pm:2213 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" -msgstr "ЗапиÑан комментарий" +msgstr "Комментарий запиÑан" -#: bin/rt-crontool:198 +#: 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 "ÐижеÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° найдет вÑе активные заÑвки в очереди 'ОÑновнаÑ' и уÑтановит им приоритет 99, еÑли в них небыло активноÑти более 4-Ñ… чаÑов:" -#: bin/rt-commit-handler:756 bin/rt-commit-handler:766 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" -msgstr "Ðти команды не были иÑполнены:\\n\\n" +msgstr "Ðти команды не были выполнены:\\n\\n" -#: lib/RT/Interface/Web.pm:861 +#: lib/RT/Record.pm:934 msgid "The new value has been set." -msgstr "" +msgstr "Ðовое значение уÑтановлено" -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" -msgstr "" +msgstr "ОтветÑтвенный за заÑвку" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" -msgstr "" +msgstr "Ðвтор заÑвки" -#: html/Admin/Elements/EditUserComments:26 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "Ðти комментарии не показываютÑÑ Ð¾Ð±Ñ‹ÐºÐ½Ð¾Ð²ÐµÐ½Ð½Ð¾Ð¼Ñƒ пользователю" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "Ðто дополнительное поле не отноÑитÑÑ Ðº Ñтому объекту" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "Ðто возможноÑть доÑтупна только Ð´Ð»Ñ ÑиÑтемных админиÑтраторов." + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "Ðто Ñообщение будет отправлено..." + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" -msgstr "Ðтот тикет %1 %2 (%3)\\n" +msgstr "Ðта заÑвка %1 %2 (%3)\\n" -#: bin/rt-crontool:189 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "Ðтот инÑтрумент позволÑет пользователю запуÑкать некоторые модули Perl из RT." -#: lib/RT/Transaction_Overlay.pm:253 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" -msgstr "Похоже, что Ñта Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ Ð½Ðµ имеет информации" +msgstr "Похоже, что Ñта Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ Ð½Ðµ имеет Ñодержимого" -#: html/Ticket/Elements/ShowRequestor:47 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" -msgstr "" +msgstr "%1 заÑвок макÑимального приоритета Ñтого пользователÑ" #: NOT FOUND IN SOURCE msgid "This user's 25 highest priority tickets" -msgstr "25 важнейших тикетов пользователÑ..." +msgstr "25 важнейших заÑвок пользователÑ..." -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "Чтв." #: NOT FOUND IN SOURCE msgid "Ticket" -msgstr "" +msgstr "ЗаÑвка" #: NOT FOUND IN SOURCE msgid "Ticket # %1 %2" -msgstr "Тикет # %1 %2" +msgstr "ЗаÑвка # %1 %2" #: NOT FOUND IN SOURCE msgid "Ticket # %1 Jumbo update: %2" -msgstr "" +msgstr "ЗаÑвка # %1 Изменение вÑех данных: %2" -#: html/Ticket/ModifyAll.html:25 html/Ticket/ModifyAll.html:29 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" -msgstr "Тикет #%1 Обновление вÑего: %2" +msgstr "ЗаÑвка #%1 Изменение вÑех данных: %2" -#: html/Approvals/Elements/ShowDependency:46 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" -msgstr "" +msgstr "ЗаÑвка #%1: %2" -#: lib/RT/Ticket_Overlay.pm:608 +#: 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) +msgid "Ticket %1" +msgstr "ЗаÑвка %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" -msgstr "Тикет %1 Ñоздан в очереди '%2'" +msgstr "ЗаÑвка %1 Ñоздана в очереди '%2'" -#: bin/rt-commit-handler:760 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" -msgstr "Загружен тикет %1\\n" +msgstr "ЗаÑвка %1 загружена\\n" -#: html/Search/Bulk.html:181 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" -msgstr "Тикет %1: %2" +msgstr "ЗаÑвка %1: %2" -#: html/Ticket/History.html:25 html/Ticket/History.html:28 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "Дополнительные Ð¿Ð¾Ð»Ñ Ð·Ð°Ñвки" + +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" -msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñ‚Ð¸ÐºÐµÑ‚Ð° # %1 %2" +msgstr "ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð°Ñвки # %1 %2" -#: html/SelfService/Display.html:34 +#: NOT FOUND IN SOURCE msgid "Ticket Id" -msgstr "Тикет #" +msgstr "ЗаÑвка #" -#: etc/initialdata:303 +#: etc/initialdata:324 msgid "Ticket Resolved" -msgstr "" +msgstr "ЗаÑвка решена" -#: html/Search/Elements/PickRestriction:63 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "Транзакции заÑвки" + +#: NOT FOUND IN SOURCE msgid "Ticket attachment" -msgstr "Ð”Ð»Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹" +msgstr "Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ñвки" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" -msgstr "ТекÑÑ‚ тикета" +msgstr "Содержимое заÑвки" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" -msgstr "Тип данных тикета" +msgstr "Тип данных Ñодержимого заÑвки" -#: lib/RT/Ticket_Overlay.pm:495 lib/RT/Ticket_Overlay.pm:597 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" -msgstr "" +msgstr "ЗаÑвка не может быть Ñоздана из-за внутренней ошибки" -#: lib/RT/Transaction_Overlay.pm:522 +#: NOT FOUND IN SOURCE msgid "Ticket created" -msgstr "Создан тикет" +msgstr "ЗаÑвка Ñоздана" #: NOT FOUND IN SOURCE msgid "Ticket creation failed" -msgstr "Ðе удалоÑÑŒ Ñоздать тикет" +msgstr "Ðевомзожно Ñоздать заÑвку" -#: lib/RT/Transaction_Overlay.pm:527 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" -msgstr "Тикет удален" +msgstr "ЗаÑвка удалена" -#: html/REST/1.0/modify:29 html/REST/1.0/update:34 +#: NOT FOUND IN SOURCE msgid "Ticket id not found" -msgstr "Идентификатор тикета не найден" +msgstr "Идентификатор заÑвки не найден" #: NOT FOUND IN SOURCE msgid "Ticket killed" -msgstr "" +msgstr "ЗаÑвка уничтожена" -#: html/REST/1.0/modify:36 html/REST/1.0/update:41 +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "Метаданные заÑвки" + +#: NOT FOUND IN SOURCE msgid "Ticket not found" -msgstr "Тикет не найден" +msgstr "ЗаÑвка не найдена" -#: etc/initialdata:289 +#: etc/initialdata:310 msgid "Ticket status changed" -msgstr "" +msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ñвки изменен" -#: html/Ticket/Update.html:39 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" -msgstr "Ðаблюдатели Ð´Ð»Ñ Ñ‚Ð¸ÐºÐµÑ‚Ð°" +msgstr "Ðаблюдатели за заÑвкой" -#: html/Elements/Tabs:49 -msgid "Tickets" +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" msgstr "" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 +msgid "Tickets" +msgstr "ПоиÑк заÑвки" + +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" -msgstr "" +msgstr "ЗаÑвки %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" -msgstr "" +msgstr "ЗаÑвки %1 Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %2" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" -msgstr "Тикеты от %1" +msgstr "ЗаÑвки от %1" -#: html/Approvals/Elements/ShowDependency:27 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" -msgstr "От Ñтой визы завиÑÑÑ‚ Ñледующие тикеты:" +msgstr "От Ñтого Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑÑÑ‚ Ñледующие заÑвки:" -#: html/Ticket/Create.html:157 html/Ticket/Elements/EditBasics:48 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "РаÑчётное времÑ" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" -msgstr "ОÑталоÑÑŒ" +msgstr "ОÑталоÑÑŒ времени" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:43 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" -msgstr "Ð’ работе" +msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² работе" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" -msgstr "ОÑталоÑÑŒ" +msgstr "ОÑталоÑÑŒ времени" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" -msgstr "Ð’ работе" +msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² работе" #: NOT FOUND IN SOURCE msgid "TimeLeft" -msgstr "" +msgstr "ОÑталоÑÑŒ времени" -#: lib/RT/Ticket_Overlay.pm:1165 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" +msgstr "Ð’Ñ€ÐµÐ¼Ñ Ð² работе" + +#: html/Search/Elements/EditFormat:74 +msgid "Title" msgstr "" -#: bin/rt-commit-handler:402 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" -msgstr "Ð”Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ дифа Ñтого коммита:" +msgstr "Ð”Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ изменений Ñтого коммита:" -#: bin/rt-commit-handler:391 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" -msgstr "Ð”Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ дифа Ñтого коммита:\\n" +msgstr "Ð”Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ изменений Ñтого коммита:\\n" -#: lib/RT/Ticket_Overlay.pm:1168 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "Ð”Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа поддержки, обучениÑ, разработки на заказ или Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±Ñ€Ð°Ñ‰Ð°Ð¹Ñ‚ÐµÑÑŒ %1." + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "Контакт" -#: etc/initialdata:237 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "Утилиты" + +#: etc/initialdata:252 msgid "Transaction" -msgstr "" +msgstr "ТранзакциÑ" -#: lib/RT/Transaction_Overlay.pm:642 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "Ð¢Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ %1 удалена" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" -msgstr "Создана транзакциÑ" +msgstr "Ð¢Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ñ Ñоздана" + +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "Дополнительные Ð¿Ð¾Ð»Ñ Ñ‚Ñ€Ð°Ð½Ð·Ð°ÐºÑ†Ð¸Ð¸" -#: lib/RT/Transaction_Overlay.pm:89 +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" -msgstr "" +msgstr "ТранзакциÑ->Создать невозможно, так как вы не указали идентификатор заÑвки" + +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "ТранзакциÑ->Создать невозможно, так как вы не указали тип объекта и идентификатор" -#: lib/RT/Transaction_Overlay.pm:701 +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" -msgstr "Транзакции не изменены" +msgstr "ÐеизменÑемые транзакции" #: NOT FOUND IN SOURCE msgid "Trying to delete a right: %1" msgstr "ПытаемÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ право: %1" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "Втр." -#: html/Admin/Elements/EditCustomField:34 html/Ticket/Elements/AddWatchers:33 html/Ticket/Elements/AddWatchers:44 html/Ticket/Elements/AddWatchers:54 lib/RT/Ticket_Overlay.pm:1166 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "Тип" -#: lib/RT/ScripCondition_Overlay.pm:104 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "Ðе реализовано" -#: html/Admin/Users/Modify.html:68 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "Логин UNIX" -#: html/Admin/Elements/ModifyUser:62 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ UNIX" -#: lib/RT/Attachment_Overlay.pm:265 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ° %1" -#: html/Elements/SelectResultsPerPage:37 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "Ðе ограничено" +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "БезымÑнный запроÑ" + #: etc/initialdata:32 msgid "Unprivileged" -msgstr "" +msgstr "Ðепривилегированный" + +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "Ðевыбранные дополнительные полÑ" -#: lib/RT/Transaction_Overlay.pm:571 +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "Ðевыбранные объекты" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" -msgstr "Ðичей" +msgstr "Ðе взÑта" + +#: NOT FOUND IN SOURCE +msgid "Untitled search" +msgstr "БезымÑнный запроÑ" -#: html/Elements/MyTickets:64 html/Search/Bulk.html:33 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "Обновить" -#: html/Admin/Users/Prefs.html:62 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "Обновить вÑе" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "Обновить идентификатор" -#: html/Search/Bulk.html:120 html/Ticket/ModifyAll.html:66 html/Ticket/Update.html:67 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "Обновить заÑвку" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "Обновить тип" -#: html/Search/Listing.html:61 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" -msgstr "Изменить одним махом" +msgstr "Изменить вÑе Ñти заÑвки одновременно" -#: html/Admin/Users/Prefs.html:49 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "Обновить e-mail" -#: html/Admin/Users/Prefs.html:55 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "Обновить неÑколько заÑвок" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "Обновить имÑ" -#: lib/RT/Interface/Web.pm:375 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." -msgstr "Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ Ñохранены." +msgstr "Обновление не запиÑано." -#: html/Search/Bulk.html:81 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" -msgstr "Изменить выбранные тикеты" +msgstr "Обновить выбранные заÑвки" -#: html/Admin/Users/Prefs.html:36 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "Обновить подпиÑÑŒ" -#: html/Ticket/ModifyAll.html:63 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" -msgstr "Обновить тикет" +msgstr "Обновить заÑвку" -#: html/SelfService/Update.html:25 html/SelfService/Update.html:27 -#. ($Ticket->id) +#: NOT FOUND IN SOURCE msgid "Update ticket # %1" -msgstr "Обновить тикет # %1" +msgstr "Обновление заÑвки # %1" -#: html/SelfService/Update.html:50 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" -msgstr "Обновить тикет # %1" +msgstr "Обновление заÑвки #%1" -#: html/Ticket/Update.html:135 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" -msgstr "" +msgstr "Обновление заÑвки #%1 (%2)" -#: lib/RT/Interface/Web.pm:373 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "Обновление не было ни Ñообщением, ни комментарием." -#: html/Elements/SelectDateType:33 html/Ticket/Elements/ShowDates:51 lib/RT/Ticket_Overlay.pm:1169 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" -msgstr "Обновлен" +msgstr "Обновлена" + +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "Загрузить" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "Загрузить неÑколько файлов" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "Загрузить неÑколько изображений" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "Загрузить один файл" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "Загрузить одно изображение" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "Закачать до %1 файлов" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "Закачать до %1 изображений" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "Загрузить ваши изменениÑ." + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" #: NOT FOUND IN SOURCE msgid "User %1 %2: %3\\n" @@ -4384,6 +5717,11 @@ msgstr "Пользователь %1 %2: %3\\n" msgid "User %1 Password: %2\\n" msgstr "Пользователь %1 Пароль: %2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "Пользователь '%1' не найден." + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "Пользователь '%1' не найден" @@ -4392,190 +5730,230 @@ msgstr "Пользователь '%1' не найден" msgid "User '%1' not found\\n" msgstr "Пользователь '%1' не найден\\n" -#: etc/initialdata:125 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" -msgstr "" +msgstr "Задано пользователем" + +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "Заданные пользователем уÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ дейÑтвиÑ" -#: html/Admin/Users/Prefs.html:59 +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "Логин" -#: html/Elements/SelectUsers:26 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "Логин" -#: html/Admin/Elements/GroupTabs:47 html/Admin/Elements/QueueTabs:60 html/Admin/Elements/SystemTabs:47 html/Admin/Global/index.html:59 +#: 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 "Права пользователÑ" -#: html/Admin/Users/Modify.html:226 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "Пользователь запроÑил обновление неизвеÑтного типа Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ñ %1 Ð´Ð»Ñ Ð¾Ð±ÑŠÐµÐºÑ‚Ð° %2 #%3" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" -msgstr "Ðе могу Ñоздать пользователÑ: %1" +msgstr "Ðевозможно Ñоздать пользователÑ: %1" -#: lib/RT/User_Overlay.pm:262 +#: lib/RT/User_Overlay.pm:331 msgid "User created" -msgstr "Создан пользователь" +msgstr "Пользователь Ñоздан" -#: html/Admin/Global/GroupRights.html:67 html/Admin/Groups/GroupRights.html:54 html/Admin/Queues/GroupRights.html:68 +#: 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 "Группы, определенные пользователем" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "Пользовать загружен" + #: NOT FOUND IN SOURCE msgid "User notified" -msgstr "Пользователю отоÑлано напоминание" +msgstr "Пользователю отправлено напоминание" -#: html/Admin/Users/Prefs.html:25 html/Admin/Users/Prefs.html:29 +#: NOT FOUND IN SOURCE msgid "User view" msgstr "ПользовательÑкие наÑтройки" -#: html/Admin/Users/Modify.html:48 html/Elements/Login:42 html/Ticket/Elements/AddWatchers:35 +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "Группы, заданные пользователем" + +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" -msgstr "Логин" +msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ" -#: html/Admin/Elements/SelectNewGroupMembers:26 html/Admin/Elements/Tabs:32 html/Admin/Groups/Members.html:55 html/Admin/Queues/People.html:68 html/Admin/index.html:29 html/User/Groups/Members.html:58 +#: 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 msgid "Users" msgstr "Пользователи" -#: html/Admin/Users/index.html:65 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" -msgstr "Ðайдены пользователи" +msgstr "Пользователи, удовлетворÑющие критериÑм поиÑка" + +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "Проверить запроÑ" -#: html/Search/Elements/PickRestriction:51 +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" -msgstr "ValueOfQueue" +msgstr "Значение запроÑа" -#: html/Admin/Elements/EditCustomField:40 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "ЗначениÑ" -#: NOT FOUND IN SOURCE -msgid "VrijevormEnkele" -msgstr "" - -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" -msgstr "" +msgstr "Ðаблюдать" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" -msgstr "" +msgstr "ÐаблюдатьÐдминиÑтративнойКопией" #: NOT FOUND IN SOURCE msgid "Watcher loaded" -msgstr "" +msgstr "Ðаблюдатель загружен" -#: html/Admin/Elements/QueueTabs:42 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "Ðаблюдатели" -#: html/Admin/Elements/ModifyUser:56 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "WebEncoding" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "Срд." -#: etc/upgrade/2.1.71:161 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" -msgstr "" +msgstr "Когда заÑвка подтверждена вÑеми подтверждающими, добавить запиÑÑŒ в оригинальную заÑвку" -#: etc/upgrade/2.1.71:135 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" -msgstr "" +msgstr "Когда заÑвка подтверждена любым из подтверждающих, добавить запиÑÑŒ в оригинальную заÑвку" -#: etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" -msgstr "" +msgstr "Когда заÑвка Ñоздана" -#: etc/upgrade/2.1.71:79 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" -msgstr "" +msgstr "При Ñоздании заÑвки Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»Ñть ОтветÑтвенного и ÐдминиÑтративнуюКопию заÑвкиAdminCc of the item awaiting their approval, ожидающей подтверждениÑ" -#: etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" -msgstr "" +msgstr "Когда что-либо произойдет" -#: etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" -msgstr "" +msgstr "Каждый раз при решении заÑвки" -#: etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" -msgstr "" +msgstr "Каждый раз при изменении ответÑтвенного заÑвки" + +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "Каждый раз при изменении приоритета заÑвки" -#: etc/initialdata:178 +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" -msgstr "" +msgstr "Каждый раз при изменении очереди очереди" -#: etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" -msgstr "" +msgstr "Каждый раз при изменении ÑтатуÑа заÑвки" -#: etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" -msgstr "" +msgstr "Каждый раз при Ñрабатывании уÑловиÑ, заданного пользователем" -#: etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" -msgstr "" +msgstr "Каждый раз при добавлении комментариÑ" -#: etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" -msgstr "" +msgstr "Каждый раз при приходе корреÑпонденции" + +#: NOT FOUND IN SOURCE +msgid "Which are referred to by " +msgstr "ÐšÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑвÑзана пользователем" + +#: NOT FOUND IN SOURCE +msgid "Which refer to" +msgstr "ÐšÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑÑылаетÑÑ Ð½Ð°" -#: html/Admin/Users/Modify.html:164 html/User/Prefs.html:52 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "Рабочий" -#: html/Admin/Elements/ModifyUser:70 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "Работать автономно" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "Рабочий" -#: html/SelfService/Display.html:86 html/Ticket/Elements/ShowBasics:35 html/Ticket/Update.html:65 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "Ð’ работе" -#: lib/RT/Ticket_Overlay.pm:3056 +#: NOT FOUND IN SOURCE +msgid "Yes" +msgstr "Да" + +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" -msgstr "Ð’Ñ‹ уже владеете Ñтим тикетом" +msgstr "Ð’Ñ‹ уже ответÑтвенный за Ñту заÑвку" -#: html/autohandler:121 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" -msgstr "Вам Ñюда запрещено" +msgstr "Ð’Ñ‹ незарегиÑтрированный пользователь" -#: lib/RT/Ticket_Overlay.pm:2930 +#: NOT FOUND IN SOURCE +msgid "You can access it with the Download button on the right." +msgstr "Ð’Ñ‹ можете получить Ñто, нажав Ñправа кнопку Загрузить" + +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" -msgstr "Ð’Ñ‹ можете назначать владельца только Ð´Ð»Ñ Ñвоих или ничьих тикетов." +msgstr "Ð’Ñ‹ можете назначать ответÑтвенного только Ð´Ð»Ñ Ñвоих или ничьих заÑвок." #: NOT FOUND IN SOURCE msgid "You don't have permission to view that ticket.\\n" -msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ права на проÑмотр Ñтого тикета.\\n" +msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ права на проÑмотр Ñтой заÑвки.\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" -msgstr "You found %1 tickets in queue %2" +msgstr "Ðайдено %1 заÑвок в очереди %2" -#: html/NoAuth/Logout.html:31 html/REST/1.0/logout:25 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "Ð’Ñ‹ вышли из RT." -#: html/SelfService/Display.html:134 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." -msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ права Ñоздавать тикеты в Ñтой очереди." +msgstr "У Ð²Ð°Ñ Ð½ÐµÑ‚ права Ñоздавать заÑвки в Ñтой очереди." -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." -msgstr "Ð’Ñ‹ не можете Ñоздавать запроÑÑ‹ в Ñтой очереди." +msgstr "Ð’Ñ‹ не должны Ñоздавать запроÑÑ‹ в Ñтой очереди." -#: html/NoAuth/Logout.html:36 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "Заходите еще" -#: html/SelfService/Elements/MyRequests:25 -#. ($friendly_status) +#: NOT FOUND IN SOURCE msgid "Your %1 requests" msgstr "Ваши запроÑÑ‹: %1" @@ -4583,232 +5961,304 @@ msgstr "Ваши запроÑÑ‹: %1" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "ÐдминиÑтратор RT неправильно наÑтроил почтовые алиаÑÑ‹" -#: etc/initialdata:429 etc/upgrade/2.1.71:146 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." -msgstr "" +msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ð» %1. Другие Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ продолжать находитьÑÑ Ð² ожидании." -#: etc/initialdata:463 etc/upgrade/2.1.71:180 +#: etc/initialdata:540 msgid "Your request has been approved." -msgstr "" +msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½." #: NOT FOUND IN SOURCE msgid "Your request was rejected" -msgstr "" +msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚ÐºÐ»Ð¾Ð½ÐµÐ½" -#: etc/initialdata:384 etc/upgrade/2.1.71:101 +#: etc/initialdata:445 msgid "Your request was rejected." -msgstr "" +msgstr "Ваш Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚ÐºÐ»Ð¾Ð½ÐµÐ½." -#: html/autohandler:136 html/autohandler:142 +#: html/autohandler:193 msgid "Your username or password is incorrect" -msgstr "Ð’Ñ‹ ввели неверное Ð¸Ð¼Ñ Ð¸Ð»Ð¸ пароль" +msgstr "Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль неверные" -#: html/Admin/Elements/ModifyUser:84 html/Admin/Users/Modify.html:144 html/User/Prefs.html:96 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "ИндекÑ" #: NOT FOUND IN SOURCE msgid "[no subject]" +msgstr "[нет темы]" + +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" msgstr "" -#: html/User/Elements/DelegateRights:59 +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "and is not" +msgstr "и не ÑвлÑетÑÑ" + +#: NOT FOUND IN SOURCE +msgid "and not" +msgstr "и не" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "Ñ Ð¿Ñ€Ð°Ð²Ð°Ð¼Ð¸ %1" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:34 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 +msgid "closed" +msgstr "закрыто" + +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "Ñодержит" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content" -msgstr "данные" +msgstr "Ñодержимое" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "тип данных" -#: lib/RT/Ticket_Overlay.pm:2282 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" -msgstr "Ñообщение (возможно) не отправлено" +msgstr "корреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ (возможно) не отправлена" -#: lib/RT/Ticket_Overlay.pm:2292 +#: NOT FOUND IN SOURCE msgid "correspondence sent" -msgstr "отправлено Ñообщение" +msgstr "корреÑÐ¿Ð¾Ð½Ð´ÐµÐ½Ñ†Ð¸Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð°" -#: html/Admin/Elements/ModifyQueue:63 html/Admin/Queues/Modify.html:77 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "дней" #: NOT FOUND IN SOURCE -msgid "dead" -msgstr "" - -#: html/Search/Listing.html:75 msgid "delete" msgstr "удалить" -#: lib/RT/Queue_Overlay.pm:63 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" -msgstr "удален" +msgstr "удалена" + +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" -#: html/Search/Elements/PickRestriction:68 +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "не Ñовпадает" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:35 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "не Ñодержит" -#: html/Elements/SelectEqualityOperator:38 +#: NOT FOUND IN SOURCE +msgid "email address" +msgstr "Ð°Ð´Ñ€ÐµÑ email" + +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "равнÑетÑÑ" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + #: NOT FOUND IN SOURCE msgid "false" -msgstr "" +msgstr "ложь" -#: html/Elements/SelectAttachmentField:28 +#: NOT FOUND IN SOURCE msgid "filename" msgstr "Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "больше чем" -#: lib/RT/Group_Overlay.pm:194 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "группа '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "чаÑов" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "идентификатор" -#: html/Elements/SelectBoolean:32 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 +#: 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 msgid "is" msgstr "ÑвлÑетÑÑ" -#: html/Elements/SelectBoolean:36 html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectMatch:37 html/Search/Elements/PickRestriction:48 html/Search/Elements/PickRestriction:77 html/Search/Elements/PickRestriction:89 +#: 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 msgid "isn't" msgstr "не ÑвлÑетÑÑ" -#: html/Elements/SelectCustomFieldOperator:38 html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "меньше чем" -#: html/Search/Elements/PickRestriction:67 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "Ñовпадает" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "мин" -#: html/Ticket/Update.html:66 +#: html/Ticket/Update.html:64 msgid "minutes" msgstr "минут" -#: bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "изменениÑ\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "меÑÑцев" -#: lib/RT/Queue_Overlay.pm:58 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" -msgstr "новый" +msgstr "новаÑ" -#: html/Admin/Elements/EditScrips:43 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "нет имени" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" -msgstr "" +msgstr "нет значениÑ" -#: html/Ticket/Elements/EditWatchers:28 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "нет" -#: html/Elements/SelectEqualityOperator:38 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" -msgstr "не равен" +msgstr "не равно" #: NOT FOUND IN SOURCE msgid "notlike" -msgstr "" +msgstr "неравно" -#: lib/RT/Queue_Overlay.pm:59 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" -msgstr "открыт" +msgstr "открыта" -#: lib/RT/Group_Overlay.pm:199 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "Ð»Ð¸Ñ‡Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° '%1' Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ '%2'" -#: lib/RT/Group_Overlay.pm:207 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "очередь %1 %2" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" -msgstr "отклонен" +msgstr "отклонена" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" -msgstr "решен" +msgstr "решена" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "Ñек" -#: lib/RT/Queue_Overlay.pm:60 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "ÑÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° (.xls)" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" -msgstr "отложен" +msgstr "приоÑтановлена" -#: lib/RT/Group_Overlay.pm:202 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "ÑиÑтема %1" -#: lib/RT/Group_Overlay.pm:213 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "ÑиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:42 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "вызывающий компонент не указал причину" -#: lib/RT/Group_Overlay.pm:210 +#: NOT FOUND IN SOURCE +msgid "ticket #%1" +msgstr "заÑвка #%1" + +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" -msgstr "тикет #%1 %2" +msgstr "заÑвка #%1 %2" + +#: NOT FOUND IN SOURCE +msgid "till" +msgstr "пока" #: NOT FOUND IN SOURCE msgid "true" -msgstr "" +msgstr "иÑтина" -#: lib/RT/Group_Overlay.pm:216 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" -msgstr "" +msgstr "группа без опиÑаниÑ: %1" #: NOT FOUND IN SOURCE msgid "undescripbed group %1" -msgstr "неопиÑÐ°Ð½Ð½Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° %1" +msgstr "группа без опиÑаниÑ: %1" -#: lib/RT/Group_Overlay.pm:191 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "пользователь %1" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "недель" @@ -4816,11 +6266,7 @@ msgstr "недель" msgid "with template %1" msgstr "Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð¾Ð¼ %1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "лет" -#: NOT FOUND IN SOURCE -msgid "ニックãƒãƒ¼ãƒ " -msgstr "" - diff --git a/rt/lib/RT/I18N/zh_cn.po b/rt/lib/RT/I18N/zh_cn.po index ededc1ac3..1f8799825 100644 --- a/rt/lib/RT/I18N/zh_cn.po +++ b/rt/lib/RT/I18N/zh_cn.po @@ -1,4 +1,4 @@ -# Traditional Chinese localization catalog for Request Tracker (RT) +# Chinese localization catalog for Request Tracker (RT) msgid "" msgstr "" "Last-Translator: Autrijus Tang <autrijus@autrijus.org>\n" @@ -7,7 +7,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:27 html/Elements/MyTickets:27 html/Work/Elements/MyApprovals:8 html/Work/Elements/MyRequests:9 html/Work/Elements/MyTickets:9 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" @@ -15,14 +15,19 @@ msgstr "#" msgid "#%1" msgstr "#%1" -#: html/Approvals/Elements/Approve:26 html/Approvals/Elements/ShowDependency:49 html/SelfService/Display.html:24 html/Ticket/Display.html:25 html/Ticket/Display.html:29 -#. ($Ticket->Id, $Ticket->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 #. ($Ticket->id, $Ticket->Subject) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "#%1: %2" +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "$prefix %1" + #: NOT FOUND IN SOURCE msgid "%*(%1,group ticket)" msgstr "%*(%1) ä»¶å‚与的申请å•" @@ -35,52 +40,55 @@ msgstr "%*(%1) 件陿œŸå®Œæˆçš„申请å•" msgid "%*(%1,unresolved ticket)" msgstr "%*(%1) 件尚未解决的申请å•" -#: lib/RT/Date.pm:337 +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 #%2" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) +#: NOT FOUND IN SOURCE msgid "%1 %2 %3" msgstr "%1 %2 %3" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%7-%2-%3 %4:%5:%6 %1" -#: lib/RT/Ticket_Overlay.pm:3541 lib/RT/Transaction_Overlay.pm:557 lib/RT/Transaction_Overlay.pm:599 +#: 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) msgid "%1 %2 added" msgstr "%2 已新增为 %1" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "%1 %2 之å‰" -#: lib/RT/Ticket_Overlay.pm:3547 lib/RT/Transaction_Overlay.pm:564 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 已从 %2 改为 %3" -#: lib/RT/Ticket_Overlay.pm:3544 lib/RT/Transaction_Overlay.pm:560 lib/RT/Transaction_Overlay.pm:605 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" msgstr "%2 已自 %1 åˆ é™¤" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:157 -#. ($depth_str, $role_str, $group_str) +#: NOT FOUND IN SOURCE msgid "%1 %2 of group %3" msgstr "%3 群组的 %1 %2" -#: html/Admin/Elements/EditScrips:43 html/Admin/Elements/ListGlobalScrips:27 +#: 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)) msgid "%1 %2 with template %3" msgstr "æ¡ä»¶ï¼š%1 | 动作:%2 | 模æ¿ï¼š%3" @@ -89,49 +97,80 @@ msgstr "æ¡ä»¶ï¼š%1 | 动作:%2 | 模æ¿ï¼š%3" msgid "%1 (%2) %3 this ticket\\n" msgstr "%1 (%2) %3 这份申请å•\\n" -#: html/Search/Listing.html:56 html/Work/Search/index.html:28 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) - %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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (未更改)" + +#: NOT FOUND IN SOURCE msgid "%1 - %2 shown" msgstr "显示第 %1 - %2 笔" -#: bin/rt-crontool:168 bin/rt-crontool:175 bin/rt-crontool:181 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - ä¼ é€’ç»™ %2 çš„ä¸€ä¸ªå‚æ•°" -#: bin/rt-crontool:184 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - 将更新状æ€è¾“出到 STDOUT" -#: bin/rt-crontool:178 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "%1 - 指定欲使用的动作模å—" -#: bin/rt-crontool:172 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "%1 - 指定欲使用的æ¡ä»¶æ¨¡å—" -#: bin/rt-crontool:165 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "%1 - 指定欲使用的查询模å—" -#: lib/RT/ScripAction_Overlay.pm:121 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "%1 RT %2 版,%4 ç‰ˆæƒæ‰€æœ‰ï¼Œ1996-%3。" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "åŠ è½½æ‰‹ç» %1" -#: html/Edit/Elements/Page:48 -#. (scalar $count) +#: NOT FOUND IN SOURCE msgid "%1 Total" msgstr "å…± %1 笔" -#: lib/RT/Ticket_Overlay.pm:3574 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "新增 %1 作为 %2 的值" @@ -148,27 +187,31 @@ msgstr "别å %1 需è¦å¯ç”¨çš„申请å•ç¼–å· " msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "别å %1 需è¦å¯ç”¨çš„申请å•ç¼–å·ä»¥å¤„ç† %3(出自 %2)" -#: lib/RT/Link_Overlay.pm:116 lib/RT/Link_Overlay.pm:123 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "%1 çœ‹æ¥æ˜¯ä¸ªæœ¬åœ°å¯¹è±¡ï¼Œå´ä¸åœ¨æ•°æ®åº“里" -#: html/Ticket/Elements/ShowDates:51 lib/RT/Transaction_Overlay.pm:481 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 (%2)" -#: lib/RT/Transaction_Overlay.pm:535 lib/RT/Transaction_Overlay.pm:624 lib/RT/Transaction_Overlay.pm:633 lib/RT/Transaction_Overlay.pm:636 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 的值从 %2 改为 %3" -#: lib/RT/Interface/Web.pm:893 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "%1 å¤åˆ¶" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "æ— æ³•å°† %1 设定为 %2。" @@ -176,43 +219,53 @@ msgstr "æ— æ³•å°† %1 设定为 %2。" msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1 æ— æ³•åˆå§‹æ›´æ–° (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2839 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 æ— æ³•å°†çŽ°å†µè®¾æˆå·²è§£å†³ã€‚RT æ•°æ®åº“内容å¯èƒ½ä¸ä¸€è‡´ã€‚" -#: html/Elements/MyTickets:24 html/Work/Elements/MyTickets:6 +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "已建立 %1" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "å·²åˆ é™¤ %1" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "å‰ %1 份待处ç†ç”³è¯·å•" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." msgstr "å‰ %1 份待处ç†ç”³è¯·å•..." -#: html/Elements/MyRequests:24 html/Work/Elements/MyRequests:6 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." msgstr "å‰ %1 份é€å‡ºçš„申请å•..." -#: html/Work/Elements/MyApprovals:5 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets pending my approval..." msgstr "å‰ %1 ä»½å¾…ç¾æ ¸ç”³è¯·å•..." -#: bin/rt-crontool:160 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "%1 是从外部排程程åº(如 cron)æ¥å¯¹ç”³è¯·å•进行æ“作的工具。" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 å·²ä¸å†æ˜¯æ¤è¡¨å•çš„ %2。" -#: lib/RT/Ticket_Overlay.pm:1578 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1 å·²ä¸å†æ˜¯æ¤ç”³è¯·å•çš„ %2。" -#: lib/RT/Ticket_Overlay.pm:3630 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 å·²ä¸å†æ˜¯è‡ªè®¢å—段 %2 的值。" @@ -220,20 +273,41 @@ msgstr "%1 å·²ä¸å†æ˜¯è‡ªè®¢å—段 %2 的值。" msgid "%1 isn't a valid Queue id." msgstr "%1 䏿˜¯ä¸€ä¸ªåˆæ³•的表å•ç¼–å·ã€‚" -#: html/Ticket/Elements/ShowBasics:35 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 分钟" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "å‰ %1 份待认领的申请å•" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "没有显示 %1" +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 对象" + +#: NOT FOUND IN SOURCE +msgid "%1 recent tickets I own..." +msgstr "最新 %1 份待处ç†ç”³è¯·å•..." + +#: NOT FOUND IN SOURCE +msgid "%1 recent tickets I requested..." +msgstr "最新 %1 份é€å‡ºçš„申请å•..." + #: NOT FOUND IN SOURCE msgid "%1 result(s) found" msgstr "找到 %1 项结果" -#: html/User/Elements/DelegateRights:75 +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "%1æƒé™" @@ -254,28 +328,41 @@ msgstr "ä¸çŸ¥é“ %2 çš„ %1 类别" msgid "%1 was created without a CurrentUser\\n" msgstr "%1 新增时未指定现行使用者" -#: lib/RT/Action/ResolveMembers.pm:41 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 会解决在已解决群组里æˆå‘˜çš„申请å•。" -#: lib/RT/Action/StallDependent.pm:40 -#. (ref $self) +#: NOT FOUND IN SOURCE msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." msgstr "如果 %1 起始申请å•ä¾èµ–于æŸä¸ªé“¾æŽ¥ï¼Œæˆ–是æŸä¸ªé“¾æŽ¥çš„æˆå‘˜ï¼Œå®ƒå°†ä¼šè¢«å»¶å®•ã€‚" -#: lib/RT/Transaction_Overlay.pm:433 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%1 内的 %2 对象" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "%1 内的 %2 çš„ %3 对象" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "%1 已储å˜çš„æŸ¥è¯¢" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1:未指定附件" -#: html/Ticket/Elements/ShowTransaction:89 html/Work/Tickets/Elements/ShowTransaction:152 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1 å—节" -#: html/Ticket/Elements/ShowTransaction:86 html/Work/Tickets/Elements/ShowTransaction:149 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k å—节" @@ -283,7 +370,7 @@ msgstr "%1k å—节" msgid "%quant(%1,result) found" msgstr "找到 %1 项结果" -#: lib/RT/Ticket_Overlay.pm:1148 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' 䏿˜¯ä¸€ä¸ªåˆæ³•的状æ€å€¼" @@ -300,7 +387,7 @@ msgstr "(ç‚¹é€‰æ¬²åˆ é™¤çš„æˆå‘˜)" msgid "(Check box to delete scrip)" msgstr "(ç‚¹é€‰æ¬²åˆ é™¤çš„æ‰‹ç»)" -#: html/Admin/Elements/EditCustomFieldValues:24 html/Admin/Elements/EditQueueWatchers:28 html/Admin/Elements/EditScrips:34 html/Admin/Elements/EditTemplates:35 html/Admin/Elements/EditWorkflows:36 html/Admin/Groups/Members.html:51 html/Ticket/Elements/EditLinks:32 html/Ticket/Elements/EditPeople:45 html/User/Groups/Members.html:54 +#: 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 "(ç‚¹é€‰æ¬²åˆ é™¤çš„é¡¹ç›®)" @@ -308,41 +395,53 @@ msgstr "(ç‚¹é€‰æ¬²åˆ é™¤çš„é¡¹ç›®)" msgid "(Check boxes to delete)" msgstr "(ç‚¹é€‰æ¬²åˆ é™¤çš„é¡¹ç›®)" -#: html/Ticket/Create.html:177 -msgid "(Enter ticket ids or URLs, seperated with spaces)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(点选欲åœç”¨é€šçŸ¥çš„æ”¶ä»¶äºº)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(点选欲å¯ç”¨é€šçŸ¥çš„æ”¶ä»¶äºº)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" msgstr "(键入申请å•ç¼–å·æˆ–网å€ï¼Œä»¥ç©ºç™½åˆ†éš”)" -#: html/Admin/Queues/Modify.html:53 html/Admin/Queues/Modify.html:59 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" +msgid "(If left blank, will default to %1)" msgstr "(如果留白, 则预设为 %1)" #: NOT FOUND IN SOURCE msgid "(No Value)" msgstr "(没有值)" -#: html/Admin/Elements/EditCustomFields:32 html/Admin/Elements/ListGlobalCustomFields:31 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "(æ²¡æœ‰è‡ªè®¢å—æ®µ)" -#: html/Admin/Groups/Members.html:49 html/User/Groups/Members.html:52 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(没有æˆå‘˜)" -#: html/Admin/Elements/EditScrips:31 html/Admin/Elements/ListGlobalScrips:31 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(没有手ç»)" -#: html/Admin/Elements/EditTemplates:30 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "没有模æ¿" -#: html/Admin/Elements/EditWorkflows:31 +#: NOT FOUND IN SOURCE msgid "(No workflows)" msgstr "没有æµç¨‹" -#: html/Ticket/Update.html:83 html/Work/Tickets/Update.html:52 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(æ— )" + +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本给åå•上以逗å·éš”开的电å邮件地å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»çš„æ”¶ä»¶è€…åå•。)" @@ -350,11 +449,11 @@ msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本给åå•上以逗å·éš”开的电åé‚ msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本给åå•上以逗å·éš”开的电å邮件地å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»çš„æ”¶ä»¶è€…åå•。)" -#: html/Ticket/Create.html:78 +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•上以逗å·éš”开的管ç†å‘˜ç”µå邮件地å€ã€‚è¿™<b>将会</b>更改åŽç»çš„æ”¶ä»¶è€…åå•。)" -#: html/Ticket/Update.html:79 +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•上以逗å·éš”开的电å邮件地å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»çš„æ”¶ä»¶è€…åå•。)" @@ -362,87 +461,111 @@ msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•上以逗å·éš”开的电åé‚®ä»¶åœ msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•上以逗å·éš”开的电å邮件地å€ã€‚è¿™<b>ä¸ä¼š</b>更改åŽç»çš„æ”¶ä»¶è€…åå•。)" -#: html/Ticket/Create.html:68 +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本给åå•上以逗å·éš”开的电å邮件地å€ã€‚è¿™<b>将会</b>更改åŽç»çš„æ”¶ä»¶è€…åå•。)" -#: html/Ticket/Elements/EditCustomFieldEntries:35 html/Work/Tickets/Elements/EditCustomFieldEntries:33 html/Work/Tickets/Elements/ShowCustomFieldEntries:13 +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(当æ¡ä»¶æˆ–åŠ¨ä½œè®¾ä¸ºâ€˜ä½¿ç”¨è€…è‡ªè®¢â€™æ—¶ï¼Œè¯·å¡«å…¥è¿™äº›å—æ®µ)" + +#: NOT FOUND IN SOURCE +msgid "(default delegate)" +msgstr "(预设代ç†äºº)" + +#: NOT FOUND IN SOURCE msgid "(delete)" msgstr "(åˆ é™¤)" -#: html/Admin/Groups/index.html:32 html/User/Groups/index.html:32 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(空白)" -#: html/Edit/Global/CustomField/index.html:113 html/Edit/Global/Scrip/index.html:111 html/Edit/Global/Template/index.html:106 +#: NOT FOUND IN SOURCE msgid "(new)" msgstr "(新增)" -#: html/Admin/Users/index.html:38 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "(没有列出姓å)" -#: html/Elements/MyRequests:42 html/Elements/MyTickets:44 html/Work/Elements/MyApprovals:37 html/Work/Elements/MyRequests:36 html/Work/Elements/MyTickets:41 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(没有主题)" -#: html/Admin/Elements/SelectRights:47 html/Elements/SelectCustomFieldValue:29 html/Ticket/Elements/EditCustomField:60 html/Ticket/Elements/EditCustomFieldValues:52 html/Ticket/Elements/ShowCustomFields:35 html/Work/Elements/EditCustomFieldValues:50 html/Work/Elements/EditCustomFields:32 html/Work/Tickets/Elements/EditCustomFieldValues:33 lib/RT/Transaction_Overlay.pm:534 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(æ— )" -#: html/Ticket/Elements/BulkLinks:27 html/Ticket/Elements/EditLinks:115 html/Work/Search/BulkLinks:3 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(没有值)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(仅能指定一份申请å•)" -#: html/Elements/MyRequests:51 html/Elements/MyTickets:54 html/Work/Elements/List:17 html/Work/Elements/MyRequests:46 html/Work/Elements/MyTickets:56 html/Work/Tickets/Elements/ShowBasics:44 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(ç‰å¾…ç¾æ ¸)" -#: html/Elements/MyRequests:53 html/Elements/MyTickets:56 html/Work/Elements/MyRequests:48 html/Work/Elements/MyTickets:58 +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(ç‰å¾…其它集åˆ)" + +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" msgstr "(ç‰å¾…其它申请å•)" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:246 +#: NOT FOUND IN SOURCE msgid "(requestor's group)" msgstr "(申请人所属)" -#: html/Admin/Users/Modify.html:49 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(å¿…å¡«)" -#: html/Ticket/Elements/ShowTransaction:92 html/Work/Tickets/Elements/ShowTransaction:37 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(未命å)" #: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I own..." -msgstr "å‰ 25 份待处ç†ç”³è¯·å•..." - -#: NOT FOUND IN SOURCE -msgid "25 highest priority tickets I requested..." -msgstr "å‰ 25 份é€å‡ºçš„申请å•..." +msgid "*" +msgstr "★" #: NOT FOUND IN SOURCE msgid ":" msgstr ":" -#: html/Ticket/Elements/ShowBasics:31 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:26 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "<% $_ %>" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:25 html/Work/Elements/104Header:43 +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "<%$_%>" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "<%$field%>" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"æå‡ºç”³è¯·å•\"> %1" -#: etc/initialdata:221 +#: etc/initialdata:218 msgid "A blank template" msgstr "空白模æ¿" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + #: NOT FOUND IN SOURCE msgid "ACE Deleted" msgstr "ACE å·²åˆ é™¤" @@ -459,11 +582,11 @@ msgstr "æ— æ³•åˆ é™¤ ACE" msgid "ACE could not be found" msgstr "找ä¸åˆ° ACE" -#: lib/RT/ACE_Overlay.pm:156 lib/RT/Principal_Overlay.pm:179 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "找ä¸åˆ° ACE 设定" -#: lib/RT/ACE_Overlay.pm:830 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "ç¥‡èƒ½æ–°å¢žæˆ–åˆ é™¤ ACE 设定。" @@ -471,72 +594,92 @@ msgstr "ç¥‡èƒ½æ–°å¢žæˆ–åˆ é™¤ ACE 设定。" msgid "ACLEquivalence" msgstr "ACLEquivalence" -#: bin/rt-commit-handler:754 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" msgstr "离开以å…ä¸å°å¿ƒæ›´æ”¹åˆ°ç”³è¯·å•。\\n" -#: html/User/Elements/Tabs:31 +#: NOT FOUND IN SOURCE +msgid "About Me" +msgstr "个人信æ¯" + +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "个人信æ¯" -#: html/Edit/Users/System:12 +#: NOT FOUND IN SOURCE msgid "Access Right" msgstr "系统使用登录æƒé™" -#: html/Admin/Users/Modify.html:79 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "å˜å–æƒé™" -#: html/Admin/Elements/EditScrip:56 html/Work/Tickets/Elements/ShowTransaction:18 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "动作" -#: lib/RT/Scrip_Overlay.pm:146 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "动作 %1 找ä¸åˆ°" -#: bin/rt-crontool:122 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "动作执行完毕" -#: bin/rt-crontool:118 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "动作准备完毕..." -#: html/Work/Elements/List:13 html/Work/Elements/SelectSearch:24 html/Work/Tickets/Create.html:26 html/Work/Tickets/Elements/ShowBasics:12 +#: NOT FOUND IN SOURCE msgid "Activated Date" msgstr "申请激活时间" -#: html/Edit/Elements/104Buttons:71 html/Edit/Elements/ListButtons:7 +#: html/Search/Build.html:85 msgid "Add" msgstr "新增" -#: html/Search/Bulk.html:95 html/Work/Search/Bulk.html:74 +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "新增管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: html/Search/Bulk.html:91 html/Work/Search/Bulk.html:68 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "新增副本收件人" -#: html/Ticket/Elements/EditCustomFieldEntries:71 html/Work/Tickets/Elements/ShowCustomFieldEntries:49 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "新增æ¡ä»¶" + +#: NOT FOUND IN SOURCE msgid "Add Entry" msgstr "新增列" -#: html/Ticket/Create.html:113 html/Ticket/Update.html:98 html/Work/Tickets/Elements/AddAttachments:18 +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" msgstr "新增更多附件" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:112 html/Admin/Elements/ModifyTemplateAsWorkflow:45 +#: NOT FOUND IN SOURCE msgid "Add Next State" msgstr "新增下一项关å¡" -#: html/Search/Bulk.html:87 html/Work/Search/Bulk.html:62 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "新增申请人" -#: html/Admin/Elements/AddCustomFieldValue:24 +#: html/Admin/Elements/AddCustomFieldValue:46 msgid "Add Value" msgstr "æ–°å¢žå—æ®µå€¼" @@ -560,41 +703,53 @@ msgstr "新增全域手ç»" msgid "Add a scrip to this queue" msgstr "æ–°å¢žä¸€é“æ‰‹ç»åˆ°æ¤è¡¨å•" -#: html/Admin/Global/Scrip.html:54 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" msgstr "新增一é“用于所有表å•的手ç»" -#: html/Search/Bulk.html:127 html/Work/Search/Bulk.html:80 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "新增查询æ¡ä»¶" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "新增评论或回å¤åˆ°æŒ‡å®šçš„申请å•" -#: html/Admin/Groups/Members.html:41 html/User/Groups/Members.html:38 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "新增æˆå‘˜" -#: html/Admin/Queues/People.html:65 html/Ticket/Elements/AddWatchers:27 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "新增视察员" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "AddNextState" msgstr "新增下一项关å¡" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "å•ä½å·²æ–°å¢žä¸ºæ¤è¡¨å•çš„ %1" -#: lib/RT/Ticket_Overlay.pm:1462 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "å•ä½å·²æ–°å¢žä¸ºæ¤ç”³è¯·å•çš„ %1" -#: html/Admin/Elements/ModifyUser:75 html/Admin/Users/Modify.html:121 html/User/Prefs.html:87 html/Work/Preferences/Info:76 +#: NOT FOUND IN SOURCE +msgid "Additional Hints" +msgstr "é¢å¤–æç¤º" + +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "ä½å€" -#: html/Admin/Elements/ModifyUser:77 html/Admin/Users/Modify.html:126 html/User/Prefs.html:89 html/Work/Preferences/Info:78 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "ä½å€(ç»)" @@ -602,19 +757,19 @@ msgstr "ä½å€(ç»)" msgid "Adjust Blinking Rate" msgstr "调整闪çƒé€Ÿåº¦å¿«æ…¢" -#: html/Edit/Groups/Admin:9 +#: NOT FOUND IN SOURCE msgid "Admin" msgstr "管ç†å‘˜" -#: html/Ticket/Create.html:73 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "管ç†å‘˜å‰¯æœ¬" -#: etc/initialdata:303 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "管ç†å‘˜è¯„论" -#: etc/initialdata:261 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "管ç†å‘˜å›žå¤" @@ -622,7 +777,7 @@ msgstr "管ç†å‘˜å›žå¤" msgid "Admin Rights" msgstr "管ç†å‘˜æƒé™" -#: html/Admin/Queues/index.html:24 html/Admin/Queues/index.html:27 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "表å•管ç†" @@ -630,7 +785,7 @@ msgstr "表å•管ç†" msgid "Admin users" msgstr "使用者管ç†" -#: html/Admin/Global/index.html:25 html/Admin/Global/index.html:27 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "管ç†/全域设定" @@ -638,11 +793,11 @@ msgstr "管ç†/全域设定" msgid "Admin/Groups" msgstr "管ç†/群组" -#: html/Admin/Queues/Modify.html:24 html/Admin/Queues/Modify.html:28 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "管ç†/表å•/基本信æ¯" -#: html/Edit/Global/Basic/Top:60 +#: NOT FOUND IN SOURCE msgid "AdminAddress" msgstr "管ç†å‘˜ Email" @@ -650,7 +805,7 @@ msgstr "管ç†å‘˜ Email" msgid "AdminAllPersonalGroups" msgstr "ç®¡ç†æ‰€æœ‰ä»£ç†äººç¾¤ç»„" -#: etc/initialdata:74 html/Admin/Elements/ModifyTemplateAsWorkflow:155 html/Ticket/Elements/ShowPeople:38 html/Ticket/Update.html:49 lib/RT/ACE_Overlay.pm:88 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "管ç†å‘˜å‰¯æœ¬" @@ -662,11 +817,15 @@ msgstr "管ç†å‘˜è¯„论" msgid "AdminCorrespondence" msgstr "管ç†å‘˜å›žå¤" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "管ç†è‡ªè®¢å—段" + +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" msgstr "管ç†è‡ªè®¢å—段" -#: html/Edit/Groups/Admin:12 lib/RT/Group_Overlay.pm:145 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "管ç†ç¾¤ç»„" @@ -674,7 +833,7 @@ msgstr "管ç†ç¾¤ç»„" msgid "AdminGroupDescription" msgstr "管ç†ç¾¤ç»„æè¿°" -#: lib/RT/Group_Overlay.pm:147 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "管ç†ç¾¤ç»„æˆå‘˜" @@ -690,15 +849,15 @@ msgstr "管ç†ç¾¤ç»„æƒé™" msgid "AdminGroupStatus" msgstr "管ç†ç¾¤ç»„状æ€" -#: lib/RT/System.pm:58 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "管ç†ä»£ç†äººç¾¤ç»„" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "管ç†è¡¨å•" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "管ç†ä½¿ç”¨è€…" @@ -706,19 +865,27 @@ msgstr "管ç†ä½¿ç”¨è€…" msgid "Administrative" msgstr "行政类" -#: html/Admin/Queues/People.html:47 html/Ticket/Elements/EditPeople:53 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "管ç†å‘˜å‰¯æœ¬" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:233 +#: NOT FOUND IN SOURCE msgid "Admins" msgstr "主管" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "进阶" + #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "进阶查询" -#: html/Elements/SelectDateRelation:35 +#: NOT FOUND IN SOURCE +msgid "Advanced Search Criteria" +msgstr "进阶查询æ¡ä»¶" + +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "晚于" @@ -726,31 +893,35 @@ msgstr "晚于" msgid "Age" msgstr "ç»åŽ†æ—¶é—´" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:172 html/Edit/Global/Workflow/Action:39 +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Alias" msgstr "执行其它æµç¨‹" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:175 +#: NOT FOUND IN SOURCE msgid "Alias for" msgstr "相当于" -#: html/Edit/Queues/index.html:33 html/Work/Delegates/index.html:13 html/Work/Elements/SelectSearch:11 html/Work/Queues/Select.html:14 html/Work/Queues/index.html:13 +#: NOT FOUND IN SOURCE msgid "All" msgstr "全部" -#: etc/initialdata:372 +#: etc/initialdata:363 msgid "All Approvals Passed" msgstr "完æˆå…¨éƒ¨ç¾æ ¸" -#: html/Edit/Global/Workflow/Condition:16 +#: NOT FOUND IN SOURCE msgid "All Condition" msgstr "所有æ¡ä»¶" -#: html/Admin/Elements/EditCustomFields:95 +#: NOT FOUND IN SOURCE msgid "All Custom Fields" msgstr "æ‰€æœ‰è‡ªè®¢å—æ®µ" -#: html/Admin/Queues/index.html:52 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "所有表å•" @@ -759,6 +930,10 @@ msgid "All Users" msgstr "全体员工" #: NOT FOUND IN SOURCE +msgid "All done! Now you can proceed to %1." +msgstr "处ç†å®Œæ¯•ï¼æ‚¨çŽ°åœ¨å¯ä»¥ç»§ç»è¿›è¡Œ %1。" + +#: NOT FOUND IN SOURCE msgid "Allowance Request" msgstr "ç¦åˆ©è¡¥åŠ©ç”³è¯·" @@ -770,36 +945,56 @@ msgstr "æ— è®ºå¯„ä»¶æ¥æºä¸ºä½•,一律寄信给申请人" msgid "Amount" msgstr "æ•°é¢" -#: html/Edit/Global/Workflow/Condition:13 +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Any Condition" msgstr "ä»»æ„æ¡ä»¶" -#: html/Edit/Global/Scrip/List:10 html/Edit/Global/Scrip/Top:74 +#: NOT FOUND IN SOURCE +msgid "Applies To" +msgstr "套用于" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "套用于" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "套用" + +#: NOT FOUND IN SOURCE msgid "Apply Template" msgstr "引用模æ¿" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:138 html/Elements/Tabs:55 html/Work/Approvals/Elements/Approve:6 +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "套用更动" + +#: html/Elements/Tabs:74 msgid "Approval" msgstr "ç¾æ ¸" -#: html/Approvals/Display.html:45 html/Approvals/Elements/ShowDependency:41 html/Approvals/index.html:64 +#: 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) msgid "Approval #%1: %2" msgstr "ç¾æ ¸å• #%1:%2" -#: html/Approvals/index.html:53 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "ç¾æ ¸å• #%1:系统错误,记录失败" -#: html/Approvals/index.html:51 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "ç¾æ ¸å• #%1:记录完毕" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:123 +#: NOT FOUND IN SOURCE msgid "Approval Details" msgstr "ç¾æ ¸ç»†èŠ‚" @@ -807,15 +1002,15 @@ msgstr "ç¾æ ¸ç»†èŠ‚" msgid "Approval Due" msgstr "ç¾æ ¸æ—¶é™" -#: html/Work/Approvals/Elements/Approve:37 +#: NOT FOUND IN SOURCE msgid "Approval Notes" msgstr "ç¾æ ¸æ„è§" -#: etc/initialdata:357 +#: etc/initialdata:351 msgid "Approval Passed" msgstr "å®ŒæˆæŸé¡¹ç¾æ ¸" -#: etc/initialdata:383 +#: etc/initialdata:374 msgid "Approval Rejected" msgstr "驳回æŸé¡¹ç¾æ ¸" @@ -823,7 +1018,7 @@ msgstr "驳回æŸé¡¹ç¾æ ¸" msgid "Approval Result" msgstr "ç¾æ ¸ç»“æžœ" -#: html/Work/Approvals/Elements/Approve:25 +#: NOT FOUND IN SOURCE msgid "Approval Status" msgstr "æ ¸å‡†ç»“æžœ" @@ -831,23 +1026,23 @@ msgstr "æ ¸å‡†ç»“æžœ" msgid "Approval Type" msgstr "ç¾æ ¸ç§ç±»" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:25 +#: NOT FOUND IN SOURCE msgid "Approval diagram" msgstr "ç¾æ ¸æµç¨‹" -#: html/Approvals/Elements/Approve:43 html/Work/Approvals/Elements/Approve:29 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "æ ¸å‡†" -#: html/Work/Approvals/Elements/Approve:21 html/Work/Elements/List:9 +#: NOT FOUND IN SOURCE msgid "Approver" msgstr "ç¾æ ¸äºº" -#: html/Edit/Global/Workflow/Action:29 html/Edit/Global/Workflow/Owner.html:10 +#: NOT FOUND IN SOURCE msgid "Approver Setting" msgstr "æ‰§è¡Œç¾æ ¸äººè®¾å®š" -#: etc/initialdata:516 etc/upgrade/2.1.71:148 html/Edit/Elements/CreateApprovalsQueue:122 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "ç¾æ ¸å¤‡æ³¨ï¼š%1" @@ -855,7 +1050,7 @@ msgstr "ç¾æ ¸å¤‡æ³¨ï¼š%1" msgid "Apr" msgstr "四月" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "04" @@ -863,47 +1058,64 @@ msgstr "04" msgid "April" msgstr "四月" -#: html/Edit/Elements/104Buttons:24 +#: NOT FOUND IN SOURCE msgid "Are you sure to delete checked items?" msgstr "您确定è¦åˆ 除?" -#: html/Elements/SelectSortOrder:34 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "递增" -#: html/Search/Bulk.html:136 html/SelfService/Update.html:32 html/Ticket/ModifyAll.html:82 html/Ticket/Update.html:98 html/Work/Search/Bulk.html:88 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "指派åŠç§»é™¤è‡ªè®¢å—段" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "æŒ‡æ´¾è‡ªè®¢å—æ®µ" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "附件" -#: html/SelfService/Create.html:64 html/Ticket/Create.html:109 html/Work/Tickets/Elements/AddAttachments:15 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "é™„åŠ æ¡£æ¡ˆ" -#: html/Ticket/Create.html:97 html/Ticket/Update.html:87 html/Work/Tickets/Elements/AddAttachments:6 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "现有附件" -#: NOT FOUND IN SOURCE +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "æ— æ³•åŠ è½½é™„ä»¶ '%1'" -#: lib/RT/Transaction_Overlay.pm:441 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "附件新增完毕" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "附件档å" -#: html/Ticket/Elements/ShowAttachments:25 html/Work/Tickets/Elements/ShowTransaction:32 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "附件" +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "å·²åˆ é™¤è¯¥å±žæ€§" + +#: NOT FOUND IN SOURCE +msgid "Attributes" +msgstr "属性" + #: NOT FOUND IN SOURCE msgid "Aug" msgstr "八月" -#: lib/RT/Date.pm:418 +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "08" @@ -911,7 +1123,7 @@ msgstr "08" msgid "August" msgstr "八月" -#: html/Admin/Elements/ModifyUser:65 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "è®¤è¯æ–¹å¼" @@ -923,11 +1135,11 @@ msgstr "自动驳回表å•" msgid "AutoResolve" msgstr "自动完æˆè¡¨å•处ç†" -#: etc/initialdata:224 +#: etc/initialdata:221 msgid "Autoreply" msgstr "自动回å¤" -#: etc/initialdata:90 +#: etc/initialdata:72 msgid "Autoreply To Requestors" msgstr "自动对申请人回å¤" @@ -935,7 +1147,11 @@ msgstr "自动对申请人回å¤" msgid "AutoreplyToRequestors" msgstr "自动对申请人回å¤" -#: html/Edit/Rights/index.html:16 +#: NOT FOUND IN SOURCE +msgid "Available Columns" +msgstr "å¯ç”¨çš„å—æ®µï¼š" + +#: NOT FOUND IN SOURCE msgid "Available Rights:" msgstr "æƒé™é¡¹ç›®åˆ—表:" @@ -943,7 +1159,7 @@ msgstr "æƒé™é¡¹ç›®åˆ—表:" msgid "Back to Homepage" msgstr "回到首页" -#: html/Work/Elements/BackButton:2 html/Work/Search/Bulk.html:101 +#: NOT FOUND IN SOURCE msgid "Back to Previous" msgstr "回上页" @@ -955,8 +1171,7 @@ msgstr "错误的 PGP ç¾ç« :%1\\n" msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "错误的附件编å·ã€‚æ— æ³•æ‰¾åˆ°é™„ä»¶ '%1'\\n" -#: bin/rt-commit-handler:826 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "%1 的数æ®é”™è¯¯" @@ -964,23 +1179,27 @@ msgstr "%1 的数æ®é”™è¯¯" msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "附件的处ç†å·ç 错误。%1 应为 %2\\n" -#: html/Admin/Elements/GroupTabs:38 html/Admin/Elements/QueueTabs:38 html/Admin/Elements/UserTabs:37 html/Edit/Global/autohandler:6 html/Edit/Queues/autohandler:17 html/Edit/Users/index.html:121 html/Ticket/Elements/Tabs:89 html/User/Elements/GroupTabs:37 +#: 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 "基本信æ¯" -#: html/Ticket/Update.html:81 html/Work/Tickets/Update.html:49 +#: NOT FOUND IN SOURCE +msgid "Batch Approval" +msgstr "æ‰¹æ¬¡ç¾æ ¸" + +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "密件副本" -#: html/Admin/Elements/EditScrip:87 html/Admin/Global/GroupRights.html:84 html/Admin/Global/Template.html:45 html/Admin/Global/UserRights.html:53 html/Admin/Global/Workflow.html:46 html/Admin/Groups/GroupRights.html:72 html/Admin/Groups/Members.html:80 html/Admin/Groups/Modify.html:55 html/Admin/Groups/UserRights.html:54 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:44 html/Admin/Queues/UserRights.html:53 html/Admin/Queues/Workflow.html:44 html/User/Groups/Modify.html:55 +#: 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 "请别忘了储å˜ä¿®æ”¹ã€‚" -#: html/Elements/SelectDateRelation:33 lib/RT/CurrentUser.pm:321 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "早于" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:44 +#: NOT FOUND IN SOURCE msgid "Begin Approval" msgstr "å¼€å§‹ç¾æ ¸" @@ -988,23 +1207,39 @@ msgstr "å¼€å§‹ç¾æ ¸" msgid "Begin From " msgstr "èµ·å§‹æ—¥" -#: html/Edit/Users/Info:25 +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "档案" + +#: NOT FOUND IN SOURCE msgid "Birthday" msgstr "生日" -#: etc/initialdata:220 +#: etc/initialdata:217 msgid "Blank" msgstr "空白模æ¿" -#: html/Search/Listing.html:78 html/Work/Search/index.html:53 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "å°†æŸ¥è¯¢ç»“æžœè½¬ä¸ºå¯æ”¾å…¥ä¹¦ç¾çš„网å€" -#: html/Ticket/Elements/ShowHistory:38 html/Ticket/Elements/ShowHistory:44 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "坿”¾å…¥ä¹¦ç¾çš„网å€" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "ç²¾ç®€æ ‡å¤´æ¡£" -#: html/Search/Bulk.html:24 html/Search/Bulk.html:25 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "更新整批申请å•" @@ -1016,40 +1251,57 @@ msgstr "事业部" msgid "Business Unit:" msgstr "事业部:" -#: lib/RT/User_Overlay.pm:1411 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "æ— æ³•æ›´æ”¹ç³»ç»Ÿä½¿ç”¨è€…" -#: lib/RT/Queue_Overlay.pm:66 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "该å•使˜¯å¦èƒ½æŸ¥é˜…æ¤è¡¨å•" -#: lib/RT/CustomField_Overlay.pm:205 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "ä¸èƒ½æ–°å¢žæ²¡æœ‰åç§°çš„è‡ªè®¢å—æ®µå€¼" -#: lib/RT/Link_Overlay.pm:131 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "找ä¸åˆ°å·²å‚¨å˜çš„æŸ¥è¯¢" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "申请å•ä¸èƒ½é“¾æŽ¥è‡ªå·±ã€‚" -#: lib/RT/Ticket_Overlay.pm:2816 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "ä¸èƒ½æ•´åˆè¿›å·²æ•´åˆè¿‡çš„申请å•。这个错误ä¸è¯¥å‘生。" -#: lib/RT/Ticket_Overlay.pm:2634 lib/RT/Ticket_Overlay.pm:2703 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "æ— æ³•å‚¨å˜æ¤é¡¹æŸ¥è¯¢" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "ä¸èƒ½åŒæ—¶æŒ‡å®šèµ·å§‹ç”³è¯·å•与目的申请å•" -#: html/Edit/Elements/PopFooter:8 +#: NOT FOUND IN SOURCE msgid "Cancel" msgstr "å–æ¶ˆ" -#: html/autohandler:113 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "æ— æ³•æ–°å¢žä½¿ç”¨è€…ï¼š%1" #: NOT FOUND IN SOURCE +msgid "Cannot login: Your system clock differs from server's by %1 seconds!" +msgstr "您的系统时钟和æœåŠ¡å™¨ç›¸å·® %1 ç§’ï¼Œæ— æ³•ç™»å…¥ï¼" + +#: NOT FOUND IN SOURCE msgid "Card No." msgstr "å¡å·" @@ -1061,7 +1313,7 @@ msgstr "分类管ç†" msgid "Category" msgstr "分类" -#: etc/initialdata:68 html/Admin/Queues/People.html:43 html/SelfService/Create.html:48 html/Ticket/Create.html:63 html/Ticket/Elements/EditPeople:50 html/Ticket/Elements/ShowPeople:34 html/Ticket/Update.html:44 html/Ticket/Update.html:76 html/Work/Tickets/Update.html:43 lib/RT/ACE_Overlay.pm:87 +#: 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 msgid "Cc" msgstr "副本" @@ -1077,27 +1329,31 @@ msgstr "董事长室" msgid "Change Ticket" msgstr "修改申请å•" -#: html/SelfService/Prefs.html:30 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "更改å£ä»¤" -#: html/Edit/Global/Basic/Top:70 +#: NOT FOUND IN SOURCE msgid "ChangeOwnerUI" msgstr "å¯å¦é€‰æ‹©è¡¨å•承办人" -#: html/Ticket/Create.html:100 html/Ticket/Elements/EditCustomFieldEntries:35 html/Ticket/Update.html:90 html/Work/Tickets/Elements/ShowCustomFieldEntries:13 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "全部选å–" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "é€‰æ‹©æ¬²åˆ é™¤çš„é¡¹ç›®" -#: html/Admin/Elements/SelectRights:30 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "选择欲撤消的æƒåˆ©" -#: html/Ticket/Create.html:182 html/Ticket/Elements/BulkLinks:42 html/Ticket/Elements/EditLinks:130 html/Ticket/Elements/EditLinks:68 html/Ticket/Elements/ShowLinks:56 html/Work/Search/BulkLinks:18 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "å申请å•" -#: html/Edit/Elements/PickUsers:21 html/Edit/Global/UserRight/List:8 html/Edit/Global/UserRight/Top:19 html/Edit/Users/List:6 html/Edit/Users/Top:18 +#: NOT FOUND IN SOURCE msgid "Chinese Name" msgstr "䏿–‡å§“å" @@ -1105,23 +1361,31 @@ msgstr "䏿–‡å§“å" msgid "Chinese/English" msgstr "ä¸è‹±æ–‡" -#: html/Admin/Elements/ModifyUser:79 html/Admin/Users/Modify.html:131 html/User/Prefs.html:91 html/Work/Preferences/Info:80 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "所在城市" -#: html/Ticket/Elements/ShowDates:46 +#: NOT FOUND IN SOURCE +msgid "ClassicUI" +msgstr "ä¼ ç»ŸæŽ¥å£" + +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "全部清除" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "已解决" -#: html/SelfService/Closed.html:24 +#: NOT FOUND IN SOURCE msgid "Closed Tickets" msgstr "已解决的申请å•" -#: html/SelfService/Elements/Tabs:44 +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 msgid "Closed tickets" msgstr "已解决的申请å•" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:181 html/Edit/Global/Workflow/Action:58 html/Edit/Global/Workflow/Condition:51 +#: NOT FOUND IN SOURCE msgid "Code" msgstr "执行程åºç " @@ -1129,11 +1393,11 @@ msgstr "执行程åºç " msgid "Command not understood!\\n" msgstr "æŒ‡ä»¤æ— æ³•è¾¨è¯†ï¼\\n" -#: html/Ticket/Elements/ShowTransaction:166 html/Ticket/Elements/Tabs:152 html/Work/Search/Bulk.html:89 html/Work/Tickets/Display.html:37 html/Work/Tickets/Elements/ShowTransaction:112 html/Work/Tickets/Elements/ShowTransaction:27 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "评论" -#: html/Admin/Elements/ModifyQueue:44 html/Admin/Queues/Modify.html:57 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "评论电å邮件地å€" @@ -1141,72 +1405,75 @@ msgstr "评论电å邮件地å€" msgid "Comment not recorded" msgstr "评论未被纪录" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "å¯¹ç”³è¯·å•æå‡ºè¯„è®º" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "评论申请å•" -#: html/Admin/Elements/ModifyUser:34 html/Work/Tickets/Update.html:59 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "评论" -#: html/Ticket/ModifyAll.html:69 html/Ticket/Update.html:68 html/Work/Tickets/Update.html:35 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "评论(ä¸é€ç»™ç”³è¯·äºº)" -#: html/Search/Bulk.html:131 html/Work/Search/Bulk.html:83 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "评论(ä¸é€ç»™ç”³è¯·äºº)" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "对 %1 的评论" -#: html/Admin/Users/Modify.html:184 html/Ticket/Elements/ShowRequestor:43 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "使用者æè¿°" -#: lib/RT/Transaction_Overlay.pm:543 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "新增评论完毕" -#: html/Edit/Elements/PopFooter:4 html/Edit/Elements/PopFooter:6 +#: NOT FOUND IN SOURCE msgid "Commit" msgstr "确认" -#: lib/RT/Action/Generic.pm:139 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "消除更动完毕" -#: html/Edit/Users/Info:42 +#: NOT FOUND IN SOURCE msgid "Company Name" msgstr "å…¬å¸åç§°" #: NOT FOUND IN SOURCE +msgid "CompanySpecific" +msgstr "å„å…¬å¸ç‹¬ç«‹æ˜¾ç¤º" + +#: NOT FOUND IN SOURCE msgid "Compile Restrictions" msgstr "设定查询æ¡ä»¶" -#: html/Admin/Elements/EditScrip:40 html/Admin/Elements/ModifyTemplateAsWorkflow:127 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "æ¡ä»¶" -#: bin/rt-crontool:108 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "ç¬¦åˆæ¡ä»¶..." -#: lib/RT/Scrip_Overlay.pm:159 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "未找到符åˆçš„现况" -#: html/Edit/Global/GroupRight/Top:26 html/Edit/Global/UserRight/Top:45 html/Edit/Groups/Member:57 html/Elements/Tabs:49 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "设定" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "确认å£ä»¤" @@ -1214,7 +1481,7 @@ msgstr "确认å£ä»¤" msgid "Confirm Password" msgstr "å£ä»¤ç¡®è®¤" -#: html/Work/Approvals/Display.html:25 html/Work/Tickets/Create.html:153 html/Work/Tickets/Create.html:165 html/Work/Tickets/Update.html:81 +#: NOT FOUND IN SOURCE msgid "Confirm Submit" msgstr "确定é€å‡º" @@ -1222,7 +1489,7 @@ msgstr "确定é€å‡º" msgid "Contact System Administrator" msgstr "连络系统管ç†å‘˜" -#: html/Admin/Elements/ModifyUser:59 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "连络信æ¯ç³»ç»Ÿ" @@ -1230,15 +1497,19 @@ msgstr "连络信æ¯ç³»ç»Ÿ" msgid "Contacted date '%1' could not be parsed" msgstr "æ— æ³•è§£è¯»è”络日期 '%1'" -#: html/Admin/Elements/ModifyTemplate:43 html/Admin/Elements/ModifyTemplateAsWorkflow:200 html/Ticket/ModifyAll.html:86 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "内容" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "内容类型" + #: NOT FOUND IN SOURCE msgid "Coould not create group" msgstr "æ— æ³•æ–°å¢žç¾¤ç»„" -#: html/Edit/Elements/104Buttons:74 +#: html/Search/Elements/EditSearches:64 msgid "Copy" msgstr "å¤åˆ¶" @@ -1246,15 +1517,15 @@ msgstr "å¤åˆ¶" msgid "Copy Field From:" msgstr "欲å¤åˆ¶å—段:" -#: etc/initialdata:282 +#: etc/initialdata:286 msgid "Correspondence" msgstr "回å¤" -#: html/Admin/Elements/ModifyQueue:38 html/Admin/Queues/Modify.html:50 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "申请å•回å¤åœ°å€" -#: lib/RT/Transaction_Overlay.pm:539 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "新增申请å•回å¤" @@ -1262,7 +1533,7 @@ msgstr "新增申请å•回å¤" msgid "Correspondence not recorded" msgstr "未纪录申请å•回å¤" -#: lib/RT/Ticket_Overlay.pm:3561 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "ä¸èƒ½æ–°å¢žè‡ªè®¢å—段的值 " @@ -1270,39 +1541,55 @@ msgstr "ä¸èƒ½æ–°å¢žè‡ªè®¢å—段的值 " msgid "Could not add new custom field value for ticket. %1 " msgstr "ä¸èƒ½æ–°å¢žè‡ªè®¢å—段的值。%1 " -#: lib/RT/Ticket_Overlay.pm:3067 lib/RT/Ticket_Overlay.pm:3075 lib/RT/Ticket_Overlay.pm:3092 +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "ä¸èƒ½æ›´æ”¹æ‰¿åŠžäººã€‚ " -#: html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditCustomFields:165 html/Edit/Global/CustomField/index.html:117 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "æ— æ³•æ–°å¢žè‡ªè®¢å—æ®µ" -#: html/Edit/Global/Workflow/index.html:126 +#: html/Admin/Elements/EditCustomField:113 #. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Could not create Scrip" msgstr "æ— æ³•å»ºç«‹è®¯æ¯é€šçŸ¥" -#: html/Edit/Global/Template/index.html:110 -#. ($msg) +#: NOT FOUND IN SOURCE msgid "Could not create Template" msgstr "æ— æ³•å»ºç«‹é€šçŸ¥æ¨¡æ¿" -#: html/User/Groups/Modify.html:76 lib/RT/Group_Overlay.pm:473 lib/RT/Group_Overlay.pm:480 +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "æ— æ³•æ–°å¢žç¾¤ç»„" -#: html/Admin/Global/Template.html:74 html/Admin/Queues/Template.html:71 +#: NOT FOUND IN SOURCE +msgid "Could not create item" +msgstr "æ— æ³•æ–°å¢žé¡¹ç›®" + +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "æ— æ³•æ–°å¢žæ¨¡æ¿ï¼š%1" -#: lib/RT/Ticket_Overlay.pm:1081 lib/RT/Ticket_Overlay.pm:334 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "æ— æ³•æ–°å¢žç”³è¯·å•。尚未指定表å•。" -#: lib/RT/User_Overlay.pm:267 lib/RT/User_Overlay.pm:279 lib/RT/User_Overlay.pm:297 lib/RT/User_Overlay.pm:481 +#: 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 "æ— æ³•æ–°å¢žä½¿ç”¨è€…" @@ -1310,8 +1597,7 @@ msgstr "æ— æ³•æ–°å¢žä½¿ç”¨è€…" msgid "Could not create watcher for requestor" msgstr "æ— æ³•ä¸ºç”³è¯·äººæ–°å¢žè§†å¯Ÿå‘˜" -#: html/Admin/Elements/ModifyWorkflow:219 html/Admin/Global/Workflow.html:75 html/Admin/Queues/Workflow.html:71 -#. ($msg) +#: NOT FOUND IN SOURCE msgid "Could not create workflow: %1" msgstr "æ— æ³•æ–°å¢žæµç¨‹ï¼š%1" @@ -1323,11 +1609,11 @@ msgstr "找ä¸åˆ°ç¼–å· %1 的申请å•" msgid "Could not find group %1." msgstr "找ä¸åˆ°ç¾¤ç»„ %1。" -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1430 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "找ä¸åˆ°æˆ–æ— æ³•æ–°å¢žè¯¥å使用者" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1509 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "找ä¸åˆ°è¯¥å•ä½" @@ -1335,36 +1621,51 @@ msgstr "找ä¸åˆ°è¯¥å•ä½" msgid "Could not find user %1." msgstr "找ä¸åˆ°ä½¿ç”¨è€… %1。" -#: html/Admin/Groups/Members.html:87 html/Edit/Users/index.html:83 html/User/Groups/Members.html:89 html/User/Groups/Modify.html:81 -#. ( . $GroupId) +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "æ— æ³•åŠ è½½å—æ®µ %1" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "æ— æ³•åŠ è½½ç¾¤ç»„" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "æ— æ³•å°†è¯¥å•ä½è®¾ä¸ºæ¤è¡¨å•çš„ %1。" -#: lib/RT/Ticket_Overlay.pm:1451 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "æ— æ³•å°†è¯¥å•ä½è®¾ä¸ºæ¤ç”³è¯·å•çš„ %1。" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "æ— æ³•å°†å•ä½ %1 从表å•移除。" -#: lib/RT/Ticket_Overlay.pm:1567 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "æ— æ³•å°†å•ä½ %1 从申请å•移除。" -#: lib/RT/Group_Overlay.pm:984 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "æ— æ³•è®¾å®šä½¿ç”¨è€…ä¿¡æ¯" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "æ— æ³•æ–°å¢žæˆå‘˜è‡³ç¾¤ç»„" -#: lib/RT/Ticket_Overlay.pm:3571 lib/RT/Ticket_Overlay.pm:3627 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "æ— æ³•æ–°å¢žæ›´åŠ¨æŠ¥å‘Š" @@ -1377,15 +1678,15 @@ msgstr "æ— æ³•ä»Ž gpg 回函辨识出该采å–的行动\\n" msgid "Couldn't find group\\n" msgstr "找ä¸åˆ°ç¾¤ç»„\\n" -#: lib/RT/Interface/Web.pm:902 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "找ä¸åˆ°æ¤åˆ—æ•°æ®" -#: lib/RT/Group_Overlay.pm:958 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "找ä¸åˆ°è¯¥å•ä½" -#: lib/RT/CustomField_Overlay.pm:239 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "找ä¸åˆ°è¯¥å€¼" @@ -1397,11 +1698,21 @@ msgstr "找ä¸åˆ°è¯¥è§†å¯Ÿå‘˜" msgid "Couldn't find user\\n" msgstr "找ä¸åˆ°ä½¿ç”¨è€…\\n" -#: lib/RT/CurrentUser.pm:111 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "æ— æ³•ä»Žä½¿ç”¨è€…æ•°æ®åº“åŠ è½½ %1。\\n" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "æ— æ³•åŠ è½½ç±»åˆ« %1" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "æ— æ³•åŠ è½½è‡ªè®¢å—æ®µ %1" + #: NOT FOUND IN SOURCE msgid "Couldn't load KeywordSelects." msgstr "æ— æ³•åŠ è½½ KeywordSelects。" @@ -1414,24 +1725,26 @@ msgstr "æ— æ³•åŠ è½½ RT 设定档 '%1' %2" msgid "Couldn't load Scrips." msgstr "æ— æ³•åŠ è½½æ‰‹ç»ã€‚" -#: html/Admin/Groups/GroupRights.html:87 html/Admin/Groups/UserRights.html:74 html/Edit/Global/GroupRight/Add.html:54 html/Edit/Global/UserRight/Add.html:23 html/Edit/Groups/Member:121 html/Edit/Groups/Members/Add.html:44 html/Edit/Rights/index.html:57 -#. ($Group) -#. ($ObjectGroup) +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "æ— æ³•åŠ è½½æ‰‹ç» %1" -#: lib/RT/Link_Overlay.pm:174 lib/RT/Link_Overlay.pm:183 lib/RT/Link_Overlay.pm:210 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "æ— æ³•åŠ è½½é“¾æŽ¥ã€‚" -#: html/Admin/Elements/EditCustomFields:146 html/Admin/Queues/People.html:120 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "æ— æ³•åŠ è½½å¯¹è±¡ %1" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "æ— æ³•åŠ è½½è¡¨å•" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:71 html/Edit/Global/GroupRight/Add.html:50 html/Edit/Global/GroupRight/index.html:81 html/Edit/Global/UserRight/Add.html:19 html/Edit/Global/UserRight/index.html:83 html/Edit/Rights/index.html:53 -#. ($Queue) +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "æ— æ³•åŠ è½½è¡¨å• %1" @@ -1444,29 +1757,38 @@ msgstr "æ— æ³•åŠ è½½æ‰‹ç»" msgid "Couldn't load template" msgstr "æ— æ³•åŠ è½½æ¨¡æ¿" -#: html/Admin/Users/Prefs.html:78 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "æ— æ³•åŠ è½½è¯¥å使用者(%1)" -#: html/SelfService/Display.html:108 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "æ— æ³•åŠ è½½ç”³è¯·å• '%1'" -#: html/Admin/Elements/ModifyUser:85 html/Admin/Users/Modify.html:148 html/User/Prefs.html:97 html/Work/Preferences/Info:86 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "国家" -#: html/Admin/Elements/CreateUserCalled:25 html/Edit/Elements/PopHeader:29 html/Edit/Global/GroupRight/Add.html:18 html/Ticket/Create.html:134 html/Ticket/Create.html:194 +#: 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 msgid "Create" msgstr "新增" -#: html/Edit/Groups/MemberGroups/Add.html:17 +#: NOT FOUND IN SOURCE msgid "Create Subgroup:" msgstr "新增å群组:" -#: etc/initialdata:145 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "新增申请å•" @@ -1474,16 +1796,16 @@ msgstr "新增申请å•" msgid "Create User:" msgstr "新增æˆå‘˜ï¼š" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "æ–°å¢žè‡ªè®¢å—æ®µ" -#: html/Admin/Queues/CustomField.html:47 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "为 %1 è¡¨å•æ–°å¢žè‡ªè®¢å—段" -#: html/Admin/Global/CustomField.html:47 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" msgstr "为 %1 è¡¨å•æ–°å¢žè‡ªè®¢å—段" @@ -1499,11 +1821,11 @@ msgstr "新增全域手ç»" msgid "Create a new global scrip" msgstr "新增全域手ç»" -#: html/Admin/Groups/Modify.html:66 html/Admin/Groups/Modify.html:92 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "新增群组" -#: html/User/Groups/Modify.html:66 html/User/Groups/Modify.html:91 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "新增代ç†äººç¾¤ç»„" @@ -1519,11 +1841,11 @@ msgstr "新增手ç»" msgid "Create a new template" msgstr "新增模æ¿" -#: html/Ticket/Create.html:24 html/Ticket/Create.html:27 html/Ticket/Create.html:35 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "新增申请å•" -#: html/Admin/Users/Modify.html:213 html/Admin/Users/Modify.html:240 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "新增使用者" @@ -1531,7 +1853,7 @@ msgstr "新增使用者" msgid "Create a new workflow" msgstr "新增æµç¨‹" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "新增表å•" @@ -1543,20 +1865,20 @@ msgstr "新增表å•åç§°" msgid "Create a request" msgstr "æå‡ºç”³è¯·" -#: html/Admin/Queues/Scrip.html:58 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "为 %1 è¡¨å•æ–°å¢žæ‰‹ç»" -#: html/Admin/Global/Template.html:68 html/Admin/Queues/Template.html:64 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "新增模æ¿" -#: html/SelfService/Create.html:24 +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 msgid "Create a ticket" msgstr "æå‡ºç”³è¯·å•" -#: html/Admin/Elements/ModifyWorkflow:206 html/Admin/Global/Workflow.html:69 html/Admin/Queues/Workflow.html:64 +#: NOT FOUND IN SOURCE msgid "Create a workflow" msgstr "新增æµç¨‹" @@ -1572,23 +1894,23 @@ msgstr "新增失败:%1/%2/%3" msgid "Create new item" msgstr "建立新项目" -#: etc/initialdata:147 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "便®æ¤é¡¹æ‰‹ç»å†…的模版,新增申请å•" -#: html/SelfService/Create.html:77 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "新增申请å•" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "在æ¤è¡¨å•䏿–°å¢žç”³è¯·å•" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹è‡ªè®¢å—段" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹è¡¨å•" @@ -1596,23 +1918,27 @@ msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹è¡¨å•" msgid "Create, delete and modify the members of any user's personal groups" msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä»»ä½•使用者的代ç†äººç¾¤ç»„" -#: lib/RT/System.pm:58 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä»£ç†äººç¾¤ç»„" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "新增ã€åˆ é™¤åŠæ›´æ”¹ä½¿ç”¨è€…" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "新增申请å•" -#: html/Elements/SelectDateType:25 html/Ticket/Elements/ShowDates:26 lib/RT/Ticket_Overlay.pm:1175 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "新增日" -#: html/Admin/Elements/EditCustomField:87 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "è‡ªè®¢å—æ®µ %1 新增æˆåŠŸ" @@ -1621,11 +1947,14 @@ msgstr "è‡ªè®¢å—æ®µ %1 新增æˆåŠŸ" msgid "Created template %1" msgstr "æ¨¡æ¿ %1 新增æˆåŠŸ" -#: html/Admin/Elements/ModifyWorkflow:221 -#. (loc( $WorkflowObj->Name() )) +#: NOT FOUND IN SOURCE msgid "Created workflow %1" msgstr "æµç¨‹ %1 新增æˆåŠŸ" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "建立者" + #: NOT FOUND IN SOURCE msgid "Currency" msgstr "å¸åˆ«" @@ -1638,23 +1967,23 @@ msgstr "截至目å‰ç¾æ ¸ä¿¡æ¯" msgid "Current Custom Fields" msgstr "çŽ°æœ‰è‡ªè®¢å—æ®µ" -#: html/Edit/Groups/MemberGroups/Add.html:14 +#: NOT FOUND IN SOURCE msgid "Current Groups:" msgstr "现有群组列表:" -#: html/Ticket/Elements/EditLinks:27 -msgid "Current Relationships" +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "现有关系" -#: html/Edit/Rights/index.html:19 +#: NOT FOUND IN SOURCE msgid "Current Rights:" msgstr "现有æƒé™ï¼š" -#: html/Admin/Elements/EditScrips:29 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "现有手ç»" -#: html/Work/Tickets/Create.html:48 html/Work/Tickets/Elements/ShowBasics:39 +#: NOT FOUND IN SOURCE msgid "Current Status" msgstr "ç›®å‰çжæ€" @@ -1662,76 +1991,87 @@ msgstr "ç›®å‰çжæ€" msgid "Current Templates" msgstr "现有模æ¿" -#: html/Admin/Groups/Members.html:38 html/User/Groups/Members.html:41 +#: NOT FOUND IN SOURCE +msgid "Current Watchers" +msgstr "现有视察员" + +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "现有æˆå‘˜" -#: html/Admin/Elements/SelectRights:28 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "现有æƒé™" -#: html/Search/Listing.html:70 html/Work/Search/index.html:42 +#: NOT FOUND IN SOURCE msgid "Current search criteria" msgstr "现有查询æ¡ä»¶" -#: html/Admin/Queues/People.html:40 html/Ticket/Elements/EditPeople:44 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "现有视察员" -#: html/Admin/Global/CustomField.html:54 -#. ($CustomField) +#: NOT FOUND IN SOURCE msgid "Custom Field #%1" msgstr "è‡ªè®¢å—æ®µ #%1" -#: html/Admin/Elements/QueueTabs:52 html/Admin/Elements/SystemTabs:39 html/Admin/Global/index.html:49 html/Edit/Global/autohandler:7 html/Edit/Queues/autohandler:18 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "è‡ªè®¢å—æ®µ" +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "%1 çš„è‡ªè®¢å—æ®µ" + #: NOT FOUND IN SOURCE msgid "Custom Fields which apply to all queues" msgstr "适用于所有表å•çš„è‡ªè®¢å—æ®µ" -#: html/Admin/Elements/EditScrip:72 html/Edit/Global/Scrip/Top:69 +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "åŠ¨ä½œåŽæ‰§è¡Œç¨‹åº" -#: html/Admin/Elements/EditScrip:64 html/Edit/Global/Scrip/Top:62 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "åŠ¨ä½œå‰æ‰§è¡Œç¨‹åº" -#: html/Admin/Elements/EditScrip:48 html/Edit/Global/Scrip/Top:35 html/Edit/Global/Scrip/Top:61 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "自订æ¡ä»¶" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "è‡ªè®¢å—æ®µ %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: NOT FOUND IN SOURCE +msgid "Custom field %1 does not apply to this object" +msgstr "è‡ªè®¢å—æ®µ %1 ä¸é€‚用于æ¤å¯¹è±¡" + +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "è‡ªè®¢å—æ®µ %1 已有值" -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "è‡ªè®¢å—æ®µ %1 没有值" -#: lib/RT/Ticket_Overlay.pm:3463 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "找ä¸åˆ°è‡ªè®¢å—段 %1" -#: html/Admin/Elements/EditCustomFields:196 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" msgstr "è‡ªè®¢å—æ®µå·²åˆ 除" -#: lib/RT/Ticket_Overlay.pm:3613 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "找ä¸åˆ°è‡ªè®¢å—段" -#: lib/RT/CustomField_Overlay.pm:349 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "æ— æ³•ä»Žè‡ªè®¢å—æ®µ %2 䏿‰¾åˆ° %1 è¿™ä¸ªå—æ®µå€¼" @@ -1740,19 +2080,19 @@ msgstr "æ— æ³•ä»Žè‡ªè®¢å—æ®µ %2 䏿‰¾åˆ° %1 è¿™ä¸ªå—æ®µå€¼" msgid "Custom field value changed from %1 to %2" msgstr "è‡ªè®¢å—æ®µå€¼ä»Ž %1 改为 %2" -#: lib/RT/CustomField_Overlay.pm:249 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "æ— æ³•åˆ é™¤è‡ªè®¢å—æ®µå€¼" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "找ä¸åˆ°è‡ªè®¢å—段值" -#: lib/RT/CustomField_Overlay.pm:247 lib/RT/CustomField_Overlay.pm:357 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "è‡ªè®¢å—æ®µå€¼åˆ 除æˆåŠŸ" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:145 html/Edit/Global/Workflow/Owner.html:90 lib/RT/Transaction_Overlay.pm:548 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "è‡ªè®¢å—æ®µ" @@ -1761,10 +2101,18 @@ msgid "Data error" msgstr "æ•°æ®é”™è¯¯" #: NOT FOUND IN SOURCE +msgid "DatabaseBindRemote" +msgstr "å®¹è®¸å¤–éƒ¨è”æœº" + +#: NOT FOUND IN SOURCE +msgid "DatabaseName" +msgstr "MySQLæ•°æ®åº“" + +#: NOT FOUND IN SOURCE msgid "Date of Departure" msgstr "å‡ºå‘æ—¥æœŸ" -#: html/SelfService/Display.html:38 html/Ticket/Create.html:160 html/Ticket/Elements/ShowSummary:54 html/Ticket/Elements/Tabs:92 html/Ticket/ModifyAll.html:43 html/Work/Tickets/Elements/ShowTransaction:14 +#: 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 msgid "Dates" msgstr "日期" @@ -1772,7 +2120,7 @@ msgstr "日期" msgid "Dec" msgstr "å二月" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "12" @@ -1781,43 +2129,62 @@ msgid "December" msgstr "å二月" #: NOT FOUND IN SOURCE +msgid "Default Approval" +msgstr "é¢„è®¾ç¾æ ¸" + +#: NOT FOUND IN SOURCE msgid "Default Autoresponse Template" msgstr "预设自动å“应模æ¿" -#: etc/initialdata:225 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "预设自动å“应模æ¿" -#: etc/initialdata:304 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "预设表å•" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "预设申请人" + +#: NOT FOUND IN SOURCE +msgid "Default Value" +msgstr "预设值" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "预设管ç†å‘˜è¯„论模æ¿" -#: etc/initialdata:262 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "预设管ç†å‘˜å›žå¤æ¨¡æ¿" -#: etc/initialdata:283 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "é¢„è®¾å›žå¤æ¨¡æ¿" -#: etc/initialdata:240 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "预设更动模æ¿" -#: lib/RT/Transaction_Overlay.pm:643 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" msgstr "预设:%1/%2 已自 %3 改为 %4" -#: html/User/Delegation.html:24 html/User/Delegation.html:27 +#: NOT FOUND IN SOURCE +msgid "DefaultApproval" +msgstr "é¢„è®¾ç¾æ ¸" + +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" -msgstr "代表团æƒé™" +msgstr "代ç†äººæƒé™" -#: lib/RT/System.pm:62 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "将拥有的æƒé™å§”托他人代ç†" -#: lib/RT/System.pm:62 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "设定代ç†äºº" @@ -1837,7 +2204,7 @@ msgstr "代ç†è¡¨å•:" msgid "Delegated Type" msgstr "代ç†è¡¨å•ç§ç±»" -#: html/Edit/Users/index.html:125 html/Work/Delegates/Info:31 html/Work/Delegates/List:8 html/Work/Elements/Tab:39 html/Work/Overview/Info:28 +#: NOT FOUND IN SOURCE msgid "Delegates" msgstr "代ç†äºº" @@ -1845,7 +2212,7 @@ msgstr "代ç†äºº" msgid "Delegates Enabled Status" msgstr "ä»£ç†æ¿€æ´»çжæ€" -#: html/Work/Delegates/Info:18 html/Work/Overview/Info:18 +#: NOT FOUND IN SOURCE msgid "Delegates Info" msgstr "代ç†äººä¿¡æ¯" @@ -1865,11 +2232,11 @@ msgstr "ä»£ç†æƒé™ï¼š" msgid "Delegates Setting" msgstr "代ç†äººè®¾å®š" -#: html/Work/Delegates/Info:46 html/Work/Delegates/List:11 html/Work/Overview/Info:39 +#: NOT FOUND IN SOURCE msgid "Delegates Status" msgstr "代ç†çжæ€" -#: html/User/Elements/Tabs:37 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "代ç†äººæƒé™" @@ -1881,27 +2248,44 @@ msgstr "代ç†äººç¾¤ç»„" msgid "Delegation Rights" msgstr "代ç†äººæƒé™" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:113 html/Edit/Elements/104Buttons:73 html/Work/Search/index.html:48 html/Work/Search/index.html:48 +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "åˆ é™¤" -#: lib/RT/Queue_Overlay.pm:88 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "åˆ é™¤æ¨¡æ¿" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "åˆ é™¤æŒ‡å®šçš„æ‰‹ç»" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "åˆ é™¤ç”³è¯·å•" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "åˆ é™¤ç”³è¯·å•" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "åˆ é™¤æ¤å¯¹è±¡å¯èƒ½ç ´åå‚考完整性" -#: lib/RT/Queue_Overlay.pm:293 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "åˆ é™¤æ¤å¯¹è±¡å¯èƒ½ç ´åå‚考完整性" -#: lib/RT/User_Overlay.pm:497 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "åˆ é™¤æ¤å¯¹è±¡ä¼šè¿åå‚考完整性" @@ -1913,7 +2297,7 @@ msgstr "åˆ é™¤æ¤å¯¹è±¡ä¼šè¿åå‚考完整性" msgid "Deleting this object would violate referential integrity. That's bad." msgstr "åˆ é™¤æ¤å¯¹è±¡ä¼šè¿åå‚考完整性" -#: html/Approvals/Elements/Approve:44 html/Work/Approvals/Elements/Approve:32 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "驳回" @@ -1921,11 +2305,11 @@ msgstr "驳回" msgid "Department" msgstr "部门" -#: html/Edit/Global/UserRight/List:12 html/Edit/Global/UserRight/Top:13 html/Edit/Users/List:10 html/Edit/Users/Top:12 +#: NOT FOUND IN SOURCE msgid "Department ID" msgstr "部门代ç " -#: html/Edit/Global/UserRight/List:11 html/Edit/Global/UserRight/Top:49 html/Edit/Users/List:9 html/Edit/Users/Top:48 html/Work/Delegates/Info:78 html/Work/Overview/Info:60 +#: NOT FOUND IN SOURCE msgid "Department Name" msgstr "部门åç§°" @@ -1949,7 +2333,7 @@ msgstr "请å‡å•" msgid "Departure Until" msgstr "å·®æ—…æˆªæ¢æ—¥" -#: html/Ticket/Create.html:180 html/Ticket/Elements/BulkLinks:34 html/Ticket/Elements/EditLinks:122 html/Ticket/Elements/EditLinks:46 html/Ticket/Elements/ShowDependencies:31 html/Ticket/Elements/ShowLinks:36 html/Work/Search/BulkLinks:10 +#: 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 msgid "Depended on by" msgstr "坿ޥç»å¤„ç†çš„申请å•" @@ -1957,7 +2341,27 @@ msgstr "坿ޥç»å¤„ç†çš„申请å•" msgid "Dependencies: \\n" msgstr "附属性:\\n" -#: html/Elements/SelectLinkType:26 html/Ticket/Create.html:179 html/Ticket/Elements/BulkLinks:30 html/Ticket/Elements/EditLinks:118 html/Ticket/Elements/EditLinks:35 html/Ticket/Elements/ShowDependencies:24 html/Ticket/Elements/ShowLinks:26 html/Work/Search/BulkLinks:6 +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "å·²åŠ å…¥å¯æŽ¥ç»å¤„ç†çš„ç”³è¯·å• %1" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "å·²ç§»é™¤å¯æŽ¥ç»å¤„ç†çš„ç”³è¯·å• %1" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "å·²åŠ å…¥éœ€å…ˆå¤„ç†çš„ç”³è¯·å• %1" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "已移除需先处ç†çš„ç”³è¯·å• %1" + +#: 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 msgid "Depends on" msgstr "需先处ç†" @@ -1965,15 +2369,15 @@ msgstr "需先处ç†" msgid "DependsOn" msgstr "需先处ç†" -#: html/Elements/SelectSortOrder:34 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "递å‡" -#: html/SelfService/Create.html:72 html/Ticket/Create.html:118 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "åœ¨ä»¥ä¸‹å—æ®µæè¿°ä¸»é¢˜" -#: html/Admin/Elements/AddCustomFieldValue:35 html/Admin/Elements/EditCustomField:38 html/Admin/Elements/EditScrip:33 html/Admin/Elements/ModifyQueue:35 html/Admin/Elements/ModifyTemplate:35 html/Admin/Elements/ModifyTemplateAsWorkflow:192 html/Admin/Groups/Modify.html:48 html/Admin/Queues/Modify.html:47 html/Edit/Global/Workflow/Action:14 html/Elements/SelectGroups:26 html/User/Groups/Modify.html:48 html/Work/Preferences/Info:98 +#: 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 "æè¿°" @@ -1985,7 +2389,7 @@ msgstr "ç»åŠžä¸šåŠ¡è¯´æ˜Ž" msgid "Description:" msgstr "æè¿°ï¼š" -#: html/Work/Tickets/Create.html:108 html/Work/Tickets/Elements/EditCustomFields:39 html/Work/Tickets/Elements/ShowCustomFields:41 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "细节" @@ -1993,67 +2397,91 @@ msgstr "细节" msgid "Direct" msgstr "直接" -#: html/Edit/Users/Info:31 +#: NOT FOUND IN SOURCE msgid "Disability" msgstr "残障身分" -#: html/Edit/Users/Info:29 +#: NOT FOUND IN SOURCE msgid "Disability Type" msgstr "残障类别" -#: html/Edit/Global/GroupRight/List:9 html/Edit/Global/GroupRight/Top:16 html/Edit/Groups/List:11 html/Edit/Groups/Top:19 html/Edit/Queues/Basic/Top:70 html/Edit/Queues/List:13 html/Work/Delegates/Info:48 html/Work/Delegates/Info:53 html/Work/Delegates/List:12 html/Work/Overview/Info:42 +#: NOT FOUND IN SOURCE msgid "Disabled" msgstr "åœç”¨" -#: html/Ticket/Elements/Tabs:84 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "显示内容" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "显示æƒé™æŽ§åˆ¶æ¸…å•" -#: lib/RT/Queue_Overlay.pm:74 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "æ˜¾ç¤ºå—æ®µ" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "显示æ¤è¡¨å•的模æ¿" -#: lib/RT/Queue_Overlay.pm:77 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "显示æ¤è¡¨å•的手ç»" -#: html/Ticket/Elements/ShowHistory:34 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "显示模å¼" +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "显示æ¤ç¾¤ç»„已储å˜çš„æŸ¥è¯¢" + #: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "显示第%1å·ç”³è¯·å•" -#: lib/RT/System.pm:53 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授æƒ</a> 第二版散布。" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "å…许一切æ“作" -#: html/Elements/Refresh:29 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "䏿›´æ–°æ¤é¡µé¢ã€‚" -#: html/Search/Elements/PickRestriction:113 html/Work/Search/PickRestriction:95 +#: NOT FOUND IN SOURCE msgid "Don't show search results" msgstr "䏿˜¾ç¤ºæŸ¥è¯¢ç»“æžœ" -#: html/Edit/Elements/Page:19 html/Edit/Elements/Page:21 +#: NOT FOUND IN SOURCE +msgid "Done" +msgstr "完æˆ" + +#: NOT FOUND IN SOURCE msgid "Down" msgstr "下一页" -#: html/Ticket/Elements/ShowTransaction:92 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "下载" +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "下载以 Tab 分隔的档案" + #: NOT FOUND IN SOURCE msgid "Dr." msgstr "åšå£«" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:44 html/Ticket/Elements/ShowDates:42 lib/RT/Ticket_Overlay.pm:1179 +#: 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 msgid "Due" msgstr "到期日" @@ -2065,43 +2493,57 @@ msgstr "æˆªæ¢æ—¥" msgid "Due date '%1' could not be parsed" msgstr "æ— æ³•è§£è¯»æ—¥æœŸ '%1'" -#: bin/rt-commit-handler:753 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "æ— æ³•åŠ è½½ç”³è¯·å• '%1':%2.\\n" -#: html/Work/Tickets/Update.html:46 +#: NOT FOUND IN SOURCE msgid "Edit" msgstr "编辑" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:132 +#: NOT FOUND IN SOURCE msgid "Edit Conditions" msgstr "编辑å‰ç½®æ¡ä»¶" -#: html/Admin/Queues/CustomFields.html:44 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "编辑 %1 çš„è‡ªè®¢å—æ®µ" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Edit Custom Fields for queue %1" msgstr "ç¼–è¾‘è¡¨å• %1 çš„è‡ªè®¢å—æ®µ" -#: html/Search/Bulk.html:143 html/Ticket/ModifyLinks.html:35 html/Work/Search/Bulk.html:93 -msgid "Edit Relationships" +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "编辑申请å•关系" -#: html/Edit/Groups/MemberGroups/Add.html:3 html/Edit/Groups/MemberGroups/index.html:22 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "编辑查询" + +#: NOT FOUND IN SOURCE msgid "Edit Subgroups" msgstr "新增/维护å群组" -#: html/Admin/Queues/Templates.html:41 +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "ç¼–è¾‘è¡¨å• %1 的模æ¿" -#: html/Admin/Queues/Workflows.html:42 -#. ($QueueObj->Name) +#: NOT FOUND IN SOURCE msgid "Edit Workflows for queue %1" msgstr "ç¼–è¾‘è¡¨å• %1 çš„æµç¨‹" @@ -2109,11 +2551,15 @@ msgstr "ç¼–è¾‘è¡¨å• %1 çš„æµç¨‹" msgid "Edit keywords" msgstr "编辑关键è¯" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "编辑æ¤ç¾¤ç»„已储å˜çš„æŸ¥è¯¢" + #: NOT FOUND IN SOURCE msgid "Edit scrips" msgstr "编辑手ç»" -#: html/Admin/Global/index.html:45 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "编辑全域模æ¿" @@ -2129,28 +2575,30 @@ msgstr "编辑 %1 的模æ¿" msgid "Edit workflows for %1" msgstr "编辑 %1 çš„æµç¨‹" -#: html/Admin/Elements/ModifyQueue:24 html/Admin/Queues/Modify.html:118 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "编辑已储å˜çš„æŸ¥è¯¢" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "ç¼–è¾‘è¡¨å• %1 的设定" -#: html/Admin/Elements/ModifyUser:24 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "编辑使用者 %1 的设定" -#: html/Admin/Elements/EditCustomField:90 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "ç¼–è¾‘è‡ªè®¢å—æ®µ %1" -#: html/Admin/Groups/Members.html:31 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "编辑群组 %1 çš„æˆå‘˜ä¿¡æ¯" -#: html/User/Groups/Members.html:128 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "编辑代ç†äººç¾¤ç»„ %1 çš„æˆå‘˜ä¿¡æ¯" @@ -2159,8 +2607,7 @@ msgstr "编辑代ç†äººç¾¤ç»„ %1 çš„æˆå‘˜ä¿¡æ¯" msgid "Editing template %1" msgstr "ç¼–è¾‘æ¨¡æ¿ %1" -#: html/Admin/Elements/ModifyWorkflow:238 -#. (loc( $WorkflowObj->Name() )) +#: NOT FOUND IN SOURCE msgid "Editing workflow %1" msgstr "编辑æµç¨‹ %1" @@ -2172,23 +2619,27 @@ msgstr "最高å¦åކ" msgid "EffectiveId" msgstr "有效编å·" -#: lib/RT/Ticket_Overlay.pm:2644 lib/RT/Ticket_Overlay.pm:2712 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "éœ€è¦æŒ‡å®šèµ·å§‹ç”³è¯·å•或目的申请å•" -#: html/Admin/Users/Modify.html:52 html/Admin/Users/Prefs.html:45 html/Elements/SelectUsers:26 html/Ticket/Elements/AddWatchers:55 html/User/Prefs.html:41 html/Work/Delegates/Info:96 html/Work/Overview/Info:78 html/Work/Preferences/Info:16 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "电å邮件信箱" -#: lib/RT/User_Overlay.pm:247 +#: NOT FOUND IN SOURCE +msgid "Email Address" +msgstr "电å邮件信箱" + +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "æ¤ç”µå邮件信箱已被使用" -#: html/Admin/Elements/ModifyUser:41 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "电å邮件信箱地å€" -#: html/Admin/Elements/ModifyUser:53 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "电å邮件文å—ç¼–ç æ–¹å¼" @@ -2208,23 +2659,23 @@ msgstr "抵达地点" msgid "Enable Delegates" msgstr "ä»£ç†æ¿€æ´»" -#: html/Admin/Elements/EditCustomField:50 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "å¯ç”¨(å–æ¶ˆå‹¾é€‰å°†åœç”¨æ¤è‡ªè®¢å—段)" -#: html/Admin/Groups/Modify.html:52 html/User/Groups/Modify.html:52 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "å¯ç”¨(å–æ¶ˆå‹¾é€‰å°†åœç”¨æ¤ç¾¤ç»„)" -#: html/Admin/Queues/Modify.html:83 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "å¯ç”¨(å–æ¶ˆå‹¾é€‰å°†åœç”¨æ¤è¡¨å•)" -#: html/Admin/Elements/EditCustomFields:98 +#: NOT FOUND IN SOURCE msgid "Enabled Custom Fields" msgstr "å·²å¯ç”¨çš„è‡ªè®¢å—æ®µ" -#: html/Edit/Queues/Basic/Top:75 html/Edit/Queues/List:15 +#: NOT FOUND IN SOURCE msgid "Enabled Date" msgstr "å¯ç”¨æ—¥æœŸ" @@ -2232,20 +2683,25 @@ msgstr "å¯ç”¨æ—¥æœŸ" msgid "Enabled Date:" msgstr "激活日期:" -#: html/Admin/Queues/index.html:55 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "å·²å¯ç”¨çš„表å•" -#: html/Edit/Queues/Basic/Top:66 html/Edit/Queues/List:11 +#: NOT FOUND IN SOURCE msgid "Enabled Status" msgstr "å¯ç”¨çжæ€" -#: html/Admin/Elements/EditCustomField:106 html/Admin/Groups/Modify.html:116 html/Admin/Queues/Modify.html:140 html/Admin/Users/Modify.html:282 html/User/Groups/Modify.html:116 +#: 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)) msgid "Enabled status %1" msgstr "å¯ç”¨çŠ¶æ€ %1" -#: html/Edit/Users/Info:35 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "å¯ç”¨çжæ€: %1" + +#: NOT FOUND IN SOURCE msgid "End of Trial" msgstr "试用期满日" @@ -2253,27 +2709,39 @@ msgstr "试用期满日" msgid "English Name" msgstr "英文姓å" -#: lib/RT/CustomField_Overlay.pm:427 +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "键入多é‡é¡¹ç›®" -#: html/Edit/Users/Search.html:15 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "键入欲将对象连结至的对象或 URI。项目之间请以空白隔开。" + +#: NOT FOUND IN SOURCE msgid "Enter one or more conditions below to search for users" -msgstr "输入下列å•一或å¤å¼æ¡ä»¶ï¼ŒæŸ¥è¯¢ç”¨æˆ·æ•°æ®" +msgstr "键入下列å•一或å¤å¼æ¡ä»¶ï¼ŒæŸ¥è¯¢ç”¨æˆ·æ•°æ®" -#: lib/RT/CustomField_Overlay.pm:424 +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "键入å•一项目" -#: html/Search/Bulk.html:144 html/Ticket/Elements/EditLinks:111 html/Work/Search/Bulk.html:95 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "输入申请å•å¯é“¾æŽ¥åˆ°çš„申请å•ç¼–å·æˆ–网å€ã€‚以空白隔开。" +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "键入欲将表å•连结至的对象或 URI。项目之间请以空白隔开。" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "键入申请å•å¯é“¾æŽ¥åˆ°çš„申请å•ç¼–å·æˆ–网å€ã€‚项目之间请以空白隔开。" -#: lib/RT/CustomField_Vendor.pm:20 +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "键入最多 %1 个值" + +#: NOT FOUND IN SOURCE msgid "EntryBoolean" msgstr "是éžå¡«è¡¨" -#: lib/RT/CustomField_Vendor.pm:17 +#: NOT FOUND IN SOURCE msgid "EntryDate" msgstr "日期填表" @@ -2281,7 +2749,7 @@ msgstr "日期填表" msgid "EntryExternal" msgstr "系统填表" -#: lib/RT/CustomField_Vendor.pm:16 +#: NOT FOUND IN SOURCE msgid "EntryFreeform" msgstr "输入填表" @@ -2289,19 +2757,19 @@ msgstr "输入填表" msgid "EntryMultiple" msgstr "多选填表" -#: lib/RT/CustomField_Vendor.pm:19 +#: NOT FOUND IN SOURCE msgid "EntryNumber" msgstr "数值填表" -#: lib/RT/CustomField_Vendor.pm:15 +#: NOT FOUND IN SOURCE msgid "EntrySelect" msgstr "å•选填表" -#: lib/RT/CustomField_Vendor.pm:18 +#: NOT FOUND IN SOURCE msgid "EntryTime" msgstr "时间填表" -#: html/Elements/Login:39 html/SelfService/Error.html:24 html/SelfService/Error.html:25 +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "错误" @@ -2309,80 +2777,105 @@ msgstr "错误" msgid "Error adding watcher" msgstr "新增视察员失败" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "表å•->æ–°å¢žè§†å¯Ÿå‘˜çš„å‚æ•°æœ‰è¯¯" -#: lib/RT/Queue_Overlay.pm:713 -msgid "Error in parameters to Queue->DelWatcher" +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" msgstr "表å•->åˆ é™¤è§†å¯Ÿå‘˜çš„å‚æ•°æœ‰è¯¯" -#: lib/RT/Ticket_Overlay.pm:1364 +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "申请å•->æ–°å¢žè§†å¯Ÿå‘˜çš„å‚æ•°æœ‰è¯¯" -#: lib/RT/Ticket_Overlay.pm:1540 -msgid "Error in parameters to Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" msgstr "申请å•->åˆ é™¤è§†å¯Ÿå‘˜çš„å‚æ•°æœ‰è¯¯" -#: etc/initialdata:38 +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "调整申请å•优先ç‰çº§" + +#: NOT FOUND IN SOURCE +msgid "Estimate" +msgstr "预计" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "预计" + +#: etc/initialdata:20 msgid "Everyone" msgstr "所有人" -#: bin/rt-crontool:193 +#: bin/rt-crontool:219 msgid "Example:" msgstr "范例:" -#: html/Edit/Elements/104Buttons:77 +#: NOT FOUND IN SOURCE +msgid "Existing user renamed from %1 to %2" +msgstr "现有使用者 %1 已改å为 %2" + +#: NOT FOUND IN SOURCE msgid "Export" msgstr "汇出" -#: html/Admin/Elements/ModifyUser:63 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "外部认è¯å¸å·" -#: html/Admin/Elements/ModifyUser:57 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "外部è”络方å¼å¸å·" -#: html/Edit/Global/Basic/Top:64 +#: NOT FOUND IN SOURCE msgid "ExternalDatabaseDSN" msgstr "外部数æ®åº“连结å—符串" -#: html/Edit/Global/Basic/Top:68 +#: NOT FOUND IN SOURCE msgid "ExternalDatabasePass" msgstr "外部数æ®åº“å£ä»¤" -#: html/Edit/Global/Basic/Top:66 +#: NOT FOUND IN SOURCE msgid "ExternalDatabaseUser" msgstr "外部数æ®åº“用户" -#: html/Edit/Global/Basic/Top:62 +#: NOT FOUND IN SOURCE msgid "ExternalURL" msgstr "外部接å£ç½‘å€" -#: html/Admin/Users/Modify.html:72 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "备注" -#: lib/RT/User_Overlay.pm:361 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." -msgstr "找ä¸åˆ°ã€Œå†…部æˆå‘˜ã€è™šæ‹Ÿç¾¤ç»„的使用者。" +msgstr "找ä¸åˆ°â€˜å†…部æˆå‘˜â€™è™šæ‹Ÿç¾¤ç»„的使用者。" -#: lib/RT/User_Overlay.pm:368 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" -msgstr "找ä¸åˆ°ã€Œéžå†…部æˆå‘˜ã€è™šæ‹Ÿç¾¤ç»„的使用者。" +msgstr "找ä¸åˆ°â€˜éžå†…部æˆå‘˜â€™è™šæ‹Ÿç¾¤ç»„的使用者。" -#: bin/rt-crontool:137 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "æ— æ³•åŠ è½½æ¨¡å— %1. (%2)" +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Feb" msgstr "二月" -#: lib/RT/Date.pm:412 +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "02" @@ -2394,31 +2887,59 @@ msgstr "二月" msgid "Female" msgstr "女" -#: html/Edit/Global/CustomField/List:5 html/Edit/Global/CustomField/Top:9 -msgid "Field Attribute" -msgstr "å—æ®µå±žæ€§" - -#: html/Edit/Global/CustomField/Info:14 +#: NOT FOUND IN SOURCE msgid "Field Content:" msgstr "å—æ®µå†…容:" -#: html/Edit/Global/CustomField/List:7 html/Edit/Global/CustomField/Top:21 +#: NOT FOUND IN SOURCE msgid "Field Description" msgstr "å—æ®µæè¿°" -#: html/Edit/Global/CustomField/List:6 html/Edit/Global/CustomField/Top:15 +#: NOT FOUND IN SOURCE msgid "Field Name" msgstr "å—æ®µåç§°" -#: html/Edit/Elements/PickUsers:52 html/Edit/Users/Add.html:47 +#: NOT FOUND IN SOURCE +msgid "Field Type" +msgstr "å—æ®µç±»åˆ«" + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "æ¡£å" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "å¡«å…¥å¤šä¸ªæ–‡å—æ¡†" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "å¡«å…¥ä¸€ä¸ªæ–‡å—æ¡†" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "填入最多 %1 ä¸ªæ–‡å—æ¡†" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Filter" msgstr "ç›é€‰" -#: html/Edit/Elements/PickUsers:6 html/Edit/Users/Add.html:7 html/Work/Tickets/Cc:4 +#: NOT FOUND IN SOURCE msgid "Filter people" msgstr "对象ç›é€‰" -#: html/Edit/Elements/PickUsers:68 html/Edit/Users/Add.html:63 html/Work/Tickets/Cc:42 +#: NOT FOUND IN SOURCE msgid "Filtered list:" msgstr "ç›é€‰åˆ—表:" @@ -2426,47 +2947,55 @@ msgstr "ç›é€‰åˆ—表:" msgid "Fin" msgstr "最终" -#: html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:58 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" -msgstr "最低顺ä½" +msgstr "最终顺ä½" -#: lib/RT/Ticket_Overlay.pm:1170 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" -msgstr "最低顺ä½" +msgstr "最终顺ä½" #: NOT FOUND IN SOURCE msgid "Financial Department:" msgstr "财务部:" -#: html/Admin/Queues/People.html:60 html/Ticket/Elements/EditPeople:33 +#: NOT FOUND IN SOURCE msgid "Find group whose" msgstr "寻找群组的" +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "寻找群组的" + #: NOT FOUND IN SOURCE msgid "Find new/open tickets" msgstr "寻找/å¼€å¯ç”³è¯·å•" -#: html/Admin/Queues/People.html:56 html/Admin/Users/index.html:45 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "寻找人员的" -#: html/Search/Listing.html:107 html/Work/Search/index.html:88 +#: NOT FOUND IN SOURCE +msgid "Find queues whose" +msgstr "寻找表å•çš„" + +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "寻找申请å•" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:118 +#: NOT FOUND IN SOURCE msgid "Finish Approval" msgstr "ç¾æ ¸å®Œæ¯•" -#: html/Ticket/Elements/Tabs:57 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "第一项" -#: html/Search/Listing.html:40 html/Work/Search/index.html:17 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "第一页" -#: html/Edit/Global/Workflow/Owner.html:30 +#: NOT FOUND IN SOURCE msgid "First-" msgstr "一" @@ -2474,7 +3003,7 @@ msgstr "一" msgid "First-level Admins" msgstr "一阶主管" -#: html/Edit/Users/Info:40 +#: NOT FOUND IN SOURCE msgid "First-level Users" msgstr "一阶主管员工" @@ -2482,40 +3011,48 @@ msgstr "一阶主管员工" msgid "Fixed shift" msgstr "固定ç" -#: docs/design_docs/string-extraction-guide.txt:33 +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 msgid "Foo Bar Baz" msgstr "甲 ä¹™ 丙" -#: docs/design_docs/string-extraction-guide.txt:24 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "甲ï¼" -#: html/Search/Bulk.html:86 html/Work/Search/Bulk.html:55 +#: html/Search/Bulk.html:105 msgid "Force change" -msgstr "强制更新" +msgstr "强制更æ¢" -#: html/Work/Elements/104Header:89 +#: NOT FOUND IN SOURCE msgid "Form Processing" msgstr "电å表å•作业区" -#: html/Search/Listing.html:105 html/Work/Search/index.html:86 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "找到 %1 å¼ ç”³è¯·å•" -#: lib/RT/Interface/Web.pm:904 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "已找到对象" -#: html/Edit/Global/Workflow/Owner.html:33 +#: NOT FOUND IN SOURCE msgid "Fourth-" msgstr "å››" -#: html/Admin/Elements/ModifyUser:43 +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "输入" + +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "è”络方å¼" -#: lib/RT/CustomField_Vendor.pm:11 +#: NOT FOUND IN SOURCE msgid "FreeformDate" msgstr "日期输入" @@ -2523,23 +3060,23 @@ msgstr "日期输入" msgid "FreeformExternal" msgstr "ç³»ç»Ÿå—æ®µ" -#: lib/RT/CustomField_Overlay.pm:37 +#: NOT FOUND IN SOURCE msgid "FreeformMultiple" msgstr "多é‡è¾“å…¥" -#: lib/RT/CustomField_Vendor.pm:13 +#: NOT FOUND IN SOURCE msgid "FreeformNumber" msgstr "数值输入" -#: lib/RT/CustomField_Vendor.pm:14 +#: NOT FOUND IN SOURCE msgid "FreeformPassword" msgstr "å£ä»¤è¾“å…¥" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "FreeformSingle" msgstr "å•一输入" -#: lib/RT/CustomField_Vendor.pm:12 +#: NOT FOUND IN SOURCE msgid "FreeformTime" msgstr "时间输入" @@ -2547,11 +3084,11 @@ msgstr "时间输入" msgid "Fri" msgstr "星期五" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "星期五" -#: html/Ticket/Elements/ShowHistory:40 html/Ticket/Elements/ShowHistory:50 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "å®Œæ•´æ ‡å¤´æ¡£" @@ -2559,28 +3096,40 @@ msgstr "å®Œæ•´æ ‡å¤´æ¡£" msgid "Gecos" msgstr "登入å¸å·" -#: html/Edit/Users/Info:26 +#: NOT FOUND IN SOURCE msgid "Gender" msgstr "性别" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "å–出档案里的模æ¿" + #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "å–å¾—ç›®å‰ä½¿ç”¨è€…çš„ pgp ç¾ç« \\n" -#: lib/RT/Transaction_Overlay.pm:593 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "交予 %1" -#: html/Admin/Elements/Tabs:40 html/Admin/index.html:37 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "全域设定" #: NOT FOUND IN SOURCE +msgid "Global Approval" +msgstr "å…¨åŸŸç¾æ ¸" + +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "å…¨åŸŸè‡ªè®¢å—æ®µ" + +#: NOT FOUND IN SOURCE msgid "Global Keyword Selections" msgstr "全域关键è¯é€‰å–" -#: html/Edit/Users/System:24 +#: NOT FOUND IN SOURCE msgid "Global Rights:" msgstr "拥有全域æƒé™åˆ—表:" @@ -2588,16 +3137,28 @@ msgstr "拥有全域æƒé™åˆ—表:" msgid "Global Scrips" msgstr "全域手ç»" -#: html/Edit/Elements/Tab:38 +#: NOT FOUND IN SOURCE msgid "Global Setup" msgstr "全域设定" -#: html/Admin/Elements/SelectTemplate:37 html/Edit/Elements/SelectTemplate:11 +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" + +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "全域模æ¿ï¼š%1" -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Queues/People.html:58 html/Admin/Queues/People.html:62 html/Admin/Queues/index.html:43 html/Admin/Users/index.html:48 html/Ticket/Elements/EditPeople:31 html/Ticket/Elements/EditPeople:35 html/index.html:40 +#: NOT FOUND IN SOURCE +msgid "GlobalApproval" +msgstr "å…¨åŸŸç¾æ ¸" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "执行" + +#: 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 msgid "Go!" msgstr "执行" @@ -2605,19 +3166,19 @@ msgstr "执行" msgid "Good pgp sig from %1\\n" msgstr "%1 çš„ pgp ç¾ç« 是æ£ç¡®çš„\\n" -#: html/Search/Listing.html:49 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "到页é¢" -#: html/Elements/GotoTicket:24 html/SelfService/Elements/GotoTicket:24 html/Work/Elements/104Header:49 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "跳到申请å•" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:224 +#: NOT FOUND IN SOURCE msgid "Grand" msgstr "上" -#: html/Ticket/Elements/AddWatchers:45 html/User/Elements/DelegateRights:77 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "群组" @@ -2625,7 +3186,11 @@ msgstr "群组" msgid "Group %1 %2: %3" msgstr "群组 %1 %2:%3" -#: html/Edit/Global/GroupRight/List:5 html/Edit/Global/GroupRight/Top:20 html/Edit/Groups/List:7 +#: NOT FOUND IN SOURCE +msgid "Group Admin" +msgstr "群组管ç†å‘˜" + +#: NOT FOUND IN SOURCE msgid "Group Description" msgstr "群组æè¿°" @@ -2637,7 +3202,7 @@ msgstr "群组管ç†" msgid "Group Members" msgstr "群组æˆå‘˜" -#: html/Edit/Elements/PickUsers:28 html/Edit/Global/GroupRight/List:4 html/Edit/Global/GroupRight/Top:10 html/Edit/Groups/List:6 html/Edit/Groups/Top:7 html/Edit/Users/Add.html:29 html/Edit/Users/Group:10 html/Edit/Users/Search.html:43 html/Work/Delegates/Add.html:15 html/Work/Tickets/Cc:24 +#: NOT FOUND IN SOURCE msgid "Group Name" msgstr "群组åç§°" @@ -2645,7 +3210,7 @@ msgstr "群组åç§°" msgid "Group Name:" msgstr "群组å称:" -#: html/Admin/Elements/GroupTabs:44 html/Admin/Elements/QueueTabs:56 html/Admin/Elements/SystemTabs:43 html/Admin/Global/index.html:54 html/Edit/Global/autohandler:12 html/Edit/Queues/autohandler:23 html/Edit/Users/Group:11 html/Edit/Users/index.html:123 +#: 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 "群组æƒé™" @@ -2653,15 +3218,15 @@ msgstr "群组æƒé™" msgid "Group Rights:" msgstr "拥有群组æƒé™åˆ—表:" -#: html/Edit/Elements/Tab:34 +#: NOT FOUND IN SOURCE msgid "Group Setup" msgstr "群组设定" -#: html/Edit/Global/GroupRight/List:8 html/Edit/Global/GroupRight/Top:14 html/Edit/Groups/List:10 html/Edit/Groups/Top:15 +#: NOT FOUND IN SOURCE msgid "Group Status" msgstr "群组状æ€" -#: lib/RT/Group_Overlay.pm:964 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "ç¾¤ç»„å†…å·²æœ‰æ¤æˆå‘˜" @@ -2669,20 +3234,24 @@ msgstr "ç¾¤ç»„å†…å·²æœ‰æ¤æˆå‘˜" msgid "Group could not be created." msgstr "æ— æ³•æ–°å¢žç¾¤ç»„" -#: html/Admin/Groups/Modify.html:76 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "æ— æ³•æ–°å¢žç¾¤ç»„ï¼š%1" -#: lib/RT/Group_Overlay.pm:496 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "群组新增完毕" -#: lib/RT/Group_Overlay.pm:1132 +#: NOT FOUND IN SOURCE +msgid "Group created: %1" +msgstr "群组 %1 新增完毕" + +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "群组没有这个æˆå‘˜" -#: lib/RT/Group_Overlay.pm:944 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1437 lib/RT/Ticket_Overlay.pm:1515 +#: 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 msgid "Group not found" msgstr "找ä¸åˆ°ç¾¤ç»„" @@ -2695,10 +3264,18 @@ msgid "Group not specified.\\n" msgstr "未指定群组。\\n" #: NOT FOUND IN SOURCE +msgid "Group redescribed from %1 to %2" +msgstr "群组æè¿° %1 已改为 %2" + +#: NOT FOUND IN SOURCE +msgid "Group renamed from %1 to %2" +msgstr "群组 %1 已改å为 %2" + +#: NOT FOUND IN SOURCE msgid "Group with Queue Rights" msgstr "æ‹¥æœ‰è¡¨å•æƒé™ç¾¤ç»„" -#: html/Edit/Global/Workflow/Owner.html:70 +#: NOT FOUND IN SOURCE msgid "Group's" msgstr "群组之" @@ -2706,52 +3283,78 @@ msgstr "群组之" msgid "Group:" msgstr "群组:" -#: html/Admin/Elements/SelectNewGroupMembers:34 html/Admin/Elements/Tabs:34 html/Admin/Groups/Members.html:63 html/Admin/Queues/People.html:82 html/Admin/index.html:31 html/Edit/Global/GroupRight/Add.html:15 html/User/Groups/Members.html:66 +#: 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 msgid "Groups" msgstr "群组" -#: lib/RT/Group_Overlay.pm:970 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "ä¸èƒ½å°†ç¾¤ç»„设为群组内æˆå‘˜" +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„群组" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "使用者所属的群组" + #: NOT FOUND IN SOURCE msgid "Groups with Global Rights" msgstr "拥有全域æƒé™ç¾¤ç»„" -#: html/Edit/Global/GroupRight/List:6 html/Edit/Global/GroupRight/Top:22 html/Edit/Groups/List:8 +#: NOT FOUND IN SOURCE msgid "HRMSDefined" msgstr "组织架构" -#: html/Edit/Users/Info:32 +#: NOT FOUND IN SOURCE +msgid "HTML Attributes" +msgstr "HTML 属性" + +#: NOT FOUND IN SOURCE msgid "Health Insurance" msgstr "å¥ä¿è¡¥åŠ©èº«ä»½" -#: lib/RT/Interface/CLI.pm:72 lib/RT/Interface/CLI.pm:72 +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "å—¨ï¼" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "嗨,%1" -#: html/Edit/Elements/104Top:27 +#: NOT FOUND IN SOURCE msgid "Help" -msgstr "辅助说明" +msgstr "说明" #: NOT FOUND IN SOURCE msgid "Help Desks" msgstr "å„项业务窗å£" -#: html/Ticket/Elements/ShowHistory:29 html/Ticket/Elements/Tabs:87 html/Work/Tickets/Elements/ShowHistory:8 +#: NOT FOUND IN SOURCE +msgid "Hidden" +msgstr "éšè—" + +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "纪录" -#: html/Admin/Elements/ModifyUser:67 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "群组 %1 的纪录" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "使用者 %1 的纪录" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "ä½å¤„电è¯" -#: html/Edit/Elements/104Top:15 html/Edit/Elements/104Top:23 html/Edit/Elements/EDOMHeader:9 html/Elements/Tabs:43 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "主页" @@ -2759,11 +3362,15 @@ msgstr "主页" msgid "Hotel Expense" msgstr "ä½å®¿è´¹" -#: lib/RT/Base.pm:73 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "我有 %quant(%1,ä»½å›ºä½“æ…æ‹Œå™¨)。" +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + #: NOT FOUND IN SOURCE msgid "ID Number" msgstr "身分è¯å·" @@ -2772,63 +3379,87 @@ msgstr "身分è¯å·" msgid "ID Type" msgstr "身分类别" -#: html/Ticket/Elements/ShowBasics:26 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "ç¼–å·" -#: html/Admin/Users/Modify.html:43 html/User/Prefs.html:38 html/Work/Preferences/Info:14 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "身份" -#: etc/initialdata:439 etc/upgrade/2.1.71:86 html/Edit/Elements/CreateApprovalsQueue:58 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "è‹¥ç¾æ ¸å•é到驳回,则连带驳回原申请å•ï¼Œå¹¶åˆ é™¤å…¶å®ƒç›¸å…³çš„å¾…ç¾æ ¸äº‹é¡¹" -#: bin/rt-crontool:189 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "若没有指定申请者,则以æ¤ä½¿ç”¨è€…作为申请者" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "申请å•若没有指定表å•,则将它新增在æ¤è¡¨å•内" + +#: 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 "如果æ¤å·¥å…·ç¨‹åºä¸º setgidï¼Œæ¶æ„的本地端用户å³èƒ½ç”±æ¤å–å¾— RT 的管ç†å‘˜æƒé™ã€‚" -#: html/Admin/Queues/People.html:104 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyPeople.html:37 +#: 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 "若您已更新以上数æ®ï¼Œè¯·è®°å¾—按一下" -#: lib/RT/Interface/Web.pm:896 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "%1 的值错误" -#: lib/RT/Interface/Web.pm:899 +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "图片" + +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "æ¤å—段值ä¸å¯æ›´åЍ" -#: html/Edit/Elements/104Buttons:76 html/Edit/Global/Workflow/Import.html:2 +#: NOT FOUND IN SOURCE msgid "Import" msgstr "汇入" -#: html/Admin/Elements/EditCustomFields:73 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." msgstr "列出åœç”¨çš„è‡ªè®¢å—æ®µ" -#: html/Admin/Queues/index.html:42 html/Edit/Queues/index.html:38 +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "列出åœç”¨çš„群组" + +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "列出åœç”¨çš„表å•" -#: html/Admin/Users/index.html:46 html/Edit/Users/Search.html:62 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "列出åœç”¨çš„使用者" -#: html/Edit/Users/Info:37 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Indirect Employee" msgstr "直接/间接员工" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" -msgstr "åˆå§‹ä¼˜å…ˆæƒ" +msgstr "åˆå§‹ä¼˜å…ˆé¡ºä½" -#: lib/RT/Ticket_Overlay.pm:1169 lib/RT/Ticket_Overlay.pm:1171 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" -msgstr "åˆå§‹ä¼˜å…ˆæƒ" +msgstr "åˆå§‹ä¼˜å…ˆé¡ºä½" -#: lib/RT/ScripAction_Overlay.pm:104 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "输入错误" @@ -2836,20 +3467,20 @@ msgstr "输入错误" msgid "Interest noted" msgstr "登记æˆåŠŸ" -#: lib/RT/Ticket_Overlay.pm:3835 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "内部错误" -#: lib/RT/Record.pm:142 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "内部错误:%1" -#: lib/RT/Group_Overlay.pm:643 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "错误的群组类别" -#: lib/RT/Principal_Overlay.pm:126 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "错误的æƒé™" @@ -2857,32 +3488,32 @@ msgstr "错误的æƒé™" msgid "Invalid Type" msgstr "错误的类型" -#: lib/RT/Interface/Web.pm:901 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "错误的数æ®" -#: lib/RT/Ticket_Overlay.pm:439 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." -msgstr "错误的承办人。改为预设承办人「nobodyã€ã€‚" +msgstr "错误的承办人。改为预设承办人‘nobody’。" -#: lib/RT/Scrip_Overlay.pm:133 lib/RT/Template_Overlay.pm:250 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "错误的表å•" -#: lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:269 lib/RT/ACE_Overlay.pm:274 +#: 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 "错误的æƒé™" -#: lib/RT/Record.pm:117 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "%1 的值错误" -#: lib/RT/Ticket_Overlay.pm:3470 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "é”™è¯¯çš„è‡ªè®¢å—æ®µå€¼" -#: lib/RT/Ticket_Overlay.pm:346 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "错误的状æ€å€¼" @@ -2890,18 +3521,22 @@ msgstr "错误的状æ€å€¼" msgid "IssueStatement" msgstr "é€å‡ºé™ˆè¿°" -#: bin/rt-crontool:190 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "请ç»å¯¹ä¸è¦è®©æœªå…·æƒé™çš„使用者执行æ¤å·¥å…·ç¨‹åºã€‚" -#: bin/rt-crontool:191 +#: 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 "建议您新增一个隶属于æ£ç¡®ç¾¤ç»„的低æƒé™ç³»ç»Ÿä½¿ç”¨è€…,并以该身份执行æ¤å·¥å…·ç¨‹åºã€‚" -#: bin/rt-crontool:162 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "它接å—ä¸‹åˆ—å‚æ•°ï¼š" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Item Name" msgstr "å“å" @@ -2918,7 +3553,7 @@ msgstr "å¾…ç¾æ ¸é¡¹ç›®" msgid "Jan" msgstr "一月" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "01" @@ -2930,7 +3565,7 @@ msgstr "一月" msgid "Job" msgstr "èŒç§°" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "åŠ å…¥æˆ–ç¦»å¼€æ¤ç¾¤ç»„" @@ -2938,15 +3573,15 @@ msgstr "åŠ å…¥æˆ–ç¦»å¼€æ¤ç¾¤ç»„" msgid "Jul" msgstr "七月" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." -msgstr "01" +msgstr "07" #: NOT FOUND IN SOURCE msgid "July" msgstr "七月" -#: html/Ticket/Elements/Tabs:98 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "全部信æ¯" @@ -2954,9 +3589,9 @@ msgstr "全部信æ¯" msgid "Jun" msgstr "å…æœˆ" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." -msgstr "06." +msgstr "06" #: NOT FOUND IN SOURCE msgid "June" @@ -2966,31 +3601,51 @@ msgstr "å…æœˆ" msgid "Keyword" msgstr "关键è¯" -#: lib/RT/CustomField_Vendor.pm:21 +#: NOT FOUND IN SOURCE +msgid "LabelAttachments" +msgstr "附件巿 ‡" + +#: NOT FOUND IN SOURCE +msgid "LabelContent" +msgstr "内容巿 ‡" + +#: NOT FOUND IN SOURCE +msgid "LabelSubject" +msgstr "ä¸»é¢˜å·æ ‡" + +#: NOT FOUND IN SOURCE msgid "LabelURL" msgstr "é“¾æŽ¥å·æ ‡" -#: html/Admin/Elements/ModifyUser:51 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "使用è¯è¨€" -#: html/Ticket/Elements/Tabs:72 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "è¯è¨€" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "上次更新" -#: html/Ticket/Elements/EditDates:37 html/Ticket/Elements/ShowDates:38 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "上次è”络" -#: html/Elements/SelectDateType:28 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "上次è”络日期" -#: html/Search/Elements/TicketHeader:40 html/Work/Search/TicketHeader:19 +#: NOT FOUND IN SOURCE msgid "Last Notified" msgstr "上次通知" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "上次更新" @@ -2998,15 +3653,19 @@ msgstr "上次更新" msgid "LastUpdated" msgstr "上次更新" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "上次更新者" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "剩馀时间" -#: html/Admin/Users/Modify.html:82 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "å…许这å使用者登入" -#: html/Admin/Users/Modify.html:86 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "内部æˆå‘˜ï¼ˆå…·æœ‰ä¸ªäººæƒé™ï¼‰" @@ -3018,33 +3677,37 @@ msgstr "é™åˆ¶æ‰¿åŠžäººä¸º %1 到%2" msgid "Limiting queue to %1 %2" msgstr "é™åˆ¶è¡¨å•为 %1 到 %2" -#: html/Work/Queues/Select.html:4 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Link a Queue" msgstr "申请表å•连结" -#: lib/RT/Ticket_Overlay.pm:2726 +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "æ¤é“¾æŽ¥å·²å˜åœ¨" -#: lib/RT/Ticket_Overlay.pm:2738 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "æ— æ³•æ–°å¢žé“¾æŽ¥" -#: lib/RT/Ticket_Overlay.pm:2746 lib/RT/Ticket_Overlay.pm:2756 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "链接(%1)新增完毕" -#: lib/RT/Ticket_Overlay.pm:2667 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "链接(%1)åˆ é™¤å®Œæ¯•" -#: lib/RT/Ticket_Overlay.pm:2673 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "找ä¸åˆ°é“¾æŽ¥" -#: html/Ticket/ModifyLinks.html:24 html/Ticket/ModifyLinks.html:28 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "é“¾æŽ¥ç”³è¯·å• #%1" @@ -3053,41 +3716,62 @@ msgstr "é“¾æŽ¥ç”³è¯·å• #%1" msgid "Link ticket %1" msgstr "é“¾æŽ¥ç”³è¯·å• %1" -#: html/Ticket/Elements/Tabs:96 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "链接" -#: html/Edit/Users/Search.html:11 +#: NOT FOUND IN SOURCE msgid "List All Users" msgstr "列出所有用户数æ®" -#: html/Admin/Users/Modify.html:113 html/User/Prefs.html:84 html/Work/Preferences/Info:72 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "åŠ è½½" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "åŠ è½½å·²å‚¨å˜çš„æŸ¥è¯¢ï¼š" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "å·²åŠ è½½çš„ Perl 模å—" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "ä½ç½®" -#: lib/RT.pm:162 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "登入目录 %1 找ä¸åˆ°æˆ–æ— æ³•å†™å…¥\\nã€‚æ— æ³•æ‰§è¡Œ RT。" -#: html/Edit/Global/Basic/Top:52 +#: NOT FOUND IN SOURCE msgid "LogToFile" msgstr "纪录ç‰çº§" -#: html/Edit/Global/Basic/Top:54 +#: NOT FOUND IN SOURCE msgid "LogToFileNamed" msgstr "纪录档å" -#: html/Elements/Header:56 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "使用者:%1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:35 html/Elements/Login:44 html/Elements/Login:54 +#: 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 msgid "Login" msgstr "登入" -#: html/Edit/Elements/104Top:17 html/Edit/Elements/104Top:17 html/Edit/Elements/104Top:29 html/Elements/Header:53 +#: html/Elements/Header:91 msgid "Logout" msgstr "注销" @@ -3095,63 +3779,75 @@ msgstr "注销" msgid "Long-term contractor" msgstr "长期契约员工" -#: html/Search/Bulk.html:85 html/Work/Search/Bulk.html:54 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "对应的类别ä¸ç¬¦" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "新增承办人" -#: html/Search/Bulk.html:109 html/Work/Search/Bulk.html:63 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "新增现况" -#: html/Search/Bulk.html:117 html/Work/Search/Bulk.html:75 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "新增到期日" -#: html/Search/Bulk.html:119 html/Work/Search/Bulk.html:78 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "新增解决日期" -#: html/Search/Bulk.html:113 html/Work/Search/Bulk.html:69 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "新增实际起始日期" -#: html/Search/Bulk.html:111 html/Work/Search/Bulk.html:66 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "新增应起始日期" -#: html/Search/Bulk.html:115 html/Work/Search/Bulk.html:72 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "新增报告日期" -#: html/Search/Bulk.html:105 html/Work/Search/Bulk.html:57 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "新增优先顺ä½" -#: html/Search/Bulk.html:107 html/Work/Search/Bulk.html:60 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "新增表å•" -#: html/Search/Bulk.html:103 html/Work/Search/Bulk.html:59 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "新增主题" +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Male" msgstr "ç”·" -#: html/Admin/index.html:32 +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "管ç†è‡ªè®¢å—段åŠå—段值" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "管ç†ç¾¤ç»„åŠæ‰€å±žæˆå‘˜" -#: html/Admin/index.html:38 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "管ç†é€‚用于所有表å•的属性与设定" -#: html/Admin/index.html:35 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "管ç†å„表å•åŠç›¸å…³å±žæ€§" -#: html/Admin/index.html:29 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "管ç†ä½¿ç”¨è€…与å£ä»¤" @@ -3163,7 +3859,7 @@ msgstr "ç»ç†" msgid "Mar" msgstr "三月" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "03" @@ -3176,30 +3872,44 @@ msgid "Marketing Department" msgstr "行销部" #: NOT FOUND IN SOURCE +msgid "Match Pattern" +msgstr "ç¬¦åˆæ ·å¼" + +#: NOT FOUND IN SOURCE msgid "May" msgstr "五月" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "05" -#: lib/RT/Group_Overlay.pm:981 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "æˆå‘˜ %1 新增完毕" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "æˆå‘˜ %1 åˆ é™¤å®Œæ¯•" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "新增æˆå‘˜å®Œæ¯•" -#: lib/RT/Group_Overlay.pm:1139 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "æˆå‘˜å·²åˆ 除" -#: lib/RT/Group_Overlay.pm:1143 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" -msgstr "æˆå‘˜æœªè¢«åˆ 除" +msgstr "æˆå‘˜æœªåˆ 除" -#: html/Elements/SelectLinkType:25 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "隶属于" -#: html/Work/Preferences/index.html:20 +#: NOT FOUND IN SOURCE msgid "Member since" msgstr "注册日期" @@ -3207,55 +3917,129 @@ msgstr "注册日期" msgid "MemberOf" msgstr "隶属于" -#: html/Admin/Elements/GroupTabs:41 html/Admin/Elements/ModifyTemplateAsWorkflow:232 html/User/Elements/GroupTabs:41 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "æˆå‘˜" -#: lib/RT/Ticket_Overlay.pm:2913 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "所属群组 %1 åŠ å…¥å®Œæ¯•" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "所属群组 %1 移除完毕" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "所属群组" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "使用者 %1 的所属群组" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "æ•´åˆå®Œæ¯•" -#: lib/RT/Ticket_Overlay.pm:2833 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "æ•´åˆå¤±è´¥ã€‚æ— æ³•è®¾å®š EffectiveId" -#: html/Ticket/Elements/BulkLinks:26 html/Ticket/Elements/EditLinks:114 html/Work/Search/BulkLinks:2 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "æ•´åˆè¿›" -#: html/Search/Bulk.html:137 html/Ticket/Update.html:100 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "已整åˆè¿› %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "讯æ¯" #: NOT FOUND IN SOURCE +msgid "Message body not shown because it is too large or is not plain text." +msgstr "ä¿¡ä»¶å†…æ–‡ä¸æ˜¯çº¯æ–‡å—ï¼Œå› æ¤æ— 法显示。" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "æ— æ³•çºªå½•è®¯æ¯" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "讯æ¯çºªå½•æˆåŠŸ" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "æ¤ç”³è¯·å•的相关讯æ¯ä¸ä¼šå¯„é€ç»™..." + +#: NOT FOUND IN SOURCE msgid "Misc. Expense" msgstr "æ‚è´¹" -#: lib/RT/Interface/Web.pm:903 +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "缺少主键值?(%1)" -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:53 html/Work/Preferences/Info:33 +#: NOT FOUND IN SOURCE +msgid "Missing mandatory fields" +msgstr "ç¼ºå°‘å¿…å¡«å—æ®µ" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "行动电è¯" -#: html/Admin/Elements/ModifyUser:71 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "行动电è¯" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "更改æƒé™æŽ§åˆ¶æ¸…å•" -#: html/Admin/Global/CustomFields.html:43 html/Admin/Global/index.html:50 +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "更改适用于所有%1çš„è‡ªè®¢å—æ®µ" + +#: NOT FOUND IN SOURCE msgid "Modify Custom Fields which apply to all queues" msgstr "更改适用于所有表å•çš„è‡ªè®¢å—æ®µ" -#: lib/RT/Queue_Overlay.pm:72 +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "更改群组æƒé™" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "更改æˆå‘˜" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "更改æƒé™" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" msgstr "更改æ¤è¡¨å•的模æ¿" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" msgstr "更改æ¤è¡¨å•的手ç»" @@ -3267,47 +4051,60 @@ msgstr "更改系统æƒé™æ¸…å•" msgid "Modify Template %1" msgstr "æ›´æ”¹æ¨¡æ¿ %1" +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "更改使用者æƒé™" + #: NOT FOUND IN SOURCE msgid "Modify Workflow" msgstr "更改æµç¨‹" -#: html/Admin/Queues/CustomField.html:44 +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" msgstr "更改 %1 表å•å†…çš„è‡ªè®¢å—æ®µ" -#: html/Admin/Global/CustomField.html:52 +#: NOT FOUND IN SOURCE msgid "Modify a CustomField which applies to all queues" msgstr "更改适用于所有表å•çš„è‡ªè®¢å—æ®µ" -#: html/Admin/Queues/Scrip.html:53 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "更改 %1 表å•内的手ç»" -#: html/Admin/Global/Scrip.html:47 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "更改适用于所有表å•的手ç»" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "更改适用 %1 的对象" + #: NOT FOUND IN SOURCE msgid "Modify dates for # %1" msgstr "更改 # %1 的日期" -#: html/Ticket/ModifyDates.html:24 html/Ticket/ModifyDates.html:28 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "更改 #%1 的日期" -#: html/Ticket/ModifyDates.html:34 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "æ›´æ”¹ç”³è¯·å• # %1 的日期" -#: html/Admin/Global/GroupRights.html:24 html/Admin/Global/GroupRights.html:27 html/Admin/Global/index.html:55 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "更改全域设定的群组æƒé™" -#: html/Admin/Global/GroupRights.html:32 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "更改全域设定的群组æƒé™ã€‚" @@ -3323,100 +4120,110 @@ msgstr "更改全域设定的使用者æƒé™" msgid "Modify global scrips" msgstr "更改全域手ç»" -#: html/Admin/Global/UserRights.html:24 html/Admin/Global/UserRights.html:27 html/Admin/Global/index.html:59 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "更改全域设定的使用者æƒé™" -#: html/Admin/Global/UserRights.html:32 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "更改全域设定的使用者æƒé™ã€‚" -#: lib/RT/Group_Overlay.pm:145 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "更改群组数æ®åŠåˆ 除群组" -#: html/Admin/Groups/GroupRights.html:24 html/Admin/Groups/GroupRights.html:28 html/Admin/Groups/GroupRights.html:34 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "æ›´æ”¹è‡ªè®¢å—æ®µ %1 的群组æƒé™" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" -msgstr "更改 %1 的群组æƒé™" +msgstr "更改群组 %1 的群组æƒé™" -#: html/Admin/Queues/GroupRights.html:24 html/Admin/Queues/GroupRights.html:28 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "æ›´æ”¹è¡¨å• %1 的群组æƒé™" -#: lib/RT/Group_Overlay.pm:147 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "更改æ¤ç¾¤ç»„çš„æˆå‘˜åå•" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "更改个人的å¸å·ä¿¡æ¯" -#: html/Admin/Queues/People.html:24 html/Admin/Queues/People.html:28 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "æ›´æ”¹é“¾æŽ¥åˆ°è¡¨å• %1 的人员" -#: html/Ticket/ModifyPeople.html:24 html/Ticket/ModifyPeople.html:28 html/Ticket/ModifyPeople.html:34 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "æ›´æ”¹ç”³è¯·å• #%1 链接到的人员" -#: html/Admin/Queues/Scrips.html:45 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "æ›´æ”¹è¡¨å• %1 的手ç»" -#: html/Admin/Global/Scrips.html:43 html/Admin/Global/index.html:41 +#: 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 "更改适用于所有表å•的手ç»" -#: html/Admin/Global/Template.html:24 html/Admin/Global/Template.html:29 html/Admin/Global/Template.html:80 html/Admin/Queues/Template.html:77 +#: 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) msgid "Modify template %1" msgstr "æ›´æ”¹æ¨¡æ¿ %1" -#: html/Admin/Global/Templates.html:43 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "更改适用于所有表å•的模æ¿" -#: html/Admin/Groups/Modify.html:86 html/User/Groups/Modify.html:85 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "更改群组 %1" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "更改表å•视察员" -#: html/Admin/Users/Modify.html:235 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "更改使用者 %1" -#: html/Ticket/ModifyAll.html:36 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "æ›´æ”¹ç”³è¯·å• # %1" -#: html/Ticket/Modify.html:24 html/Ticket/Modify.html:27 html/Ticket/Modify.html:33 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "æ›´æ”¹ç”³è¯·å• # %1" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "更改申请å•" -#: html/Admin/Groups/UserRights.html:24 html/Admin/Groups/UserRights.html:28 html/Admin/Groups/UserRights.html:34 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "æ›´æ”¹è‡ªè®¢å—æ®µ %1 的使用者æƒé™" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "更改群组 %1 的使用者æƒé™" -#: html/Admin/Queues/UserRights.html:24 html/Admin/Queues/UserRights.html:28 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "æ›´æ”¹è¡¨å• %1 的使用者æƒé™" @@ -3425,41 +4232,43 @@ msgstr "æ›´æ”¹è¡¨å• %1 的使用者æƒé™" msgid "Modify watchers for queue '%1'" msgstr "更改 '%1' 的视察员" -#: html/Admin/Global/Workflow.html:25 html/Admin/Global/Workflow.html:30 html/Admin/Global/Workflow.html:81 html/Admin/Queues/Workflow.html:77 -#. (loc($WorkflowObj->Name())) -#. ($WorkflowObj->id) +#: NOT FOUND IN SOURCE msgid "Modify workflow %1" msgstr "更改æµç¨‹ %1" -#: html/Admin/Global/Workflows.html:44 +#: NOT FOUND IN SOURCE msgid "Modify workflows which apply to all queues" msgstr "更改适用于所有表å•çš„æµç¨‹" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "更改æƒé™æ¸…å•" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "更改自己是å¦å±žäºŽæŸç¾¤ç»„" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "更改表å•视察员" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "更改手ç»" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "更改个人å¸å·" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "更改模æ¿" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "更改申请å•" @@ -3467,11 +4276,15 @@ msgstr "更改申请å•" msgid "Mon" msgstr "星期一" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "星期一" -#: html/Ticket/Elements/ShowRequestor:41 +#: NOT FOUND IN SOURCE +msgid "More" +msgstr "更多" + +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "关于 %1 的进一æ¥ä¿¡æ¯" @@ -3480,56 +4293,64 @@ msgstr "关于 %1 的进一æ¥ä¿¡æ¯" msgid "Morning Shift" msgstr "æ—©ç" -#: html/Edit/Elements/ListButtons:16 +#: NOT FOUND IN SOURCE +msgid "Move" +msgstr "移动" + +#: NOT FOUND IN SOURCE msgid "Move All" msgstr "全移" -#: html/Admin/Elements/EditCustomFields:60 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "下移" -#: html/Admin/Elements/EditCustomFields:52 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "上移" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "多é‡" -#: lib/RT/User_Overlay.pm:238 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "必须指定 'Name' 的属性" -#: html/SelfService/Elements/MyRequests:48 +#: html/SelfService/Elements/MyRequests:70 #. ($friendly_status) msgid "My %1 tickets" msgstr "我的 %1 申请å•" -#: html/Work/Elements/Tab:35 +#: NOT FOUND IN SOURCE msgid "My Approvals" msgstr "表å•ç¾æ ¸" -#: html/Work/Elements/Tab:33 +#: NOT FOUND IN SOURCE msgid "My Requests" msgstr "表å•申请追踪" -#: html/Work/Elements/Tab:37 +#: NOT FOUND IN SOURCE msgid "My Tickets" msgstr "表å•处ç†" -#: html/Approvals/index.html:24 html/Approvals/index.html:25 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "表å•ç¾æ ¸" -#: html/Admin/Elements/AddCustomFieldValue:31 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/ModifyTemplate:27 html/Admin/Elements/ModifyTemplateAsWorkflow:185 html/Admin/Elements/ModifyUser:29 html/Admin/Groups/Modify.html:43 html/Edit/Users/Add.html:22 html/Edit/Users/Search.html:31 html/Elements/SelectGroups:25 html/Elements/SelectUsers:27 html/User/Groups/Modify.html:43 html/Work/Tickets/Cc:18 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "我已储å˜çš„æŸ¥è¯¢" + +#: 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 msgid "Name" msgstr "åç§°" -#: lib/RT/User_Overlay.pm:245 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "å¸å·å·²æœ‰äººä½¿ç”¨" -#: html/Edit/Users/Info:27 +#: NOT FOUND IN SOURCE msgid "Nationality" msgstr "国ç±" @@ -3537,51 +4358,59 @@ msgstr "国ç±" msgid "Need approval from system administrator" msgstr "需先由系统管ç†å‘˜è¿›è¡Œæ‰¹å‡†" -#: html/Ticket/Elements/ShowDates:51 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "从未更动" -#: html/Elements/Quicksearch:29 html/Work/Elements/Quicksearch:15 html/Work/Tickets/Create.html:52 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "新建立" -#: html/Admin/Elements/ModifyUser:31 html/Admin/Users/Modify.html:92 html/User/Prefs.html:64 html/Work/Preferences/Info:44 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "新增关系" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "æ–°çš„å£ä»¤" -#: etc/initialdata:341 etc/upgrade/2.1.71:16 html/Edit/Elements/CreateApprovalsQueue:21 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "æ–°çš„å¾…ç¾æ ¸äº‹é¡¹" -#: html/Ticket/Elements/EditLinks:110 -msgid "New Relationships" -msgstr "新增关系" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "新增查询" -#: html/Work/Elements/Tab:31 +#: NOT FOUND IN SOURCE msgid "New Request" msgstr "表å•申请" -#: html/Ticket/Elements/Tabs:35 +#: NOT FOUND IN SOURCE msgid "New Search" msgstr "新增查询" -#: html/Admin/Global/CustomField.html:40 html/Admin/Global/CustomFields.html:38 html/Admin/Queues/CustomField.html:51 html/Admin/Queues/CustomFields.html:39 +#: NOT FOUND IN SOURCE +msgid "New Watchers" +msgstr "新增视察员" + +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "æ–°å¢žè‡ªè®¢å—æ®µ" -#: html/Admin/Elements/GroupTabs:53 html/User/Elements/GroupTabs:51 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "新增群组" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "æ–°çš„å£ä»¤" -#: lib/RT/User_Overlay.pm:706 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "é€å‡ºæ–°å£ä»¤é€šçŸ¥" -#: html/Admin/Elements/QueueTabs:69 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "新增表å•" @@ -3589,63 +4418,67 @@ msgstr "新增表å•" msgid "New request" msgstr "æå‡ºç”³è¯·å•" -#: html/Admin/Elements/SelectRights:41 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "新增æƒé™" -#: html/Admin/Global/Scrip.html:39 html/Admin/Global/Scrips.html:38 html/Admin/Queues/Scrip.html:42 html/Admin/Queues/Scrips.html:54 +#: 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 "新增手ç»" -#: html/Work/Search/index.html:62 +#: NOT FOUND IN SOURCE msgid "New search" msgstr "釿–°æŸ¥è¯¢" -#: html/Admin/Global/Template.html:59 html/Admin/Global/Templates.html:38 html/Admin/Queues/Template.html:57 html/Admin/Queues/Templates.html:49 +#: 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 "新增模æ¿" -#: html/SelfService/Elements/Tabs:47 +#: html/SelfService/Elements/Tabs:69 msgid "New ticket" msgstr "æå‡ºç”³è¯·å•" -#: lib/RT/Ticket_Overlay.pm:2800 +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "没有新申请å•" -#: html/Admin/Elements/UserTabs:51 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "新增使用者" -#: html/Admin/Elements/CreateUserCalled:25 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "新使用者åå—" -#: html/Admin/Queues/People.html:54 html/Ticket/Elements/EditPeople:28 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "新视察员" -#: html/Admin/Users/Prefs.html:41 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "更新窗å£è®¾å®š" -#: html/Admin/Global/Workflow.html:60 html/Admin/Global/Workflows.html:39 html/Admin/Queues/Workflow.html:57 html/Admin/Queues/Workflows.html:50 +#: NOT FOUND IN SOURCE msgid "New workflow" msgstr "新增æµç¨‹" -#: html/Ticket/Elements/Tabs:68 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "下一项" -#: html/Search/Listing.html:47 html/Work/Search/index.html:24 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "下一页" + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "下一页" -#: html/Admin/Elements/ModifyUser:49 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "昵称" -#: html/Admin/Users/Modify.html:62 html/User/Prefs.html:45 html/Work/Preferences/Info:23 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "昵称" @@ -3653,31 +4486,43 @@ msgstr "昵称" msgid "Night Shift" msgstr "å°å¤œç" -#: html/Edit/Global/Basic/Top:27 +#: NOT FOUND IN SOURCE msgid "No" msgstr "å¦" -#: html/Admin/Elements/EditCustomField:89 html/Admin/Elements/EditCustomFields:104 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "尚未定义类别" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "æ— è‡ªè®¢å—æ®µ" -#: html/Admin/Groups/GroupRights.html:83 html/Admin/Groups/UserRights.html:70 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "å°šæœªå®šä¹‰è‡ªè®¢å—æ®µ" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "尚未定义群组" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:67 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "没有查询" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" -msgstr "没有定义好的表å•" +msgstr "尚未定义表å•" -#: bin/rt-crontool:55 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "找ä¸åˆ° RT ä½¿ç”¨è€…ã€‚è¯·å‘ RT 管ç†å‘˜æŸ¥è¯¢ã€‚\\n" -#: html/Admin/Global/Template.html:78 html/Admin/Queues/Template.html:75 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "没有模æ¿" -#: bin/rt-commit-handler:763 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "未指定申请å•ã€‚é€€å‡ºç”³è¯·å• " @@ -3685,15 +4530,15 @@ msgstr "未指定申请å•ã€‚é€€å‡ºç”³è¯·å• " msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "未指定申请å•ã€‚é€€å‡ºç”³è¯·å•æ›´æ”¹\\n\\n" -#: html/Admin/Elements/ModifyWorkflow:237 html/Admin/Global/Workflow.html:79 html/Admin/Queues/Workflow.html:75 +#: NOT FOUND IN SOURCE msgid "No Workflow" msgstr "没有æµç¨‹" -#: html/Approvals/Elements/Approve:45 html/Work/Approvals/Elements/Approve:35 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "æš‚ä¸å¤„ç†" -#: lib/RT/Interface/Web.pm:898 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "æœªæŒ‡å®šå—æ®µ" @@ -3701,53 +4546,61 @@ msgstr "æœªæŒ‡å®šå—æ®µ" msgid "No command found\\n" msgstr "找ä¸åˆ°å‘½ä»¤" -#: html/Elements/ViewUser:35 html/Ticket/Elements/ShowRequestor:44 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "没有对这å使用者的评论" -#: lib/RT/Ticket_Overlay.pm:2211 lib/RT/Ticket_Overlay.pm:2279 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "没有附上申请å•回å¤" -#: lib/RT/Action/Generic.pm:149 lib/RT/Condition/Generic.pm:175 lib/RT/Search/ActiveTicketsInQueue.pm:55 lib/RT/Search/Generic.pm:112 +#: 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) msgid "No description for %1" msgstr "没有对 %1 çš„æè¿°" -#: lib/RT/Users_Overlay.pm:150 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "未指定群组" -#: lib/RT/User_Overlay.pm:924 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„群组。" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "没有附上讯æ¯" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "没有设定å£ä»¤" -#: lib/RT/Queue_Overlay.pm:260 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "没有新增表å•çš„æƒé™" -#: lib/RT/Ticket_Overlay.pm:342 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "æ²¡æœ‰åœ¨è¡¨å• '%1' 新增申请å•çš„æƒé™" -#: lib/RT/User_Overlay.pm:211 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "没有新增使用者的æƒé™" -#: html/SelfService/Display.html:117 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "没有显示该申请å•çš„æƒé™" -#: html/SelfService/Update.html:51 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "æ²¡æœ‰æ£€è§†ç”³è¯·å•æ›´æ–°çš„æƒé™" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1496 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "未指定å•ä½" -#: html/Admin/Queues/People.html:153 html/Admin/Queues/People.html:163 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "未指定å•ä½ã€‚" @@ -3755,27 +4608,35 @@ msgstr "未指定å•ä½ã€‚" msgid "No protocol specified in %1" msgstr "%1 内未指定åè®®" -#: html/Admin/Queues/index.html:34 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„表å•。" -#: html/Admin/Elements/SelectRights:80 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "找ä¸åˆ°æƒé™" -#: html/Admin/Elements/SelectRights:32 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "没有选定æƒé™" -#: html/Search/Bulk.html:160 html/Work/Search/Bulk.html:117 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "没有è¦è¿›è¡Œçš„æŸ¥è¯¢" +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "æ²¡æœ‰æ ‡é¢˜" + #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "未指定申请å•ç¼–å·" -#: lib/RT/Transaction_Overlay.pm:478 lib/RT/Transaction_Overlay.pm:516 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "未指定更动报告类别" @@ -3783,23 +4644,23 @@ msgstr "未指定更动报告类别" msgid "No user or email address specified" msgstr "未指定使用者或电å邮件地å€" -#: html/Admin/Users/index.html:35 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„使用者。" -#: bin/rt-commit-handler:643 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "找ä¸åˆ°åˆæ ¼çš„ RT 使用者。RT cvs 处ç†å™¨å·²åœç”¨ã€‚è¯·å‘ RT 管ç†è€…询问。\\n" -#: lib/RT/Interface/Web.pm:895 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "_Set 没有收到任何值!\\n" -#: html/Search/Elements/TicketRow:36 html/Work/Search/TicketRow:9 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "没有人" -#: lib/RT/Interface/Web.pm:900 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "å—æ®µä¸å˜åœ¨ï¼Ÿ" @@ -3815,15 +4676,15 @@ msgstr "未设定æˆä»Ž %2 å†…æ’·å– %1" msgid "Not logged in" msgstr "尚未登入" -#: html/Elements/Header:58 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "尚未登入" -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "尚未设定" -#: html/NoAuth/Reminder.html:26 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "尚未完工。" @@ -3831,7 +4692,7 @@ msgstr "尚未完工。" msgid "Not yet implemented...." msgstr "尚未完工..." -#: html/Approvals/Elements/Approve:48 html/Work/Tickets/Create.html:134 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "备注" @@ -3839,71 +4700,79 @@ msgstr "备注" msgid "Notes:" msgstr "备注:" -#: lib/RT/User_Overlay.pm:709 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "æ— æ³•é€å‡ºé€šçŸ¥" -#: etc/initialdata:111 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "通知管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:107 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "以评论方å¼é€šçŸ¥ç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:138 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "通知副本收件人" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "以评论方å¼é€šçŸ¥å‰¯æœ¬æ”¶ä»¶äºº" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "通知其它收件人" -#: etc/initialdata:134 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "以评论方å¼é€šçŸ¥å…¶å®ƒæ”¶ä»¶äºº" -#: etc/initialdata:103 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "通知承办人" -#: etc/initialdata:99 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "以评论方å¼é€šçŸ¥æ‰¿åŠžäºº" -#: etc/initialdata:385 +#: etc/initialdata:376 msgid "Notify Owner of their rejected ticket" msgstr "通知承办人申请å•已驳回" -#: etc/initialdata:374 +#: etc/initialdata:365 msgid "Notify Owner of their ticket has been approved by all approvers" msgstr "通知承办人申请å•已完æˆå…¨éƒ¨ç¾æ ¸" -#: etc/initialdata:359 +#: etc/initialdata:353 msgid "Notify Owner of their ticket has been approved by some approver" msgstr "通知承办人申请å•å·²å®ŒæˆæŸé¡¹ç¾æ ¸" -#: etc/initialdata:343 etc/upgrade/2.1.71:17 html/Edit/Elements/CreateApprovalsQueue:22 +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "æ•´ç†å¾…ç¾æ ¸äº‹é¡¹ï¼Œé€šçŸ¥æ‰¿åŠžäººåŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:95 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "通知申请人" -#: etc/initialdata:121 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "通知申请人åŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:116 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "以评论方å¼é€šçŸ¥ç”³è¯·äººåŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:130 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "通知申请人ã€å‰¯æœ¬åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:126 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "以评论方å¼é€šçŸ¥ç”³è¯·äººã€å‰¯æœ¬åŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: html/Work/Tickets/Cc:55 +#: NOT FOUND IN SOURCE msgid "Notify people:" msgstr "通知对象" @@ -3911,7 +4780,7 @@ msgstr "通知对象" msgid "Nov" msgstr "å一月" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "11" @@ -3919,23 +4788,45 @@ msgstr "11" msgid "November" msgstr "å一月" -#: html/Edit/Global/Basic/Top:74 +#: NOT FOUND IN SOURCE msgid "OIN104" -msgstr "é…åˆ 104eHRMS 接å£" +msgstr "104eHRMS 接å£" -#: html/Edit/Global/Workflow/Export.html:30 html/Work/Copyright.html:23 +#: NOT FOUND IN SOURCE msgid "OK" msgstr "确定" -#: lib/RT/Record.pm:156 +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "æ— æ³•æ–°å¢žå¯¹è±¡" -#: lib/RT/Record.pm:175 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "对象新增完毕" -#: html/Edit/Users/Info:36 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "è‡ªè®¢å—æ®µä¸é€‚用于类别为 %1 的对象" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "对象类别ä¸ç¬¦" + +#: NOT FOUND IN SOURCE msgid "Occupation Status" msgstr "在èŒçжæ€" @@ -3943,7 +4834,7 @@ msgstr "在èŒçжæ€" msgid "Oct" msgstr "åæœˆ" -#: lib/RT/Date.pm:420 +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "10" @@ -3951,77 +4842,97 @@ msgstr "10" msgid "October" msgstr "åæœˆ" -#: html/Edit/Users/Info:33 +#: NOT FOUND IN SOURCE msgid "Office Phone" msgstr "办公室电è¯" -#: html/Elements/SelectDateRelation:34 +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "离线" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "离线编辑" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "离线上载" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "ç‰äºŽ" -#: etc/initialdata:173 +#: NOT FOUND IN SOURCE +msgid "On Change" +msgstr "æ›´æ”¹ç”³è¯·å•æ—¶" + +#: etc/initialdata:163 msgid "On Comment" msgstr "评论时" -#: etc/initialdata:166 +#: etc/initialdata:156 msgid "On Correspond" msgstr "回å¤ç”³è¯·å•æ—¶" -#: etc/initialdata:155 +#: etc/initialdata:145 msgid "On Create" msgstr "æ–°å¢žç”³è¯·å•æ—¶" -#: etc/initialdata:187 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "æ‰¿åŠžäººæ”¹å˜æ—¶" -#: etc/initialdata:195 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "ä¼˜å…ˆé¡ºä½æ”¹å˜æ—¶" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "è¡¨å•æ”¹å˜æ—¶" -#: etc/initialdata:201 +#: etc/initialdata:198 msgid "On Resolve" msgstr "è§£å†³ç”³è¯·å•æ—¶" -#: etc/initialdata:179 +#: etc/initialdata:169 msgid "On Status Change" msgstr "çŽ°å†µæ”¹å˜æ—¶" -#: etc/initialdata:160 +#: etc/initialdata:150 msgid "On Transaction" msgstr "å‘生更动时" -#: html/Approvals/Elements/PendingMyApproval:49 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "仅显示 %1 ä¹‹åŽæ–°å¢žçš„申请å•" -#: html/Approvals/Elements/PendingMyApproval:47 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "仅显示 %1 之剿–°å¢žçš„申请å•" -#: html/Edit/Global/GroupRight/List:9 html/Edit/Global/GroupRight/Top:16 html/Edit/Groups/List:11 html/Edit/Groups/Top:18 html/Edit/Queues/Basic/Top:69 html/Edit/Queues/List:13 html/Elements/Quicksearch:30 html/Work/Delegates/Info:48 html/Work/Delegates/Info:51 html/Work/Delegates/List:12 html/Work/Elements/Quicksearch:16 html/Work/Overview/Info:41 html/Work/Tickets/Display.html:28 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "å¼€å¯" -#: html/Ticket/Elements/Tabs:135 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "å¼€å¯" -#: html/SelfService/Elements/Tabs:41 +#: html/SelfService/Elements/Tabs:63 msgid "Open tickets" msgstr "å¼€å¯çš„申请å•" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "在新窗å£å¼€å¯(列表的)申请å•" -#: html/Admin/Users/Prefs.html:39 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "在å¦ä¸€ä¸ªçª—å£å¼€å¯(列表的)申请å•" -#: etc/initialdata:150 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "æ”¶åˆ°å›žå¤æ—¶å³å¼€å¯ç”³è¯·å•" @@ -4033,19 +4944,23 @@ msgstr "已申请è¿è¡Œä¸è¡¨å•" msgid "Opinion" msgstr "æ„è§" -#: html/Edit/Global/CustomField/Info:35 +#: NOT FOUND IN SOURCE msgid "Option Description" msgstr "选项æè¿°" -#: html/Edit/Global/CustomField/Info:29 +#: NOT FOUND IN SOURCE msgid "Option Name" msgstr "选项åç§°" -#: html/Search/Elements/PickRestriction:100 html/Work/Search/PickRestriction:81 +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "æŽ’åºæ–¹å¼" + +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "顺åºä¸ŽæŽ’åºæ–¹å¼" -#: html/Admin/Elements/ModifyUser:45 html/Admin/Users/Modify.html:116 html/Edit/Global/Basic/Top:50 html/Elements/SelectUsers:28 html/User/Prefs.html:85 html/Work/Preferences/Info:74 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "组织åç§°" @@ -4053,16 +4968,28 @@ msgstr "组织åç§°" msgid "Organization:" msgstr "组织:" -#: html/Approvals/Elements/Approve:32 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "原申请å•:#%1" -#: html/Edit/Elements/PickUsers:109 html/Edit/Users/Add.html:106 html/Work/Tickets/Cc:80 +#: NOT FOUND IN SOURCE msgid "Other comma-delimited email addresses" msgstr "其它e-mailå¸å· (ä»…e-mail通知;多笔å¸å·è¯·ç”¨é€—å·','区隔)" -#: html/Admin/Elements/ModifyQueue:54 html/Admin/Queues/Modify.html:68 html/Edit/Queues/Basic/Top:41 +#: NOT FOUND IN SOURCE +msgid "Out of range" +msgstr "期é™å¤–" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "已纪录å‘é€çš„评论邮件" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "已纪录å‘é€çš„邮件" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "优先顺ä½éšæ—¶é—´å¢žåŠ è°ƒæ•´ä¸º" @@ -4070,28 +4997,27 @@ msgstr "优先顺ä½éšæ—¶é—´å¢žåŠ è°ƒæ•´ä¸º" msgid "Override current custom fields with fields from %1" msgstr "以 %1 表å•çš„è‡ªè®¢å—æ®µå–ä»£çŽ°æœ‰å—æ®µ" -#: html/Admin/Elements/CheckOverrideGlobalACL:25 +#: NOT FOUND IN SOURCE msgid "Override global rights" msgstr "å–代全域æƒé™" -#: html/Admin/Elements/CheckOverrideGlobalACL:34 -#. (loc_fuzzy($msg)) +#: NOT FOUND IN SOURCE msgid "OverrideGlobalACL status %1" msgstr "å–代全域æƒé™ %1" -#: html/Work/Elements/Tab:29 +#: NOT FOUND IN SOURCE msgid "Overview" msgstr "总览" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "承办申请å•" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "承办申请å•" -#: etc/initialdata:56 html/Admin/Elements/ModifyTemplateAsWorkflow:141 html/Edit/Global/Workflow/Owner.html:19 html/Edit/Queues/Basic/Top:47 html/Edit/Queues/Basic/Top:58 html/Elements/MyRequests:31 html/SelfService/Elements/MyRequests:29 html/Ticket/Create.html:47 html/Ticket/Elements/EditPeople:42 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/ShowPeople:26 html/Ticket/Update.html:62 html/Work/Elements/MyRequests:13 html/Work/Elements/Quicksearch:18 html/Work/Tickets/Elements/ShowBasics:21 html/Work/Tickets/Update.html:27 lib/RT/ACE_Overlay.pm:85 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "承办人" @@ -4099,40 +5025,49 @@ msgstr "承办人" msgid "Owner changed from %1 to %2" msgstr "承办人已从 %1 改为 %2" -#: lib/RT/Transaction_Overlay.pm:582 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "æ— æ³•è®¾å®šæ‰¿åŠžäººã€‚" + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "强制将承办人从 %1 改为 %2" -#: html/Search/Elements/PickRestriction:30 html/Work/Search/PickRestriction:10 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "承办人" -#: html/Work/Elements/List:27 html/Work/Queues/List:8 html/Work/Tickets/Create.html:54 html/Work/Tickets/Elements/ShowBasics:52 +#: NOT FOUND IN SOURCE msgid "Owner's Phone" msgstr "承办人电è¯" -#: html/Edit/Elements/Page:39 -msgid "Page" +#: NOT FOUND IN SOURCE +msgid "Page #" msgstr " " -#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:55 html/Work/Preferences/Info:35 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "第 %1/%2 页" + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "呼å«å™¨" -#: html/Admin/Elements/ModifyUser:73 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "呼å«å™¨å·ç " -#: html/Edit/Global/Workflow/Action:81 html/Edit/Global/Workflow/Condition:66 +#: NOT FOUND IN SOURCE msgid "Parameter" msgstr "呼å«å‚æ•°" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:225 +#: NOT FOUND IN SOURCE msgid "Parent" msgstr "上级" -#: html/Ticket/Create.html:181 html/Ticket/Elements/BulkLinks:38 html/Ticket/Elements/EditLinks:126 html/Ticket/Elements/EditLinks:57 html/Ticket/Elements/ShowLinks:46 html/Work/Search/BulkLinks:14 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "æ¯ç”³è¯·å•" @@ -4140,28 +5075,45 @@ msgstr "æ¯ç”³è¯·å•" msgid "Park Space" msgstr "åœè½¦ä½ç”³è¯·" -#: html/Elements/Login:52 html/User/Prefs.html:60 html/Work/Preferences/Info:41 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "å£ä»¤" -#: html/NoAuth/Reminder.html:24 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "å£ä»¤æç¤º" -#: lib/RT/User_Overlay.pm:228 lib/RT/User_Overlay.pm:927 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "å£ä»¤å¤ªçŸ" -#: html/Admin/Users/Modify.html:290 html/User/Prefs.html:171 html/Work/Preferences/Info:162 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "å£ä»¤ï¼š%1" -#: html/Admin/Users/Modify.html:292 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 msgid "Passwords do not match." msgstr "å£ä»¤ç¡®è®¤å¤±è´¥ã€‚" -#: html/User/Prefs.html:173 html/Work/Preferences/Info:164 +#: html/User/Prefs.html:234 msgid "Passwords do not match. Your password has not been changed" msgstr "å£ä»¤ç¡®è®¤å¤±è´¥ã€‚您的å£ä»¤å¹¶æœªæ”¹å˜ã€‚" @@ -4173,7 +5125,7 @@ msgstr "请选择表å•åç§°" msgid "Pending Approval" msgstr "ç‰å¾…ç¾æ ¸" -#: html/Ticket/Elements/ShowSummary:44 html/Ticket/Elements/Tabs:95 html/Ticket/ModifyAll.html:50 +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "人员" @@ -4181,15 +5133,19 @@ msgstr "人员" msgid "People with Queue Rights" msgstr "æ‹¥æœ‰è¡¨å•æƒé™äººå‘˜" -#: etc/initialdata:143 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "执行使用者自订的动作" -#: lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:236 lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:572 lib/RT/ACE_Overlay.pm:582 lib/RT/ACE_Overlay.pm:647 lib/RT/CurrentUser.pm:82 lib/RT/CurrentUser.pm:91 lib/RT/CustomField_Overlay.pm:100 lib/RT/CustomField_Overlay.pm:201 lib/RT/CustomField_Overlay.pm:233 lib/RT/CustomField_Overlay.pm:510 lib/RT/CustomField_Overlay.pm:90 lib/RT/Group_Overlay.pm:1094 lib/RT/Group_Overlay.pm:1098 lib/RT/Group_Overlay.pm:1107 lib/RT/Group_Overlay.pm:1158 lib/RT/Group_Overlay.pm:1162 lib/RT/Group_Overlay.pm:1168 lib/RT/Group_Overlay.pm:425 lib/RT/Group_Overlay.pm:517 lib/RT/Group_Overlay.pm:595 lib/RT/Group_Overlay.pm:603 lib/RT/Group_Overlay.pm:700 lib/RT/Group_Overlay.pm:704 lib/RT/Group_Overlay.pm:710 lib/RT/Group_Overlay.pm:903 lib/RT/Group_Overlay.pm:907 lib/RT/Group_Overlay.pm:920 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:125 lib/RT/Scrip_Overlay.pm:136 lib/RT/Scrip_Overlay.pm:196 lib/RT/Scrip_Overlay.pm:429 lib/RT/Template_Overlay.pm:283 lib/RT/Template_Overlay.pm:87 lib/RT/Template_Overlay.pm:93 lib/RT/Ticket_Overlay.pm:1349 lib/RT/Ticket_Overlay.pm:1359 lib/RT/Ticket_Overlay.pm:1373 lib/RT/Ticket_Overlay.pm:1526 lib/RT/Ticket_Overlay.pm:1535 lib/RT/Ticket_Overlay.pm:1548 lib/RT/Ticket_Overlay.pm:1897 lib/RT/Ticket_Overlay.pm:2035 lib/RT/Ticket_Overlay.pm:2199 lib/RT/Ticket_Overlay.pm:2266 lib/RT/Ticket_Overlay.pm:2625 lib/RT/Ticket_Overlay.pm:2697 lib/RT/Ticket_Overlay.pm:2791 lib/RT/Ticket_Overlay.pm:2806 lib/RT/Ticket_Overlay.pm:3005 lib/RT/Ticket_Overlay.pm:3015 lib/RT/Ticket_Overlay.pm:3020 lib/RT/Ticket_Overlay.pm:3242 lib/RT/Ticket_Overlay.pm:3440 lib/RT/Ticket_Overlay.pm:3602 lib/RT/Ticket_Overlay.pm:3654 lib/RT/Ticket_Overlay.pm:3829 lib/RT/Transaction_Overlay.pm:466 lib/RT/Transaction_Overlay.pm:473 lib/RT/Transaction_Overlay.pm:502 lib/RT/Transaction_Overlay.pm:509 lib/RT/User_Overlay.pm:1021 lib/RT/User_Overlay.pm:1414 lib/RT/User_Overlay.pm:629 lib/RT/User_Overlay.pm:664 lib/RT/User_Overlay.pm:920 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Perl 设定" + +#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm: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 msgid "Permission Denied" msgstr "æƒé™ä¸è¶³" -#: html/Edit/Rights/index.html:3 +#: NOT FOUND IN SOURCE msgid "Permission Settings" msgstr "æƒé™è®¾å®š" @@ -4201,39 +5157,59 @@ msgstr "拥有æƒé™è¡¨å•列表:" msgid "Personal" msgstr "代ç†äººç¾¤ç»„" -#: html/User/Elements/Tabs:34 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "代ç†äººç¾¤ç»„" #: NOT FOUND IN SOURCE +msgid "Personal Homepage" +msgstr "个人首页" + +#: NOT FOUND IN SOURCE msgid "Personal Todo" msgstr "ç§äººå¾…办事项" -#: html/User/Groups/index.html:29 html/User/Groups/index.html:39 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "代ç†äººç¾¤ç»„" -#: html/User/Elements/DelegateRights:36 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "代ç†äººç¾¤ç»„:" -#: html/Work/Preferences/Info:21 +#: NOT FOUND IN SOURCE msgid "PersonalHomepage" msgstr "个人首页" #: NOT FOUND IN SOURCE +msgid "Phase 1: Create/Rename Groups (%1)" +msgstr "ç¬¬ä¸€é˜¶æ®µï¼šç¾¤ç»„å»ºç«‹åŠæ”¹å (%1)" + +#: NOT FOUND IN SOURCE +msgid "Phase 2: Disable/Enable Groups (%1)" +msgstr "第二阶段:群组åœç”¨åŠå¯ç”¨ (%1)" + +#: NOT FOUND IN SOURCE +msgid "Phase 3: Create/Rename Users (%1)" +msgstr "ç¬¬ä¸‰é˜¶æ®µï¼šä½¿ç”¨è€…å»ºç«‹åŠæ”¹å (%1)" + +#: NOT FOUND IN SOURCE +msgid "Phase 4: Disable/Enable Users (%1)" +msgstr "第四阶段:使用者åœç”¨åŠå¯ç”¨ (%1)" + +#: NOT FOUND IN SOURCE msgid "Phone" msgstr "电è¯" -#: html/Work/Delegates/Info:90 html/Work/Overview/Info:72 +#: NOT FOUND IN SOURCE msgid "Phone number" msgstr "电è¯å·ç " -#: html/Admin/Users/Modify.html:155 html/User/Prefs.html:48 html/Work/Preferences/Info:27 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "电è¯å·ç " -#: html/Edit/Users/Add.html:3 html/Work/Delegates/Add.html:3 html/Work/Delegates/Info:34 html/Work/Tickets/ModifyPeople.html:2 +#: NOT FOUND IN SOURCE msgid "Pick" msgstr "挑选" @@ -4245,11 +5221,11 @@ msgstr "出å‘地点" msgid "Placeholder" msgstr "尚未完工" -#: html/Edit/Elements/PickUsers:31 html/Edit/Elements/PickUsers:44 html/Edit/Elements/SelectCustomFieldType:3 html/Work/Elements/SelectOwner:3 html/Work/Tickets/Elements/EditCustomField:104 html/Work/Tickets/Elements/EditCustomField:185 html/Work/Tickets/Elements/EditCustomField:75 html/Work/Tickets/Elements/EditCustomFieldEntries:66 html/Work/Tickets/Elements/EditCustomFieldEntries:73 +#: NOT FOUND IN SOURCE msgid "Please Select" msgstr "请选择" -#: html/Edit/Elements/104Buttons:30 +#: NOT FOUND IN SOURCE msgid "Please check items to be deleted first." msgstr "请先选ä¸è¦åˆ 除的对象" @@ -4262,6 +5238,10 @@ msgid "Please select a queue's workflow" msgstr "è¯·é€‰æ‹©è¡¨å•æµç¨‹" #: NOT FOUND IN SOURCE +msgid "Please select one of the category types above." +msgstr "请从上é¢é€‰æ‹©ä¸€é¡¹åˆ†ç±»ã€‚" + +#: NOT FOUND IN SOURCE msgid "Please select role" msgstr "请选择角色" @@ -4273,19 +5253,19 @@ msgstr "ç»è¥è§„ç« " msgid "Position" msgstr "èŒåŠ¡" -#: html/Edit/Users/Info:43 +#: NOT FOUND IN SOURCE msgid "Position Level" msgstr "èŒç‰" -#: html/Edit/Elements/PickUsers:41 html/Edit/Global/UserRight/List:13 html/Edit/Global/UserRight/Top:23 html/Edit/Users/Add.html:41 html/Edit/Users/List:11 html/Edit/Users/Top:22 html/Work/Delegates/Add.html:26 html/Work/Delegates/Info:84 html/Work/Overview/Info:66 +#: NOT FOUND IN SOURCE msgid "Position Name" msgstr "èŒåŠ¡åç§°" -#: html/Edit/Global/UserRight/List:14 html/Edit/Global/UserRight/Top:33 html/Edit/Users/List:12 html/Edit/Users/Top:32 +#: NOT FOUND IN SOURCE msgid "Position Number" msgstr "èŒåС代ç " -#: html/Edit/Users/Info:44 +#: NOT FOUND IN SOURCE msgid "Position Rank" msgstr "èŒçº§" @@ -4293,7 +5273,7 @@ msgstr "èŒçº§" msgid "Pref" msgstr "å好" -#: html/Edit/Elements/104Top:25 html/Elements/Header:51 html/Elements/Tabs:52 html/SelfService/Elements/Tabs:50 html/SelfService/Prefs.html:24 html/User/Prefs.html:24 html/User/Prefs.html:27 html/Work/Elements/Tab:41 +#: 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 msgid "Preferences" msgstr "å好" @@ -4301,15 +5281,19 @@ msgstr "å好" msgid "Prefs" msgstr "个人信æ¯" -#: lib/RT/Action/Generic.pm:159 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "预备动作完毕" -#: html/Ticket/Elements/Tabs:60 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "上一项" -#: html/Search/Listing.html:43 html/Work/Search/index.html:20 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "上一页" + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "å‰ä¸€é¡µ" @@ -4317,57 +5301,85 @@ msgstr "å‰ä¸€é¡µ" msgid "Pri" msgstr "优先顺ä½" -#: lib/RT/ACE_Overlay.pm:132 lib/RT/ACE_Overlay.pm:207 lib/RT/ACE_Overlay.pm:551 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "找ä¸åˆ°å•ä½ %1。" -#: html/Search/Elements/PickRestriction:53 html/Ticket/Create.html:153 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:38 html/Work/Search/PickRestriction:34 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "优先顺ä½" -#: html/Admin/Elements/ModifyQueue:50 html/Admin/Queues/Modify.html:64 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "优先顺ä½èµ·å§‹å€¼" -#: etc/initialdata:43 +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "éšç§è®¾å®šï¼š" + +#: etc/initialdata:25 msgid "Privileged" msgstr "内部æˆå‘˜" -#: html/Admin/Users/Modify.html:270 html/User/Prefs.html:162 html/Work/Preferences/Info:153 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "内部æˆå‘˜çжæ€ï¼š%1" -#: html/Admin/Users/index.html:61 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "内部æˆå‘˜" -#: html/Work/Elements/SelectSearch:16 +#: NOT FOUND IN SOURCE msgid "Process Status" msgstr "处ç†çжæ€" -#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 etc/initialdata:77 +#: NOT FOUND IN SOURCE +msgid "Project" +msgstr "项目" + +#: NOT FOUND IN SOURCE +msgid "Project Name" +msgstr "项目åç§°" + +#: NOT FOUND IN SOURCE +msgid "Projects" +msgstr "项目" + +#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 msgid "Pseudogroup for internal use" msgstr "内部用的虚拟群组" -#: html/Work/Preferences/Info:64 +#: NOT FOUND IN SOURCE +msgid "Public Description" +msgstr "公开说明" + +#: NOT FOUND IN SOURCE msgid "Public Info" msgstr "公开信æ¯" -#: html/Work/Elements/104Header:88 +#: NOT FOUND IN SOURCE msgid "Public Service" msgstr "公共事务区" -#: html/Edit/Users/Search.html:4 +#: NOT FOUND IN SOURCE +msgid "Purging stale data: %1" +msgstr "移除过期数æ®: %1" + +#: html/Search/Elements/EditQuery:47 msgid "Query" msgstr "查询" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:166 html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Elements/Quicksearch:28 html/Search/Elements/PickRestriction:45 html/SelfService/Create.html:32 html/Ticket/Create.html:37 html/Ticket/Elements/EditBasics:63 html/Ticket/Elements/ShowBasics:42 html/User/Elements/DelegateRights:79 html/Work/Elements/MyApprovals:10 html/Work/Elements/MyRequests:11 html/Work/Elements/MyTickets:11 html/Work/Elements/Quicksearch:14 html/Work/Search/PickRestriction:26 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "建立查询" + +#: 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 msgid "Queue" msgstr "表å•" -#: html/Admin/Queues/CustomField.html:41 html/Admin/Queues/Scrip.html:49 html/Admin/Queues/Scrips.html:47 html/Admin/Queues/Templates.html:43 html/Admin/Queues/Workflows.html:44 +#: 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) msgid "Queue %1 not found" @@ -4381,19 +5393,19 @@ msgstr "找ä¸åˆ°è¡¨å• '%1'\\n" msgid "Queue Keyword Selections" msgstr "表å•关键è¯é€‰å–" -#: html/Admin/Elements/ModifyQueue:30 html/Admin/Queues/Modify.html:42 html/Edit/Queues/Basic/Top:12 html/Edit/Queues/Basic/index.html:36 html/Edit/Queues/Global:21 html/Edit/Queues/List:6 html/Edit/Users/Queue:10 html/Work/Delegates/List:6 html/Work/Elements/List:11 html/Work/Queues/List:5 html/Work/Tickets/Create.html:20 html/Work/Tickets/Elements/ShowBasics:6 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "表å•åç§°" -#: html/Edit/Queues/List:8 html/Work/Elements/List:25 html/Work/Queues/List:7 html/Work/Tickets/Create.html:33 html/Work/Tickets/Elements/ShowBasics:19 +#: NOT FOUND IN SOURCE msgid "Queue Owner" msgstr "业务承办人" -#: html/Edit/Queues/Basic/Top:35 +#: NOT FOUND IN SOURCE msgid "Queue Priority" msgstr "优先ç‰çº§" -#: html/Edit/Global/GroupRight/Top:24 html/Edit/Global/UserRight/Top:43 html/Edit/Users/Queue:11 html/Edit/Users/index.html:124 +#: NOT FOUND IN SOURCE msgid "Queue Rights" msgstr "è¡¨å•æƒé™" @@ -4401,58 +5413,65 @@ msgstr "è¡¨å•æƒé™" msgid "Queue Scrips" msgstr "è¡¨å•æ‰‹ç»" -#: html/Edit/Elements/Tab:36 +#: NOT FOUND IN SOURCE msgid "Queue Setup" msgstr "表å•设定" -#: lib/RT/Queue_Overlay.pm:264 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "表å•å·²å˜åœ¨" -#: lib/RT/Queue_Overlay.pm:273 lib/RT/Queue_Overlay.pm:279 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "æ— æ³•æ–°å¢žè¡¨å•" -#: html/Edit/Queues/autohandler:8 html/Ticket/Create.html:204 html/Work/Tickets/Create.html:176 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "æ— æ³•åŠ è½½è¡¨å•" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:283 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "è¡¨å•æ–°å¢žå®Œæ¯•" -#: html/Admin/Elements/ModifyWorkflow:32 +#: NOT FOUND IN SOURCE msgid "Queue is not specified." msgstr "未指定表å•。" -#: html/SelfService/Display.html:70 lib/RT/CustomField_Overlay.pm:97 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "找ä¸åˆ°è¡¨å•" -#: html/Admin/Elements/Tabs:37 html/Admin/index.html:34 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "表å•" -#: html/Work/Elements/Quicksearch:10 +#: NOT FOUND IN SOURCE msgid "Quick Search" msgstr "表å•现况" -#: html/Elements/Quicksearch:24 +#: html/Elements/Quicksearch:46 msgid "Quick search" msgstr "表å•一览" -#: html/Elements/Login:44 +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "快速建立申请å•" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "%2:RT %1 版" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "RT %1 版,<a href=\"http://bestpractical.com\">Best Practical Solutions å…¬å¸</a>出å“。" @@ -4464,7 +5483,7 @@ msgstr "RT %1ã€‚ç‰ˆæƒæ‰€æœ‰ 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\ msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1ã€‚ç‰ˆæƒæ‰€æœ‰ 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: html/Admin/index.html:24 html/Admin/index.html:25 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "RT 管ç†é¡µé¢" @@ -4484,7 +5503,7 @@ msgstr "RT 设定错误" msgid "RT Critical error. Message not recorded!" msgstr "RT è‡´å‘½é”™è¯¯ã€‚è®¯æ¯æœªè¢«çºªå½•。" -#: html/Elements/Error:41 html/SelfService/Error.html:40 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "RT 错误" @@ -4500,13 +5519,17 @@ msgstr "RT 收到从自己寄出的邮件 (%1)。" msgid "RT Self Service / Closed Tickets" msgstr "RT 自助æœåŠ¡/已解决的申请å•" -#: html/index.html:24 html/index.html:27 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "RT çš„å˜æ•°" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT 一览" #: NOT FOUND IN SOURCE msgid "RT couldn't authenticate you" -msgstr "RT æ— æ³•è®¤è¯ä½ " +msgstr "RT æ— æ³•è®¤è¯æ‚¨çš„身份" #: NOT FOUND IN SOURCE msgid "RT couldn't find requestor via its external database lookup" @@ -4516,11 +5539,15 @@ msgstr "RT æ— æ³•ä»Žå¤–éƒ¨æ•°æ®åº“查询找到申请人信æ¯" msgid "RT couldn't find the queue: %1" msgstr "RT 找ä¸åˆ°è¡¨å•:%1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "RT æ— æ³•ç¡®è®¤è¿™ä¸ª PGP ç¾ç« 。\\n" -#: html/Edit/Elements/104Header:7 html/Edit/Elements/104Top:20 html/Elements/PageLayout:85 html/Work/Elements/104Header:7 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "%1 专用æµç¨‹ç³»ç»Ÿ" @@ -4533,8 +5560,7 @@ msgstr "%1 专用 RT 系统:%2" msgid "RT has proccessed your commands" msgstr "RT 已执行您的命令" -#: html/Elements/Login:94 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RT ç‰ˆæƒæ‰€æœ‰ 1996-%1 Jesse Vincent <jesse@bestpractical.com>。<br>æœ¬è½¯ä½“ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授æƒç¬¬äºŒç‰ˆ</a> 散布。" @@ -4562,27 +5588,51 @@ msgstr "系统è¿è¡Œè§’色" msgid "RT::Ticket-Role" msgstr "申请å•è¿è¡Œè§’色" -#: html/Work/Tickets/Elements/ShowTransaction:11 +#: NOT FOUND IN SOURCE msgid "RT_System" msgstr "系统讯æ¯" -#: html/Admin/Users/Modify.html:57 html/Admin/Users/Prefs.html:51 html/User/Prefs.html:43 html/Work/Preferences/Info:18 +#: NOT FOUND IN SOURCE +msgid "Read Only" +msgstr "åªè¯»" + +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "真实姓å" -#: html/Admin/Elements/ModifyUser:47 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "真实姓å" -#: html/Work/Approvals/Display.html:27 html/Work/Tickets/Update.html:85 +#: NOT FOUND IN SOURCE msgid "Really reject this ticket?" msgstr "您确定è¦é©³å›žè¿™å¼ 申请å•å—?" -#: html/Ticket/Create.html:184 html/Ticket/Elements/BulkLinks:50 html/Ticket/Elements/EditLinks:138 html/Ticket/Elements/EditLinks:93 html/Ticket/Elements/ShowLinks:70 html/Work/Search/BulkLinks:26 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "å·²åŠ å…¥ %1 为å‚考本申请å•" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "已移除 %1 为å‚考本申请å•" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "å·²åŠ å…¥å‚è€ƒç”³è¯·å• %1" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "已移除å‚è€ƒç”³è¯·å• %1" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "被å‚考" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:183 html/Ticket/Elements/BulkLinks:46 html/Ticket/Elements/EditLinks:134 html/Ticket/Elements/EditLinks:79 html/Ticket/Elements/ShowLinks:60 html/Work/Search/BulkLinks:22 +#: 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 msgid "Refers to" msgstr "å‚考" @@ -4594,76 +5644,80 @@ msgstr "å‚考" msgid "Refine" msgstr "在结果范围内查询" -#: html/Search/Elements/PickRestriction:26 html/Work/Search/PickRestriction:7 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "调整查询æ¡ä»¶" -#: html/Work/Overview/index.html:12 +#: NOT FOUND IN SOURCE msgid "Refresh" msgstr "æ›´æ–°" -#: html/Elements/Refresh:35 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "æ¯ %1 分钟更新页é¢" -#: html/Ticket/Create.html:173 html/Ticket/Elements/ShowSummary:61 html/Ticket/ModifyAll.html:56 -msgid "Relationships" -msgstr "关系" - -#: html/Edit/Elements/ListButtons:13 +#: NOT FOUND IN SOURCE msgid "Remove" msgstr "移除" -#: html/Search/Bulk.html:97 html/Work/Search/Bulk.html:77 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "移除管ç†å‘˜å‰¯æœ¬" -#: html/Search/Bulk.html:93 html/Work/Search/Bulk.html:71 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "移除副本" -#: html/Search/Bulk.html:89 html/Work/Search/Bulk.html:65 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "移除申请人" -#: html/Ticket/Elements/ShowTransaction:160 html/Ticket/Elements/Tabs:121 html/Work/Tickets/Display.html:31 html/Work/Tickets/Elements/ShowTransaction:106 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "回å¤" -#: lib/RT/Queue_Overlay.pm:84 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "回å¤åœ°å€" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "回å¤ç”³è¯·äºº" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "对申请å•进行回å¤" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "回å¤ç”³è¯·å•" -#: html/Edit/Users/Info:46 +#: NOT FOUND IN SOURCE msgid "Report to Duty" msgstr "上下ç刷å¡" -#: html/Edit/Users/Info:34 +#: NOT FOUND IN SOURCE msgid "Reported on" msgstr "åˆ°èŒæ—¥æœŸ" -#: etc/initialdata:62 html/Ticket/Update.html:39 html/Work/Elements/List:21 html/Work/Elements/MyApprovals:12 html/Work/Elements/SelectSearch:30 html/Work/Tickets/Elements/ShowBasics:54 lib/RT/ACE_Overlay.pm:86 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "申请人" -#: html/Edit/Global/Workflow/Owner.html:44 -msgid "Requestor Group's" -msgstr "申请人所属群组之" - -#: html/Search/Elements/PickRestriction:37 html/Work/Search/PickRestriction:17 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "申请人电å邮件信箱地å€" -#: html/Edit/Global/Workflow/Owner.html:28 +#: NOT FOUND IN SOURCE msgid "Requestor's" msgstr "申请人所属之第上" -#: html/Work/Elements/List:23 +#: NOT FOUND IN SOURCE +msgid "Requestor's Dept." +msgstr "申请人所属部门之" + +#: NOT FOUND IN SOURCE msgid "Requestor's Phone" msgstr "申请人电è¯" @@ -4675,19 +5729,24 @@ msgstr "申请人" msgid "RequestorAddresses" msgstr "申请人地å€" -#: html/SelfService/Create.html:40 html/Ticket/Create.html:55 html/Ticket/Elements/EditPeople:47 html/Ticket/Elements/ShowPeople:30 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "申请人" -#: html/Admin/Elements/ModifyQueue:60 html/Admin/Queues/Modify.html:74 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "申请å•å¤„ç†æœŸé™" -#: html/Elements/Submit:61 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "未指定必è¦çš„傿•°â€˜%1’" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "é‡è®¾" -#: html/Admin/Users/Modify.html:158 html/User/Prefs.html:49 html/Work/Preferences/Info:29 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "ä½å¤„" @@ -4695,94 +5754,98 @@ msgstr "ä½å¤„" msgid "Resolution" msgstr "解决状æ€" -#: html/Ticket/Elements/Tabs:131 html/Work/Tickets/Display.html:34 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "解决" -#: html/Ticket/Update.html:136 html/Work/Tickets/Update.html:120 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "è§£å†³ç”³è¯·å• #%1 (%2)" -#: etc/initialdata:331 html/Elements/SelectDateType:27 lib/RT/Ticket_Overlay.pm:1178 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "已解决" -#: html/Search/Bulk.html:132 html/Ticket/ModifyAll.html:72 html/Ticket/Update.html:71 html/Work/Search/Bulk.html:84 html/Work/Tickets/Update.html:38 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "回å¤ç”³è¯·äºº" -#: html/Edit/Users/Info:45 +#: NOT FOUND IN SOURCE msgid "Responsibility Type" msgstr "责任区分" -#: html/Elements/ListActions:25 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "结果" -#: html/Search/Elements/PickRestriction:104 html/Work/Search/PickRestriction:84 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "æ¯é¡µåˆ—å‡ºå‡ ç¬”ç»“æžœ" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:99 html/User/Prefs.html:71 html/Work/Preferences/Info:51 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "冿¬¡è¾“å…¥å£ä»¤" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "å¤åŽŸ" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "在 %4 (%5) 的范围内找ä¸åˆ° %2 %3 çš„ %1 æƒé™\\n" -#: lib/RT/ACE_Overlay.pm:612 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "æƒé™ä»£ç†å®Œæ¯•" -#: lib/RT/ACE_Overlay.pm:302 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "æƒé™è®¾å®šå®Œæ¯•" -#: lib/RT/ACE_Overlay.pm:160 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "æƒé™åŠ è½½å®Œæ¯•" -#: lib/RT/ACE_Overlay.pm:677 lib/RT/ACE_Overlay.pm:692 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "æ— æ³•æ’¤æ¶ˆæƒé™" -#: html/User/Delegation.html:63 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "找ä¸åˆ°æƒé™" -#: lib/RT/ACE_Overlay.pm:542 lib/RT/ACE_Overlay.pm:637 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "æƒé™å¹¶æœªåŠ è½½ã€‚" -#: lib/RT/ACE_Overlay.pm:688 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "æƒé™æ’¤æ¶ˆå®Œæ¯•" -#: html/Admin/Elements/UserTabs:40 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "æƒé™åŠä»£ç†äºº" -#: lib/RT/Interface/Web.pm:794 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "æ— æ³•å°†æƒé™èµ‹äºˆ %1" -#: lib/RT/Interface/Web.pm:827 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "æ— æ³•æ’¤æ¶ˆ %1 çš„æƒé™" -#: html/Edit/Groups/Member:55 html/Edit/Groups/Members/List:10 +#: NOT FOUND IN SOURCE msgid "Role Members" msgstr "角色æˆå‘˜" -#: html/Edit/Groups/Member:37 html/Edit/Groups/Members/Add.html:13 html/Edit/Groups/Members/List:7 html/Edit/Groups/Roles/List:4 html/Edit/Groups/Roles/Top:7 +#: NOT FOUND IN SOURCE msgid "Role Name" msgstr "角色åç§°" -#: html/Admin/Global/GroupRights.html:50 html/Admin/Queues/GroupRights.html:52 html/Edit/Global/Workflow/Owner.html:55 html/Edit/Global/Workflow/Owner.html:81 html/Edit/Groups/Member:24 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "角色" @@ -4790,19 +5853,23 @@ msgstr "角色" msgid "RootApproval" msgstr "交由系统管ç†å‘˜ç¾æ ¸" -#: html/Edit/Global/Workflow/Action:27 +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "æ¯é¡µç¬”æ•°" + +#: NOT FOUND IN SOURCE msgid "Run Approval" msgstr "ç¾æ ¸æ‰§è¡Œ" -#: html/Edit/Global/Basic/Top:72 +#: NOT FOUND IN SOURCE msgid "SMTPDebug" msgstr "SMTP 侦错纪录" -#: html/Edit/Global/Basic/Top:58 +#: NOT FOUND IN SOURCE msgid "SMTPFrom" msgstr "SMTP 寄件地å€" -#: html/Edit/Global/Basic/Top:56 +#: NOT FOUND IN SOURCE msgid "SMTPServer" msgstr "SMTP æœåС噍" @@ -4810,53 +5877,71 @@ msgstr "SMTP æœåС噍" msgid "Sat" msgstr "星期å…" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "星期å…" -#: html/Edit/Elements/104Buttons:72 html/Work/Preferences/index.html:35 +#: html/Search/Elements/EditSearches:70 msgid "Save" msgstr "储å˜" -#: html/Admin/Queues/People.html:104 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyLinks.html:38 html/Ticket/ModifyPeople.html:37 +#: 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 msgid "Save Changes" msgstr "å‚¨å˜æ›´æ”¹" -#: NOT FOUND IN SOURCE +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "储å˜å好" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "å‚¨å˜æ›´æ”¹" -#: html/Admin/Global/Scrip.html:48 html/Admin/Queues/Scrip.html:54 -#. ($QueueObj->id) +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "已储å˜çš„æŸ¥è¯¢" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "æ‰‹ç» #%1" -#: html/Edit/Global/Scrip/List:9 html/Edit/Global/Scrip/Top:41 +#: NOT FOUND IN SOURCE msgid "Scrip Action" msgstr "讯æ¯é€šçŸ¥åŠ¨ä½œ" -#: html/Edit/Global/Scrip/List:8 html/Edit/Global/Scrip/Top:15 +#: NOT FOUND IN SOURCE msgid "Scrip Condition" msgstr "讯æ¯é€šçŸ¥æ¡ä»¶" -#: lib/RT/Scrip_Overlay.pm:175 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "æ‰‹ç»æ–°å¢žå®Œæ¯•" -#: html/Edit/Global/Scrip/List:7 html/Edit/Global/Scrip/Top:9 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "手ç»å—段" + +#: NOT FOUND IN SOURCE msgid "Scrip Name" msgstr "讯æ¯åç§°" -#: html/Admin/Elements/EditScrips:83 +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "手ç»åˆ 除完毕" -#: html/Admin/Elements/QueueTabs:45 html/Admin/Elements/SystemTabs:32 html/Admin/Global/index.html:40 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "手ç»" -#: html/Edit/Global/autohandler:9 html/Edit/Queues/autohandler:20 +#: NOT FOUND IN SOURCE msgid "Scrips " msgstr "讯æ¯é€šçŸ¥" @@ -4864,11 +5949,11 @@ msgstr "讯æ¯é€šçŸ¥" msgid "Scrips for %1\\n" msgstr "%1 的手ç»\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "适用于所有表å•的手ç»" -#: html/Edit/Elements/104Buttons:75 html/Elements/SimpleSearch:26 html/Search/Elements/PickRestriction:125 html/Ticket/Elements/Tabs:158 html/Work/Elements/Tab:43 html/Work/Search/PickRestriction:102 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "查询" @@ -4876,79 +5961,148 @@ msgstr "查询" msgid "Search Criteria" msgstr "查询æ¡ä»¶" -#: html/Approvals/Elements/PendingMyApproval:38 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "ç¾æ ¸å•查询" -#: html/Edit/Global/Workflow/Owner.html:31 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Searches can't be associated with that kind of object" +msgstr "ä¸èƒ½å¯¹æ¤ç±»å¯¹è±¡è¿›è¡ŒæŸ¥è¯¢" + +#: NOT FOUND IN SOURCE msgid "Second-" msgstr "二" -#: html/Edit/Users/Info:41 +#: NOT FOUND IN SOURCE msgid "Second-level Users" msgstr "二阶主管员工" -#: bin/rt-crontool:187 +#: bin/rt-crontool:213 msgid "Security:" msgstr "安全性:" -#: lib/RT/Queue_Overlay.pm:66 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "æŸ¥é˜…è‡ªè®¢å—æ®µ" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "查阅é€å‡ºçš„电åé‚®ä»¶åŠæ”¶ä»¶äºº" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "查阅申请å•内的ç§äººè¯„论" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "æŸ¥é˜…ç”³è¯·å•æ€»è§ˆ" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "æŸ¥é˜…è‡ªè®¢å—æ®µ" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "查阅表å•" -#: html/Edit/Elements/ListButtons:10 +#: NOT FOUND IN SOURCE +msgid "Select" +msgstr "选择" + +#: NOT FOUND IN SOURCE msgid "Select All" msgstr "全选" -#: html/Admin/Groups/index.html:39 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "é€‰æ‹©è‡ªè®¢å—æ®µ" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "选择群组" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "选择表å•" -#: html/Work/Queues/Select.html:8 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Select a queue to link to" msgstr "请选择欲连结表å•" -#: html/Admin/Users/index.html:24 html/Admin/Users/index.html:27 +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "选择使用者" -#: html/Admin/Global/CustomField.html:37 html/Admin/Global/CustomFields.html:35 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "é€‰æ‹©è‡ªè®¢å—æ®µ" -#: html/Admin/Elements/GroupTabs:51 html/User/Elements/GroupTabs:49 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "选择群组" -#: lib/RT/CustomField_Overlay.pm:421 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "选择多é‡é¡¹ç›®" -#: lib/RT/CustomField_Overlay.pm:418 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "选择å•一项目" -#: html/Admin/Elements/QueueTabs:66 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "选择表å•" -#: html/Admin/Global/Scrip.html:36 html/Admin/Global/Scrips.html:35 html/Admin/Queues/Scrip.html:39 html/Admin/Queues/Scrips.html:51 +#: 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 "选择手ç»" -#: html/Admin/Global/Template.html:56 html/Admin/Global/Templates.html:35 html/Admin/Queues/Template.html:54 html/Admin/Queues/Templates.html:46 +#: 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 "选择模æ¿" -#: html/Admin/Elements/UserTabs:48 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "选择最多 %1 个值" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "选择使用者" -#: html/Admin/Global/Workflow.html:57 html/Admin/Global/Workflows.html:36 html/Admin/Queues/Workflow.html:54 html/Admin/Queues/Workflows.html:47 +#: NOT FOUND IN SOURCE msgid "Select workflow" msgstr "选择æµç¨‹" @@ -4956,15 +6110,23 @@ msgstr "选择æµç¨‹" msgid "SelectExternal" msgstr "系统选项" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" msgstr "多é‡é€‰é¡¹" -#: lib/RT/CustomField_Overlay.pm:34 +#: NOT FOUND IN SOURCE msgid "SelectSingle" msgstr "å•一选项" -#: html/Edit/Elements/PickUsers:85 html/Edit/Users/Add.html:78 +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "已选å–çš„è‡ªè®¢å—æ®µ" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "已选å–的对象" + +#: NOT FOUND IN SOURCE msgid "Selected users:" msgstr "新增对象:" @@ -4972,39 +6134,47 @@ msgstr "新增对象:" msgid "Self Service" msgstr "自助æœåŠ¡" -#: etc/initialdata:131 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "寄信给所有视察员" -#: etc/initialdata:127 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "以评论方å¼å¯„信给所有视察员" -#: etc/initialdata:122 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "寄信给申请人åŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:117 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "以评论方å¼å¯„信给申请人åŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:96 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "寄信给申请人" -#: etc/initialdata:135 etc/initialdata:139 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "寄信给特定的副本åŠå¯†ä»¶å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:112 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "寄信给副本收件人" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "以评论方å¼å¯„信给副本收件人" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "寄信给管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:108 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "以评论寄信给管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:100 etc/initialdata:104 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "寄信给申请人" @@ -5012,7 +6182,7 @@ msgstr "寄信给申请人" msgid "Sep" msgstr "乿œˆ" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "09" @@ -5020,75 +6190,103 @@ msgstr "09" msgid "September" msgstr "乿œˆ" -#: html/Edit/Users/Info:39 +#: NOT FOUND IN SOURCE +msgid "Setting %1's 'Disabled' property to %2" +msgstr "%1 的‘åœç”¨â€™å±žæ€§å·²è®¾ä¸º %2" + +#: NOT FOUND IN SOURCE msgid "Shift Type" msgstr "ç别属性" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "显示" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "æ˜¾ç¤ºå¾…ç¾æ ¸ç”³è¯·å•" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "æ˜¾ç¤ºå—æ®µ" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "显示结果" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "æ˜¾ç¤ºå·²æ‰¹å‡†çš„ç¾æ ¸å•" -#: html/Ticket/Create.html:143 html/Ticket/Create.html:33 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "显示基本信æ¯" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "æ˜¾ç¤ºå·²é©³å›žçš„ç¾æ ¸å•" -#: html/Ticket/Create.html:143 html/Ticket/Create.html:33 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "显示细节" -#: html/Approvals/Elements/PendingMyApproval:42 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "显示待处ç†çš„ç¾æ ¸å•" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "æ˜¾ç¤ºå°šå¾…ä»–äººæ‰¹å‡†çš„ç¾æ ¸å•" -#: lib/RT/Queue_Overlay.pm:80 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" msgstr "显示申请å•内的ç§äººè¯„论" -#: lib/RT/Queue_Overlay.pm:78 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" msgstr "æ˜¾ç¤ºç”³è¯·å•æ‘˜è¦" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "显示æƒé™æ¸…å•" -#: lib/RT/Queue_Overlay.pm:77 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "显示寄é€é‚®ä»¶" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "显示已储å˜çš„æŸ¥è¯¢" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "显示手ç»" -#: lib/RT/Queue_Overlay.pm:74 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "显示模æ¿" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "显示申请å•" -#: lib/RT/Queue_Overlay.pm:80 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "显示申请å•的评论" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "登记æˆä¸ºç”³è¯·äººæˆ–副本收件人" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "登记æˆä¸ºç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: html/Admin/Elements/ModifyUser:38 html/Admin/Users/Modify.html:190 html/Admin/Users/Prefs.html:31 html/User/Prefs.html:111 html/Work/Preferences/Info:106 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "ç¾åæ¡£" @@ -5096,15 +6294,23 @@ msgstr "ç¾åæ¡£" msgid "Signed in as %1" msgstr "使用者:%1" -#: html/Admin/Elements/SelectSingleOrMultiple:25 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "å•一" -#: html/Elements/Header:50 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "略过选å•" -#: html/Admin/Elements/AddCustomFieldValue:27 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 msgid "Sort" msgstr "顺åº" @@ -5112,7 +6318,7 @@ msgstr "顺åº" msgid "Sort key" msgstr "æŽ’åºæ–¹å¼" -#: html/Search/Elements/PickRestriction:108 html/Work/Search/PickRestriction:89 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "ç»“æžœæŽ’åºæ–¹å¼" @@ -5120,19 +6326,19 @@ msgstr "ç»“æžœæŽ’åºæ–¹å¼" msgid "SortOrder" msgstr "排åºé¡ºåº" -#: html/Work/Elements/List:8 html/Work/Elements/MyApprovals:11 +#: html/Admin/Elements/EditScrip:87 msgid "Stage" msgstr "å…³å¡" -#: html/Edit/Global/Workflow/Top:8 +#: NOT FOUND IN SOURCE msgid "Stage Action" msgstr "å…³å¡è¿è¡ŒåŠ¨ä½œ" -#: html/Edit/Global/Workflow/Top:5 +#: NOT FOUND IN SOURCE msgid "Stage Condition" msgstr "å…³å¡è¿è¡Œæ¡ä»¶" -#: html/Work/Elements/Quicksearch:17 +#: NOT FOUND IN SOURCE msgid "Stalled" msgstr "延宕" @@ -5140,7 +6346,7 @@ msgstr "延宕" msgid "Start page" msgstr "首页" -#: html/Elements/SelectDateType:26 html/Ticket/Elements/EditDates:31 html/Ticket/Elements/ShowDates:34 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "实际起始日" @@ -5148,7 +6354,7 @@ msgstr "实际起始日" msgid "Started date '%1' could not be parsed" msgstr "æ— æ³•è§£è¯»èµ·å§‹æ—¥æœŸ '%1" -#: html/Elements/SelectDateType:30 html/Ticket/Create.html:165 html/Ticket/Elements/EditDates:26 html/Ticket/Elements/ShowDates:30 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "应起始日" @@ -5160,20 +6366,19 @@ msgstr "应起始日" msgid "Starts date '%1' could not be parsed" msgstr "æ— æ³•è§£è¯»èµ·å§‹æ—¥æœŸ '%1" -#: html/Admin/Elements/ModifyUser:81 html/Admin/Users/Modify.html:137 html/User/Prefs.html:93 html/Work/Preferences/Info:82 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "å·ž" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Search/Elements/PickRestriction:73 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:30 html/Ticket/Create.html:41 html/Ticket/Elements/EditBasics:37 html/Ticket/Elements/ShowBasics:30 html/Ticket/Update.html:59 html/Work/Elements/List:15 html/Work/Elements/MyRequests:12 html/Work/Elements/MyTickets:12 html/Work/Search/PickRestriction:54 html/Work/Tickets/Update.html:22 lib/RT/Ticket_Overlay.pm:1172 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "现况" -#: etc/initialdata:317 +#: etc/initialdata:309 msgid "Status Change" msgstr "çŽ°å†µæ”¹å˜æ—¶" -#: lib/RT/Transaction_Overlay.pm:528 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "现况从 %1 改为 %2" @@ -5181,37 +6386,45 @@ msgstr "现况从 %1 改为 %2" msgid "StatusChange" msgstr "çŽ°å†µæ”¹å˜æ—¶" -#: html/Ticket/Elements/Tabs:146 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "å¼ºåˆ¶æ›´æ¢æ‰¿åŠžäºº" -#: lib/RT/Queue_Overlay.pm:91 +#: lib/RT/Queue_Overlay.pm:118 msgid "Steal tickets" msgstr "强制承办申请å•" -#: lib/RT/Queue_Overlay.pm:91 +#: lib/RT/Queue_Overlay.pm:118 msgid "StealTicket" msgstr "强制承办申请å•" -#: lib/RT/Transaction_Overlay.pm:587 +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) +msgid "Stolen from %1" +msgstr "承办人从 %1 强制更æ¢" + +#: NOT FOUND IN SOURCE msgid "Stolen from %1 " -msgstr "被 %1 å¼ºåˆ¶æ›´æ¢ " +msgstr "承办人从 %1 å¼ºåˆ¶æ›´æ¢ " -#: html/Edit/Groups/Member:69 +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Subgroup" msgstr "å群组" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 html/Search/Bulk.html:135 html/Search/Elements/PickRestriction:42 html/SelfService/Create.html:56 html/SelfService/Elements/MyRequests:27 html/SelfService/Update.html:31 html/Ticket/Create.html:83 html/Ticket/Elements/EditBasics:27 html/Ticket/ModifyAll.html:78 html/Ticket/Update.html:75 html/Work/Elements/MyApprovals:9 html/Work/Elements/MyRequests:10 html/Work/Elements/MyTickets:10 html/Work/Search/Bulk.html:87 html/Work/Search/PickRestriction:22 html/Work/Tickets/Create.html:122 lib/RT/Ticket_Overlay.pm:1168 lib/RT/Tickets_Overlay.pm:987 +#: 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 msgid "Subject" msgstr "主题" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:609 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "æ ‡é¢˜å·²æ”¹ä¸º %1" -#: html/Elements/Submit:58 html/Work/Search/Bulk.html:103 +#: html/Elements/Submit:97 msgid "Submit" msgstr "é€å‡º" @@ -5219,7 +6432,7 @@ msgstr "é€å‡º" msgid "Submit Workflow" msgstr "é€å‡ºæµç¨‹" -#: lib/RT/Group_Overlay.pm:748 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "设定æˆåŠŸ" @@ -5227,23 +6440,39 @@ msgstr "设定æˆåŠŸ" msgid "Sun" msgstr "星期日" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "星期日" -#: html/Edit/Users/System:17 lib/RT/System.pm:53 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "系统管ç†å‘˜" -#: html/User/Elements/DelegateRights:76 +#: NOT FOUND IN SOURCE +msgid "Sync now" +msgstr "æ‰§è¡ŒåŒæ¥" + +#: NOT FOUND IN SOURCE +msgid "Sync104HRMS" +msgstr "è‡ªåŠ¨åŒæ¥104HRMS" + +#: NOT FOUND IN SOURCE +msgid "Synchronizing HRMS data. This may take a while..." +msgstr "æ£åœ¨åŒæ¥åŒ– HRMS 人事系统数æ®ã€‚请ç¨å¾…..." + +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "系统" -#: html/Edit/Global/Scrip/Top:18 html/Edit/Global/Scrip/Top:44 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "系统设定" + +#: NOT FOUND IN SOURCE msgid "System Defined" msgstr "系统定义" -#: html/Admin/Elements/SelectRights:80 lib/RT/ACE_Overlay.pm:566 lib/RT/Interface/Web.pm:793 lib/RT/Interface/Web.pm:826 +#: 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 "系统错误" @@ -5255,15 +6484,24 @@ msgstr "系统错误。设定æƒé™å¤±è´¥ã€‚" msgid "System Error. right not granted" msgstr "系统错误。设定æƒé™å¤±è´¥ã€‚" -#: html/Edit/Users/index.html:122 +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "System Rights" msgstr "系统æƒé™" -#: lib/RT/ACE_Overlay.pm:615 +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "系统工具" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "系统错误。æƒé™ä»£ç†å¤±è´¥ã€‚" -#: lib/RT/ACE_Overlay.pm:145 lib/RT/ACE_Overlay.pm:222 lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:897 +#: 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 "系统错误。设定æƒé™å¤±è´¥ã€‚" @@ -5271,7 +6509,7 @@ msgstr "系统错误。设定æƒé™å¤±è´¥ã€‚" msgid "System error. Unable to grant rights." msgstr "ç³»ç»Ÿé”™è¯¯ã€‚æ— æ³•è®¾å®šæƒé™ã€‚" -#: html/Admin/Global/GroupRights.html:34 html/Admin/Groups/GroupRights.html:36 html/Admin/Queues/GroupRights.html:35 +#: 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 "系统群组" @@ -5279,56 +6517,64 @@ msgstr "系统群组" msgid "SystemInternal" msgstr "系统内部用" -#: etc/initialdata:59 etc/initialdata:65 etc/initialdata:71 +#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 msgid "SystemRolegroup for internal use" msgstr "内部使用的系统角色群组" -#: lib/RT/CurrentUser.pm:319 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRING" -#: html/Ticket/Elements/Tabs:142 +#: NOT FOUND IN SOURCE +msgid "TabbedUI" +msgstr "é¡µç¾æŽ¥å£" + +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "å—ç†" -#: lib/RT/Queue_Overlay.pm:89 +#: lib/RT/Queue_Overlay.pm:116 msgid "Take tickets" msgstr "自行承办申请å•" -#: lib/RT/Queue_Overlay.pm:89 +#: lib/RT/Queue_Overlay.pm:116 msgid "TakeTicket" msgstr "自行承办申请å•" -#: lib/RT/Transaction_Overlay.pm:573 +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "å·²å—ç†" -#: html/Admin/Elements/EditScrip:80 +#: NOT FOUND IN SOURCE +msgid "Task" +msgstr "工作事项" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "模æ¿" -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:89 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "æ¨¡æ¿ #%1" -#: html/Edit/Global/Template/List:9 html/Edit/Global/Template/Top:17 +#: NOT FOUND IN SOURCE msgid "Template Content" msgstr "通知模æ¿å†…容" -#: html/Edit/Global/Template/List:8 html/Edit/Global/Template/Top:13 +#: NOT FOUND IN SOURCE msgid "Template Description" msgstr "é€šçŸ¥æ¨¡æ¿æè¿°" -#: html/Edit/Global/Template/List:7 html/Edit/Global/Template/Top:9 +#: NOT FOUND IN SOURCE msgid "Template Name" msgstr "通知模æ¿åç§°" -#: html/Admin/Elements/EditTemplates:88 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "模æ¿å·²åˆ 除" -#: lib/RT/Scrip_Overlay.pm:152 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "找ä¸åˆ°æ¨¡æ¿" @@ -5336,15 +6582,15 @@ msgstr "找ä¸åˆ°æ¨¡æ¿" msgid "Template not found\\n" msgstr "找ä¸åˆ°æ¨¡æ¿\\n" -#: lib/RT/Template_Overlay.pm:352 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "模æ¿å‰–æžå®Œæ¯•" -#: html/Admin/Elements/QueueTabs:48 html/Admin/Elements/SystemTabs:35 html/Admin/Global/index.html:44 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "模æ¿" -#: html/Edit/Global/autohandler:8 html/Edit/Queues/autohandler:19 +#: NOT FOUND IN SOURCE msgid "Templates " msgstr "通知模æ¿" @@ -5352,47 +6598,50 @@ msgstr "通知模æ¿" msgid "Templates for %1\\n" msgstr "找ä¸åˆ° %1 的模æ¿\\n" -#: lib/RT/Interface/Web.pm:894 +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "æ–‡å—" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "å·²ç»æ˜¯ç›®å‰å—段的值" -#: lib/RT/CustomField_Overlay.pm:242 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "è¿™ä¸æ˜¯è¯¥è‡ªè®¢å—段的值" -#: lib/RT/Ticket_Overlay.pm:1908 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "åŒæ ·çš„值" -#: lib/RT/ACE_Overlay.pm:287 lib/RT/ACE_Overlay.pm:596 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 msgid "That principal already has that right" msgstr "这项å•ä½å·²ç»æ‹¥æœ‰è¯¥æƒé™" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "这项å•ä½å·²ç»æ˜¯è¿™ä¸ªè¡¨å•çš„ %1" -#: lib/RT/Ticket_Overlay.pm:1442 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "这项å•ä½å·²ç»æ˜¯è¿™ä»½ç”³è¯·å•çš„ %1" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "这项å•ä½ä¸æ˜¯è¿™ä¸ªè¡¨å•çš„ %1" -#: lib/RT/Ticket_Overlay.pm:1559 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "这项å•ä½ä¸æ˜¯è¿™ä»½ç”³è¯·å•çš„ %1" -#: lib/RT/Ticket_Overlay.pm:1904 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "æ¤è¡¨å•ä¸å˜åœ¨" -#: lib/RT/Ticket_Overlay.pm:3246 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "è¿™ä»½ç”³è¯·å•æœ‰å°šæœªè§£å†³çš„附属申请å•" @@ -5400,27 +6649,27 @@ msgstr "è¿™ä»½ç”³è¯·å•æœ‰å°šæœªè§£å†³çš„附属申请å•" msgid "That user already has that right" msgstr "使用者已具有该项æƒé™" -#: lib/RT/Ticket_Overlay.pm:3056 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "è¯¥ä½¿ç”¨è€…å·²ç»æ‰¿åŠžè¿™ä»½ç”³è¯·å•" -#: lib/RT/Ticket_Overlay.pm:3028 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "使用者ä¸å˜åœ¨" -#: lib/RT/User_Overlay.pm:374 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "è¿™åä½¿ç”¨è€…å·²ç»æ˜¯å†…部æˆå‘˜" -#: lib/RT/User_Overlay.pm:395 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "è¿™å使用者属于éžå†…部æˆå‘˜ç¾¤ç»„" -#: lib/RT/User_Overlay.pm:387 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "ä½¿ç”¨è€…åŠ å…¥å†…éƒ¨æˆå‘˜ç¾¤ç»„完毕" -#: lib/RT/User_Overlay.pm:408 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "è¿™åä½¿ç”¨è€…å·²åŠ å…¥éžå†…部æˆå‘˜ç¾¤ç»„" @@ -5428,71 +6677,83 @@ msgstr "è¿™åä½¿ç”¨è€…å·²åŠ å…¥éžå†…部æˆå‘˜ç¾¤ç»„" msgid "That user is now unprivilegedileged" msgstr "è¿™åä½¿ç”¨è€…å·²åŠ å…¥éžå†…部æˆå‘˜ç¾¤ç»„" -#: lib/RT/Ticket_Overlay.pm:3049 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "使用者å¯èƒ½æ²¡æœ‰æ‰¿åŠžè¡¨å•里的申请å•" -#: lib/RT/Link_Overlay.pm:205 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "è¿™ä¸æ˜¯ä¸€ä¸ªæ•°å—ç¼–å·" -#: html/SelfService/Display.html:31 html/Ticket/Create.html:149 html/Ticket/Elements/ShowSummary:27 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "基本信æ¯" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "申请å•的副本收件人" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "申请å•的管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: lib/RT/Ticket_Overlay.pm:2235 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "评论已被纪录" -#: bin/rt-crontool:197 +#: 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 "下列命令会找到 'general' 表å•内所有è¿ä½œä¸çš„申请å•ï¼Œå¹¶å°†å…¶ä¸ 4 å°æ—¶å†…未处ç†çš„申请å•优先程度设为 99:" -#: bin/rt-commit-handler:755 bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "以下命令未被执行:\\n\\n" -#: lib/RT/Interface/Web.pm:897 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "æ–°çš„å—æ®µå€¼è®¾å®šå®Œæˆã€‚" -#: lib/RT/ACE_Overlay.pm:85 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "申请å•的承办人" -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "申请å•的申请人" -#: html/Admin/Elements/EditUserComments:25 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "该使用者ä¸ä¼šçœ‹è§è¿™äº›è¯„论" -#: html/Edit/Global/Workflow/Owner.html:32 +#: NOT FOUND IN SOURCE msgid "Third-" msgstr "三" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "æ¤è‡ªè®¢å—段ä¸é€‚用于该对象" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "æ¤é¡¹åŠŸèƒ½ä»…é™ç³»ç»Ÿç®¡ç†å‘˜ä½¿ç”¨" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "æ¤è®¯æ¯ä¼šå¯„ç»™..." + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "ç”³è¯·å• %1 %2 (%3)\\n" -#: bin/rt-crontool:188 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "æ¤å·¥å…·ç¨‹åºä¼šè®©ä½¿ç”¨è€…ç»ç”± RT 执行任æ„命令。" -#: lib/RT/Transaction_Overlay.pm:251 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "æ¤é¡¹æ›´åŠ¨æŠ¥å‘Šæ²¡æœ‰å†…å®¹" -#: html/Ticket/Elements/ShowRequestor:46 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "使用者é€å‡ºçš„å‰ %1 份优先处ç†ç”³è¯·å•" @@ -5505,11 +6766,11 @@ msgstr "使用者é€å‡ºçš„å‰ 25 份优先处ç†ç”³è¯·å•" msgid "Thu" msgstr "星期四" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "星期四" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:163 +#: NOT FOUND IN SOURCE msgid "Ticket" msgstr "申请å•" @@ -5521,41 +6782,51 @@ msgstr "ç”³è¯·å• # %1 %2" msgid "Ticket # %1 Jumbo update: %2" msgstr "æ›´æ–°ç”³è¯·å• # %1 的全部信æ¯ï¼š%2" -#: html/Ticket/ModifyAll.html:24 html/Ticket/ModifyAll.html:28 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "æ›´æ–°ç”³è¯·å• #%1 的全部信æ¯ï¼š%2" -#: html/Approvals/Elements/ShowDependency:45 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "ç”³è¯·å• #%1: %2" -#: lib/RT/Ticket_Overlay.pm:595 lib/RT/Ticket_Overlay.pm:616 +#: 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) +msgid "Ticket %1" +msgstr "ç”³è¯·å• %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "ç”³è¯·å• #%1 æˆåŠŸæ–°å¢žäºŽ '%2' 表å•" -#: bin/rt-commit-handler:759 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "åŠ è½½ç”³è¯·å• %1\\n" -#: html/Search/Bulk.html:212 html/Work/Search/Bulk.html:169 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "ç”³è¯·å• %1:%2" -#: html/Edit/Queues/Basic/Top:28 html/Edit/Queues/List:16 html/Work/Queues/List:9 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "申请å•çš„è‡ªè®¢å—æ®µ" + +#: NOT FOUND IN SOURCE msgid "Ticket Due" msgstr "表å•å¤„ç†æœŸé™" -#: html/Ticket/History.html:24 html/Ticket/History.html:27 +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "申请å•处ç†çºªå½• # %1 %2" -#: html/Work/Elements/List:6 +#: NOT FOUND IN SOURCE msgid "Ticket ID" msgstr "å•å·" @@ -5567,31 +6838,35 @@ msgstr "申请å•ç¼–å·" msgid "Ticket Processing Due" msgstr "表å•è¿è¡ŒæœŸé™" -#: etc/initialdata:332 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "申请å•已解决" -#: html/Edit/Queues/Basic/Top:18 html/Edit/Queues/Category/List:6 html/Edit/Queues/Category/Top:7 html/Edit/Queues/List:7 html/Edit/Queues/index.html:31 html/Work/Delegates/List:7 html/Work/Delegates/index.html:11 html/Work/Elements/List:12 html/Work/Elements/SelectSearch:9 html/Work/Queues/List:6 html/Work/Queues/Select.html:12 html/Work/Queues/index.html:11 html/Work/Tickets/Create.html:42 html/Work/Tickets/Elements/ShowBasics:33 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "申请å•的更动" + +#: NOT FOUND IN SOURCE msgid "Ticket Type" msgstr "表å•ç§ç±»" -#: html/Search/Elements/PickRestriction:62 html/Work/Search/PickRestriction:43 +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "申请å•附件" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "申请å•内容" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "申请å•内容类别" -#: lib/RT/Ticket_Overlay.pm:485 lib/RT/Ticket_Overlay.pm:494 lib/RT/Ticket_Overlay.pm:504 lib/RT/Ticket_Overlay.pm:605 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "å†…éƒ¨é”™è¯¯ï¼Œæ— æ³•æ–°å¢žç”³è¯·å•" -#: lib/RT/Transaction_Overlay.pm:520 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "ç”³è¯·å•æ–°å¢žå®Œæ¯•" @@ -5599,7 +6874,7 @@ msgstr "ç”³è¯·å•æ–°å¢žå®Œæ¯•" msgid "Ticket creation failed" msgstr "ç”³è¯·å•æ–°å¢žå¤±è´¥" -#: lib/RT/Transaction_Overlay.pm:525 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "申请å•åˆ é™¤å®Œæ¯•" @@ -5611,58 +6886,76 @@ msgstr "找ä¸åˆ°ç”³è¯·å•ç¼–å·" msgid "Ticket killed" msgstr "申请å•åˆ é™¤å®Œæ¯•" +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "申请å•çš„æè¿°ä¿¡æ¯" + #: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "找ä¸åˆ°ç”³è¯·å•" -#: etc/initialdata:318 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "申请å•现况已改å˜" -#: html/Ticket/Update.html:38 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "申请å•视察员" -#: html/Elements/Tabs:46 +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" msgstr "申请å•" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" msgstr "ç”³è¯·å• %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" msgstr "ç”³è¯·å• %1 (%2)" -#: html/Elements/ViewUser:25 -#. ($name) +#: NOT FOUND IN SOURCE +msgid "Tickets I own" +msgstr "待处ç†çš„申请å•" + +#: NOT FOUND IN SOURCE +msgid "Tickets I requested" +msgstr "é€å‡ºçš„申请å•" + +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "%1 的申请å•" -#: html/Approvals/Elements/ShowDependency:26 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "批准之åŽï¼Œå¯æŽ¥ç»å¤„ç†ï¼š" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:47 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "预计时间" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "剩馀时间" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:42 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "å¤„ç†æ—¶é—´" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "剩馀时间" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "显示时间" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "å·²å¤„ç†æ—¶é—´" @@ -5670,48 +6963,85 @@ msgstr "å·²å¤„ç†æ—¶é—´" msgid "TimeLeft" msgstr "剩馀时间" -#: lib/RT/Ticket_Overlay.pm:1173 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "å·²å¤„ç†æ—¶é—´" -#: bin/rt-commit-handler:401 +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "产生这次更动的差异档:" -#: bin/rt-commit-handler:390 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "产生这次更动的差异档:\\n" -#: lib/RT/Ticket_Overlay.pm:1176 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "如果有支æŒã€æ•™è‚²è®ç»ƒåŠå®šåˆ¶å¼€å‘的需è¦ï¼Œè¯·è¿žç»œ %1。" + +#: NOT FOUND IN SOURCE +msgid "Todo" +msgstr "待办事项" + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "告知日期" -#: html/Edit/Elements/Page:46 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "工具" + +#: NOT FOUND IN SOURCE msgid "Total" msgstr "页" -#: etc/initialdata:239 +#: etc/initialdata:252 msgid "Transaction" msgstr "更动" -#: lib/RT/Transaction_Overlay.pm:640 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "清除更动报告 %1" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "更动报告已新增" -#: lib/RT/Transaction_Overlay.pm:88 +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "æ›´åŠ¨çš„è‡ªè®¢å—æ®µ" + +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" msgstr "未指定申请å•ç¼–å·ï¼Œæ— 法新增更动" -#: lib/RT/Transaction_Overlay.pm:699 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "未指定对象类别åŠç¼–å·ï¼Œæ— 法新增更动" + +#: NOT FOUND IN SOURCE +msgid "TransactionBatch" +msgstr "批次更动时" + +#: NOT FOUND IN SOURCE +msgid "TransactionCreate" +msgstr "新增更动时" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "ä¸å¯æ›´æ”¹æ›´åŠ¨æŠ¥å‘Š" #: NOT FOUND IN SOURCE +msgid "Transfer to" +msgstr "移交给" + +#: NOT FOUND IN SOURCE msgid "Trying to delete a right: %1" msgstr "è¯•å›¾åˆ é™¤æŸé¡¹æƒé™ï¼š%1" @@ -5719,84 +7049,117 @@ msgstr "è¯•å›¾åˆ é™¤æŸé¡¹æƒé™ï¼š%1" msgid "Tue" msgstr "星期二" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "星期二" -#: html/Admin/Elements/EditCustomField:43 html/Admin/Elements/ModifyTemplateAsWorkflow:135 html/Ticket/Elements/AddWatchers:32 html/Ticket/Elements/AddWatchers:43 html/Ticket/Elements/AddWatchers:53 lib/RT/Ticket_Overlay.pm:1174 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "类别" -#: lib/RT/ScripCondition_Overlay.pm:103 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "å°šæ— å®žä½œ" -#: html/Admin/Users/Modify.html:67 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "外部系统登入å¸å·" -#: html/Admin/Elements/ModifyUser:61 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "外部系统登入å¸å·" -#: lib/RT/Attachment_Overlay.pm:273 lib/RT/Attachment_Overlay.pm:303 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "ä¸å¯è§£çš„内容文å—ç¼–ç æ–¹å¼ %1" -#: html/Elements/SelectResultsPerPage:36 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "全数显示" -#: etc/initialdata:50 +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "未命å的查询" + +#: etc/initialdata:32 msgid "Unprivileged" msgstr "éžå†…部æˆå‘˜" -#: lib/RT/Transaction_Overlay.pm:569 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "未选å–çš„è‡ªè®¢å—æ®µ" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "未选å–的对象" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "未被å—ç†" -#: html/Edit/Elements/Page:13 html/Edit/Elements/Page:15 +#: NOT FOUND IN SOURCE +msgid "Untitled search" +msgstr "未命å的查询" + +#: NOT FOUND IN SOURCE msgid "Up" msgstr "上一页" -#: html/Elements/MyTickets:63 html/Search/Bulk.html:32 html/Work/Elements/MyTickets:72 html/Work/Search/Bulk.html:10 html/Work/Tickets/Elements/EditCustomFieldEntries:82 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "处ç†" -#: html/Admin/Users/Prefs.html:61 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "全部更新" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "æ›´æ–°ç¼–å·" -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:65 html/Ticket/Update.html:65 html/Work/Search/Bulk.html:81 html/Work/Tickets/Update.html:32 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "更新申请å•" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "更新类别" -#: html/Search/Listing.html:60 html/Work/Search/index.html:32 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "整批更新申请å•" -#: html/Admin/Users/Prefs.html:48 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "更新电å邮件信箱" -#: html/Admin/Users/Prefs.html:54 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "批次更新申请å•" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "æ›´æ–°å¸å·" -#: lib/RT/Interface/Web.pm:409 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "更新未被记录" -#: html/Search/Bulk.html:80 html/Work/Search/Bulk.html:52 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "更新选择的申请å•" -#: html/Admin/Users/Prefs.html:35 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "æ›´æ–°ç¾ç« " -#: html/Ticket/ModifyAll.html:62 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "更新申请å•" @@ -5804,25 +7167,61 @@ msgstr "更新申请å•" msgid "Update ticket # %1" msgstr "æ›´æ–°ç”³è¯·å• # %1" -#: html/SelfService/Update.html:24 html/SelfService/Update.html:46 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "æ›´æ–°ç”³è¯·å• #%1" -#: html/Ticket/Update.html:138 html/Work/Tickets/Update.html:122 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "æ›´æ–°ç”³è¯·å• #%1 (%2)" -#: lib/RT/Interface/Web.pm:407 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "更新的内容并éžç”³è¯·å•回å¤ä¹Ÿä¸æ˜¯è¯„论" -#: html/Elements/SelectDateType:32 html/Ticket/Elements/ShowDates:50 lib/RT/Ticket_Overlay.pm:1177 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "剿¬¡æ›´æ–°" -#: html/Work/Preferences/index.html:15 +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "上载" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "上载多个档案" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "上载多份图片" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "上载一个档案" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "上载一份图片" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "上载最多 %1 个档案" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "上载最多 %1 份图片" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "上载您的更动" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User" msgstr "使用者" @@ -5834,6 +7233,11 @@ msgstr "使用者 %1 %2:%3\\n" msgid "User %1 Password: %2\\n" msgstr "使用者 %1 å£ä»¤ï¼š%2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'。" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'" @@ -5842,84 +7246,121 @@ msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'" msgid "User '%1' not found\\n" msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'\\n" -#: etc/initialdata:142 etc/initialdata:209 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "使用者自订" -#: html/Admin/Users/Prefs.html:58 html/Edit/Users/List:13 html/Edit/Users/Top:42 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "使用者自订的æ¡ä»¶åŠåŠ¨ä½œ" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "使用者 ID" -#: html/Elements/SelectUsers:25 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "使用者 ID" -#: html/Edit/Elements/PickUsers:12 html/Edit/Global/UserRight/List:7 html/Edit/Global/UserRight/Top:9 html/Edit/Users/Add.html:13 html/Edit/Users/List:5 html/Edit/Users/Search.html:23 html/Edit/Users/Top:8 html/Work/Delegates/Info:60 html/Work/Tickets/Cc:10 +#: NOT FOUND IN SOURCE msgid "User Number" msgstr "员工编å·" -#: html/Admin/Elements/GroupTabs:46 html/Admin/Elements/QueueTabs:59 html/Admin/Elements/SystemTabs:46 html/Admin/Global/index.html:58 html/Edit/Global/autohandler:11 html/Edit/Queues/autohandler:22 +#: 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 "使用者æƒé™" -#: html/Edit/Elements/Tab:32 +#: NOT FOUND IN SOURCE msgid "User Setup" msgstr "使用者设定" -#: html/Edit/Users/Info:38 +#: NOT FOUND IN SOURCE msgid "User Shift" msgstr "员工ç别" -#: html/Admin/Users/Modify.html:225 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "使用者试图在 %2 对象 #%3 çš„è‡ªè®¢å—æ®µ %1 上执行未知的更新æ“作" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "æ— æ³•æ–°å¢žä½¿ç”¨è€…ï¼š%1" -#: lib/RT/User_Overlay.pm:321 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "使用者新增完毕" -#: html/Admin/Global/GroupRights.html:66 html/Admin/Groups/GroupRights.html:53 html/Admin/Queues/GroupRights.html:68 +#: NOT FOUND IN SOURCE +msgid "User created: %1" +msgstr "使用者 %1 新增完毕" + +#: NOT FOUND IN SOURCE +msgid "User created: %1 (%2)" +msgstr "使用者 %1 (%2) 新增完毕" + +#: 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 "使用者定义的群组" +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 +msgid "User loaded" +msgstr "å·²åŠ è½½ä½¿ç”¨è€…" + #: NOT FOUND IN SOURCE msgid "User notified" msgstr "已通知使用者" -#: html/Admin/Users/Prefs.html:24 html/Admin/Users/Prefs.html:28 +#: NOT FOUND IN SOURCE +msgid "User renamed from %1 to %2" +msgstr "使用者 %1 已改å为 %2" + +#: NOT FOUND IN SOURCE msgid "User view" msgstr "使用者ç§äººæ•°æ®" +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "使用者自定群组" + #: NOT FOUND IN SOURCE msgid "UserDefined" msgstr "使用者自定" -#: html/Admin/Users/Modify.html:47 html/Elements/Login:51 html/Ticket/Elements/AddWatchers:34 +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "å¸å·" -#: html/Admin/Elements/SelectNewGroupMembers:25 html/Admin/Elements/Tabs:31 html/Admin/Groups/Members.html:54 html/Admin/Queues/People.html:67 html/Admin/index.html:28 html/User/Groups/Members.html:57 html/Work/Tickets/Elements/ShowTransaction:8 +#: 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 msgid "Users" msgstr "使用者" -#: html/Admin/Users/index.html:64 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "ç¬¦åˆæŸ¥è¯¢æ¡ä»¶çš„使用者" -#: html/Search/Elements/PickRestriction:50 html/Work/Search/PickRestriction:31 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "åˆç†çš„æŸ¥è¯¢" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "选择表å•" -#: html/Admin/Elements/EditCustomField:56 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "å—æ®µå€¼" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE +msgid "View log" +msgstr "检视纪录档" + +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "视察" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "以管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è§†å¯Ÿ" @@ -5927,11 +7368,11 @@ msgstr "以管ç†å‘˜å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è§†å¯Ÿ" msgid "Watcher loaded" msgstr "æˆåŠŸåŠ è½½è§†å¯Ÿå‘˜ä¿¡æ¯" -#: html/Admin/Elements/QueueTabs:41 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "视察员" -#: html/Admin/Elements/ModifyUser:55 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "网页文å—ç¼–ç æ–¹å¼" @@ -5939,104 +7380,123 @@ msgstr "网页文å—ç¼–ç æ–¹å¼" msgid "Wed" msgstr "星期三" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "星期三" -#: etc/initialdata:533 etc/upgrade/2.1.71:161 html/Edit/Elements/CreateApprovalsQueue:135 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "当申请å•é€šè¿‡æ‰€æœ‰ç¾æ ¸åŽï¼Œå°†æ¤è®¯æ¯å›žå¤åˆ°åŽŸç”³è¯·å•" -#: etc/initialdata:497 etc/upgrade/2.1.71:135 html/Edit/Elements/CreateApprovalsQueue:107 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "当申请å•通过æŸé¡¹ç¾æ ¸åŽï¼Œå°†æ¤è®¯æ¯å›žå¤åˆ°åŽŸç”³è¯·å•" -#: etc/initialdata:156 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "æ–°å¢žç”³è¯·å•æ—¶" -#: etc/initialdata:428 etc/upgrade/2.1.71:79 html/Edit/Elements/CreateApprovalsQueue:51 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "ç¾æ ¸å•新增之åŽï¼Œé€šçŸ¥åº”å—ç†çš„æ‰¿åŠžäººåŠç®¡ç†å‘˜å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata:161 +#: etc/initialdata:151 msgid "When anything happens" msgstr "当任何事情å‘生时" -#: etc/initialdata:202 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "当申请å•解决时" -#: etc/initialdata:188 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "å½“ç”³è¯·å•æ›´æ¢æ‰¿åŠžäººæ—¶" -#: etc/initialdata:196 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "当申请å•çš„ä¼˜å…ˆé¡ºåºæ”¹å˜æ—¶" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "å½“ç”³è¯·å•æ›´æ¢è¡¨å•æ—¶" -#: etc/initialdata:180 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "å½“ç”³è¯·å•æ›´æ–°çŽ°å†µæ—¶" -#: etc/initialdata:210 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "当使用者自订的情况å‘生时" -#: etc/initialdata:174 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "当评论é€è¾¾æ—¶" -#: etc/initialdata:167 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "当回å¤é€è¾¾æ—¶" -#: html/Admin/Users/Modify.html:163 html/User/Prefs.html:51 html/Work/Preferences/Info:31 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "å…¬å¸" -#: html/Admin/Elements/ModifyUser:69 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "离线工作" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "å…¬å¸ç”µè¯" -#: html/Ticket/Elements/ShowBasics:34 html/Ticket/Update.html:64 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "å¤„ç†æ—¶é—´" -#: html/Admin/Global/Workflow.html:91 html/Admin/Queues/Workflow.html:89 -#. ($WorkflowObj->Id()) +#: NOT FOUND IN SOURCE msgid "Workflow #%1" msgstr "æµç¨‹ #%1" -#: html/Edit/Global/Workflow/List:15 +#: NOT FOUND IN SOURCE msgid "Workflow Begin" msgstr "æµç¨‹å¼€å§‹" -#: html/Edit/Global/Workflow/List:20 +#: NOT FOUND IN SOURCE msgid "Workflow End" msgstr "æµç¨‹ç»“æŸ" -#: html/Admin/Elements/EditWorkflows:90 +#: NOT FOUND IN SOURCE msgid "Workflow deleted" msgstr "æµç¨‹å·²åˆ 除" -#: html/Edit/Global/autohandler:10 html/Edit/Queues/autohandler:21 +#: NOT FOUND IN SOURCE msgid "Workflows" msgstr "æµç¨‹" -#: html/Edit/Global/Basic/Top:25 +#: NOT FOUND IN SOURCE +msgid "Writable" +msgstr "å¯è¯»å†™" + +#: NOT FOUND IN SOURCE +msgid "XXX CHANGEME You are not an authorized user" +msgstr "XXX CHANGEME æ‚¨æ˜¯æœªç»æŽˆæƒçš„使用者" + +#: NOT FOUND IN SOURCE msgid "Yes" msgstr "是" -#: lib/RT/Ticket_Overlay.pm:3159 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "您已是这份申请å•的承办人" -#: html/autohandler:122 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "æ‚¨ä¸æ˜¯è¢«æŽˆæƒçš„使用者" -#: lib/RT/Ticket_Overlay.pm:3041 +#: NOT FOUND IN SOURCE +msgid "You can access it with the Download button on the right." +msgstr "您å¯ä»¥æŒ‰å³æ–¹çš„‘下载’键æ¥å–得。" + +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "ç¥‡èƒ½é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿åŠžæˆ–æ˜¯æ²¡æœ‰æ‰¿åŠžäººçš„ç”³è¯·å•" @@ -6044,28 +7504,28 @@ msgstr "ç¥‡èƒ½é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿åŠžæˆ–æ˜¯æ²¡æœ‰æ‰¿åŠžäººçš„ç”³è¯·å•" msgid "You don't have permission to view that ticket.\\n" msgstr "您没有看那份申请å•çš„æƒé™ã€‚\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "æ‚¨ä¼šåœ¨è¡¨å• %2 找到 %1 的申请å•" -#: html/NoAuth/Logout.html:30 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "您已注销 RT。" -#: html/SelfService/Display.html:77 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "æ‚¨æ²¡æœ‰åœ¨è¯¥è¡¨å•æ–°å¢žç”³è¯·å•çš„æƒé™ã€‚" -#: lib/RT/Ticket_Overlay.pm:1917 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "您ä¸èƒ½åœ¨è¯¥è¡¨å•ä¸æå‡ºç”³è¯·ã€‚" -#: html/Edit/Global/Basic/Top:38 +#: NOT FOUND IN SOURCE msgid "You need to restart the Request Tracker service for saved changes to take effect." msgstr "æ‚¨å¿…é¡»é‡æ–°æ¿€æ´» Request Tracker æœåŠ¡ï¼Œå‚¨å˜çš„æ›´åЍæ‰ä¼šç”Ÿæ•ˆã€‚" -#: html/NoAuth/Logout.html:34 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "æ¬¢è¿Žä¸‹æ¬¡å†æ¥" @@ -6077,11 +7537,11 @@ msgstr "您æå‡ºçš„ %1 申请å•" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "RT 管ç†å‘˜å¯èƒ½è®¾é”™äº†ç”± RT å¯„å‡ºçš„é‚®ä»¶æ”¶ä»¶äººæ ‡å¤´æ¡£" -#: etc/initialdata:514 etc/upgrade/2.1.71:146 html/Edit/Elements/CreateApprovalsQueue:119 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "申请å•已由 %1 批准。å¯èƒ½è¿˜æœ‰å…¶å®ƒå¾…ç¾æ ¸çš„æ¥éª¤ã€‚" -#: etc/initialdata:552 etc/upgrade/2.1.71:180 html/Edit/Elements/CreateApprovalsQueue:154 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "您的申请å•已完æˆç¾æ ¸ç¨‹åºã€‚" @@ -6089,19 +7549,19 @@ msgstr "您的申请å•已完æˆç¾æ ¸ç¨‹åºã€‚" msgid "Your request was rejected" msgstr "您的申请å•已被驳回" -#: etc/initialdata:455 +#: NOT FOUND IN SOURCE msgid "Your request was rejected by %1." msgstr "您的申请å•已被 %1 驳回。" -#: etc/upgrade/2.1.71:101 html/Edit/Elements/CreateApprovalsQueue:73 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "您的申请å•已被驳回。" -#: html/autohandler:144 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "您的å¸å·æˆ–å£ä»¤æœ‰è¯¯" -#: html/Admin/Elements/ModifyUser:83 html/Admin/Users/Modify.html:143 html/User/Prefs.html:95 html/Work/Preferences/Info:84 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "邮政编ç " @@ -6117,32 +7577,48 @@ msgstr "过期" msgid "alert" msgstr "急讯" -#: html/User/Elements/DelegateRights:58 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "approving" +msgstr "å¾…ç¾æ ¸" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "æƒé™åŒ %1" -#: html/SelfService/Closed.html:27 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 msgid "closed" msgstr "已解决" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:33 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "包å«" -#: html/Elements/SelectAttachmentField:25 +#: NOT FOUND IN SOURCE msgid "content" msgstr "内容" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "类型" -#: lib/RT/Ticket_Overlay.pm:2304 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "申请å•回å¤(å¯èƒ½)未é€å‡º" -#: lib/RT/Ticket_Overlay.pm:2314 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "申请å•回å¤å·²é€å‡º" @@ -6150,7 +7626,7 @@ msgstr "申请å•回å¤å·²é€å‡º" msgid "critical" msgstr "严é‡" -#: html/Admin/Elements/ModifyQueue:62 html/Admin/Queues/Modify.html:76 html/Edit/Queues/Basic/Top:31 html/Edit/Queues/List:18 html/Work/Queues/List:11 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "天" @@ -6162,27 +7638,35 @@ msgstr "æ‹’ç»å¤„ç†" msgid "debug" msgstr "侦错" -#: html/Search/Listing.html:74 +#: NOT FOUND IN SOURCE msgid "delete" msgstr "åˆ é™¤" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "å·²åˆ é™¤" -#: html/Search/Elements/PickRestriction:67 html/Work/Search/PickRestriction:47 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "ä¸ç¬¦åˆ" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:34 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "ä¸åŒ…å«" #: NOT FOUND IN SOURCE +msgid "email address" +msgstr "电å邮件信箱" + +#: NOT FOUND IN SOURCE msgid "emergency" msgstr "å±éš¾" -#: html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "ç‰äºŽ" @@ -6190,28 +7674,52 @@ msgstr "ç‰äºŽ" msgid "error" msgstr "错误" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + #: NOT FOUND IN SOURCE msgid "false" msgstr "å‡" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "filename" msgstr "æ¡£å" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "大于" -#: lib/RT/Group_Overlay.pm:193 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "群组 '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "å°æ—¶" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "ç¼–å·" @@ -6219,27 +7727,27 @@ msgstr "ç¼–å·" msgid "info" msgstr "ä¿¡æ¯" -#: html/Elements/SelectBoolean:31 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:35 html/Search/Elements/PickRestriction:46 html/Search/Elements/PickRestriction:75 html/Search/Elements/PickRestriction:87 html/Work/Search/PickRestriction:27 html/Work/Search/PickRestriction:56 html/Work/Search/PickRestriction:69 +#: 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 msgid "is" msgstr "是" -#: html/Elements/SelectBoolean:35 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 html/Work/Search/PickRestriction:28 html/Work/Search/PickRestriction:57 html/Work/Search/PickRestriction:70 +#: 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 msgid "isn't" msgstr "䏿˜¯" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "å°äºŽ" -#: html/Edit/Global/Workflow/Owner.html:35 -msgid "level Admins" +#: NOT FOUND IN SOURCE +msgid "level Admin" msgstr "层主管" -#: html/Search/Elements/PickRestriction:66 html/Work/Search/PickRestriction:46 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "符åˆ" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "分" @@ -6247,27 +7755,31 @@ msgstr "分" msgid "minutes" msgstr "分钟" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "更改\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "月" -#: lib/RT/Queue_Overlay.pm:57 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "新建立" -#: html/Admin/Elements/EditScrips:42 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "没有åç§°" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "没有值" -#: html/Admin/Elements/EditQueueWatchers:26 html/Edit/Groups/Member:40 html/Edit/Groups/Members/Add.html:17 html/Edit/Groups/Members/List:8 html/Edit/Queues/Basic/Top:50 html/Edit/Queues/List:18 html/Ticket/Elements/EditWatchers:27 html/Work/Delegates/Info:37 html/Work/Delegates/Info:48 html/Work/Overview/Info:31 html/Work/Queues/List:11 html/Work/Tickets/Elements/ShowBasics:27 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "æ— " -#: html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "ä¸ç‰äºŽ" @@ -6279,11 +7791,11 @@ msgstr "æç¤º" msgid "notlike" msgstr "ä¸ç¬¦åˆ" -#: html/Edit/Elements/PickUsers:17 html/Edit/Users/Add.html:18 html/Edit/Users/Search.html:28 html/Work/Tickets/Cc:15 +#: NOT FOUND IN SOURCE msgid "number" msgstr "å·" -#: html/SelfService/Elements/MyRequests:60 lib/RT/Queue_Overlay.pm:58 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "å¼€å¯" @@ -6291,60 +7803,72 @@ msgstr "å¼€å¯" msgid "opened" msgstr "已开å¯" -#: lib/RT/Group_Overlay.pm:198 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" -msgstr "使用者「%2ã€çš„「%1ã€ä»£ç†äººç¾¤ç»„" +msgstr "使用者‘%2’的‘%1’代ç†äººç¾¤ç»„" -#: lib/RT/Group_Overlay.pm:206 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "è¡¨å• %1 %2" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "已驳回" -#: html/Work/Elements/SelectSearch:21 lib/RT/Queue_Overlay.pm:60 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "已处ç†" -#: html/Edit/Global/Basic/Top:48 +#: NOT FOUND IN SOURCE msgid "rtname" msgstr "æœåС噍åç§°" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "ç§’" -#: lib/RT/Queue_Overlay.pm:59 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "电åè¡¨æ ¼" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "延宕" -#: lib/RT/Group_Overlay.pm:201 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "系统 %1" -#: lib/RT/Group_Overlay.pm:212 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "系统群组 '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:41 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "呼å«ç»„ä»¶æœªæŒ‡æ˜ŽåŽŸå› " -#: lib/RT/Group_Overlay.pm:209 +#: NOT FOUND IN SOURCE +msgid "ticket #%1" +msgstr "ç”³è¯·å• #%1" + +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "ç”³è¯·å• #%1 %2" -#: html/Work/Elements/SelectSearch:27 +#: NOT FOUND IN SOURCE msgid "till" msgstr "至" -#: html/Edit/Elements/PickUsers:15 html/Edit/Global/Workflow/Condition:30 html/Edit/Users/Add.html:16 html/Edit/Users/Search.html:26 html/Work/Tickets/Cc:13 +#: NOT FOUND IN SOURCE msgid "to" msgstr "到" @@ -6352,16 +7876,16 @@ msgstr "到" msgid "true" msgstr "真" -#: lib/RT/Group_Overlay.pm:215 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "没有æè¿°çš„群组 %1" -#: html/Work/Elements/SelectSearch:19 +#: NOT FOUND IN SOURCE msgid "unresolved" msgstr "未处ç†" -#: lib/RT/Group_Overlay.pm:190 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "使用者 %1" @@ -6370,7 +7894,7 @@ msgstr "使用者 %1" msgid "warning" msgstr "è¦å‘Š" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "周" @@ -6378,7 +7902,7 @@ msgstr "周" msgid "with template %1" msgstr "模æ¿ï¼š%1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "å¹´" diff --git a/rt/lib/RT/I18N/zh_tw.po b/rt/lib/RT/I18N/zh_tw.po index 8c8c86e1f..7fbda2187 100644 --- a/rt/lib/RT/I18N/zh_tw.po +++ b/rt/lib/RT/I18N/zh_tw.po @@ -1,4 +1,4 @@ -# Traditional Chinese localization catalog for Request Tracker (RT) +# Chinese localization catalog for Request Tracker (RT) msgid "" msgstr "" "Last-Translator: Autrijus Tang <autrijus@autrijus.org>\n" @@ -7,7 +7,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -#: html/Elements/MyRequests:27 html/Elements/MyTickets:27 html/Work/Elements/MyApprovals:8 html/Work/Elements/MyRequests:15 html/Work/Elements/MyTickets:15 +#: NOT FOUND IN SOURCE msgid "#" msgstr "#" @@ -15,14 +15,19 @@ msgstr "#" msgid "#%1" msgstr "#%1" -#: html/Approvals/Elements/Approve:26 html/Approvals/Elements/ShowDependency:49 html/SelfService/Display.html:24 html/Ticket/Display.html:25 html/Ticket/Display.html:29 -#. ($Ticket->Id, $Ticket->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 #. ($Ticket->id, $Ticket->Subject) -#. ($ticket->Id, $ticket->Subject) #. ($link->BaseObj->Id, $link->BaseObj->Subject) +#. ($ticket->Id, $ticket->Subject) +#. ($TicketObj->Id, $TicketObj->Subject) msgid "#%1: %2" msgstr "#%1: %2" +#: lib/RT/Record.pm:926 +#. ($label) +msgid "$prefix %1" +msgstr "$prefix %1" + #: NOT FOUND IN SOURCE msgid "%*(%1,group ticket)" msgstr "%*(%1) ä»¶åƒèˆ‡çš„申請單" @@ -35,52 +40,55 @@ msgstr "%*(%1) 件陿œŸå®Œæˆçš„申請單" msgid "%*(%1,unresolved ticket)" msgstr "%*(%1) 件尚未解決的申請單" -#: lib/RT/Date.pm:337 +#: lib/RT/URI/fsck_com_rt.pm:257 +#. ($self->ObjectType, $self->Object->Id) +msgid "%1 #%2" +msgstr "%1 #%2" + +#: lib/RT/Date.pm:361 #. ($s, $time_unit) msgid "%1 %2" msgstr "%1 %2" -#: lib/RT/Tickets_Overlay.pm:771 -#. ($args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'}) +#: NOT FOUND IN SOURCE msgid "%1 %2 %3" msgstr "%1 %2 %3" -#: lib/RT/Date.pm:373 +#: lib/RT/Date.pm:397 #. ($self->GetWeekday($wday), $self->GetMonth($mon), map {sprintf "%02d", $_} ($mday, $hour, $min, $sec), ($year+1900)) msgid "%1 %2 %3 %4:%5:%6 %7" msgstr "%7-%2-%3 %4:%5:%6 %1" -#: lib/RT/Ticket_Overlay.pm:3532 lib/RT/Transaction_Overlay.pm:557 lib/RT/Transaction_Overlay.pm:599 +#: 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) msgid "%1 %2 added" msgstr "%2 已新增為 %1" -#: lib/RT/Date.pm:334 +#: lib/RT/Date.pm:358 #. ($s, $time_unit) msgid "%1 %2 ago" msgstr "%1 %2 之å‰" -#: lib/RT/Ticket_Overlay.pm:3538 lib/RT/Transaction_Overlay.pm:564 -#. ($cf->Name, $old_value, $new_value->Content) +#: lib/RT/Record.pm:1678 lib/RT/Transaction_Overlay.pm:643 +#. ($cf->Name, $old_content, $new_value->Content) #. ($field, $self->OldValue, $self->NewValue) msgid "%1 %2 changed to %3" msgstr "%1 已從 %2 改為 %3" -#: lib/RT/Ticket_Overlay.pm:3535 lib/RT/Transaction_Overlay.pm:560 lib/RT/Transaction_Overlay.pm:605 -#. ($cf->Name, $old_value) +#: 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) msgid "%1 %2 deleted" msgstr "%2 已自 %1 刪除" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:157 -#. ($depth_str, $role_str, $group_str) +#: NOT FOUND IN SOURCE msgid "%1 %2 of group %3" msgstr "%3 群組的 %1 %2" -#: html/Admin/Elements/EditScrips:43 html/Admin/Elements/ListGlobalScrips:27 +#: 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)) msgid "%1 %2 with template %3" msgstr "æ¢ä»¶ï¼š%1 | 動作:%2 | 範本:%3" @@ -89,49 +97,80 @@ msgstr "æ¢ä»¶ï¼š%1 | 動作:%2 | 範本:%3" msgid "%1 (%2) %3 this ticket\\n" msgstr "%1 (%2) %3 這份申請單\\n" -#: html/Search/Listing.html:56 html/Work/Search/index.html:28 -#. (($session{'tickets'}->FirstRow+1), ($session{'tickets'}->FirstRow() + $session{'tickets'}->RowsPerPage() )) +#: html/Ticket/Elements/ShowAttachments:72 +#. ($rev->CreatedAsString, $size, $rev->CreatorObj->Name) +msgid "%1 (%2) by %3" +msgstr "%1 (%2) - %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($TicketObj->Status)) +#. ($TicketObj->OwnerObj->Name()) +#. (loc($Ticket->Status())) +msgid "%1 (Unchanged)" +msgstr "%1 (未更改)" + +#: NOT FOUND IN SOURCE msgid "%1 - %2 shown" msgstr "顯示第 %1 - %2 ç†" -#: bin/rt-crontool:168 bin/rt-crontool:175 bin/rt-crontool:181 +#: bin/rt-crontool:194 bin/rt-crontool:201 bin/rt-crontool:207 #. ("--search-argument", "--search") #. ("--condition-argument", "--condition") #. ("--action-argument", "--action") msgid "%1 - An argument to pass to %2" msgstr "%1 - 傳éžçµ¦ %2 çš„ä¸€å€‹åƒæ•¸" -#: bin/rt-crontool:184 +#: bin/rt-crontool:210 #. ("--verbose") msgid "%1 - Output status updates to STDOUT" msgstr "%1 - 將更新狀態輸出到 STDOUT" -#: bin/rt-crontool:178 +#: bin/rt-crontool:204 #. ("--action") msgid "%1 - Specify the action module you want to use" msgstr "%1 - 指定欲使用的動作模組" -#: bin/rt-crontool:172 +#: bin/rt-crontool:198 #. ("--condition") msgid "%1 - Specify the condition module you want to use" msgstr "%1 - 指定欲使用的æ¢ä»¶æ¨¡çµ„" -#: bin/rt-crontool:165 +#: bin/rt-crontool:191 #. ("--search") msgid "%1 - Specify the search module you want to use" msgstr "%1 - 指定欲使用的查詢模組" -#: lib/RT/ScripAction_Overlay.pm:121 + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2004', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $RT::VERSION, + '2005', + '<a href="http://www.bestpractical.com?rt='.$RT::VERSION.'">Best Practical Solutions, LLC</a>',) + $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>',) +msgid "%1 RT %2 Copyright 1996-%3 %4." +msgstr "%1 RT %2 版,%4 版權所有,1996-%3。" + +#: lib/RT/ScripAction_Overlay.pm:151 #. ($self->Id) msgid "%1 ScripAction loaded" msgstr "載入手續 %1" -#: html/Edit/Elements/Page:48 -#. (scalar $count) +#: NOT FOUND IN SOURCE msgid "%1 Total" msgstr "å…± %1 ç†" -#: lib/RT/Ticket_Overlay.pm:3565 +#: lib/RT/Record.pm:1708 #. ($args{'Value'}, $cf->Name) msgid "%1 added as a value for %2" msgstr "新增 %1 作為 %2 的值" @@ -148,27 +187,31 @@ msgstr "別å %1 需è¦å¯ç”¨çš„申請單編號 " msgid "%1 aliases require a TicketId to work on (from %2) %3" msgstr "別å %1 需è¦å¯ç”¨çš„ç”³è«‹å–®ç·¨è™Ÿä»¥è™•ç† %3(出自 %2)" -#: lib/RT/Link_Overlay.pm:116 lib/RT/Link_Overlay.pm:123 +#: lib/RT/Link_Overlay.pm:145 lib/RT/Link_Overlay.pm:152 #. ($args{'Base'}) #. ($args{'Target'}) msgid "%1 appears to be a local object, but can't be found in the database" msgstr "%1 看來是個本地物件,å»ä¸åœ¨è³‡æ–™åº«è£¡" -#: html/Ticket/Elements/ShowDates:51 lib/RT/Transaction_Overlay.pm:481 +#: html/Ticket/Elements/ShowDates:73 lib/RT/Transaction_Overlay.pm:520 #. ($self->BriefDescription , $self->CreatorObj->Name) #. ($Ticket->LastUpdatedAsString, $Ticket->LastUpdatedByObj->Name) msgid "%1 by %2" msgstr "%1 (%2)" -#: lib/RT/Transaction_Overlay.pm:535 lib/RT/Transaction_Overlay.pm:624 lib/RT/Transaction_Overlay.pm:633 lib/RT/Transaction_Overlay.pm:636 -#. ($self->Field , ( $self->OldValue || $no_value ) , $self->NewValue) +#: 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->NewValue) +#. ($self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'") msgid "%1 changed from %2 to %3" msgstr "%1 的值從 %2 改為 %3" -#: lib/RT/Interface/Web.pm:893 x:896 +#: html/Search/Build.html:212 +#. ($Description) +msgid "%1 copy" +msgstr "%1 複製" + +#: lib/RT/Record.pm:930 msgid "%1 could not be set to %2." msgstr "無法將 %1 è¨å®šç‚º %2。" @@ -176,43 +219,53 @@ msgstr "無法將 %1 è¨å®šç‚º %2。" msgid "%1 couldn't init a transaction (%2)\\n" msgstr "%1 無法åˆå§‹æ›´æ–° (%2)\\n" -#: lib/RT/Ticket_Overlay.pm:2830 +#: lib/RT/Ticket_Overlay.pm:2743 #. ($self) msgid "%1 couldn't set status to resolved. RT's Database may be inconsistent." msgstr "%1 ç„¡æ³•å°‡ç¾æ³è¨æˆå·²è§£æ±ºã€‚RT 資料庫內容å¯èƒ½ä¸ä¸€è‡´ã€‚" -#: html/Elements/MyTickets:24 html/Work/Elements/MyTickets:9 +#: lib/RT/Transaction_Overlay.pm:560 +#. ($obj_type) +msgid "%1 created" +msgstr "已建立 %1" + +#: lib/RT/Transaction_Overlay.pm:565 +#. ($obj_type) +msgid "%1 deleted" +msgstr "已刪除 %1" + +#: html/Elements/MyTickets:47 #. ($rows) +msgid "%1 highest priority tickets I own" +msgstr "å‰ %1 份待處ç†ç”³è«‹å–®" + +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I own..." msgstr "å‰ %1 份待處ç†ç”³è«‹å–®..." -#: html/Elements/MyRequests:24 html/Work/Elements/MyRequests:9 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets I requested..." msgstr "å‰ %1 份é€å‡ºçš„申請單..." -#: html/Work/Elements/MyApprovals:5 -#. ($rows) +#: NOT FOUND IN SOURCE msgid "%1 highest priority tickets pending my approval..." msgstr "å‰ %1 ä»½å¾…ç°½æ ¸ç”³è«‹å–®..." -#: bin/rt-crontool:160 +#: bin/rt-crontool:186 #. ($0) msgid "%1 is a tool to act on tickets from an external scheduling tool, such as cron." msgstr "%1 是從外部排程程å¼(如 cron)來å°ç”³è«‹å–®é€²è¡Œæ“作的工具。" -#: lib/RT/Queue_Overlay.pm:743 +#: lib/RT/Queue_Overlay.pm:860 #. ($principal->Object->Name, $args{'Type'}) msgid "%1 is no longer a %2 for this queue." msgstr "%1 å·²ä¸å†æ˜¯æ¤è¡¨å–®çš„ %2。" -#: lib/RT/Ticket_Overlay.pm:1569 -#. ($principal->Object->Name, $args{'Type'}) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a %2 for this ticket." msgstr "%1 å·²ä¸å†æ˜¯æ¤ç”³è«‹å–®çš„ %2。" -#: lib/RT/Ticket_Overlay.pm:3621 -#. ($args{'Value'}, $cf->Name) +#: NOT FOUND IN SOURCE msgid "%1 is no longer a value for custom field %2" msgstr "%1 å·²ä¸å†æ˜¯è‡ªè¨‚æ¬„ä½ %2 的值。" @@ -220,20 +273,41 @@ msgstr "%1 å·²ä¸å†æ˜¯è‡ªè¨‚æ¬„ä½ %2 的值。" msgid "%1 isn't a valid Queue id." msgstr "%1 䏿˜¯ä¸€å€‹åˆæ³•的表單編號。" -#: html/Ticket/Elements/ShowBasics:35 -#. ($TimeWorked) +#: 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) msgid "%1 min" msgstr "%1 分é˜" +#: html/Elements/MyRequests:47 +#. ($rows) +msgid "%1 newest unowned tickets" +msgstr "å‰ %1 份待èªé ˜çš„申請單" + #: NOT FOUND IN SOURCE msgid "%1 not shown" msgstr "沒有顯示 %1" +#: lib/RT/CustomField_Overlay.pm:827 +msgid "%1 objects" +msgstr "%1 物件" + +#: NOT FOUND IN SOURCE +msgid "%1 recent tickets I own..." +msgstr "最新 %1 份待處ç†ç”³è«‹å–®..." + +#: NOT FOUND IN SOURCE +msgid "%1 recent tickets I requested..." +msgstr "最新 %1 份é€å‡ºçš„申請單..." + #: NOT FOUND IN SOURCE msgid "%1 result(s) found" msgstr "找到 %1 é …çµæžœ" -#: html/User/Elements/DelegateRights:75 +#: html/User/Elements/DelegateRights:97 #. (loc($ObjectType =~ /^RT::(.*)$/)) msgid "%1 rights" msgstr "%1權é™" @@ -254,28 +328,41 @@ msgstr "ä¸çŸ¥é“ %2 çš„ %1 類別" msgid "%1 was created without a CurrentUser\\n" msgstr "%1 新增時未指定ç¾è¡Œä½¿ç”¨è€…" -#: lib/RT/Action/ResolveMembers.pm:41 +#: lib/RT/Action/ResolveMembers.pm:63 #. (ref $self) msgid "%1 will resolve all members of a resolved group ticket." msgstr "%1 會解決在已解決群組裡æˆå“¡çš„申請單。" -#: lib/RT/Action/StallDependent.pm:40 -#. (ref $self) +#: NOT FOUND IN SOURCE msgid "%1 will stall a [local] BASE if it's dependent [or member] of a linked up request." msgstr "如果 %1 起始申請單ä¾è³´æ–¼æŸå€‹éˆçµï¼Œæˆ–是æŸå€‹éˆçµçš„æˆå“¡ï¼Œå®ƒå°‡æœƒè¢«å»¶å®•ã€‚" -#: lib/RT/Transaction_Overlay.pm:433 +#: lib/RT/CustomField_Overlay.pm:828 +msgid "%1's %2 objects" +msgstr "%1 å…§çš„ %2 物件" + +#: lib/RT/CustomField_Overlay.pm:829 +msgid "%1's %2's %3 objects" +msgstr "%1 å…§çš„ %2 çš„ %3 物件" + +#: html/Search/Elements/SearchPrivacy:52 html/Search/Elements/SelectSearchObject:55 html/Search/Elements/SelectSearchesForObjects:56 +#. ($object->Name) +#. ($Object->Name) +msgid "%1's saved searches" +msgstr "%1 已儲å˜çš„æŸ¥è©¢" + +#: lib/RT/Transaction_Overlay.pm:470 #. ($self) msgid "%1: no attachment specified" msgstr "%1:未指定附件" -#: html/Ticket/Elements/ShowTransaction:89 html/Work/Tickets/Elements/ShowTransaction:154 +#: html/Ticket/Elements/ShowTransactionAttachments:78 #. ($size) msgid "%1b" msgstr "%1 ä½å…ƒçµ„" -#: html/Ticket/Elements/ShowTransaction:86 html/Work/Tickets/Elements/ShowTransaction:151 -#. (int($size/102.4)/10) +#: html/Ticket/Elements/ShowTransactionAttachments:75 +#. (int( $size / 102.4 ) / 10) msgid "%1k" msgstr "%1k ä½å…ƒçµ„" @@ -283,7 +370,7 @@ msgstr "%1k ä½å…ƒçµ„" msgid "%quant(%1,result) found" msgstr "找到 %1 é …çµæžœ" -#: lib/RT/Ticket_Overlay.pm:1158 +#: lib/RT/Ticket_Overlay.pm:1118 #. ($args{'Status'}) msgid "'%1' is an invalid value for status" msgstr "'%1' 䏿˜¯ä¸€å€‹åˆæ³•的狀態值" @@ -300,7 +387,7 @@ msgstr "(é»žé¸æ¬²åˆªé™¤çš„æˆå“¡)" msgid "(Check box to delete scrip)" msgstr "(é»žé¸æ¬²åˆªé™¤çš„æ‰‹çºŒ)" -#: html/Admin/Elements/EditCustomFieldValues:24 html/Admin/Elements/EditQueueWatchers:28 html/Admin/Elements/EditScrips:34 html/Admin/Elements/EditTemplates:35 html/Admin/Elements/EditWorkflows:36 html/Admin/Groups/Members.html:51 html/Ticket/Elements/EditLinks:32 html/Ticket/Elements/EditPeople:45 html/User/Groups/Members.html:54 +#: 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 "(é»žé¸æ¬²åˆªé™¤çš„é …ç›®)" @@ -308,41 +395,53 @@ msgstr "(é»žé¸æ¬²åˆªé™¤çš„é …ç›®)" msgid "(Check boxes to delete)" msgstr "(é»žé¸æ¬²åˆªé™¤çš„é …ç›®)" -#: html/Ticket/Create.html:177 -msgid "(Enter ticket ids or URLs, seperated with spaces)" +#: html/Ticket/Elements/PreviewScrips:94 +msgid "(Check boxes to disable notifications to the listed recipients)" +msgstr "(é»žé¸æ¬²åœç”¨é€šçŸ¥çš„æ”¶ä»¶äºº)" + +#: html/Ticket/Elements/PreviewScrips:116 +msgid "(Check boxes to enable notifications to the listed recipients)" +msgstr "(é»žé¸æ¬²å•Ÿç”¨é€šçŸ¥çš„æ”¶ä»¶äºº)" + +#: html/Ticket/Create.html:209 +msgid "(Enter ticket ids or URLs, separated with spaces)" msgstr "(éµå…¥ç”³è«‹å–®ç·¨è™Ÿæˆ–ç¶²å€ï¼Œä»¥ç©ºç™½åˆ†éš”)" -#: html/Admin/Queues/Modify.html:53 html/Admin/Queues/Modify.html:59 +#: html/Admin/Queues/Modify.html:75 html/Admin/Queues/Modify.html:81 #. ($RT::CorrespondAddress) #. ($RT::CommentAddress) -msgid "(If left blank, will default to %1" +msgid "(If left blank, will default to %1)" msgstr "(如果留白, 則é è¨ç‚º %1)" #: NOT FOUND IN SOURCE msgid "(No Value)" msgstr "(沒有值)" -#: html/Admin/Elements/EditCustomFields:32 html/Admin/Elements/ListGlobalCustomFields:31 +#: html/Admin/Elements/EditCustomFields:74 html/Admin/Elements/ListGlobalCustomFields:53 msgid "(No custom fields)" msgstr "(沒有自訂欄ä½)" -#: html/Admin/Groups/Members.html:49 html/User/Groups/Members.html:52 +#: html/Admin/Groups/Members.html:71 html/User/Groups/Members.html:74 msgid "(No members)" msgstr "(沒有æˆå“¡)" -#: html/Admin/Elements/EditScrips:31 html/Admin/Elements/ListGlobalScrips:31 +#: html/Admin/Elements/EditScrips:53 html/Admin/Elements/ListGlobalScrips:49 msgid "(No scrips)" msgstr "(沒有手續)" -#: html/Admin/Elements/EditTemplates:30 +#: html/Admin/Elements/EditTemplates:52 msgid "(No templates)" msgstr "沒有範本" -#: html/Admin/Elements/EditWorkflows:31 +#: NOT FOUND IN SOURCE msgid "(No workflows)" msgstr "沒有æµç¨‹" -#: html/Ticket/Update.html:83 html/Work/Tickets/Update.html:52 +#: html/Admin/Elements/PickCustomFields:47 html/Admin/Elements/PickObjects:47 +msgid "(None)" +msgstr "(ç„¡)" + +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本給å單上以逗號隔開的電å郵件ä½å€ã€‚這<b>䏿œƒ</b>更改後續的收件者å單。)" @@ -350,11 +449,11 @@ msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本給å單上以逗號隔開的電åéƒ msgid "(Sends a blind carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„密件副本給å單上以逗號隔開的電å郵件ä½å€ã€‚這<b>䏿œƒ</b>更改後續的收件者å單。)" -#: html/Ticket/Create.html:78 +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的管ç†å“¡é›»å郵件ä½å€ã€‚這<b>將會</b>更改後續的收件者å單。)" -#: html/Ticket/Update.html:79 +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å郵件ä½å€ã€‚這<b>䏿œƒ</b>更改後續的收件者å單。)" @@ -362,79 +461,111 @@ msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電åéƒµä»¶ä½ msgid "(Sends a carbon-copy of this update to a comma-delimited list of email addresses. Does <b>not</b> change who will recieve future updates.)" msgstr "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å郵件ä½å€ã€‚這<b>䏿œƒ</b>更改後續的收件者å單。)" -#: html/Ticket/Create.html:68 +#: 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 "(é€å‡ºæœ¬ä»½æ›´æ–°çš„副本給å單上以逗號隔開的電å郵件ä½å€ã€‚這<b>將會</b>更改後續的收件者å單。)" -#: html/Ticket/Elements/EditCustomFieldEntries:35 html/Work/Tickets/Elements/EditCustomFieldEntries:48 html/Work/Tickets/Elements/ShowCustomFieldEntries:13 +#: html/Admin/Elements/EditScrip:102 +msgid "(Use these fields when you choose 'User Defined' for a condition or action)" +msgstr "(ç•¶æ¢ä»¶æˆ–動作è¨ç‚ºã€Œä½¿ç”¨è€…è‡ªè¨‚ã€æ™‚,請填入這些欄ä½)" + +#: NOT FOUND IN SOURCE +msgid "(default delegate)" +msgstr "(é è¨ä»£ç†äºº)" + +#: NOT FOUND IN SOURCE msgid "(delete)" msgstr "(刪除)" -#: html/Admin/Groups/index.html:32 html/User/Groups/index.html:32 +#: html/Admin/Groups/index.html:57 html/User/Groups/index.html:54 msgid "(empty)" msgstr "(空白)" -#: html/Edit/Global/CustomField/index.html:113 html/Edit/Global/Scrip/index.html:111 html/Edit/Global/Template/index.html:106 +#: NOT FOUND IN SOURCE msgid "(new)" msgstr "(新增)" -#: html/Admin/Users/index.html:38 +#: html/Admin/Users/index.html:60 msgid "(no name listed)" msgstr "(沒有列出姓å)" -#: html/Elements/MyRequests:42 html/Elements/MyTickets:44 html/Work/Elements/MyApprovals:37 html/Work/Elements/MyRequests:42 html/Work/Elements/MyTickets:51 +#: NOT FOUND IN SOURCE msgid "(no subject)" msgstr "(沒有主題)" -#: html/Admin/Elements/SelectRights:47 html/Elements/SelectCustomFieldValue:29 html/Ticket/Elements/EditCustomField:60 html/Ticket/Elements/EditCustomFieldValues:52 html/Ticket/Elements/ShowCustomFields:35 html/Work/Elements/EditCustomFieldValues:50 html/Work/Elements/EditCustomFields:32 html/Work/Tickets/Elements/EditCustomFieldValues:33 lib/RT/Transaction_Overlay.pm:534 +#: html/Admin/Elements/SelectRights:72 html/Elements/EditCustomFieldSelect:60 html/Elements/SelectCustomFieldValue:51 html/Elements/ShowCustomFields:65 lib/RT/Transaction_Overlay.pm:580 msgid "(no value)" msgstr "(ç„¡)" -#: html/Ticket/Elements/BulkLinks:27 html/Ticket/Elements/EditLinks:115 html/Work/Search/BulkLinks:3 +#: html/Admin/Elements/EditCustomFieldValues:47 +msgid "(no values)" +msgstr "(沒有值)" + +#: html/Elements/EditLinks:130 html/Ticket/Elements/BulkLinks:49 msgid "(only one ticket)" msgstr "(僅能指定一份申請單)" -#: html/Elements/MyRequests:51 html/Elements/MyTickets:54 html/Work/Elements/List:17 html/Work/Elements/MyRequests:52 html/Work/Elements/MyTickets:66 html/Work/Tickets/Elements/ShowBasics:52 +#: html/Elements/RT__Ticket/ColumnMap:146 msgid "(pending approval)" msgstr "(ç‰å¾…ç°½æ ¸)" -#: html/Elements/MyRequests:53 html/Elements/MyTickets:56 html/Work/Elements/MyRequests:54 html/Work/Elements/MyTickets:68 +#: html/Elements/RT__Ticket/ColumnMap:149 +msgid "(pending other Collection)" +msgstr "(ç‰å¾…其他集åˆ)" + +#: NOT FOUND IN SOURCE msgid "(pending other tickets)" msgstr "(ç‰å¾…其他申請單)" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:246 +#: NOT FOUND IN SOURCE msgid "(requestor's group)" msgstr "(申請人所屬)" -#: html/Admin/Users/Modify.html:49 +#: html/Admin/Users/Modify.html:71 msgid "(required)" msgstr "(å¿…å¡«)" -#: html/Ticket/Elements/ShowTransaction:92 html/Work/Tickets/Elements/ShowTransaction:39 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "(untitled)" msgstr "(未命å)" #: NOT FOUND IN SOURCE +msgid "*" +msgstr "★" + +#: NOT FOUND IN SOURCE msgid ":" msgstr ":" -#: html/Ticket/Elements/ShowBasics:31 +#: html/Ticket/Elements/ShowBasics:53 msgid "<% $Ticket->Status%>" msgstr "<% $Ticket->Status%>" -#: html/Elements/SelectTicketTypes:26 +#: html/Elements/SelectTicketTypes:48 msgid "<% $_ %>" msgstr "<% $_ %>" -#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:25 html/Work/Elements/104Header:43 +#: html/Search/Elements/SelectLinks:48 +msgid "<%$_%>" +msgstr "<%$_%>" + +#: html/Search/Elements/DisplayOptions:65 +msgid "<%$field%>" +msgstr "<%$field%>" + +#: docs/design_docs/string-extraction-guide.txt:54 html/Elements/CreateTicket:47 lib/RT/StyleGuide.pod:787 #. ($m->scomp('/Elements/SelectNewTicketQueue')) msgid "<input type=\"submit\" value=\"New ticket in\"> %1" msgstr "<input type=\"submit\" value=\"æå‡ºç”³è«‹å–®\"> %1" -#: etc/initialdata.zh:221 etc/initialdata:203 +#: etc/initialdata:218 msgid "A blank template" msgstr "空白範本" +#: html/Admin/Users/Modify.html:363 +msgid "A password was not set, so user won't be able to login." +msgstr "" + #: NOT FOUND IN SOURCE msgid "ACE Deleted" msgstr "ACE 已刪除" @@ -451,11 +582,11 @@ msgstr "無法刪除 ACE" msgid "ACE could not be found" msgstr "找ä¸åˆ° ACE" -#: lib/RT/ACE_Overlay.pm:156 lib/RT/Principal_Overlay.pm:180 +#: lib/RT/ACE_Overlay.pm:175 lib/RT/Principal_Overlay.pm:219 msgid "ACE not found" msgstr "找ä¸åˆ° ACE è¨å®š" -#: lib/RT/ACE_Overlay.pm:830 +#: lib/RT/ACE_Overlay.pm:854 msgid "ACEs can only be created and deleted." msgstr "祇能新增或刪除 ACE è¨å®šã€‚" @@ -463,72 +594,92 @@ msgstr "祇能新增或刪除 ACE è¨å®šã€‚" msgid "ACLEquivalence" msgstr "ACLEquivalence" -#: bin/rt-commit-handler:754 +#: html/Search/Elements/SelectAndOr:46 +msgid "AND" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Aborting to avoid unintended ticket modifications.\\n" msgstr "離開以å…ä¸å°å¿ƒæ›´æ”¹åˆ°ç”³è«‹å–®ã€‚\\n" -#: html/User/Elements/Tabs:31 +#: NOT FOUND IN SOURCE +msgid "About Me" +msgstr "個人資訊" + +#: html/User/Elements/Tabs:53 msgid "About me" msgstr "個人資訊" -#: html/Edit/Users/System:12 +#: NOT FOUND IN SOURCE msgid "Access Right" msgstr "系統使用登錄權é™" -#: html/Admin/Users/Modify.html:79 +#: html/Admin/Users/Modify.html:106 msgid "Access control" msgstr "å˜å–權é™" -#: html/Admin/Elements/EditScrip:56 html/Work/Tickets/Elements/ShowTransaction:18 +#: html/Admin/Elements/EditScrip:71 msgid "Action" msgstr "動作" -#: lib/RT/Scrip_Overlay.pm:146 +#: lib/RT/Scrip_Overlay.pm:173 #. ($args{'ScripAction'}) msgid "Action %1 not found" msgstr "動作 %1 找ä¸åˆ°" -#: bin/rt-crontool:122 +#: NOT FOUND IN SOURCE msgid "Action committed." msgstr "動作執行完畢" -#: bin/rt-crontool:118 +#: bin/rt-crontool:148 +msgid "Action committed.\\n" +msgstr "" + +#: bin/rt-crontool:144 msgid "Action prepared..." msgstr "動作準備完畢..." -#: html/Work/Elements/List:13 html/Work/Elements/SelectSearch:24 html/Work/Tickets/Create.html:28 html/Work/Tickets/Elements/ShowBasics:12 +#: NOT FOUND IN SOURCE msgid "Activated Date" msgstr "申請啟動時間" -#: html/Edit/Elements/104Buttons:71 html/Edit/Elements/ListButtons:7 +#: html/Search/Build.html:85 msgid "Add" msgstr "新增" -#: html/Search/Bulk.html:95 html/Work/Search/Bulk.html:74 +#: html/Search/Bulk.html:114 msgid "Add AdminCc" msgstr "新增管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: html/Search/Bulk.html:91 html/Work/Search/Bulk.html:68 +#: html/Search/Bulk.html:110 msgid "Add Cc" msgstr "新增副本收件人" -#: html/Ticket/Elements/EditCustomFieldEntries:71 html/Work/Tickets/Elements/ShowCustomFieldEntries:49 +#: html/Search/Elements/EditFormat:49 +msgid "Add Columns" +msgstr "" + +#: html/Search/Elements/PickCriteria:46 +msgid "Add Criteria" +msgstr "新增æ¢ä»¶" + +#: NOT FOUND IN SOURCE msgid "Add Entry" msgstr "新增列" -#: html/Ticket/Create.html:113 html/Ticket/Update.html:98 html/Work/Tickets/Elements/AddAttachments:18 +#: html/Ticket/Create.html:144 html/Ticket/Update.html:114 msgid "Add More Files" msgstr "新增更多附件" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:112 html/Admin/Elements/ModifyTemplateAsWorkflow:45 +#: NOT FOUND IN SOURCE msgid "Add Next State" msgstr "æ–°å¢žä¸‹ä¸€é …é—œå¡" -#: html/Search/Bulk.html:87 html/Work/Search/Bulk.html:62 +#: html/Search/Bulk.html:106 msgid "Add Requestor" msgstr "新增申請人" -#: html/Admin/Elements/AddCustomFieldValue:24 +#: html/Admin/Elements/AddCustomFieldValue:46 msgid "Add Value" msgstr "新增欄ä½å€¼" @@ -552,41 +703,53 @@ msgstr "新增全域手續" msgid "Add a scrip to this queue" msgstr "æ–°å¢žä¸€é“æ‰‹çºŒåˆ°æ¤è¡¨å–®" -#: html/Admin/Global/Scrip.html:54 +#: html/Admin/Global/Scrip.html:76 msgid "Add a scrip which will apply to all queues" msgstr "新增一é“用於所有表單的手續" -#: html/Search/Bulk.html:127 html/Work/Search/Bulk.html:80 +#: html/Search/Build.html:85 +msgid "Add additional criteria" +msgstr "新增查詢æ¢ä»¶" + +#: html/Search/Bulk.html:146 msgid "Add comments or replies to selected tickets" msgstr "新增評論或回覆到指定的申請單" -#: html/Admin/Groups/Members.html:41 html/User/Groups/Members.html:38 +#: html/Admin/Groups/Members.html:63 html/User/Groups/Members.html:60 msgid "Add members" msgstr "新增æˆå“¡" -#: html/Admin/Queues/People.html:65 html/Ticket/Elements/AddWatchers:27 +#: html/Admin/Queues/People.html:87 html/Ticket/Elements/AddWatchers:49 msgid "Add new watchers" msgstr "新增視察員" +#: lib/RT/CustomField_Overlay.pm:103 +msgid "Add, delete and modify custom field values for objects" +msgstr "" + #: NOT FOUND IN SOURCE msgid "AddNextState" msgstr "æ–°å¢žä¸‹ä¸€é …é—œå¡" -#: lib/RT/Queue_Overlay.pm:643 +#: lib/RT/Queue_Overlay.pm:760 #. ($args{'Type'}) msgid "Added principal as a %1 for this queue" msgstr "å–®ä½å·²æ–°å¢žç‚ºæ¤è¡¨å–®çš„ %1" -#: lib/RT/Ticket_Overlay.pm:1453 +#: lib/RT/Ticket_Overlay.pm:1416 #. ($self->loc($args{'Type'})) msgid "Added principal as a %1 for this ticket" msgstr "å–®ä½å·²æ–°å¢žç‚ºæ¤ç”³è«‹å–®çš„ %1" -#: html/Admin/Elements/ModifyUser:75 html/Admin/Users/Modify.html:121 html/User/Prefs.html:87 html/Work/Preferences/Info:77 +#: NOT FOUND IN SOURCE +msgid "Additional Hints" +msgstr "é¡å¤–æç¤º" + +#: html/Admin/Users/Modify.html:146 html/User/Prefs.html:133 msgid "Address1" msgstr "ä½å€" -#: html/Admin/Elements/ModifyUser:77 html/Admin/Users/Modify.html:126 html/User/Prefs.html:89 html/Work/Preferences/Info:79 +#: html/Admin/Users/Modify.html:151 html/User/Prefs.html:137 msgid "Address2" msgstr "ä½å€(續)" @@ -594,19 +757,19 @@ msgstr "ä½å€(續)" msgid "Adjust Blinking Rate" msgstr "調整閃çˆé€Ÿåº¦å¿«æ…¢" -#: html/Edit/Groups/Admin:9 +#: NOT FOUND IN SOURCE msgid "Admin" msgstr "管ç†å“¡" -#: html/Ticket/Create.html:73 +#: html/Ticket/Create.html:95 msgid "Admin Cc" msgstr "管ç†å“¡å‰¯æœ¬" -#: etc/initialdata.zh:303 etc/initialdata:280 +#: etc/initialdata:295 msgid "Admin Comment" msgstr "管ç†å“¡è©•è«–" -#: etc/initialdata.zh:261 etc/initialdata:259 +#: etc/initialdata:274 msgid "Admin Correspondence" msgstr "管ç†å“¡å›žè¦†" @@ -614,7 +777,7 @@ msgstr "管ç†å“¡å›žè¦†" msgid "Admin Rights" msgstr "管ç†å“¡æ¬Šé™" -#: html/Admin/Queues/index.html:24 html/Admin/Queues/index.html:27 +#: html/Admin/Queues/index.html:46 html/Admin/Queues/index.html:49 msgid "Admin queues" msgstr "表單管ç†" @@ -622,7 +785,7 @@ msgstr "表單管ç†" msgid "Admin users" msgstr "使用者管ç†" -#: html/Admin/Global/index.html:25 html/Admin/Global/index.html:27 +#: html/Admin/Global/index.html:47 html/Admin/Global/index.html:49 msgid "Admin/Global configuration" msgstr "管ç†/全域è¨å®š" @@ -630,11 +793,11 @@ msgstr "管ç†/全域è¨å®š" msgid "Admin/Groups" msgstr "管ç†/群組" -#: html/Admin/Queues/Modify.html:24 html/Admin/Queues/Modify.html:28 +#: NOT FOUND IN SOURCE msgid "Admin/Queue/Basics" msgstr "管ç†/表單/基本資訊" -#: html/Edit/Global/Basic/Top:60 +#: NOT FOUND IN SOURCE msgid "AdminAddress" msgstr "管ç†å“¡ Email" @@ -642,7 +805,7 @@ msgstr "管ç†å“¡ Email" msgid "AdminAllPersonalGroups" msgstr "ç®¡ç†æ‰€æœ‰ä»£ç†äººç¾¤çµ„" -#: etc/initialdata.zh:74 etc/initialdata:56 html/Admin/Elements/ModifyTemplateAsWorkflow:155 html/Ticket/Elements/ShowPeople:38 html/Ticket/Update.html:49 lib/RT/ACE_Overlay.pm:88 +#: etc/initialdata:56 html/Ticket/Elements/ShowPeople:60 lib/RT/ACE_Overlay.pm:114 msgid "AdminCc" msgstr "管ç†å“¡å‰¯æœ¬" @@ -654,11 +817,15 @@ msgstr "管ç†å“¡è©•è«–" msgid "AdminCorrespondence" msgstr "管ç†å“¡å›žè¦†" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/CustomField_Overlay.pm:101 +msgid "AdminCustomField" +msgstr "管ç†è‡ªè¨‚欄ä½" + +#: NOT FOUND IN SOURCE msgid "AdminCustomFields" msgstr "管ç†è‡ªè¨‚欄ä½" -#: html/Edit/Groups/Admin:12 lib/RT/Group_Overlay.pm:145 +#: lib/RT/Group_Overlay.pm:171 msgid "AdminGroup" msgstr "管ç†ç¾¤çµ„" @@ -666,7 +833,7 @@ msgstr "管ç†ç¾¤çµ„" msgid "AdminGroupDescription" msgstr "管ç†ç¾¤çµ„æè¿°" -#: lib/RT/Group_Overlay.pm:147 +#: lib/RT/Group_Overlay.pm:173 msgid "AdminGroupMembership" msgstr "管ç†ç¾¤çµ„æˆå“¡" @@ -682,15 +849,15 @@ msgstr "管ç†ç¾¤çµ„權é™" msgid "AdminGroupStatus" msgstr "管ç†ç¾¤çµ„狀態" -#: lib/RT/System.pm:58 +#: lib/RT/System.pm:81 msgid "AdminOwnPersonalGroups" msgstr "管ç†ä»£ç†äººç¾¤çµ„" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:93 msgid "AdminQueue" msgstr "管ç†è¡¨å–®" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:82 msgid "AdminUsers" msgstr "管ç†ä½¿ç”¨è€…" @@ -698,19 +865,27 @@ msgstr "管ç†ä½¿ç”¨è€…" msgid "Administrative" msgstr "行政類" -#: html/Admin/Queues/People.html:47 html/Ticket/Elements/EditPeople:53 +#: html/Admin/Queues/People.html:69 html/Ticket/Elements/EditPeople:75 msgid "Administrative Cc" msgstr "管ç†å“¡å‰¯æœ¬" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:233 +#: NOT FOUND IN SOURCE msgid "Admins" msgstr "主管" +#: html/Ticket/Elements/Tabs:197 +msgid "Advanced" +msgstr "進階" + #: NOT FOUND IN SOURCE msgid "Advanced Search" msgstr "進階查詢" -#: html/Elements/SelectDateRelation:35 +#: NOT FOUND IN SOURCE +msgid "Advanced Search Criteria" +msgstr "進階查詢æ¢ä»¶" + +#: html/Elements/SelectDateRelation:57 msgid "After" msgstr "晚於" @@ -718,31 +893,35 @@ msgstr "晚於" msgid "Age" msgstr "ç¶“æ·æ™‚é–“" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:172 html/Edit/Global/Workflow/Action:39 +#: html/Search/Elements/PickCriteria:52 +msgid "Aggregator" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Alias" msgstr "執行其他æµç¨‹" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:175 +#: NOT FOUND IN SOURCE msgid "Alias for" msgstr "相當於" -#: html/Edit/Queues/index.html:33 html/Work/Delegates/index.html:13 html/Work/Elements/SelectSearch:11 html/Work/Queues/Select.html:14 html/Work/Queues/index.html:13 +#: NOT FOUND IN SOURCE msgid "All" msgstr "全部" -#: etc/initialdata.zh:372 etc/initialdata:348 +#: etc/initialdata:363 msgid "All Approvals Passed" msgstr "完æˆå…¨éƒ¨ç°½æ ¸" -#: html/Edit/Global/Workflow/Condition:16 +#: NOT FOUND IN SOURCE msgid "All Condition" msgstr "所有æ¢ä»¶" -#: html/Admin/Elements/EditCustomFields:95 +#: NOT FOUND IN SOURCE msgid "All Custom Fields" msgstr "所有自訂欄ä½" -#: html/Admin/Queues/index.html:52 +#: html/Admin/Queues/index.html:75 msgid "All Queues" msgstr "所有表單" @@ -751,6 +930,10 @@ msgid "All Users" msgstr "全體員工" #: NOT FOUND IN SOURCE +msgid "All done! Now you can proceed to %1." +msgstr "處ç†å®Œç•¢ï¼æ‚¨ç¾åœ¨å¯ä»¥ç¹¼çºŒé€²è¡Œ %1。" + +#: NOT FOUND IN SOURCE msgid "Allowance Request" msgstr "ç¦åˆ©è£œåŠ©ç”³è«‹" @@ -762,36 +945,56 @@ msgstr "無論寄件來æºç‚ºä½•,一律寄信給申請人" msgid "Amount" msgstr "數é¡" -#: html/Edit/Global/Workflow/Condition:13 +#: html/Search/Elements/EditQuery:56 +msgid "And/Or" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Any Condition" msgstr "ä»»æ„æ¢ä»¶" -#: html/Edit/Global/Scrip/List:10 html/Edit/Global/Scrip/Top:74 +#: NOT FOUND IN SOURCE +msgid "Applies To" +msgstr "套用於" + +#: html/Admin/CustomFields/Modify.html:73 html/Admin/Elements/CustomFieldTabs:83 +msgid "Applies to" +msgstr "套用於" + +#: html/Search/Edit.html:64 +msgid "Apply" +msgstr "套用" + +#: NOT FOUND IN SOURCE msgid "Apply Template" msgstr "引用範本" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:138 html/Elements/Tabs:55 html/Work/Approvals/Elements/Approve:6 +#: html/Search/Edit.html:64 +msgid "Apply your changes" +msgstr "套用更動" + +#: html/Elements/Tabs:74 msgid "Approval" msgstr "ç°½æ ¸" -#: html/Approvals/Display.html:45 html/Approvals/Elements/ShowDependency:41 html/Approvals/index.html:64 +#: 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) msgid "Approval #%1: %2" msgstr "ç°½æ ¸å–® #%1:%2" -#: html/Approvals/index.html:53 +#: html/Approvals/index.html:75 #. ($ticket->Id) msgid "Approval #%1: Notes not recorded due to a system error" msgstr "ç°½æ ¸å–® #%1:系統錯誤,記錄失敗" -#: html/Approvals/index.html:51 +#: html/Approvals/index.html:73 #. ($ticket->Id) msgid "Approval #%1: Notes recorded" msgstr "ç°½æ ¸å–® #%1:記錄完畢" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:123 +#: NOT FOUND IN SOURCE msgid "Approval Details" msgstr "ç°½æ ¸ç´°ç¯€" @@ -799,15 +1002,15 @@ msgstr "ç°½æ ¸ç´°ç¯€" msgid "Approval Due" msgstr "ç°½æ ¸æ™‚é™" -#: html/Work/Approvals/Elements/Approve:37 +#: NOT FOUND IN SOURCE msgid "Approval Notes" msgstr "ç°½æ ¸æ„見" -#: etc/initialdata.zh:357 etc/initialdata:336 +#: etc/initialdata:351 msgid "Approval Passed" msgstr "å®ŒæˆæŸé …ç°½æ ¸" -#: etc/initialdata.zh:383 etc/initialdata:359 +#: etc/initialdata:374 msgid "Approval Rejected" msgstr "é§å›žæŸé …ç°½æ ¸" @@ -815,7 +1018,7 @@ msgstr "é§å›žæŸé …ç°½æ ¸" msgid "Approval Result" msgstr "ç°½æ ¸çµæžœ" -#: html/Work/Approvals/Elements/Approve:25 +#: NOT FOUND IN SOURCE msgid "Approval Status" msgstr "æ ¸å‡†çµæžœ" @@ -823,23 +1026,23 @@ msgstr "æ ¸å‡†çµæžœ" msgid "Approval Type" msgstr "ç°½æ ¸ç¨®é¡ž" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:25 +#: NOT FOUND IN SOURCE msgid "Approval diagram" msgstr "ç°½æ ¸æµç¨‹" -#: html/Approvals/Elements/Approve:43 html/Work/Approvals/Elements/Approve:29 +#: html/Approvals/Elements/Approve:65 msgid "Approve" msgstr "æ ¸å‡†" -#: html/Work/Approvals/Elements/Approve:21 html/Work/Elements/List:9 +#: NOT FOUND IN SOURCE msgid "Approver" msgstr "ç°½æ ¸äºº" -#: html/Edit/Global/Workflow/Action:29 html/Edit/Global/Workflow/Owner.html:10 +#: NOT FOUND IN SOURCE msgid "Approver Setting" msgstr "åŸ·è¡Œç°½æ ¸äººè¨å®š" -#: etc/initialdata.zh:516 etc/initialdata:486 etc/upgrade/2.1.71:148 html/Edit/Elements/CreateApprovalsQueue:122 +#: etc/initialdata:504 msgid "Approver's notes: %1" msgstr "ç°½æ ¸å‚™è¨»ï¼š%1" @@ -847,7 +1050,7 @@ msgstr "ç°½æ ¸å‚™è¨»ï¼š%1" msgid "Apr" msgstr "四月" -#: lib/RT/Date.pm:414 +#: lib/RT/Date.pm:440 msgid "Apr." msgstr "04" @@ -855,47 +1058,64 @@ msgstr "04" msgid "April" msgstr "四月" -#: html/Edit/Elements/104Buttons:24 +#: NOT FOUND IN SOURCE msgid "Are you sure to delete checked items?" msgstr "您確定è¦åˆªé™¤ï¼Ÿ" -#: html/Elements/SelectSortOrder:34 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:73 msgid "Ascending" msgstr "éžå¢ž" -#: html/Search/Bulk.html:136 html/SelfService/Update.html:32 html/Ticket/ModifyAll.html:82 html/Ticket/Update.html:98 html/Work/Search/Bulk.html:88 +#: lib/RT/Queue_Overlay.pm:97 +msgid "Assign and remove custom fields" +msgstr "指派åŠç§»é™¤è‡ªè¨‚欄ä½" + +#: lib/RT/Queue_Overlay.pm:97 +msgid "AssignCustomFields" +msgstr "指派自訂欄ä½" + +#: html/Search/Bulk.html:164 html/SelfService/Update.html:87 html/Ticket/ModifyAll.html:115 html/Ticket/Update.html:114 msgid "Attach" msgstr "附件" -#: html/SelfService/Create.html:64 html/Ticket/Create.html:109 html/Work/Tickets/Elements/AddAttachments:15 +#: html/SelfService/Create.html:92 html/Ticket/Create.html:140 msgid "Attach file" msgstr "é™„åŠ æª”æ¡ˆ" -#: html/Ticket/Create.html:97 html/Ticket/Update.html:87 html/Work/Tickets/Elements/AddAttachments:6 +#: html/SelfService/Update.html:75 html/Ticket/Create.html:128 html/Ticket/Update.html:92 msgid "Attached file" msgstr "ç¾æœ‰é™„ä»¶" -#: NOT FOUND IN SOURCE +#: html/Ticket/ShowEmailRecord.html:52 html/Ticket/ShowEmailRecord.html:56 html/Ticket/ShowEmailRecord.html:59 +#. ($Attachment) msgid "Attachment '%1' could not be loaded" msgstr "無法載入附件 '%1'" -#: lib/RT/Transaction_Overlay.pm:441 +#: lib/RT/Transaction_Overlay.pm:478 msgid "Attachment created" msgstr "附件新增完畢" -#: lib/RT/Tickets_Overlay.pm:1189 +#: lib/RT/Tickets_Overlay.pm:1673 msgid "Attachment filename" msgstr "附件檔å" -#: html/Ticket/Elements/ShowAttachments:25 html/Work/Tickets/Elements/ShowTransaction:32 +#: html/Ticket/Elements/ShowAttachments:47 msgid "Attachments" msgstr "附件" +#: lib/RT/Attributes_Overlay.pm:172 +msgid "Attribute Deleted" +msgstr "已刪除該屬性" + +#: NOT FOUND IN SOURCE +msgid "Attributes" +msgstr "屬性" + #: NOT FOUND IN SOURCE msgid "Aug" msgstr "八月" -#: lib/RT/Date.pm:418 +#: lib/RT/Date.pm:444 msgid "Aug." msgstr "08" @@ -903,7 +1123,7 @@ msgstr "08" msgid "August" msgstr "八月" -#: html/Admin/Elements/ModifyUser:65 +#: NOT FOUND IN SOURCE msgid "AuthSystem" msgstr "èªè‰æ–¹å¼" @@ -915,11 +1135,11 @@ msgstr "自動é§å›žè¡¨å–®" msgid "AutoResolve" msgstr "自動完æˆè¡¨å–®è™•ç†" -#: etc/initialdata.zh:224 etc/initialdata:206 +#: etc/initialdata:221 msgid "Autoreply" msgstr "自動回覆" -#: etc/initialdata.zh:90 etc/initialdata:72 +#: etc/initialdata:72 msgid "Autoreply To Requestors" msgstr "自動å°ç”³è«‹äººå›žè¦†" @@ -927,7 +1147,11 @@ msgstr "自動å°ç”³è«‹äººå›žè¦†" msgid "AutoreplyToRequestors" msgstr "自動å°ç”³è«‹äººå›žè¦†" -#: html/Edit/Rights/index.html:16 +#: NOT FOUND IN SOURCE +msgid "Available Columns" +msgstr "å¯ç”¨çš„æ¬„ä½ï¼š" + +#: NOT FOUND IN SOURCE msgid "Available Rights:" msgstr "權é™é …目列表:" @@ -935,7 +1159,7 @@ msgstr "權é™é …目列表:" msgid "Back to Homepage" msgstr "回到首é " -#: html/Work/Elements/BackButton:2 html/Work/Search/Bulk.html:101 +#: NOT FOUND IN SOURCE msgid "Back to Previous" msgstr "回上é " @@ -947,8 +1171,7 @@ msgstr "錯誤的 PGP ç°½ç« ï¼š%1\\n" msgid "Bad attachment id. Couldn't find attachment '%1'\\n" msgstr "錯誤的附件編號。無法找到附件 '%1'\\n" -#: bin/rt-commit-handler:826 -#. ($val) +#: NOT FOUND IN SOURCE msgid "Bad data in %1" msgstr "%1 的資料錯誤" @@ -956,23 +1179,27 @@ msgstr "%1 的資料錯誤" msgid "Bad transaction number for attachment. %1 should be %2\\n" msgstr "附件的處ç†è™Ÿç¢¼éŒ¯èª¤ã€‚%1 應為 %2\\n" -#: html/Admin/Elements/GroupTabs:38 html/Admin/Elements/QueueTabs:38 html/Admin/Elements/UserTabs:37 html/Edit/Global/autohandler:6 html/Edit/Queues/autohandler:17 html/Edit/Users/index.html:121 html/Ticket/Elements/Tabs:89 html/User/Elements/GroupTabs:37 +#: 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 "基本資訊" -#: html/Ticket/Update.html:81 html/Work/Tickets/Update.html:49 +#: NOT FOUND IN SOURCE +msgid "Batch Approval" +msgstr "æ‰¹æ¬¡ç°½æ ¸" + +#: html/Ticket/Update.html:86 msgid "Bcc" msgstr "密件副本" -#: html/Admin/Elements/EditScrip:87 html/Admin/Global/GroupRights.html:84 html/Admin/Global/Template.html:45 html/Admin/Global/UserRights.html:53 html/Admin/Global/Workflow.html:46 html/Admin/Groups/GroupRights.html:72 html/Admin/Groups/Members.html:80 html/Admin/Groups/Modify.html:55 html/Admin/Groups/UserRights.html:54 html/Admin/Queues/GroupRights.html:85 html/Admin/Queues/Template.html:44 html/Admin/Queues/UserRights.html:53 html/Admin/Queues/Workflow.html:44 html/User/Groups/Modify.html:55 +#: 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 "請別忘了儲å˜ä¿®æ”¹ã€‚" -#: html/Elements/SelectDateRelation:33 lib/RT/CurrentUser.pm:321 +#: html/Elements/SelectDateRelation:55 lib/RT/CurrentUser.pm:360 msgid "Before" msgstr "æ—©æ–¼" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:44 +#: NOT FOUND IN SOURCE msgid "Begin Approval" msgstr "é–‹å§‹ç°½æ ¸" @@ -980,23 +1207,39 @@ msgstr "é–‹å§‹ç°½æ ¸" msgid "Begin From " msgstr "èµ·å§‹æ—¥" -#: html/Edit/Users/Info:25 +#: html/Elements/Header:80 +msgid "Best Practical Solutions, LLC corporate logo" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Binary" +msgstr "檔案" + +#: NOT FOUND IN SOURCE msgid "Birthday" msgstr "生日" -#: etc/initialdata.zh:220 etc/initialdata:202 +#: etc/initialdata:217 msgid "Blank" msgstr "空白範本" -#: html/Search/Listing.html:78 html/Work/Search/index.html:53 +#: html/Search/Elements/EditFormat:84 +msgid "Bold" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Bookmarkable URL for this search" msgstr "å°‡æŸ¥è©¢çµæžœè½‰ç‚ºå¯æ”¾å…¥æ›¸ç±¤çš„ç¶²å€" -#: html/Ticket/Elements/ShowHistory:38 html/Ticket/Elements/ShowHistory:44 +#: html/Search/Results.html:81 +msgid "Bookmarkable link" +msgstr "坿”¾å…¥æ›¸ç±¤çš„ç¶²å€" + +#: html/Ticket/Elements/ShowHistory:60 html/Ticket/Elements/ShowHistory:66 msgid "Brief headers" msgstr "ç²¾ç°¡æ¨™é æª”" -#: html/Search/Bulk.html:24 html/Search/Bulk.html:25 +#: html/Search/Bulk.html:46 html/Search/Bulk.html:47 msgid "Bulk ticket update" msgstr "更新整批申請單" @@ -1008,40 +1251,57 @@ msgstr "事æ¥éƒ¨" msgid "Business Unit:" msgstr "事æ¥éƒ¨ï¼š" -#: lib/RT/User_Overlay.pm:1524 +#: lib/RT/User_Overlay.pm:1722 msgid "Can not modify system users" msgstr "無法更改系統使用者" -#: lib/RT/Queue_Overlay.pm:66 +#: lib/RT/Queue_Overlay.pm:92 msgid "Can this principal see this queue" msgstr "è©²å–®ä½æ˜¯å¦èƒ½æŸ¥é–±æ¤è¡¨å–®" -#: lib/RT/CustomField_Overlay.pm:205 +#: lib/RT/CustomField_Overlay.pm:370 msgid "Can't add a custom field value without a name" msgstr "ä¸èƒ½æ–°å¢žæ²’有å稱的自訂欄ä½å€¼" -#: lib/RT/Link_Overlay.pm:131 +#: html/Admin/CustomFields/Objects.html:86 +#. ($Class) +msgid "Can't find a collection class for '%1'" +msgstr "" + +#: html/Search/Build.html:761 +msgid "Can't find a saved search to work with" +msgstr "找ä¸åˆ°å·²å„²å˜çš„æŸ¥è©¢" + +#: lib/RT/Link_Overlay.pm:160 msgid "Can't link a ticket to itself" msgstr "申請單ä¸èƒ½éˆçµè‡ªå·±ã€‚" -#: lib/RT/Ticket_Overlay.pm:2807 +#: NOT FOUND IN SOURCE msgid "Can't merge into a merged ticket. You should never get this error" msgstr "ä¸èƒ½æ•´åˆé€²å·²æ•´åˆéŽçš„申請單。這個錯誤ä¸è©²ç™¼ç”Ÿã€‚" -#: lib/RT/Ticket_Overlay.pm:2625 lib/RT/Ticket_Overlay.pm:2694 +#: html/Search/Build.html:766 +msgid "Can't save this search" +msgstr "ç„¡æ³•å„²å˜æ¤é …查詢" + +#: lib/RT/Record.pm:1266 lib/RT/Record.pm:1344 msgid "Can't specifiy both base and target" msgstr "ä¸èƒ½åŒæ™‚指定起始申請單與目的申請單" -#: html/Edit/Elements/PopFooter:8 +#: NOT FOUND IN SOURCE msgid "Cancel" msgstr "å–æ¶ˆ" -#: html/autohandler:113 +#: html/autohandler:148 #. ($msg) msgid "Cannot create user: %1" msgstr "無法新增使用者:%1" #: NOT FOUND IN SOURCE +msgid "Cannot login: Your system clock differs from server's by %1 seconds!" +msgstr "您的系統時é˜å’Œä¼ºæœå™¨ç›¸å·® %1 秒,無法登入ï¼" + +#: NOT FOUND IN SOURCE msgid "Card No." msgstr "å¡è™Ÿ" @@ -1053,7 +1313,7 @@ msgstr "分類管ç†" msgid "Category" msgstr "分類" -#: etc/initialdata.zh:68 etc/initialdata:50 html/Admin/Queues/People.html:43 html/SelfService/Create.html:48 html/Ticket/Create.html:63 html/Ticket/Elements/EditPeople:50 html/Ticket/Elements/ShowPeople:34 html/Ticket/Update.html:44 html/Ticket/Update.html:76 html/Work/Tickets/Update.html:43 lib/RT/ACE_Overlay.pm:87 +#: 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 msgid "Cc" msgstr "副本" @@ -1069,27 +1329,31 @@ msgstr "董事長室" msgid "Change Ticket" msgstr "修改申請單" -#: html/SelfService/Prefs.html:30 +#: html/SelfService/Prefs.html:52 msgid "Change password" msgstr "更改密碼" -#: html/Edit/Global/Basic/Top:70 +#: NOT FOUND IN SOURCE msgid "ChangeOwnerUI" msgstr "å¯å¦é¸æ“‡è¡¨å–®æ‰¿è¾¦äºº" -#: html/Ticket/Create.html:100 html/Ticket/Elements/EditCustomFieldEntries:35 html/Ticket/Update.html:90 html/Work/Tickets/Elements/ShowCustomFieldEntries:13 +#: html/Elements/Submit:100 +msgid "Check All" +msgstr "全部é¸å–" + +#: html/SelfService/Update.html:78 html/Ticket/Create.html:131 html/Ticket/Update.html:95 msgid "Check box to delete" msgstr "鏿“‡æ¬²åˆªé™¤çš„é …ç›®" -#: html/Admin/Elements/SelectRights:30 +#: html/Admin/Elements/SelectRights:55 msgid "Check box to revoke right" msgstr "鏿“‡æ¬²æ’¤æ¶ˆçš„æ¬Šåˆ©" -#: html/Ticket/Create.html:182 html/Ticket/Elements/BulkLinks:42 html/Ticket/Elements/EditLinks:130 html/Ticket/Elements/EditLinks:68 html/Ticket/Elements/ShowLinks:56 html/Work/Search/BulkLinks:18 +#: html/Elements/EditLinks:146 html/Elements/EditLinks:85 html/Elements/ShowLinks:78 html/Ticket/Create.html:214 html/Ticket/Elements/BulkLinks:64 msgid "Children" msgstr "å申請單" -#: html/Edit/Elements/PickUsers:21 html/Edit/Global/UserRight/List:8 html/Edit/Global/UserRight/Top:19 html/Edit/Users/List:6 html/Edit/Users/Top:18 +#: NOT FOUND IN SOURCE msgid "Chinese Name" msgstr "䏿–‡å§“å" @@ -1097,27 +1361,31 @@ msgstr "䏿–‡å§“å" msgid "Chinese/English" msgstr "ä¸è‹±æ–‡" -#: html/Admin/Elements/ModifyUser:79 html/Admin/Users/Modify.html:131 html/User/Prefs.html:91 html/Work/Preferences/Info:81 +#: html/Admin/Users/Modify.html:156 html/User/Prefs.html:141 msgid "City" msgstr "所在城市" -#: html/Edit/Elements/104Top:30 +#: NOT FOUND IN SOURCE msgid "ClassicUI" msgstr "傳統介é¢" -#: html/Ticket/Elements/ShowDates:46 +#: html/Elements/Submit:102 +msgid "Clear All" +msgstr "全部清除" + +#: html/Ticket/Elements/ShowDates:68 msgid "Closed" msgstr "已解決" -#: html/SelfService/Closed.html:24 +#: NOT FOUND IN SOURCE msgid "Closed Tickets" msgstr "已解決的申請單" -#: html/SelfService/Elements/Tabs:44 +#: html/SelfService/Closed.html:46 html/SelfService/Elements/Tabs:66 msgid "Closed tickets" msgstr "已解決的申請單" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:181 html/Edit/Global/Workflow/Action:58 html/Edit/Global/Workflow/Condition:51 +#: NOT FOUND IN SOURCE msgid "Code" msgstr "執行程å¼ç¢¼" @@ -1125,11 +1393,11 @@ msgstr "執行程å¼ç¢¼" msgid "Command not understood!\\n" msgstr "指令無法辨è˜ï¼\\n" -#: html/Ticket/Elements/ShowTransaction:166 html/Ticket/Elements/Tabs:152 html/Work/Search/Bulk.html:89 html/Work/Tickets/Display.html:37 html/Work/Tickets/Elements/ShowTransaction:114 html/Work/Tickets/Elements/ShowTransaction:27 +#: html/Ticket/Elements/ShowTransaction:182 html/Ticket/Elements/Tabs:176 msgid "Comment" msgstr "è©•è«–" -#: html/Admin/Elements/ModifyQueue:44 html/Admin/Queues/Modify.html:57 +#: html/Admin/Queues/Modify.html:79 msgid "Comment Address" msgstr "è©•è«–é›»å郵件地å€" @@ -1137,72 +1405,75 @@ msgstr "è©•è«–é›»å郵件地å€" msgid "Comment not recorded" msgstr "評論未被紀錄" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:112 msgid "Comment on tickets" msgstr "å°ç”³è«‹å–®æå‡ºè©•è«–" -#: lib/RT/Queue_Overlay.pm:85 +#: lib/RT/Queue_Overlay.pm:112 msgid "CommentOnTicket" msgstr "評論申請單" -#: html/Admin/Elements/ModifyUser:34 html/Work/Tickets/Update.html:59 +#: NOT FOUND IN SOURCE msgid "Comments" msgstr "è©•è«–" -#: html/Ticket/ModifyAll.html:69 html/Ticket/Update.html:68 html/Work/Tickets/Update.html:35 +#: html/Ticket/ModifyAll.html:91 html/Ticket/Update.html:73 msgid "Comments (Not sent to requestors)" msgstr "è©•è«–(ä¸é€çµ¦ç”³è«‹äºº)" -#: html/Search/Bulk.html:131 html/Work/Search/Bulk.html:83 +#: html/Search/Bulk.html:150 msgid "Comments (not sent to requestors)" msgstr "è©•è«–(ä¸é€çµ¦ç”³è«‹äºº)" -#: html/Elements/ViewUser:26 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Comments about %1" msgstr "å° %1 的評論" -#: html/Admin/Users/Modify.html:184 html/Ticket/Elements/ShowRequestor:43 +#: html/Admin/Users/Modify.html:224 html/Ticket/Elements/ShowRequestor:67 msgid "Comments about this user" msgstr "使用者æè¿°" -#: lib/RT/Transaction_Overlay.pm:543 +#: lib/RT/Transaction_Overlay.pm:623 msgid "Comments added" msgstr "新增評論完畢" -#: html/Edit/Elements/PopFooter:4 html/Edit/Elements/PopFooter:6 +#: NOT FOUND IN SOURCE msgid "Commit" msgstr "確èª" -#: lib/RT/Action/Generic.pm:139 +#: lib/RT/Action/Generic.pm:176 msgid "Commit Stubbed" msgstr "消除更動完畢" -#: html/Edit/Users/Info:41 +#: NOT FOUND IN SOURCE msgid "Company Name" msgstr "å…¬å¸å稱" #: NOT FOUND IN SOURCE +msgid "CompanySpecific" +msgstr "å„å…¬å¸ç¨ç«‹é¡¯ç¤º" + +#: NOT FOUND IN SOURCE msgid "Compile Restrictions" msgstr "è¨å®šæŸ¥è©¢æ¢ä»¶" -#: html/Admin/Elements/EditScrip:40 html/Admin/Elements/ModifyTemplateAsWorkflow:127 +#: html/Admin/Elements/EditScrip:63 msgid "Condition" msgstr "æ¢ä»¶" -#: bin/rt-crontool:108 +#: bin/rt-crontool:131 msgid "Condition matches..." msgstr "ç¬¦åˆæ¢ä»¶..." -#: lib/RT/Scrip_Overlay.pm:159 +#: lib/RT/Scrip_Overlay.pm:189 msgid "Condition not found" msgstr "未找到符åˆçš„ç¾æ³" -#: html/Edit/Global/GroupRight/Top:26 html/Edit/Global/UserRight/Top:45 html/Edit/Groups/Member:57 html/Elements/Tabs:49 +#: html/Elements/Tabs:81 msgid "Configuration" msgstr "è¨å®š" -#: html/SelfService/Prefs.html:32 +#: html/SelfService/Prefs.html:54 msgid "Confirm" msgstr "確èªå¯†ç¢¼" @@ -1210,7 +1481,7 @@ msgstr "確èªå¯†ç¢¼" msgid "Confirm Password" msgstr "密碼確èª" -#: html/Work/Approvals/Display.html:25 html/Work/Tickets/Create.html:161 html/Work/Tickets/Create.html:174 html/Work/Tickets/Update.html:81 +#: NOT FOUND IN SOURCE msgid "Confirm Submit" msgstr "確定é€å‡º" @@ -1218,7 +1489,7 @@ msgstr "確定é€å‡º" msgid "Contact System Administrator" msgstr "連絡系統管ç†å“¡" -#: html/Admin/Elements/ModifyUser:59 +#: NOT FOUND IN SOURCE msgid "ContactInfoSystem" msgstr "連絡資訊系統" @@ -1226,15 +1497,19 @@ msgstr "連絡資訊系統" msgid "Contacted date '%1' could not be parsed" msgstr "無法解讀è¯çµ¡æ—¥æœŸ '%1'" -#: html/Admin/Elements/ModifyTemplate:43 html/Admin/Elements/ModifyTemplateAsWorkflow:200 html/Ticket/ModifyAll.html:86 +#: html/Admin/Elements/ModifyTemplate:65 html/Elements/SelectAttachmentField:48 html/Ticket/ModifyAll.html:119 msgid "Content" msgstr "內容" +#: html/Elements/SelectAttachmentField:49 +msgid "Content-Type" +msgstr "內容類型" + #: NOT FOUND IN SOURCE msgid "Coould not create group" msgstr "無法新增群組" -#: html/Edit/Elements/104Buttons:74 +#: html/Search/Elements/EditSearches:64 msgid "Copy" msgstr "複製" @@ -1242,15 +1517,15 @@ msgstr "複製" msgid "Copy Field From:" msgstr "欲複製欄ä½ï¼š" -#: etc/initialdata.zh:282 etc/initialdata:271 +#: etc/initialdata:286 msgid "Correspondence" msgstr "回覆" -#: html/Admin/Elements/ModifyQueue:38 html/Admin/Queues/Modify.html:50 +#: NOT FOUND IN SOURCE msgid "Correspondence Address" msgstr "申請單回覆地å€" -#: lib/RT/Transaction_Overlay.pm:539 +#: lib/RT/Transaction_Overlay.pm:619 msgid "Correspondence added" msgstr "新增申請單回覆" @@ -1258,7 +1533,7 @@ msgstr "新增申請單回覆" msgid "Correspondence not recorded" msgstr "未紀錄申請單回覆" -#: lib/RT/Ticket_Overlay.pm:3552 +#: NOT FOUND IN SOURCE msgid "Could not add new custom field value for ticket. " msgstr "ä¸èƒ½æ–°å¢žè‡ªè¨‚欄ä½çš„值 " @@ -1266,39 +1541,55 @@ msgstr "ä¸èƒ½æ–°å¢žè‡ªè¨‚欄ä½çš„值 " msgid "Could not add new custom field value for ticket. %1 " msgstr "ä¸èƒ½æ–°å¢žè‡ªè¨‚欄ä½çš„值。%1 " -#: lib/RT/Ticket_Overlay.pm:3058 lib/RT/Ticket_Overlay.pm:3066 lib/RT/Ticket_Overlay.pm:3083 +#: lib/RT/Record.pm:1693 +msgid "Could not add new custom field value. " +msgstr "" + +#: lib/RT/Record.pm:1646 +#. (, $value_msg) +msgid "Could not add new custom field value. %1 " +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:3004 lib/RT/Ticket_Overlay.pm:3012 lib/RT/Ticket_Overlay.pm:3029 msgid "Could not change owner. " msgstr "ä¸èƒ½æ›´æ”¹æ‰¿è¾¦äººã€‚ " -#: html/Admin/Elements/EditCustomField:84 html/Admin/Elements/EditCustomFields:165 html/Edit/Global/CustomField/index.html:117 +#: html/Admin/CustomFields/Modify.html:119 #. ($msg) msgid "Could not create CustomField" msgstr "無法新增自訂欄ä½" -#: html/Edit/Global/Workflow/index.html:126 +#: html/Admin/Elements/EditCustomField:113 #. ($msg) +msgid "Could not create CustomField: %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Could not create Scrip" msgstr "無法建立訊æ¯é€šçŸ¥" -#: html/Edit/Global/Template/index.html:110 -#. ($msg) +#: NOT FOUND IN SOURCE msgid "Could not create Template" msgstr "無法建立通知範本" -#: html/User/Groups/Modify.html:76 lib/RT/Group_Overlay.pm:473 lib/RT/Group_Overlay.pm:480 +#: html/User/Groups/Modify.html:98 lib/RT/Group_Overlay.pm:502 lib/RT/Group_Overlay.pm:509 msgid "Could not create group" msgstr "無法新增群組" -#: html/Admin/Global/Template.html:74 html/Admin/Queues/Template.html:71 +#: NOT FOUND IN SOURCE +msgid "Could not create item" +msgstr "ç„¡æ³•æ–°å¢žé …ç›®" + +#: html/Admin/Global/Template.html:96 html/Admin/Queues/Template.html:93 #. ($msg) msgid "Could not create template: %1" msgstr "無法新增範本:%1" -#: lib/RT/Ticket_Overlay.pm:1091 lib/RT/Ticket_Overlay.pm:334 +#: lib/RT/Ticket_Overlay.pm:1051 lib/RT/Ticket_Overlay.pm:396 msgid "Could not create ticket. Queue not set" msgstr "無法新增申請單。尚未指定表單。" -#: lib/RT/User_Overlay.pm:267 lib/RT/User_Overlay.pm:279 lib/RT/User_Overlay.pm:297 lib/RT/User_Overlay.pm:483 +#: 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 "無法新增使用者" @@ -1306,8 +1597,7 @@ msgstr "無法新增使用者" msgid "Could not create watcher for requestor" msgstr "無法為申請人新增視察員" -#: html/Admin/Elements/ModifyWorkflow:219 html/Admin/Global/Workflow.html:75 html/Admin/Queues/Workflow.html:71 -#. ($msg) +#: NOT FOUND IN SOURCE msgid "Could not create workflow: %1" msgstr "無法新增æµç¨‹ï¼š%1" @@ -1319,11 +1609,11 @@ msgstr "找ä¸åˆ°ç·¨è™Ÿ %1 的申請單" msgid "Could not find group %1." msgstr "找ä¸åˆ°ç¾¤çµ„ %1。" -#: lib/RT/Queue_Overlay.pm:621 lib/RT/Ticket_Overlay.pm:1421 +#: lib/RT/Queue_Overlay.pm:738 lib/RT/Ticket_Overlay.pm:1384 msgid "Could not find or create that user" msgstr "找ä¸åˆ°æˆ–無法新增該å使用者" -#: lib/RT/Queue_Overlay.pm:682 lib/RT/Ticket_Overlay.pm:1500 +#: lib/RT/Queue_Overlay.pm:799 lib/RT/Ticket_Overlay.pm:1465 msgid "Could not find that principal" msgstr "找ä¸åˆ°è©²å–®ä½" @@ -1331,36 +1621,51 @@ msgstr "找ä¸åˆ°è©²å–®ä½" msgid "Could not find user %1." msgstr "找ä¸åˆ°ä½¿ç”¨è€… %1。" -#: html/Admin/Groups/Members.html:87 html/Edit/Users/index.html:83 html/User/Groups/Members.html:89 html/User/Groups/Modify.html:81 -#. ( . $GroupId) +#: html/Admin/CustomFields/Objects.html:69 +msgid "Could not load CustomField %1" +msgstr "ç„¡æ³•è¼‰å…¥æ¬„ä½ %1" + +#: html/Admin/Groups/Members.html:109 html/User/Groups/Members.html:111 html/User/Groups/Modify.html:103 msgid "Could not load group" msgstr "無法載入群組" -#: lib/RT/Queue_Overlay.pm:641 +#: lib/RT/SavedSearch.pm:120 +#. ($privacy) +msgid "Could not load object for %1" +msgstr "" + +#: lib/RT/SavedSearch.pm:188 +msgid "Could not load search attribute" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:758 #. ($args{'Type'}) msgid "Could not make that principal a %1 for this queue" msgstr "無法將該單ä½è¨ç‚ºæ¤è¡¨å–®çš„ %1。" -#: lib/RT/Ticket_Overlay.pm:1442 +#: lib/RT/Ticket_Overlay.pm:1405 #. ($self->loc($args{'Type'})) msgid "Could not make that principal a %1 for this ticket" msgstr "無法將該單ä½è¨ç‚ºæ¤ç”³è«‹å–®çš„ %1。" -#: lib/RT/Queue_Overlay.pm:740 +#: lib/RT/Queue_Overlay.pm:857 #. ($args{'Type'}) msgid "Could not remove that principal as a %1 for this queue" msgstr "ç„¡æ³•å°‡å–®ä½ %1 從表單移除。" -#: lib/RT/Ticket_Overlay.pm:1558 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "Could not remove that principal as a %1 for this ticket" msgstr "ç„¡æ³•å°‡å–®ä½ %1 從申請單移除。" -#: lib/RT/Group_Overlay.pm:984 +#: lib/RT/User_Overlay.pm:192 +msgid "Could not set user info" +msgstr "無法è¨å®šä½¿ç”¨è€…資訊" + +#: lib/RT/Group_Overlay.pm:1011 msgid "Couldn't add member to group" msgstr "無法新增æˆå“¡è‡³ç¾¤çµ„" -#: lib/RT/Ticket_Overlay.pm:3562 lib/RT/Ticket_Overlay.pm:3618 +#: lib/RT/Record.pm:1705 lib/RT/Record.pm:1757 #. ($Msg) msgid "Couldn't create a transaction: %1" msgstr "ç„¡æ³•æ–°å¢žæ›´å‹•å ±å‘Š" @@ -1373,15 +1678,15 @@ msgstr "無法從 gpg 回函辨è˜å‡ºè©²æŽ¡å–的行動\\n" msgid "Couldn't find group\\n" msgstr "找ä¸åˆ°ç¾¤çµ„\\n" -#: lib/RT/Interface/Web.pm:902 x:905 +#: lib/RT/Record.pm:939 msgid "Couldn't find row" msgstr "找ä¸åˆ°æ¤åˆ—資料" -#: lib/RT/Group_Overlay.pm:958 +#: lib/RT/Group_Overlay.pm:985 msgid "Couldn't find that principal" msgstr "找ä¸åˆ°è©²å–®ä½" -#: lib/RT/CustomField_Overlay.pm:239 +#: lib/RT/CustomField_Overlay.pm:404 msgid "Couldn't find that value" msgstr "找ä¸åˆ°è©²å€¼" @@ -1393,11 +1698,21 @@ msgstr "找ä¸åˆ°è©²è¦–察員" msgid "Couldn't find user\\n" msgstr "找ä¸åˆ°ä½¿ç”¨è€…\\n" -#: lib/RT/CurrentUser.pm:111 +#: lib/RT/CurrentUser.pm:146 #. ($self->Id) msgid "Couldn't load %1 from the users database.\\n" msgstr "無法從使用者資料庫載入 %1。\\n" +#: html/Admin/CustomFields/UserRights.html:149 +#. ($id) +msgid "Couldn't load Class %1" +msgstr "無法載入類別 %1" + +#: html/Admin/CustomFields/GroupRights.html:107 +#. ($id) +msgid "Couldn't load CustomField %1" +msgstr "ç„¡æ³•è¼‰å…¥è‡ªè¨‚æ¬„ä½ %1" + #: NOT FOUND IN SOURCE msgid "Couldn't load KeywordSelects." msgstr "無法載入 KeywordSelects。" @@ -1410,24 +1725,26 @@ msgstr "無法載入 RT è¨å®šæª” '%1' %2" msgid "Couldn't load Scrips." msgstr "無法載入手續。" -#: html/Admin/Groups/GroupRights.html:87 html/Admin/Groups/UserRights.html:74 html/Edit/Global/GroupRight/Add.html:54 html/Edit/Global/UserRight/Add.html:23 html/Edit/Groups/Member:121 html/Edit/Groups/Members/Add.html:44 html/Edit/Rights/index.html:57 -#. ($Group) -#. ($ObjectGroup) +#: html/Admin/Groups/GroupRights.html:109 html/Admin/Groups/UserRights.html:96 #. ($id) msgid "Couldn't load group %1" msgstr "無法載入手續 %1" -#: lib/RT/Link_Overlay.pm:174 lib/RT/Link_Overlay.pm:183 lib/RT/Link_Overlay.pm:210 +#: lib/RT/Link_Overlay.pm:203 lib/RT/Link_Overlay.pm:212 lib/RT/Link_Overlay.pm:239 msgid "Couldn't load link" msgstr "無法載入éˆçµã€‚" -#: html/Admin/Elements/EditCustomFields:146 html/Admin/Queues/People.html:120 +#: html/Admin/Elements/ObjectCustomFields:83 html/Admin/Queues/CustomFields.html:59 html/Admin/Users/CustomFields.html:59 +#. ($id) +msgid "Couldn't load object %1" +msgstr "無法載入物件 %1" + +#: html/Admin/Queues/People.html:142 #. ($id) msgid "Couldn't load queue" msgstr "無法載入表單" -#: html/Admin/Queues/GroupRights.html:100 html/Admin/Queues/UserRights.html:71 html/Edit/Global/GroupRight/Add.html:50 html/Edit/Global/GroupRight/index.html:81 html/Edit/Global/UserRight/Add.html:19 html/Edit/Global/UserRight/index.html:83 html/Edit/Rights/index.html:53 -#. ($Queue) +#: html/Admin/Queues/GroupRights.html:122 html/Admin/Queues/UserRights.html:93 #. ($id) msgid "Couldn't load queue %1" msgstr "無法載入表單 %1" @@ -1440,29 +1757,38 @@ msgstr "無法載入手續" msgid "Couldn't load template" msgstr "無法載入範本" -#: html/Admin/Users/Prefs.html:78 -#. ($id) +#: NOT FOUND IN SOURCE msgid "Couldn't load that user (%1)" msgstr "無法載入該å使用者(%1)" -#: html/SelfService/Display.html:108 +#: html/SelfService/Display.html:156 #. ($id) msgid "Couldn't load ticket '%1'" msgstr "無法載入申請單 '%1'" -#: html/Admin/Elements/ModifyUser:85 html/Admin/Users/Modify.html:148 html/User/Prefs.html:97 html/Work/Preferences/Info:87 +#: lib/RT/Ticket_Overlay.pm:2612 +#. ($args{'Base'}) +msgid "Couldn't resolve base '%1' into a URI." +msgstr "" + +#: lib/RT/Ticket_Overlay.pm:2611 +#. ($args{'Target'}) +msgid "Couldn't resolve target '%1' into a URI." +msgstr "" + +#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:153 msgid "Country" msgstr "國家" -#: html/Admin/Elements/CreateUserCalled:25 html/Edit/Elements/PopHeader:29 html/Edit/Global/GroupRight/Add.html:18 html/Ticket/Create.html:134 html/Ticket/Create.html:194 +#: 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 msgid "Create" msgstr "新增" -#: html/Edit/Groups/MemberGroups/Add.html:17 +#: NOT FOUND IN SOURCE msgid "Create Subgroup:" msgstr "新增å群組:" -#: etc/initialdata.zh:145 etc/initialdata:127 +#: etc/initialdata:135 msgid "Create Tickets" msgstr "新增申請單" @@ -1470,16 +1796,16 @@ msgstr "新增申請單" msgid "Create User:" msgstr "新增æˆå“¡ï¼š" -#: html/Admin/Elements/EditCustomField:74 +#: html/Admin/CustomFields/Modify.html:109 html/Admin/Elements/EditCustomField:96 msgid "Create a CustomField" msgstr "新增自訂欄ä½" -#: html/Admin/Queues/CustomField.html:47 +#: html/Admin/Queues/CustomField.html:69 #. ($QueueObj->Name()) msgid "Create a CustomField for queue %1" msgstr "為 %1 表單新增自訂欄ä½" -#: html/Admin/Global/CustomField.html:47 +#: NOT FOUND IN SOURCE msgid "Create a CustomField which applies to all queues" msgstr "為 %1 表單新增自訂欄ä½" @@ -1495,11 +1821,11 @@ msgstr "新增全域手續" msgid "Create a new global scrip" msgstr "新增全域手續" -#: html/Admin/Groups/Modify.html:66 html/Admin/Groups/Modify.html:92 +#: html/Admin/Groups/Modify.html:125 html/Admin/Groups/Modify.html:99 msgid "Create a new group" msgstr "新增群組" -#: html/User/Groups/Modify.html:66 html/User/Groups/Modify.html:91 +#: html/User/Groups/Modify.html:113 html/User/Groups/Modify.html:88 msgid "Create a new personal group" msgstr "新增代ç†äººç¾¤çµ„" @@ -1515,11 +1841,11 @@ msgstr "新增手續" msgid "Create a new template" msgstr "新增範本" -#: html/Ticket/Create.html:24 html/Ticket/Create.html:27 html/Ticket/Create.html:35 +#: html/Ticket/Create.html:46 html/Ticket/Create.html:49 html/Ticket/Create.html:57 msgid "Create a new ticket" msgstr "新增申請單" -#: html/Admin/Users/Modify.html:213 html/Admin/Users/Modify.html:240 +#: html/Admin/Users/Modify.html:251 html/Admin/Users/Modify.html:306 msgid "Create a new user" msgstr "新增使用者" @@ -1527,7 +1853,7 @@ msgstr "新增使用者" msgid "Create a new workflow" msgstr "新增æµç¨‹" -#: html/Admin/Queues/Modify.html:103 +#: html/Admin/Queues/Modify.html:125 msgid "Create a queue" msgstr "新增表單" @@ -1539,20 +1865,20 @@ msgstr "新增表單å稱" msgid "Create a request" msgstr "æå‡ºç”³è«‹" -#: html/Admin/Queues/Scrip.html:58 +#: html/Admin/Queues/Scrip.html:80 #. ($QueueObj->Name) msgid "Create a scrip for queue %1" msgstr "為 %1 表單新增手續" -#: html/Admin/Global/Template.html:68 html/Admin/Queues/Template.html:64 +#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:86 msgid "Create a template" msgstr "新增範本" -#: html/SelfService/Create.html:24 +#: html/SelfService/Create.html:46 html/SelfService/CreateTicketInQueue.html:46 msgid "Create a ticket" msgstr "æå‡ºç”³è«‹å–®" -#: html/Admin/Elements/ModifyWorkflow:206 html/Admin/Global/Workflow.html:69 html/Admin/Queues/Workflow.html:64 +#: NOT FOUND IN SOURCE msgid "Create a workflow" msgstr "新增æµç¨‹" @@ -1568,23 +1894,23 @@ msgstr "新增失敗:%1/%2/%3" msgid "Create new item" msgstr "å»ºç«‹æ–°é …ç›®" -#: etc/initialdata.zh:147 etc/initialdata:129 +#: etc/initialdata:137 msgid "Create new tickets based on this scrip's template" msgstr "便“šæ¤é …手續內的模版,新增申請單" -#: html/SelfService/Create.html:77 +#: html/SelfService/Create.html:105 msgid "Create ticket" msgstr "新增申請單" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/Queue_Overlay.pm:110 msgid "Create tickets in this queue" msgstr "在æ¤è¡¨å–®ä¸æ–°å¢žç”³è«‹å–®" -#: lib/RT/Queue_Overlay.pm:71 +#: lib/RT/CustomField_Overlay.pm:101 msgid "Create, delete and modify custom fields" msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹è‡ªè¨‚欄ä½" -#: lib/RT/Queue_Overlay.pm:67 +#: lib/RT/Queue_Overlay.pm:93 msgid "Create, delete and modify queues" msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹è¡¨å–®" @@ -1592,23 +1918,27 @@ msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹è¡¨å–®" msgid "Create, delete and modify the members of any user's personal groups" msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä»»ä½•使用者的代ç†äººç¾¤çµ„" -#: lib/RT/System.pm:58 +#: lib/RT/System.pm:81 msgid "Create, delete and modify the members of personal groups" msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä»£ç†äººç¾¤çµ„" -#: lib/RT/System.pm:59 +#: lib/RT/System.pm:82 msgid "Create, delete and modify users" msgstr "新增ã€åˆªé™¤åŠæ›´æ”¹ä½¿ç”¨è€…" -#: lib/RT/Queue_Overlay.pm:83 +#: lib/RT/System.pm:88 +msgid "CreateSavedSearch" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:110 msgid "CreateTicket" msgstr "新增申請單" -#: html/Elements/SelectDateType:25 html/Ticket/Elements/ShowDates:26 lib/RT/Ticket_Overlay.pm:1185 +#: html/Elements/SelectDateType:47 html/Ticket/Elements/ShowDates:48 lib/RT/Ticket_Overlay.pm:1145 msgid "Created" msgstr "新增日" -#: html/Admin/Elements/EditCustomField:87 +#: html/Admin/CustomFields/Modify.html:121 html/Admin/Elements/EditCustomField:117 #. ($CustomFieldObj->Name()) msgid "Created CustomField %1" msgstr "è‡ªè¨‚æ¬„ä½ %1 新增æˆåŠŸ" @@ -1617,11 +1947,14 @@ msgstr "è‡ªè¨‚æ¬„ä½ %1 新增æˆåŠŸ" msgid "Created template %1" msgstr "範本 %1 新增æˆåŠŸ" -#: html/Admin/Elements/ModifyWorkflow:221 -#. (loc( $WorkflowObj->Name() )) +#: NOT FOUND IN SOURCE msgid "Created workflow %1" msgstr "æµç¨‹ %1 新增æˆåŠŸ" +#: html/Search/Elements/PickBasics:102 +msgid "Creator" +msgstr "建立者" + #: NOT FOUND IN SOURCE msgid "Currency" msgstr "幣別" @@ -1634,23 +1967,23 @@ msgstr "截至目å‰ç°½æ ¸è³‡è¨Š" msgid "Current Custom Fields" msgstr "ç¾æœ‰è‡ªè¨‚欄ä½" -#: html/Edit/Groups/MemberGroups/Add.html:14 +#: NOT FOUND IN SOURCE msgid "Current Groups:" msgstr "ç¾æœ‰ç¾¤çµ„列表:" -#: html/Ticket/Elements/EditLinks:27 -msgid "Current Relationships" +#: html/Elements/EditLinks:49 +msgid "Current Links" msgstr "ç¾æœ‰é—œä¿‚" -#: html/Edit/Rights/index.html:19 +#: NOT FOUND IN SOURCE msgid "Current Rights:" msgstr "ç¾æœ‰æ¬Šé™ï¼š" -#: html/Admin/Elements/EditScrips:29 +#: html/Admin/Elements/EditScrips:51 msgid "Current Scrips" msgstr "ç¾æœ‰æ‰‹çºŒ" -#: html/Work/Tickets/Create.html:50 html/Work/Tickets/Elements/ShowBasics:47 +#: NOT FOUND IN SOURCE msgid "Current Status" msgstr "ç›®å‰ç‹€æ…‹" @@ -1658,76 +1991,87 @@ msgstr "ç›®å‰ç‹€æ…‹" msgid "Current Templates" msgstr "ç¾æœ‰ç¯„本" -#: html/Admin/Groups/Members.html:38 html/User/Groups/Members.html:41 +#: NOT FOUND IN SOURCE +msgid "Current Watchers" +msgstr "ç¾æœ‰è¦–察員" + +#: html/Admin/Groups/Members.html:60 html/User/Groups/Members.html:63 msgid "Current members" msgstr "ç¾æœ‰æˆå“¡" -#: html/Admin/Elements/SelectRights:28 +#: html/Admin/Elements/SelectRights:51 msgid "Current rights" msgstr "ç¾æœ‰æ¬Šé™" -#: html/Search/Listing.html:70 html/Work/Search/index.html:42 +#: NOT FOUND IN SOURCE msgid "Current search criteria" msgstr "ç¾æœ‰æŸ¥è©¢æ¢ä»¶" -#: html/Admin/Queues/People.html:40 html/Ticket/Elements/EditPeople:44 +#: html/Admin/Queues/People.html:62 html/Ticket/Elements/EditPeople:66 msgid "Current watchers" msgstr "ç¾æœ‰è¦–察員" -#: html/Admin/Global/CustomField.html:54 -#. ($CustomField) +#: NOT FOUND IN SOURCE msgid "Custom Field #%1" msgstr "è‡ªè¨‚æ¬„ä½ #%1" -#: html/Admin/Elements/QueueTabs:52 html/Admin/Elements/SystemTabs:39 html/Admin/Global/index.html:49 html/Edit/Global/autohandler:7 html/Edit/Queues/autohandler:18 html/Ticket/Elements/ShowSummary:35 +#: 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 msgid "Custom Fields" msgstr "自訂欄ä½" +#: html/Admin/CustomFields/index.html:59 +#. ($lookup) +msgid "Custom Fields for %1" +msgstr "%1 的自訂欄ä½" + #: NOT FOUND IN SOURCE msgid "Custom Fields which apply to all queues" msgstr "é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„自訂欄ä½" -#: html/Admin/Elements/EditScrip:72 html/Edit/Global/Scrip/Top:69 +#: html/Admin/Elements/EditScrip:123 msgid "Custom action cleanup code" msgstr "動作後執行程å¼" -#: html/Admin/Elements/EditScrip:64 html/Edit/Global/Scrip/Top:62 +#: html/Admin/Elements/EditScrip:115 msgid "Custom action preparation code" msgstr "動作å‰åŸ·è¡Œç¨‹å¼" -#: html/Admin/Elements/EditScrip:48 html/Edit/Global/Scrip/Top:35 html/Edit/Global/Scrip/Top:61 +#: html/Admin/Elements/EditScrip:107 msgid "Custom condition" msgstr "自訂æ¢ä»¶" -#: lib/RT/Tickets_Overlay.pm:1618 -#. ($CF->Name , $args{OPERATOR} , $args{VALUE}) +#: NOT FOUND IN SOURCE msgid "Custom field %1 %2 %3" msgstr "è‡ªè¨‚æ¬„ä½ %1 %2 %3" -#: lib/RT/Tickets_Overlay.pm:1613 +#: NOT FOUND IN SOURCE +msgid "Custom field %1 does not apply to this object" +msgstr "è‡ªè¨‚æ¬„ä½ %1 ä¸é©ç”¨æ–¼æ¤ç‰©ä»¶" + +#: lib/RT/Tickets_Overlay.pm:2147 #. ($CF->Name) msgid "Custom field %1 has a value." msgstr "è‡ªè¨‚æ¬„ä½ %1 已有值" -#: lib/RT/Tickets_Overlay.pm:1610 +#: lib/RT/Tickets_Overlay.pm:2143 #. ($CF->Name) msgid "Custom field %1 has no value." msgstr "è‡ªè¨‚æ¬„ä½ %1 沒有值" -#: lib/RT/Ticket_Overlay.pm:3454 +#: lib/RT/Record.pm:1579 lib/RT/Record.pm:1740 #. ($args{'Field'}) msgid "Custom field %1 not found" msgstr "找ä¸åˆ°è‡ªè¨‚æ¬„ä½ %1" -#: html/Admin/Elements/EditCustomFields:196 +#: NOT FOUND IN SOURCE msgid "Custom field deleted" msgstr "自訂欄ä½å·²åˆªé™¤" -#: lib/RT/Ticket_Overlay.pm:3604 +#: NOT FOUND IN SOURCE msgid "Custom field not found" msgstr "找ä¸åˆ°è‡ªè¨‚欄ä½" -#: lib/RT/CustomField_Overlay.pm:349 +#: lib/RT/CustomField_Overlay.pm:1041 #. ($args{'Content'}, $self->Name) msgid "Custom field value %1 could not be found for custom field %2" msgstr "ç„¡æ³•å¾žè‡ªè¨‚æ¬„ä½ %2 䏿‰¾åˆ° %1 這個欄ä½å€¼" @@ -1736,19 +2080,19 @@ msgstr "ç„¡æ³•å¾žè‡ªè¨‚æ¬„ä½ %2 䏿‰¾åˆ° %1 這個欄ä½å€¼" msgid "Custom field value changed from %1 to %2" msgstr "自訂欄ä½å€¼å¾ž %1 改為 %2" -#: lib/RT/CustomField_Overlay.pm:249 +#: lib/RT/CustomField_Overlay.pm:414 msgid "Custom field value could not be deleted" msgstr "無法刪除自訂欄ä½å€¼" -#: lib/RT/CustomField_Overlay.pm:355 +#: lib/RT/CustomField_Overlay.pm:1047 msgid "Custom field value could not be found" msgstr "找ä¸åˆ°è‡ªè¨‚欄ä½å€¼" -#: lib/RT/CustomField_Overlay.pm:247 lib/RT/CustomField_Overlay.pm:357 +#: lib/RT/CustomField_Overlay.pm:1049 lib/RT/CustomField_Overlay.pm:412 msgid "Custom field value deleted" msgstr "自訂欄ä½å€¼åˆªé™¤æˆåŠŸ" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:145 html/Edit/Global/Workflow/Owner.html:90 lib/RT/Transaction_Overlay.pm:548 +#: html/Elements/SelectGroups:51 html/Elements/SelectUsers:51 lib/RT/Transaction_Overlay.pm:627 msgid "CustomField" msgstr "自訂欄ä½" @@ -1757,10 +2101,18 @@ msgid "Data error" msgstr "資料錯誤" #: NOT FOUND IN SOURCE +msgid "DatabaseBindRemote" +msgstr "容許外部連線" + +#: NOT FOUND IN SOURCE +msgid "DatabaseName" +msgstr "MySQL資料庫" + +#: NOT FOUND IN SOURCE msgid "Date of Departure" msgstr "出發日期" -#: html/SelfService/Display.html:38 html/Ticket/Create.html:160 html/Ticket/Elements/ShowSummary:54 html/Ticket/Elements/Tabs:92 html/Ticket/ModifyAll.html:43 html/Work/Tickets/Elements/ShowTransaction:14 +#: 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 msgid "Dates" msgstr "日期" @@ -1768,7 +2120,7 @@ msgstr "日期" msgid "Dec" msgstr "å二月" -#: lib/RT/Date.pm:422 +#: lib/RT/Date.pm:448 msgid "Dec." msgstr "12" @@ -1777,43 +2129,62 @@ msgid "December" msgstr "å二月" #: NOT FOUND IN SOURCE +msgid "Default Approval" +msgstr "é è¨ç°½æ ¸" + +#: NOT FOUND IN SOURCE msgid "Default Autoresponse Template" msgstr "é è¨è‡ªå‹•回應範本" -#: etc/initialdata.zh:225 etc/initialdata:207 +#: etc/initialdata:222 msgid "Default Autoresponse template" msgstr "é è¨è‡ªå‹•回應範本" -#: etc/initialdata.zh:304 etc/initialdata:281 +#: html/Tools/Offline.html:61 +msgid "Default Queue" +msgstr "é è¨è¡¨å–®" + +#: html/Tools/Offline.html:70 +msgid "Default Requestor" +msgstr "é è¨ç”³è«‹äºº" + +#: NOT FOUND IN SOURCE +msgid "Default Value" +msgstr "é è¨å€¼" + +#: etc/initialdata:296 msgid "Default admin comment template" msgstr "é è¨ç®¡ç†å“¡è©•論範本" -#: etc/initialdata.zh:262 etc/initialdata:260 +#: etc/initialdata:275 msgid "Default admin correspondence template" msgstr "é è¨ç®¡ç†å“¡å›žè¦†ç¯„本" -#: etc/initialdata.zh:283 etc/initialdata:272 +#: etc/initialdata:287 msgid "Default correspondence template" msgstr "é è¨å›žè¦†ç¯„本" -#: etc/initialdata.zh:240 etc/initialdata:238 +#: etc/initialdata:253 msgid "Default transaction template" msgstr "é è¨æ›´å‹•範本" -#: lib/RT/Transaction_Overlay.pm:643 -#. ($type, $self->Field, $self->OldValue, $self->NewValue) +#: NOT FOUND IN SOURCE msgid "Default: %1/%2 changed from %3 to %4" msgstr "é è¨ï¼š%1/%2 已自 %3 改為 %4" -#: html/User/Delegation.html:24 html/User/Delegation.html:27 +#: NOT FOUND IN SOURCE +msgid "DefaultApproval" +msgstr "é è¨ç°½æ ¸" + +#: html/User/Delegation.html:46 html/User/Delegation.html:49 msgid "Delegate rights" -msgstr "代表團權é™" +msgstr "代ç†äººæ¬Šé™" -#: lib/RT/System.pm:62 +#: lib/RT/System.pm:85 msgid "Delegate specific rights which have been granted to you." msgstr "å°‡æ“æœ‰çš„æ¬Šé™å§”託他人代ç†" -#: lib/RT/System.pm:62 +#: lib/RT/System.pm:85 msgid "DelegateRights" msgstr "è¨å®šä»£ç†äºº" @@ -1833,7 +2204,7 @@ msgstr "代ç†è¡¨å–®ï¼š" msgid "Delegated Type" msgstr "代ç†è¡¨å–®ç¨®é¡ž" -#: html/Edit/Users/index.html:125 html/Work/Delegates/Info:31 html/Work/Delegates/List:8 html/Work/Elements/Tab:41 html/Work/Overview/Info:28 +#: NOT FOUND IN SOURCE msgid "Delegates" msgstr "代ç†äºº" @@ -1841,7 +2212,7 @@ msgstr "代ç†äºº" msgid "Delegates Enabled Status" msgstr "代ç†å•Ÿå‹•狀態" -#: html/Work/Delegates/Info:18 html/Work/Overview/Info:18 +#: NOT FOUND IN SOURCE msgid "Delegates Info" msgstr "代ç†äººè³‡è¨Š" @@ -1861,11 +2232,11 @@ msgstr "ä»£ç†æ¬Šé™ï¼š" msgid "Delegates Setting" msgstr "代ç†äººè¨å®š" -#: html/Work/Delegates/Info:46 html/Work/Delegates/List:11 html/Work/Overview/Info:39 +#: NOT FOUND IN SOURCE msgid "Delegates Status" msgstr "代ç†ç‹€æ…‹" -#: html/User/Elements/Tabs:37 +#: html/User/Elements/Tabs:59 msgid "Delegation" msgstr "代ç†äººæ¬Šé™" @@ -1877,27 +2248,44 @@ msgstr "代ç†äººç¾¤çµ„" msgid "Delegation Rights" msgstr "代ç†äººæ¬Šé™" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:113 html/Edit/Elements/104Buttons:73 html/Work/Search/index.html:48 html/Work/Search/index.html:48 +#: html/Admin/Elements/EditScrips:75 html/Search/Elements/EditFormat:103 html/Search/Elements/EditQuery:57 html/Search/Elements/EditSearches:63 msgid "Delete" msgstr "刪除" -#: lib/RT/Queue_Overlay.pm:88 +#: html/Admin/Elements/EditTemplates:79 +msgid "Delete Template" +msgstr "刪除範本" + +#: lib/RT/SavedSearch.pm:211 +#. ($msg) +msgid "Delete failed: %1" +msgstr "" + +#: html/Admin/Elements/EditScrips:74 +msgid "Delete selected scrips" +msgstr "刪除指定的手續" + +#: lib/RT/Queue_Overlay.pm:115 msgid "Delete tickets" msgstr "刪除申請單" -#: lib/RT/Queue_Overlay.pm:88 +#: lib/RT/Queue_Overlay.pm:115 msgid "DeleteTicket" msgstr "刪除申請單" -#: lib/RT/Transaction_Overlay.pm:187 +#: lib/RT/SavedSearch.pm:209 +msgid "Deleted search" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Deleting this object could break referential integrity" msgstr "刪除æ¤ç‰©ä»¶å¯èƒ½ç ´å£žåƒè€ƒå®Œæ•´æ€§" -#: lib/RT/Queue_Overlay.pm:293 +#: lib/RT/Queue_Overlay.pm:391 msgid "Deleting this object would break referential integrity" msgstr "刪除æ¤ç‰©ä»¶å¯èƒ½ç ´å£žåƒè€ƒå®Œæ•´æ€§" -#: lib/RT/User_Overlay.pm:499 +#: lib/RT/User_Overlay.pm:513 msgid "Deleting this object would violate referential integrity" msgstr "刪除æ¤ç‰©ä»¶æœƒé•ååƒè€ƒå®Œæ•´æ€§" @@ -1909,7 +2297,7 @@ msgstr "刪除æ¤ç‰©ä»¶æœƒé•ååƒè€ƒå®Œæ•´æ€§" msgid "Deleting this object would violate referential integrity. That's bad." msgstr "刪除æ¤ç‰©ä»¶æœƒé•ååƒè€ƒå®Œæ•´æ€§" -#: html/Approvals/Elements/Approve:44 html/Work/Approvals/Elements/Approve:32 +#: html/Approvals/Elements/Approve:66 msgid "Deny" msgstr "é§å›ž" @@ -1917,11 +2305,11 @@ msgstr "é§å›ž" msgid "Department" msgstr "部門" -#: html/Edit/Global/UserRight/List:12 html/Edit/Global/UserRight/Top:13 html/Edit/Users/List:10 html/Edit/Users/Top:12 +#: NOT FOUND IN SOURCE msgid "Department ID" msgstr "部門代碼" -#: html/Edit/Global/UserRight/List:11 html/Edit/Global/UserRight/Top:49 html/Edit/Users/List:9 html/Edit/Users/Top:48 html/Work/Delegates/Info:78 html/Work/Overview/Info:60 +#: NOT FOUND IN SOURCE msgid "Department Name" msgstr "部門å稱" @@ -1945,7 +2333,7 @@ msgstr "è«‹å‡å–®" msgid "Departure Until" msgstr "å·®æ—…æˆªæ¢æ—¥" -#: html/Ticket/Create.html:180 html/Ticket/Elements/BulkLinks:34 html/Ticket/Elements/EditLinks:122 html/Ticket/Elements/EditLinks:46 html/Ticket/Elements/ShowDependencies:31 html/Ticket/Elements/ShowLinks:36 html/Work/Search/BulkLinks:10 +#: 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 msgid "Depended on by" msgstr "å¯æŽ¥çºŒè™•ç†çš„申請單" @@ -1953,7 +2341,27 @@ msgstr "å¯æŽ¥çºŒè™•ç†çš„申請單" msgid "Dependencies: \\n" msgstr "附屬性:\\n" -#: html/Elements/SelectLinkType:26 html/Ticket/Create.html:179 html/Ticket/Elements/BulkLinks:30 html/Ticket/Elements/EditLinks:118 html/Ticket/Elements/EditLinks:35 html/Ticket/Elements/ShowDependencies:24 html/Ticket/Elements/ShowLinks:26 html/Work/Search/BulkLinks:6 +#: lib/RT/Transaction_Overlay.pm:707 +#. ($value) +msgid "Dependency by %1 added" +msgstr "å·²åŠ å…¥å¯æŽ¥çºŒè™•ç†çš„申請單 %1" + +#: lib/RT/Transaction_Overlay.pm:747 +#. ($value) +msgid "Dependency by %1 deleted" +msgstr "å·²ç§»é™¤å¯æŽ¥çºŒè™•ç†çš„申請單 %1" + +#: lib/RT/Transaction_Overlay.pm:704 +#. ($value) +msgid "Dependency on %1 added" +msgstr "å·²åŠ å…¥éœ€å…ˆè™•ç†çš„申請單 %1" + +#: lib/RT/Transaction_Overlay.pm:744 +#. ($value) +msgid "Dependency on %1 deleted" +msgstr "已移除需先處ç†çš„申請單 %1" + +#: 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 msgid "Depends on" msgstr "需先處ç†" @@ -1961,15 +2369,15 @@ msgstr "需先處ç†" msgid "DependsOn" msgstr "需先處ç†" -#: html/Elements/SelectSortOrder:34 +#: html/Elements/SelectSortOrder:56 html/Search/Elements/DisplayOptions:78 msgid "Descending" msgstr "éžæ¸›" -#: html/SelfService/Create.html:72 html/Ticket/Create.html:118 +#: html/SelfService/Create.html:100 html/Ticket/Create.html:149 msgid "Describe the issue below" msgstr "åœ¨ä»¥ä¸‹æ¬„ä½æè¿°ä¸»é¡Œ" -#: html/Admin/Elements/AddCustomFieldValue:35 html/Admin/Elements/EditCustomField:38 html/Admin/Elements/EditScrip:33 html/Admin/Elements/ModifyQueue:35 html/Admin/Elements/ModifyTemplate:35 html/Admin/Elements/ModifyTemplateAsWorkflow:192 html/Admin/Groups/Modify.html:48 html/Admin/Queues/Modify.html:47 html/Edit/Global/Workflow/Action:14 html/Elements/SelectGroups:26 html/User/Groups/Modify.html:48 html/Work/Preferences/Info:103 +#: 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 "æè¿°" @@ -1981,7 +2389,7 @@ msgstr "經辦æ¥å‹™èªªæ˜Ž" msgid "Description:" msgstr "æè¿°ï¼š" -#: html/Work/Tickets/Create.html:117 html/Work/Tickets/Create.html:85 html/Work/Tickets/Elements/EditCustomFields:13 html/Work/Tickets/Elements/EditCustomFields:47 html/Work/Tickets/Elements/ShowCustomFields:15 html/Work/Tickets/Elements/ShowCustomFields:50 +#: NOT FOUND IN SOURCE msgid "Details" msgstr "細節" @@ -1989,67 +2397,91 @@ msgstr "細節" msgid "Direct" msgstr "直接" -#: html/Edit/Users/Info:31 +#: NOT FOUND IN SOURCE msgid "Disability" msgstr "殘障身分" -#: html/Edit/Users/Info:29 +#: NOT FOUND IN SOURCE msgid "Disability Type" msgstr "殘障類別" -#: html/Edit/Global/GroupRight/List:9 html/Edit/Global/GroupRight/Top:16 html/Edit/Groups/List:11 html/Edit/Groups/Top:19 html/Edit/Queues/Basic/Top:70 html/Edit/Queues/List:13 html/Work/Delegates/Info:48 html/Work/Delegates/Info:53 html/Work/Delegates/List:12 html/Work/Overview/Info:42 +#: NOT FOUND IN SOURCE msgid "Disabled" msgstr "åœç”¨" -#: html/Ticket/Elements/Tabs:84 +#: html/Search/Elements/EditFormat:71 html/Ticket/Elements/Tabs:108 msgid "Display" msgstr "顯示內容" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:94 msgid "Display Access Control List" msgstr "é¡¯ç¤ºæ¬Šé™æŽ§åˆ¶æ¸…å–®" -#: lib/RT/Queue_Overlay.pm:74 +#: html/Search/Elements/DisplayOptions:46 +msgid "Display Columns" +msgstr "顯示欄ä½" + +#: lib/RT/Queue_Overlay.pm:100 msgid "Display Scrip templates for this queue" msgstr "顯示æ¤è¡¨å–®çš„範本" -#: lib/RT/Queue_Overlay.pm:77 +#: lib/RT/Queue_Overlay.pm:103 msgid "Display Scrips for this queue" msgstr "顯示æ¤è¡¨å–®çš„æ‰‹çºŒ" -#: html/Ticket/Elements/ShowHistory:34 +#: html/Ticket/Elements/ShowHistory:56 msgid "Display mode" msgstr "顯示模å¼" +#: lib/RT/Group_Overlay.pm:176 +msgid "Display saved searches for this group" +msgstr "顯示æ¤ç¾¤çµ„已儲å˜çš„æŸ¥è©¢" + #: NOT FOUND IN SOURCE msgid "Display ticket #%1" msgstr "顯示第%1號申請單" -#: lib/RT/System.pm:53 +#: html/Elements/Footer:60 +msgid "Distributed under version 2 <a href=\"http://www.gnu.org/copyleft/gpl.html\"> of the GNU GPL.</a>" +msgstr "ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授權</a> 第二版散布。" + +#: lib/RT/System.pm:76 msgid "Do anything and everything" msgstr "å…許一切æ“作" -#: html/Elements/Refresh:29 +#: html/Search/Build.html:112 +msgid "Do the Search" +msgstr "" + +#: html/Elements/Refresh:51 msgid "Don't refresh this page." msgstr "䏿›´æ–°æ¤é é¢ã€‚" -#: html/Search/Elements/PickRestriction:113 html/Work/Search/PickRestriction:95 +#: NOT FOUND IN SOURCE msgid "Don't show search results" msgstr "ä¸é¡¯ç¤ºæŸ¥è©¢çµæžœ" -#: html/Edit/Elements/Page:19 html/Edit/Elements/Page:21 +#: NOT FOUND IN SOURCE +msgid "Done" +msgstr "完æˆ" + +#: NOT FOUND IN SOURCE msgid "Down" msgstr "下一é " -#: html/Ticket/Elements/ShowTransaction:92 +#: html/Ticket/Elements/ShowTransactionAttachments:82 msgid "Download" msgstr "下載" +#: html/Admin/Groups/index.html:61 html/Admin/Users/index.html:64 +msgid "Download as a tab-delimited file" +msgstr "下載以 Tab 分隔的檔案" + #: NOT FOUND IN SOURCE msgid "Dr." msgstr "åšå£«" -#: html/Elements/SelectDateType:31 html/Ticket/Create.html:166 html/Ticket/Elements/EditDates:44 html/Ticket/Elements/ShowDates:42 lib/RT/Ticket_Overlay.pm:1189 +#: 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 msgid "Due" msgstr "到期日" @@ -2061,43 +2493,57 @@ msgstr "æˆªæ¢æ—¥" msgid "Due date '%1' could not be parsed" msgstr "無法解讀日期 '%1'" -#: bin/rt-commit-handler:753 -#. ($1, $msg) +#: NOT FOUND IN SOURCE msgid "ERROR: Couldn't load ticket '%1': %2.\\n" msgstr "無法載入申請單 '%1':%2.\\n" -#: html/Work/Tickets/Update.html:46 +#: NOT FOUND IN SOURCE msgid "Edit" msgstr "編輯" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:132 +#: NOT FOUND IN SOURCE msgid "Edit Conditions" msgstr "編輯å‰ç½®æ¢ä»¶" -#: html/Admin/Queues/CustomFields.html:44 -#. ($Queue->Name) +#: html/Admin/Elements/ObjectCustomFields:92 html/Admin/Queues/CustomFields.html:64 html/Admin/Users/CustomFields.html:64 +#. ($Object->Name) msgid "Edit Custom Fields for %1" msgstr "編輯 %1 的自訂欄ä½" +#: html/Admin/Global/CustomFields/Groups.html:9 +msgid "Edit Custom Fields for all groups" +msgstr "" + +#: html/Admin/Global/CustomFields/Users.html:9 +msgid "Edit Custom Fields for all users" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Edit Custom Fields for queue %1" msgstr "編輯表單 %1 的自訂欄ä½" -#: html/Search/Bulk.html:143 html/Ticket/ModifyLinks.html:35 html/Work/Search/Bulk.html:93 -msgid "Edit Relationships" +#: 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 "" + +#: html/Search/Bulk.html:173 html/Ticket/ModifyLinks.html:57 +msgid "Edit Links" msgstr "編輯申請單關係" -#: html/Edit/Groups/MemberGroups/Add.html:3 html/Edit/Groups/MemberGroups/index.html:22 +#: html/Search/Edit.html:68 +msgid "Edit Query" +msgstr "編輯查詢" + +#: NOT FOUND IN SOURCE msgid "Edit Subgroups" msgstr "新增/ç¶è·å群組" -#: html/Admin/Queues/Templates.html:41 +#: html/Admin/Queues/Templates.html:63 #. ($QueueObj->Name) msgid "Edit Templates for queue %1" msgstr "編輯表單 %1 的範本" -#: html/Admin/Queues/Workflows.html:42 -#. ($QueueObj->Name) +#: NOT FOUND IN SOURCE msgid "Edit Workflows for queue %1" msgstr "編輯表單 %1 çš„æµç¨‹" @@ -2105,11 +2551,15 @@ msgstr "編輯表單 %1 çš„æµç¨‹" msgid "Edit keywords" msgstr "編輯關éµå—" +#: lib/RT/Group_Overlay.pm:175 +msgid "Edit saved searches for this group" +msgstr "編輯æ¤ç¾¤çµ„已儲å˜çš„æŸ¥è©¢" + #: NOT FOUND IN SOURCE msgid "Edit scrips" msgstr "編輯手續" -#: html/Admin/Global/index.html:45 +#: html/Admin/Elements/GlobalCustomFieldTabs:60 html/Admin/Global/index.html:67 msgid "Edit system templates" msgstr "編輯全域範本" @@ -2125,28 +2575,30 @@ msgstr "編輯 %1 的範本" msgid "Edit workflows for %1" msgstr "編輯 %1 çš„æµç¨‹" -#: html/Admin/Elements/ModifyQueue:24 html/Admin/Queues/Modify.html:118 +#: lib/RT/Group_Overlay.pm:175 +msgid "EditSavedSearches" +msgstr "編輯已儲å˜çš„æŸ¥è©¢" + +#: html/Admin/Queues/Modify.html:140 #. ($QueueObj->Name) -#. ($QueueObj->Id) msgid "Editing Configuration for queue %1" msgstr "編輯表單 %1 çš„è¨å®š" -#: html/Admin/Elements/ModifyUser:24 -#. ($UserObj->Name) +#: NOT FOUND IN SOURCE msgid "Editing Configuration for user %1" msgstr "編輯使用者 %1 çš„è¨å®š" -#: html/Admin/Elements/EditCustomField:90 +#: html/Admin/CustomFields/Modify.html:125 html/Admin/Elements/EditCustomField:120 #. ($CustomFieldObj->Name()) msgid "Editing CustomField %1" msgstr "ç·¨è¼¯è‡ªè¨‚æ¬„ä½ %1" -#: html/Admin/Groups/Members.html:31 +#: html/Admin/Groups/Members.html:53 #. ($Group->Name) msgid "Editing membership for group %1" msgstr "編輯群組 %1 çš„æˆå“¡è³‡è¨Š" -#: html/User/Groups/Members.html:128 +#: html/User/Groups/Members.html:150 #. ($Group->Name) msgid "Editing membership for personal group %1" msgstr "編輯代ç†äººç¾¤çµ„ %1 çš„æˆå“¡è³‡è¨Š" @@ -2155,8 +2607,7 @@ msgstr "編輯代ç†äººç¾¤çµ„ %1 çš„æˆå“¡è³‡è¨Š" msgid "Editing template %1" msgstr "編輯範本 %1" -#: html/Admin/Elements/ModifyWorkflow:238 -#. (loc( $WorkflowObj->Name() )) +#: NOT FOUND IN SOURCE msgid "Editing workflow %1" msgstr "編輯æµç¨‹ %1" @@ -2168,23 +2619,27 @@ msgstr "æœ€é«˜å¸æ·" msgid "EffectiveId" msgstr "有效編號" -#: lib/RT/Ticket_Overlay.pm:2635 lib/RT/Ticket_Overlay.pm:2703 +#: lib/RT/Record.pm:1281 lib/RT/Record.pm:1358 msgid "Either base or target must be specified" msgstr "éœ€è¦æŒ‡å®šèµ·å§‹ç”³è«‹å–®æˆ–目的申請單" -#: html/Admin/Users/Modify.html:52 html/Admin/Users/Prefs.html:45 html/Elements/SelectUsers:26 html/Ticket/Elements/AddWatchers:55 html/User/Prefs.html:41 html/Work/Delegates/Info:96 html/Work/Overview/Info:78 html/Work/Preferences/Info:16 +#: html/Admin/Users/Modify.html:74 html/Ticket/Elements/AddWatchers:77 html/User/Prefs.html:65 msgid "Email" msgstr "é›»å郵件信箱" -#: lib/RT/User_Overlay.pm:247 +#: NOT FOUND IN SOURCE +msgid "Email Address" +msgstr "é›»å郵件信箱" + +#: lib/RT/User_Overlay.pm:236 msgid "Email address in use" msgstr "æ¤é›»å郵件信箱已被使用" -#: html/Admin/Elements/ModifyUser:41 +#: NOT FOUND IN SOURCE msgid "EmailAddress" msgstr "é›»å郵件信箱ä½å€" -#: html/Admin/Elements/ModifyUser:53 +#: NOT FOUND IN SOURCE msgid "EmailEncoding" msgstr "é›»å郵件文å—編碼方å¼" @@ -2204,23 +2659,23 @@ msgstr "抵é”地點" msgid "Enable Delegates" msgstr "代ç†å•Ÿå‹•" -#: html/Admin/Elements/EditCustomField:50 +#: html/Admin/CustomFields/Modify.html:83 html/Admin/Elements/EditCustomField:72 msgid "Enabled (Unchecking this box disables this custom field)" msgstr "啟用(å–æ¶ˆå‹¾é¸å°‡åœç”¨æ¤è‡ªè¨‚欄ä½)" -#: html/Admin/Groups/Modify.html:52 html/User/Groups/Modify.html:52 +#: html/Admin/Groups/Modify.html:84 html/User/Groups/Modify.html:74 msgid "Enabled (Unchecking this box disables this group)" msgstr "啟用(å–æ¶ˆå‹¾é¸å°‡åœç”¨æ¤ç¾¤çµ„)" -#: html/Admin/Queues/Modify.html:83 +#: html/Admin/Queues/Modify.html:105 msgid "Enabled (Unchecking this box disables this queue)" msgstr "啟用(å–æ¶ˆå‹¾é¸å°‡åœç”¨æ¤è¡¨å–®)" -#: html/Admin/Elements/EditCustomFields:98 +#: NOT FOUND IN SOURCE msgid "Enabled Custom Fields" msgstr "已啟用的自訂欄ä½" -#: html/Edit/Queues/Basic/Top:75 html/Edit/Queues/List:15 +#: NOT FOUND IN SOURCE msgid "Enabled Date" msgstr "啟用日期" @@ -2228,20 +2683,25 @@ msgstr "啟用日期" msgid "Enabled Date:" msgstr "啟動日期:" -#: html/Admin/Queues/index.html:55 +#: html/Admin/Queues/index.html:78 msgid "Enabled Queues" msgstr "已啟用的表單" -#: html/Edit/Queues/Basic/Top:66 html/Edit/Queues/List:11 +#: NOT FOUND IN SOURCE msgid "Enabled Status" msgstr "啟用狀態" -#: html/Admin/Elements/EditCustomField:106 html/Admin/Groups/Modify.html:116 html/Admin/Queues/Modify.html:140 html/Admin/Users/Modify.html:282 html/User/Groups/Modify.html:116 +#: 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)) msgid "Enabled status %1" msgstr "啟用狀態 %1" -#: html/Edit/Users/Info:34 +#: html/Admin/CustomFields/Modify.html:143 html/Admin/Queues/Modify.html:162 +#. (loc_fuzzy($msg)) +msgid "Enabled status: %1" +msgstr "啟用狀態: %1" + +#: NOT FOUND IN SOURCE msgid "End of Trial" msgstr "試用期滿日" @@ -2249,27 +2709,39 @@ msgstr "試用期滿日" msgid "English Name" msgstr "英文姓å" -#: lib/RT/CustomField_Overlay.pm:427 +#: lib/RT/CustomField_Overlay.pm:64 msgid "Enter multiple values" msgstr "éµå…¥å¤šé‡é …ç›®" -#: html/Edit/Users/Search.html:15 +#: html/Elements/EditLinks:124 +msgid "Enter objects or URIs to link objects to. Separate multiple entries with spaces." +msgstr "éµå…¥æ¬²å°‡ç‰©ä»¶é€£çµè‡³çš„物件或 URIã€‚é …ç›®ä¹‹é–“è«‹ä»¥ç©ºç™½éš”é–‹ã€‚" + +#: NOT FOUND IN SOURCE msgid "Enter one or more conditions below to search for users" -msgstr "è¼¸å…¥ä¸‹åˆ—å–®ä¸€æˆ–è¤‡å¼æ¢ä»¶ï¼ŒæŸ¥è©¢ç”¨æˆ¶è³‡æ–™" +msgstr "éµå…¥ä¸‹åˆ—å–®ä¸€æˆ–è¤‡å¼æ¢ä»¶ï¼ŒæŸ¥è©¢ç”¨æˆ¶è³‡æ–™" -#: lib/RT/CustomField_Overlay.pm:424 +#: lib/RT/CustomField_Overlay.pm:65 msgid "Enter one value" msgstr "éµå…¥å–®ä¸€é …ç›®" -#: html/Search/Bulk.html:144 html/Ticket/Elements/EditLinks:111 html/Work/Search/Bulk.html:95 -msgid "Enter tickets or URIs to link tickets to. Seperate multiple entries with spaces." -msgstr "輸入申請單å¯éˆçµåˆ°çš„申請單編號或網å€ã€‚以空白隔開。" +#: html/Elements/EditLinks:121 +msgid "Enter queues or URIs to link queues to. Separate multiple entries with spaces." +msgstr "éµå…¥æ¬²å°‡è¡¨å–®é€£çµè‡³çš„物件或 URIã€‚é …ç›®ä¹‹é–“è«‹ä»¥ç©ºç™½éš”é–‹ã€‚" + +#: html/Elements/EditLinks:117 html/Search/Bulk.html:174 +msgid "Enter tickets or URIs to link tickets to. Separate multiple entries with spaces." +msgstr "éµå…¥ç”³è«‹å–®å¯éˆçµåˆ°çš„申請單編號或網å€ã€‚é …ç›®ä¹‹é–“è«‹ä»¥ç©ºç™½éš”é–‹ã€‚" + +#: lib/RT/CustomField_Overlay.pm:66 +msgid "Enter up to %1 values" +msgstr "éµå…¥æœ€å¤š %1 個值" -#: lib/RT/CustomField_Vendor.pm:20 +#: NOT FOUND IN SOURCE msgid "EntryBoolean" msgstr "是éžå¡«è¡¨" -#: lib/RT/CustomField_Vendor.pm:17 +#: NOT FOUND IN SOURCE msgid "EntryDate" msgstr "日期填表" @@ -2277,7 +2749,7 @@ msgstr "日期填表" msgid "EntryExternal" msgstr "系統填表" -#: lib/RT/CustomField_Vendor.pm:16 +#: NOT FOUND IN SOURCE msgid "EntryFreeform" msgstr "輸入填表" @@ -2285,19 +2757,19 @@ msgstr "輸入填表" msgid "EntryMultiple" msgstr "多é¸å¡«è¡¨" -#: lib/RT/CustomField_Vendor.pm:19 +#: NOT FOUND IN SOURCE msgid "EntryNumber" msgstr "數值填表" -#: lib/RT/CustomField_Vendor.pm:15 +#: NOT FOUND IN SOURCE msgid "EntrySelect" msgstr "å–®é¸å¡«è¡¨" -#: lib/RT/CustomField_Vendor.pm:18 +#: NOT FOUND IN SOURCE msgid "EntryTime" msgstr "時間填表" -#: html/Elements/Login:39 html/SelfService/Error.html:24 html/SelfService/Error.html:25 +#: html/Elements/Login:61 html/SelfService/Error.html:46 html/SelfService/Error.html:47 msgid "Error" msgstr "錯誤" @@ -2305,80 +2777,105 @@ msgstr "錯誤" msgid "Error adding watcher" msgstr "新增視察員失敗" -#: lib/RT/Queue_Overlay.pm:555 +#: lib/RT/Queue_Overlay.pm:669 msgid "Error in parameters to Queue->AddWatcher" msgstr "表單->æ–°å¢žè¦–å¯Ÿå“¡çš„åƒæ•¸æœ‰èª¤" -#: lib/RT/Queue_Overlay.pm:713 -msgid "Error in parameters to Queue->DelWatcher" +#: lib/RT/Queue_Overlay.pm:830 +msgid "Error in parameters to Queue->DeleteWatcher" msgstr "表單->åˆªé™¤è¦–å¯Ÿå“¡çš„åƒæ•¸æœ‰èª¤" -#: lib/RT/Ticket_Overlay.pm:1374 +#: lib/RT/Ticket_Overlay.pm:1333 msgid "Error in parameters to Ticket->AddWatcher" msgstr "申請單->æ–°å¢žè¦–å¯Ÿå“¡çš„åƒæ•¸æœ‰èª¤" -#: lib/RT/Ticket_Overlay.pm:1531 -msgid "Error in parameters to Ticket->DelWatcher" +#: lib/RT/Ticket_Overlay.pm:1499 +msgid "Error in parameters to Ticket->DeleteWatcher" msgstr "申請單->åˆªé™¤è¦–å¯Ÿå“¡çš„åƒæ•¸æœ‰èª¤" -#: etc/initialdata.zh:38 etc/initialdata:20 +#: bin/rt-crontool:233 +msgid "Escalate tickets" +msgstr "調整申請單優先ç‰ç´š" + +#: NOT FOUND IN SOURCE +msgid "Estimate" +msgstr "é 計" + +#: html/Ticket/Elements/ShowBasics:57 +msgid "Estimated" +msgstr "é 計" + +#: etc/initialdata:20 msgid "Everyone" msgstr "所有人" -#: bin/rt-crontool:193 +#: bin/rt-crontool:219 msgid "Example:" msgstr "範例:" -#: html/Edit/Elements/104Buttons:77 +#: NOT FOUND IN SOURCE +msgid "Existing user renamed from %1 to %2" +msgstr "ç¾æœ‰ä½¿ç”¨è€… %1 已改å為 %2" + +#: NOT FOUND IN SOURCE msgid "Export" msgstr "匯出" -#: html/Admin/Elements/ModifyUser:63 +#: NOT FOUND IN SOURCE msgid "ExternalAuthId" msgstr "外部èªè‰å¸³è™Ÿ" -#: html/Admin/Elements/ModifyUser:57 +#: NOT FOUND IN SOURCE msgid "ExternalContactInfoId" msgstr "外部è¯çµ¡æ–¹å¼å¸³è™Ÿ" -#: html/Edit/Global/Basic/Top:64 +#: NOT FOUND IN SOURCE msgid "ExternalDatabaseDSN" msgstr "外部資料庫連çµå—串" -#: html/Edit/Global/Basic/Top:68 +#: NOT FOUND IN SOURCE msgid "ExternalDatabasePass" msgstr "外部資料庫密碼" -#: html/Edit/Global/Basic/Top:66 +#: NOT FOUND IN SOURCE msgid "ExternalDatabaseUser" msgstr "外部資料庫用戶" -#: html/Edit/Global/Basic/Top:62 +#: NOT FOUND IN SOURCE msgid "ExternalURL" msgstr "外部介é¢ç¶²å€" -#: html/Admin/Users/Modify.html:72 +#: html/Admin/Users/Modify.html:99 msgid "Extra info" msgstr "備註" -#: lib/RT/User_Overlay.pm:363 +#: lib/RT/SavedSearch.pm:165 +msgid "Failed to create search attribute" +msgstr "" + +#: lib/RT/User_Overlay.pm:377 msgid "Failed to find 'Privileged' users pseudogroup." msgstr "找ä¸åˆ°ã€Œå…§éƒ¨æˆå“¡ã€è™›æ“¬ç¾¤çµ„的使用者。" -#: lib/RT/User_Overlay.pm:370 +#: lib/RT/User_Overlay.pm:384 msgid "Failed to find 'Unprivileged' users pseudogroup" msgstr "找ä¸åˆ°ã€Œéžå…§éƒ¨æˆå“¡ã€è™›æ“¬ç¾¤çµ„的使用者。" -#: bin/rt-crontool:137 +#: bin/rt-crontool:163 #. ($modname, $@) msgid "Failed to load module %1. (%2)" msgstr "無法載入模組 %1. (%2)" +#: lib/RT/SavedSearch.pm:168 +#. ($privacy) +msgid "Failed to load object for %1" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Feb" msgstr "二月" -#: lib/RT/Date.pm:412 +#: lib/RT/Date.pm:438 msgid "Feb." msgstr "02" @@ -2390,31 +2887,59 @@ msgstr "二月" msgid "Female" msgstr "女" -#: html/Edit/Global/CustomField/List:5 html/Edit/Global/CustomField/Top:9 -msgid "Field Attribute" -msgstr "欄ä½å±¬æ€§" - -#: html/Edit/Global/CustomField/Info:14 +#: NOT FOUND IN SOURCE msgid "Field Content:" msgstr "欄ä½å…§å®¹ï¼š" -#: html/Edit/Global/CustomField/List:7 html/Edit/Global/CustomField/Top:21 +#: NOT FOUND IN SOURCE msgid "Field Description" msgstr "æ¬„ä½æè¿°" -#: html/Edit/Global/CustomField/List:6 html/Edit/Global/CustomField/Top:15 +#: NOT FOUND IN SOURCE msgid "Field Name" msgstr "欄ä½å稱" -#: html/Edit/Elements/PickUsers:52 html/Edit/Users/Add.html:47 +#: NOT FOUND IN SOURCE +msgid "Field Type" +msgstr "欄ä½é¡žåˆ¥" + +#: html/Elements/SelectAttachmentField:50 +msgid "Filename" +msgstr "檔å" + +#: lib/RT/CustomField_Overlay.pm:69 +msgid "Fill in multiple text areas" +msgstr "å¡«å…¥å¤šå€‹æ–‡å—æ¡†" + +#: lib/RT/CustomField_Overlay.pm:74 +msgid "Fill in multiple wikitext areas" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:70 +msgid "Fill in one text area" +msgstr "å¡«å…¥ä¸€å€‹æ–‡å—æ¡†" + +#: lib/RT/CustomField_Overlay.pm:75 +msgid "Fill in one wikitext area" +msgstr "" + +#: lib/RT/CustomField_Overlay.pm:71 +msgid "Fill in up to %1 text areas" +msgstr "填入最多 %1 å€‹æ–‡å—æ¡†" + +#: lib/RT/CustomField_Overlay.pm:76 +msgid "Fill in up to %1 wikitext areas" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Filter" msgstr "篩é¸" -#: html/Edit/Elements/PickUsers:6 html/Edit/Users/Add.html:7 html/Work/Tickets/Cc:4 +#: NOT FOUND IN SOURCE msgid "Filter people" msgstr "å°è±¡ç¯©é¸" -#: html/Edit/Elements/PickUsers:68 html/Edit/Users/Add.html:63 html/Work/Tickets/Cc:42 +#: NOT FOUND IN SOURCE msgid "Filtered list:" msgstr "篩é¸åˆ—表:" @@ -2422,47 +2947,55 @@ msgstr "篩é¸åˆ—表:" msgid "Fin" msgstr "最終" -#: html/Ticket/Create.html:154 html/Ticket/Elements/EditBasics:58 lib/RT/Tickets_Overlay.pm:1091 +#: html/Search/Elements/PickBasics:162 html/Ticket/Create.html:185 html/Ticket/Elements/EditBasics:79 lib/RT/Tickets_Overlay.pm:1569 msgid "Final Priority" -msgstr "æœ€ä½Žé †ä½" +msgstr "æœ€çµ‚é †ä½" -#: lib/RT/Ticket_Overlay.pm:1180 +#: lib/RT/Ticket_Overlay.pm:1140 msgid "FinalPriority" -msgstr "æœ€ä½Žé †ä½" +msgstr "æœ€çµ‚é †ä½" #: NOT FOUND IN SOURCE msgid "Financial Department:" msgstr "財務部:" -#: html/Admin/Queues/People.html:60 html/Ticket/Elements/EditPeople:33 +#: NOT FOUND IN SOURCE msgid "Find group whose" msgstr "尋找群組的" +#: html/Admin/Groups/index.html:72 html/Admin/Queues/People.html:82 html/Ticket/Elements/EditPeople:55 +msgid "Find groups whose" +msgstr "尋找群組的" + #: NOT FOUND IN SOURCE msgid "Find new/open tickets" msgstr "尋找/開啟申請單" -#: html/Admin/Queues/People.html:56 html/Admin/Users/index.html:45 html/Ticket/Elements/EditPeople:29 +#: html/Admin/Queues/People.html:78 html/Admin/Users/index.html:70 html/Ticket/Elements/EditPeople:51 msgid "Find people whose" msgstr "尋找人員的" -#: html/Search/Listing.html:107 html/Work/Search/index.html:88 +#: NOT FOUND IN SOURCE +msgid "Find queues whose" +msgstr "尋找表單的" + +#: html/Search/Results.html:109 msgid "Find tickets" msgstr "尋找申請單" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:118 +#: NOT FOUND IN SOURCE msgid "Finish Approval" msgstr "ç°½æ ¸å®Œç•¢" -#: html/Ticket/Elements/Tabs:57 +#: html/Ticket/Elements/Tabs:81 msgid "First" msgstr "ç¬¬ä¸€é …" -#: html/Search/Listing.html:40 html/Work/Search/index.html:17 +#: NOT FOUND IN SOURCE msgid "First page" msgstr "第一é " -#: html/Edit/Global/Workflow/Owner.html:30 +#: NOT FOUND IN SOURCE msgid "First-" msgstr "一" @@ -2470,7 +3003,7 @@ msgstr "一" msgid "First-level Admins" msgstr "一階主管" -#: html/Edit/Users/Info:39 +#: NOT FOUND IN SOURCE msgid "First-level Users" msgstr "一階主管員工" @@ -2478,40 +3011,48 @@ msgstr "一階主管員工" msgid "Fixed shift" msgstr "固定ç" -#: docs/design_docs/string-extraction-guide.txt:33 +#: docs/design_docs/string-extraction-guide.txt:33 lib/RT/StyleGuide.pod:766 msgid "Foo Bar Baz" msgstr "甲 ä¹™ 丙" -#: docs/design_docs/string-extraction-guide.txt:24 +#: docs/design_docs/string-extraction-guide.txt:24 lib/RT/StyleGuide.pod:757 msgid "Foo!" msgstr "甲ï¼" -#: html/Search/Bulk.html:86 html/Work/Search/Bulk.html:55 +#: html/Search/Bulk.html:105 msgid "Force change" -msgstr "強制更新" +msgstr "強制更æ›" -#: html/Work/Elements/104Header:89 +#: NOT FOUND IN SOURCE msgid "Form Processing" msgstr "é›»å表單作æ¥å€" -#: html/Search/Listing.html:105 html/Work/Search/index.html:86 +#: html/Search/Elements/EditFormat:52 +msgid "Format" +msgstr "" + +#: html/Search/Results.html:107 #. ($ticketcount) msgid "Found %quant(%1,ticket)" msgstr "找到 %1 張申請單" -#: lib/RT/Interface/Web.pm:904 x:907 +#: lib/RT/Record.pm:942 msgid "Found Object" msgstr "已找到物件" -#: html/Edit/Global/Workflow/Owner.html:33 +#: NOT FOUND IN SOURCE msgid "Fourth-" msgstr "å››" -#: html/Admin/Elements/ModifyUser:43 +#: NOT FOUND IN SOURCE +msgid "Freeform" +msgstr "輸入" + +#: NOT FOUND IN SOURCE msgid "FreeformContactInfo" msgstr "è¯çµ¡æ–¹å¼" -#: lib/RT/CustomField_Vendor.pm:11 +#: NOT FOUND IN SOURCE msgid "FreeformDate" msgstr "日期輸入" @@ -2519,23 +3060,23 @@ msgstr "日期輸入" msgid "FreeformExternal" msgstr "系統欄ä½" -#: lib/RT/CustomField_Overlay.pm:37 +#: NOT FOUND IN SOURCE msgid "FreeformMultiple" msgstr "多é‡è¼¸å…¥" -#: lib/RT/CustomField_Vendor.pm:13 +#: NOT FOUND IN SOURCE msgid "FreeformNumber" msgstr "數值輸入" -#: lib/RT/CustomField_Vendor.pm:14 +#: NOT FOUND IN SOURCE msgid "FreeformPassword" msgstr "密碼輸入" -#: lib/RT/CustomField_Overlay.pm:36 +#: NOT FOUND IN SOURCE msgid "FreeformSingle" msgstr "單一輸入" -#: lib/RT/CustomField_Vendor.pm:12 +#: NOT FOUND IN SOURCE msgid "FreeformTime" msgstr "時間輸入" @@ -2543,11 +3084,11 @@ msgstr "時間輸入" msgid "Fri" msgstr "星期五" -#: lib/RT/Date.pm:392 +#: lib/RT/Date.pm:417 msgid "Fri." msgstr "星期五" -#: html/Ticket/Elements/ShowHistory:40 html/Ticket/Elements/ShowHistory:50 +#: html/Ticket/Elements/ShowHistory:62 html/Ticket/Elements/ShowHistory:72 msgid "Full headers" msgstr "å®Œæ•´æ¨™é æª”" @@ -2555,28 +3096,40 @@ msgstr "å®Œæ•´æ¨™é æª”" msgid "Gecos" msgstr "登入帳號" -#: html/Edit/Users/Info:26 +#: NOT FOUND IN SOURCE msgid "Gender" msgstr "性別" +#: html/Tools/Offline.html:87 +msgid "Get template from file" +msgstr "å–出檔案裡的範本" + #: NOT FOUND IN SOURCE msgid "Getting the current user from a pgp sig\\n" msgstr "å–å¾—ç›®å‰ä½¿ç”¨è€…çš„ pgp ç°½ç« \\n" -#: lib/RT/Transaction_Overlay.pm:593 +#: lib/RT/Transaction_Overlay.pm:673 #. ($New->Name) msgid "Given to %1" msgstr "交予 %1" -#: html/Admin/Elements/Tabs:40 html/Admin/index.html:37 +#: html/Admin/Elements/Tabs:65 html/Admin/index.html:82 msgid "Global" msgstr "全域è¨å®š" #: NOT FOUND IN SOURCE +msgid "Global Approval" +msgstr "å…¨åŸŸç°½æ ¸" + +#: html/Admin/Elements/EditCustomFields:55 +msgid "Global Custom Fields" +msgstr "全域自訂欄ä½" + +#: NOT FOUND IN SOURCE msgid "Global Keyword Selections" msgstr "全域關éµå—é¸å–" -#: html/Edit/Users/System:24 +#: NOT FOUND IN SOURCE msgid "Global Rights:" msgstr "æ“æœ‰å…¨åŸŸæ¬Šé™åˆ—表:" @@ -2584,16 +3137,28 @@ msgstr "æ“æœ‰å…¨åŸŸæ¬Šé™åˆ—表:" msgid "Global Scrips" msgstr "全域手續" -#: html/Edit/Elements/Tab:40 +#: NOT FOUND IN SOURCE msgid "Global Setup" msgstr "全域è¨å®š" -#: html/Admin/Elements/SelectTemplate:37 html/Edit/Elements/SelectTemplate:11 +#: html/Admin/Global/CustomFields/index.html:59 +msgid "Global custom field configuration" +msgstr "" + +#: html/Admin/Elements/SelectTemplate:59 #. (loc($Template->Name)) msgid "Global template: %1" msgstr "全域範本:%1" -#: html/Admin/Elements/EditCustomFields:74 html/Admin/Queues/People.html:58 html/Admin/Queues/People.html:62 html/Admin/Queues/index.html:43 html/Admin/Users/index.html:48 html/Ticket/Elements/EditPeople:31 html/Ticket/Elements/EditPeople:35 html/index.html:40 +#: NOT FOUND IN SOURCE +msgid "GlobalApproval" +msgstr "å…¨åŸŸç°½æ ¸" + +#: html/Tools/Offline.html:91 +msgid "Go" +msgstr "執行" + +#: 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 msgid "Go!" msgstr "執行" @@ -2601,19 +3166,19 @@ msgstr "執行" msgid "Good pgp sig from %1\\n" msgstr "%1 çš„ pgp ç°½ç« æ˜¯æ£ç¢ºçš„\\n" -#: html/Search/Listing.html:49 +#: NOT FOUND IN SOURCE msgid "Goto page" msgstr "到é é¢" -#: html/Elements/GotoTicket:24 html/SelfService/Elements/GotoTicket:24 html/Work/Elements/104Header:49 +#: html/Elements/GotoTicket:46 html/SelfService/Elements/GotoTicket:46 msgid "Goto ticket" msgstr "跳到申請單" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:224 +#: NOT FOUND IN SOURCE msgid "Grand" msgstr "上" -#: html/Ticket/Elements/AddWatchers:45 html/User/Elements/DelegateRights:77 +#: html/Ticket/Elements/AddWatchers:67 html/Ticket/Elements/ShowGroupMembers:55 html/User/Elements/DelegateRights:99 msgid "Group" msgstr "群組" @@ -2621,7 +3186,11 @@ msgstr "群組" msgid "Group %1 %2: %3" msgstr "群組 %1 %2:%3" -#: html/Edit/Global/GroupRight/List:5 html/Edit/Global/GroupRight/Top:20 html/Edit/Groups/List:7 +#: NOT FOUND IN SOURCE +msgid "Group Admin" +msgstr "群組管ç†å“¡" + +#: NOT FOUND IN SOURCE msgid "Group Description" msgstr "群組æè¿°" @@ -2633,7 +3202,7 @@ msgstr "群組管ç†" msgid "Group Members" msgstr "群組æˆå“¡" -#: html/Edit/Elements/PickUsers:28 html/Edit/Global/GroupRight/List:4 html/Edit/Global/GroupRight/Top:10 html/Edit/Groups/List:6 html/Edit/Groups/Top:7 html/Edit/Users/Add.html:29 html/Edit/Users/Group:10 html/Edit/Users/Search.html:43 html/Work/Delegates/Add.html:15 html/Work/Tickets/Cc:24 +#: NOT FOUND IN SOURCE msgid "Group Name" msgstr "群組å稱" @@ -2641,7 +3210,7 @@ msgstr "群組å稱" msgid "Group Name:" msgstr "群組å稱:" -#: html/Admin/Elements/GroupTabs:44 html/Admin/Elements/QueueTabs:56 html/Admin/Elements/SystemTabs:43 html/Admin/Global/index.html:54 html/Edit/Global/autohandler:12 html/Edit/Queues/autohandler:23 html/Edit/Users/Group:11 html/Edit/Users/index.html:123 +#: 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 "群組權é™" @@ -2649,15 +3218,15 @@ msgstr "群組權é™" msgid "Group Rights:" msgstr "æ“æœ‰ç¾¤çµ„權é™åˆ—表:" -#: html/Edit/Elements/Tab:36 +#: NOT FOUND IN SOURCE msgid "Group Setup" msgstr "群組è¨å®š" -#: html/Edit/Global/GroupRight/List:8 html/Edit/Global/GroupRight/Top:14 html/Edit/Groups/List:10 html/Edit/Groups/Top:15 +#: NOT FOUND IN SOURCE msgid "Group Status" msgstr "群組狀態" -#: lib/RT/Group_Overlay.pm:964 +#: lib/RT/Group_Overlay.pm:991 msgid "Group already has member" msgstr "ç¾¤çµ„å…§å·²æœ‰æ¤æˆå“¡" @@ -2665,20 +3234,24 @@ msgstr "ç¾¤çµ„å…§å·²æœ‰æ¤æˆå“¡" msgid "Group could not be created." msgstr "無法新增群組" -#: html/Admin/Groups/Modify.html:76 +#: html/Admin/Groups/Modify.html:109 #. ($create_msg) msgid "Group could not be created: %1" msgstr "無法新增群組:%1" -#: lib/RT/Group_Overlay.pm:496 +#: lib/RT/Group_Overlay.pm:529 msgid "Group created" msgstr "群組新增完畢" -#: lib/RT/Group_Overlay.pm:1132 +#: NOT FOUND IN SOURCE +msgid "Group created: %1" +msgstr "群組 %1 新增完畢" + +#: lib/RT/Group_Overlay.pm:1163 msgid "Group has no such member" msgstr "群組沒有這個æˆå“¡" -#: lib/RT/Group_Overlay.pm:944 lib/RT/Queue_Overlay.pm:628 lib/RT/Queue_Overlay.pm:688 lib/RT/Ticket_Overlay.pm:1428 lib/RT/Ticket_Overlay.pm:1506 +#: 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 msgid "Group not found" msgstr "找ä¸åˆ°ç¾¤çµ„" @@ -2691,10 +3264,18 @@ msgid "Group not specified.\\n" msgstr "未指定群組。\\n" #: NOT FOUND IN SOURCE +msgid "Group redescribed from %1 to %2" +msgstr "群組æè¿° %1 已改為 %2" + +#: NOT FOUND IN SOURCE +msgid "Group renamed from %1 to %2" +msgstr "群組 %1 已改å為 %2" + +#: NOT FOUND IN SOURCE msgid "Group with Queue Rights" msgstr "æ“æœ‰è¡¨å–®æ¬Šé™ç¾¤çµ„" -#: html/Edit/Global/Workflow/Owner.html:70 +#: NOT FOUND IN SOURCE msgid "Group's" msgstr "群組之" @@ -2702,52 +3283,78 @@ msgstr "群組之" msgid "Group:" msgstr "群組:" -#: html/Admin/Elements/SelectNewGroupMembers:34 html/Admin/Elements/Tabs:34 html/Admin/Groups/Members.html:63 html/Admin/Queues/People.html:82 html/Admin/index.html:31 html/Edit/Global/GroupRight/Add.html:15 html/User/Groups/Members.html:66 +#: 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 msgid "Groups" msgstr "群組" -#: lib/RT/Group_Overlay.pm:970 +#: lib/RT/Group_Overlay.pm:997 msgid "Groups can't be members of their members" msgstr "ä¸èƒ½å°‡ç¾¤çµ„è¨ç‚ºç¾¤çµ„å…§æˆå“¡" +#: html/Admin/Groups/index.html:82 +msgid "Groups matching search criteria" +msgstr "ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„群組" + +#: html/Ticket/Elements/ShowRequestor:77 +msgid "Groups this user belongs to" +msgstr "使用者所屬的群組" + #: NOT FOUND IN SOURCE msgid "Groups with Global Rights" msgstr "æ“æœ‰å…¨åŸŸæ¬Šé™ç¾¤çµ„" -#: html/Edit/Global/GroupRight/List:6 html/Edit/Global/GroupRight/Top:22 html/Edit/Groups/List:8 +#: NOT FOUND IN SOURCE msgid "HRMSDefined" msgstr "組織架構" #: NOT FOUND IN SOURCE +msgid "HTML Attributes" +msgstr "HTML 屬性" + +#: NOT FOUND IN SOURCE msgid "Health Insurance" msgstr "å¥ä¿è£œåŠ©èº«ä»½" -#: lib/RT/Interface/CLI.pm:72 lib/RT/Interface/CLI.pm:72 +#: lib/RT/Interface/CLI.pm:94 lib/RT/Interface/CLI.pm:94 msgid "Hello!" msgstr "å—¨ï¼" -#: docs/design_docs/string-extraction-guide.txt:40 +#: docs/design_docs/string-extraction-guide.txt:40 lib/RT/StyleGuide.pod:773 #. ($name) msgid "Hello, %1" msgstr "嗨,%1" -#: html/Edit/Elements/104Top:28 +#: NOT FOUND IN SOURCE msgid "Help" -msgstr "輔助說明" +msgstr "說明" #: NOT FOUND IN SOURCE msgid "Help Desks" msgstr "å„é …æ¥å‹™çª—å£" -#: html/Ticket/Elements/ShowHistory:29 html/Ticket/Elements/Tabs:87 html/Work/Tickets/Elements/ShowHistory:8 +#: NOT FOUND IN SOURCE +msgid "Hidden" +msgstr "éš±è—" + +#: html/Admin/Elements/GroupTabs:70 html/Admin/Elements/UserTabs:64 html/Ticket/Elements/ShowHistory:51 html/Ticket/Elements/Tabs:111 msgid "History" msgstr "紀錄" -#: html/Admin/Elements/ModifyUser:67 +#: html/Admin/Groups/History.html:62 +#. ($GroupObj->Name) +msgid "History of the group %1" +msgstr "群組 %1 的紀錄" + +#: html/Admin/Users/History.html:62 +#. ($UserObj->Name) +msgid "History of the user %1" +msgstr "使用者 %1 的紀錄" + +#: NOT FOUND IN SOURCE msgid "HomePhone" msgstr "ä½è™•電話" -#: html/Edit/Elements/104Top:15 html/Edit/Elements/104Top:24 html/Edit/Elements/EDOMHeader:9 html/Elements/Tabs:43 +#: html/Elements/Tabs:65 msgid "Homepage" msgstr "主é " @@ -2755,11 +3362,15 @@ msgstr "主é " msgid "Hotel Expense" msgstr "ä½å®¿è²»" -#: lib/RT/Base.pm:73 +#: lib/RT/Base.pm:110 #. (6) msgid "I have %quant(%1,concrete mixer)." msgstr "我有 %quant(%1,份固體攪拌器)。" +#: html/Search/Build.html:637 +msgid "I'm lost" +msgstr "" + #: NOT FOUND IN SOURCE msgid "ID Number" msgstr "身分è‰è™Ÿ" @@ -2768,63 +3379,87 @@ msgstr "身分è‰è™Ÿ" msgid "ID Type" msgstr "身分類別" -#: html/Ticket/Elements/ShowBasics:26 lib/RT/Tickets_Overlay.pm:1018 +#: html/Ticket/Elements/ShowBasics:48 lib/RT/Tickets_Overlay.pm:1494 msgid "Id" msgstr "編號" -#: html/Admin/Users/Modify.html:43 html/User/Prefs.html:38 html/Work/Preferences/Info:14 +#: html/Admin/Users/Modify.html:65 html/User/Prefs.html:60 msgid "Identity" msgstr "身份" -#: etc/initialdata.zh:439 etc/initialdata:411 etc/upgrade/2.1.71:86 html/Edit/Elements/CreateApprovalsQueue:58 +#: etc/initialdata:429 msgid "If an approval is rejected, reject the original and delete pending approvals" msgstr "è‹¥ç°½æ ¸å–®é到é§å›žï¼Œå‰‡é€£å¸¶é§å›žåŽŸç”³è«‹å–®ï¼Œä¸¦åˆªé™¤å…¶ä»–ç›¸é—œçš„å¾…ç°½æ ¸äº‹é …" -#: bin/rt-crontool:189 +#: html/Tools/Offline.html:74 +msgid "If no Requestor is specified, create tickets with this requestor." +msgstr "若沒有指定申請者,則以æ¤ä½¿ç”¨è€…作為申請者" + +#: html/Tools/Offline.html:65 +msgid "If no queue is specified, create tickets in this queue." +msgstr "申請單若沒有指定表單,則將它新增在æ¤è¡¨å–®å…§" + +#: 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 "如果æ¤å·¥å…·ç¨‹å¼ç‚º setgid,惡æ„的本地端用戶å³èƒ½ç”±æ¤å–å¾— RT 的管ç†å“¡æ¬Šé™ã€‚" -#: html/Admin/Queues/People.html:104 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyPeople.html:37 +#: 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 "若您已更新以上資料,請記得按一下" -#: lib/RT/Interface/Web.pm:896 x:899 +#: lib/RT/Record.pm:933 msgid "Illegal value for %1" msgstr "%1 的值錯誤" -#: lib/RT/Interface/Web.pm:899 x:902 +#: NOT FOUND IN SOURCE +msgid "Image" +msgstr "圖片" + +#: lib/RT/Record.pm:936 msgid "Immutable field" msgstr "æ¤æ¬„ä½å€¼ä¸å¯æ›´å‹•" -#: html/Edit/Elements/104Buttons:76 html/Edit/Global/Workflow/Import.html:2 +#: NOT FOUND IN SOURCE msgid "Import" msgstr "匯入" -#: html/Admin/Elements/EditCustomFields:73 +#: NOT FOUND IN SOURCE msgid "Include disabled custom fields in listing." msgstr "列出åœç”¨çš„自訂欄ä½" -#: html/Admin/Queues/index.html:42 html/Edit/Queues/index.html:38 +#: html/Admin/Groups/index.html:65 +msgid "Include disabled groups in listing." +msgstr "列出åœç”¨çš„群組" + +#: html/Admin/Queues/index.html:65 msgid "Include disabled queues in listing." msgstr "列出åœç”¨çš„表單" -#: html/Admin/Users/index.html:46 html/Edit/Users/Search.html:62 +#: html/Admin/Users/index.html:71 msgid "Include disabled users in search." msgstr "列出åœç”¨çš„使用者" -#: html/Edit/Users/Info:36 +#: html/Search/Build.html:663 +msgid "Incomplete Query" +msgstr "" + +#: html/Search/Build.html:660 +msgid "Incomplete query" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Indirect Employee" msgstr "直接/間接員工" -#: lib/RT/Tickets_Overlay.pm:1067 +#: html/Search/Elements/PickBasics:161 lib/RT/Tickets_Overlay.pm:1544 msgid "Initial Priority" -msgstr "åˆå§‹å„ªå…ˆæ¬Š" +msgstr "åˆå§‹å„ªå…ˆé †ä½" -#: lib/RT/Ticket_Overlay.pm:1179 lib/RT/Ticket_Overlay.pm:1181 +#: lib/RT/Ticket_Overlay.pm:1139 lib/RT/Ticket_Overlay.pm:1141 msgid "InitialPriority" -msgstr "åˆå§‹å„ªå…ˆæ¬Š" +msgstr "åˆå§‹å„ªå…ˆé †ä½" -#: lib/RT/ScripAction_Overlay.pm:104 +#: lib/RT/ScripAction_Overlay.pm:134 msgid "Input error" msgstr "輸入錯誤" @@ -2832,20 +3467,20 @@ msgstr "輸入錯誤" msgid "Interest noted" msgstr "登記æˆåŠŸ" -#: lib/RT/Ticket_Overlay.pm:3829 +#: lib/RT/Ticket_Overlay.pm:3454 msgid "Internal Error" msgstr "內部錯誤" -#: lib/RT/Record.pm:142 +#: lib/RT/Record.pm:305 #. ($id->{error_message}) msgid "Internal Error: %1" msgstr "內部錯誤:%1" -#: lib/RT/Group_Overlay.pm:643 +#: lib/RT/Group_Overlay.pm:676 msgid "Invalid Group Type" msgstr "錯誤的群組類別" -#: lib/RT/Principal_Overlay.pm:127 +#: lib/RT/Principal_Overlay.pm:161 msgid "Invalid Right" msgstr "錯誤的權é™" @@ -2853,32 +3488,32 @@ msgstr "錯誤的權é™" msgid "Invalid Type" msgstr "錯誤的類型" -#: lib/RT/Interface/Web.pm:901 x:904 +#: lib/RT/Record.pm:938 msgid "Invalid data" msgstr "錯誤的資料" -#: lib/RT/Ticket_Overlay.pm:439 +#: NOT FOUND IN SOURCE msgid "Invalid owner. Defaulting to 'nobody'." msgstr "錯誤的承辦人。改為é è¨æ‰¿è¾¦äººã€Œnobodyã€ã€‚" -#: lib/RT/Scrip_Overlay.pm:133 lib/RT/Template_Overlay.pm:250 +#: lib/RT/Scrip_Overlay.pm:158 lib/RT/Template_Overlay.pm:276 msgid "Invalid queue" msgstr "錯誤的表單" -#: lib/RT/ACE_Overlay.pm:243 lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:269 lib/RT/ACE_Overlay.pm:274 +#: 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 "錯誤的權é™" -#: lib/RT/Record.pm:117 +#: lib/RT/Record.pm:280 #. ($key) msgid "Invalid value for %1" msgstr "%1 的值錯誤" -#: lib/RT/Ticket_Overlay.pm:3461 +#: lib/RT/Record.pm:1597 msgid "Invalid value for custom field" msgstr "錯誤的自訂欄ä½å€¼" -#: lib/RT/Ticket_Overlay.pm:346 +#: lib/RT/Ticket_Overlay.pm:413 msgid "Invalid value for status" msgstr "錯誤的狀態值" @@ -2886,18 +3521,22 @@ msgstr "錯誤的狀態值" msgid "IssueStatement" msgstr "é€å‡ºé™³è¿°" -#: bin/rt-crontool:190 +#: bin/rt-crontool:216 msgid "It is incredibly important that nonprivileged users not be allowed to run this tool." msgstr "請絕å°ä¸è¦è®“未具權é™çš„使用者執行æ¤å·¥å…·ç¨‹å¼ã€‚" -#: bin/rt-crontool:191 +#: 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 "å»ºè°æ‚¨æ–°å¢žä¸€å€‹éš¸å±¬æ–¼æ£ç¢ºç¾¤çµ„的低權é™ç³»çµ±ä½¿ç”¨è€…,並以該身份執行æ¤å·¥å…·ç¨‹å¼ã€‚" -#: bin/rt-crontool:162 +#: bin/rt-crontool:188 msgid "It takes several arguments:" msgstr "它接å—ä¸‹åˆ—åƒæ•¸ï¼š" +#: html/Search/Elements/EditFormat:85 +msgid "Italic" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Item Name" msgstr "å“å" @@ -2914,7 +3553,7 @@ msgstr "å¾…ç°½æ ¸é …ç›®" msgid "Jan" msgstr "一月" -#: lib/RT/Date.pm:411 +#: lib/RT/Date.pm:437 msgid "Jan." msgstr "01" @@ -2926,7 +3565,7 @@ msgstr "一月" msgid "Job" msgstr "è·ç¨±" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/Group_Overlay.pm:174 msgid "Join or leave this group" msgstr "åŠ å…¥æˆ–é›¢é–‹æ¤ç¾¤çµ„" @@ -2934,15 +3573,15 @@ msgstr "åŠ å…¥æˆ–é›¢é–‹æ¤ç¾¤çµ„" msgid "Jul" msgstr "七月" -#: lib/RT/Date.pm:417 +#: lib/RT/Date.pm:443 msgid "Jul." -msgstr "01" +msgstr "07" #: NOT FOUND IN SOURCE msgid "July" msgstr "七月" -#: html/Ticket/Elements/Tabs:98 +#: html/Ticket/Elements/Tabs:122 msgid "Jumbo" msgstr "全部資訊" @@ -2950,9 +3589,9 @@ msgstr "全部資訊" msgid "Jun" msgstr "å…æœˆ" -#: lib/RT/Date.pm:416 +#: lib/RT/Date.pm:442 msgid "Jun." -msgstr "06." +msgstr "06" #: NOT FOUND IN SOURCE msgid "June" @@ -2962,43 +3601,51 @@ msgstr "å…æœˆ" msgid "Keyword" msgstr "é—œéµå—" -#: lib/RT/CustomField_Vendor.pm:23 +#: NOT FOUND IN SOURCE msgid "LabelAttachments" msgstr "附件標籤" -#: lib/RT/CustomField_Vendor.pm:24 +#: NOT FOUND IN SOURCE msgid "LabelContent" msgstr "內容標籤" -#: lib/RT/CustomField_Vendor.pm:22 +#: NOT FOUND IN SOURCE msgid "LabelSubject" msgstr "主題標籤" -#: lib/RT/CustomField_Vendor.pm:21 +#: NOT FOUND IN SOURCE msgid "LabelURL" msgstr "éˆçµæ¨™ç±¤" -#: html/Admin/Elements/ModifyUser:51 +#: NOT FOUND IN SOURCE msgid "Lang" msgstr "使用語言" -#: html/Ticket/Elements/Tabs:72 +#: html/Admin/Users/Modify.html:94 html/User/Prefs.html:76 +msgid "Language" +msgstr "語言" + +#: html/Search/Elements/EditFormat:79 +msgid "Large" +msgstr "" + +#: html/Ticket/Elements/Tabs:96 msgid "Last" msgstr "上次更新" -#: html/Ticket/Elements/EditDates:37 html/Ticket/Elements/ShowDates:38 +#: html/Ticket/Elements/EditDates:59 html/Ticket/Elements/ShowDates:60 msgid "Last Contact" msgstr "上次è¯çµ¡" -#: html/Elements/SelectDateType:28 +#: html/Elements/SelectDateType:50 msgid "Last Contacted" msgstr "上次è¯çµ¡æ—¥æœŸ" -#: html/Search/Elements/TicketHeader:40 html/Work/Search/TicketHeader:19 +#: NOT FOUND IN SOURCE msgid "Last Notified" msgstr "上次通知" -#: html/Elements/SelectDateType:29 +#: html/Elements/SelectDateType:51 msgid "Last Updated" msgstr "上次更新" @@ -3006,15 +3653,19 @@ msgstr "上次更新" msgid "LastUpdated" msgstr "上次更新" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:103 +msgid "LastUpdatedBy" +msgstr "上次更新者" + +#: html/Ticket/Elements/ShowBasics:68 msgid "Left" msgstr "剩餘時間" -#: html/Admin/Users/Modify.html:82 +#: html/Admin/Users/Modify.html:109 msgid "Let this user access RT" msgstr "å…許這å使用者登入" -#: html/Admin/Users/Modify.html:86 +#: html/Admin/Users/Modify.html:113 msgid "Let this user be granted rights" msgstr "內部æˆå“¡ï¼ˆå…·æœ‰å€‹äººæ¬Šé™ï¼‰" @@ -3026,33 +3677,37 @@ msgstr "é™åˆ¶æ‰¿è¾¦äººç‚º %1 到%2" msgid "Limiting queue to %1 %2" msgstr "é™åˆ¶è¡¨å–®ç‚º %1 到 %2" -#: html/Work/Queues/Select.html:4 +#: html/Search/Elements/EditFormat:68 +msgid "Link" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Link a Queue" msgstr "申請表單連çµ" -#: lib/RT/Ticket_Overlay.pm:2717 +#: lib/RT/Record.pm:1292 msgid "Link already exists" msgstr "æ¤éˆçµå·²å˜åœ¨" -#: lib/RT/Ticket_Overlay.pm:2729 +#: lib/RT/Record.pm:1306 msgid "Link could not be created" msgstr "無法新增éˆçµ" -#: lib/RT/Ticket_Overlay.pm:2737 lib/RT/Ticket_Overlay.pm:2747 +#: lib/RT/Record.pm:1312 #. ($TransString) msgid "Link created (%1)" msgstr "éˆçµ(%1)新增完畢" -#: lib/RT/Ticket_Overlay.pm:2658 +#: lib/RT/Record.pm:1373 #. ($TransString) msgid "Link deleted (%1)" msgstr "éˆçµ(%1)刪除完畢" -#: lib/RT/Ticket_Overlay.pm:2664 +#: lib/RT/Record.pm:1379 msgid "Link not found" msgstr "找ä¸åˆ°éˆçµ" -#: html/Ticket/ModifyLinks.html:24 html/Ticket/ModifyLinks.html:28 +#: html/Ticket/ModifyLinks.html:46 html/Ticket/ModifyLinks.html:50 #. ($Ticket->Id) msgid "Link ticket #%1" msgstr "éˆçµç”³è«‹å–® #%1" @@ -3061,41 +3716,62 @@ msgstr "éˆçµç”³è«‹å–® #%1" msgid "Link ticket %1" msgstr "éˆçµç”³è«‹å–® %1" -#: html/Ticket/Elements/Tabs:96 +#: html/Ticket/Create.html:205 html/Ticket/Elements/ShowSummary:83 html/Ticket/Elements/Tabs:120 html/Ticket/ModifyAll.html:78 msgid "Links" msgstr "éˆçµ" -#: html/Edit/Users/Search.html:11 +#: NOT FOUND IN SOURCE msgid "List All Users" msgstr "列出所有用戶資料" -#: html/Admin/Users/Modify.html:113 html/User/Prefs.html:84 html/Work/Preferences/Info:73 +#: html/Search/Elements/EditSearches:76 +msgid "Load" +msgstr "載入" + +#: html/Search/Elements/EditSearches:74 +msgid "Load saved search:" +msgstr "載入已儲å˜çš„æŸ¥è©¢ï¼š" + +#: lib/RT/System.pm:87 +msgid "LoadSavedSearch" +msgstr "" + +#: html/Admin/Tools/Configuration.html:64 +msgid "Loaded perl modules" +msgstr "已載入的 Perl 模組" + +#: lib/RT/SavedSearch.pm:112 +#. ($self->Name) +msgid "Loaded search %1" +msgstr "" + +#: html/Admin/Users/Modify.html:138 html/User/Prefs.html:126 msgid "Location" msgstr "ä½ç½®" -#: lib/RT.pm:162 +#: lib/RT.pm:212 #. ($RT::LogDir) msgid "Log directory %1 not found or couldn't be written.\\n RT can't run." msgstr "登入目錄 %1 找ä¸åˆ°æˆ–無法寫入\\n。無法執行 RT。" -#: html/Edit/Global/Basic/Top:52 +#: NOT FOUND IN SOURCE msgid "LogToFile" msgstr "紀錄ç‰ç´š" -#: html/Edit/Global/Basic/Top:54 +#: NOT FOUND IN SOURCE msgid "LogToFileNamed" msgstr "紀錄檔å" -#: html/Elements/Header:57 +#: html/Elements/Header:94 #. ("<b>".$session{'CurrentUser'}->Name."</b>") msgid "Logged in as %1" msgstr "使用者:%1" -#: docs/design_docs/string-extraction-guide.txt:71 html/Elements/Login:35 html/Elements/Login:44 html/Elements/Login:54 +#: 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 msgid "Login" msgstr "登入" -#: html/Edit/Elements/104Top:17 html/Edit/Elements/104Top:17 html/Edit/Elements/104Top:32 html/Elements/Header:54 +#: html/Elements/Header:91 msgid "Logout" msgstr "登出" @@ -3103,63 +3779,75 @@ msgstr "登出" msgid "Long-term contractor" msgstr "長期契約員工" -#: html/Search/Bulk.html:85 html/Work/Search/Bulk.html:54 +#: lib/RT/CustomField_Overlay.pm:866 +msgid "Lookup type mismatch" +msgstr "å°æ‡‰çš„類別ä¸ç¬¦" + +#: html/Search/Bulk.html:104 msgid "Make Owner" msgstr "新增承辦人" -#: html/Search/Bulk.html:109 html/Work/Search/Bulk.html:63 +#: html/Search/Bulk.html:128 msgid "Make Status" msgstr "æ–°å¢žç¾æ³" -#: html/Search/Bulk.html:117 html/Work/Search/Bulk.html:75 +#: html/Search/Bulk.html:136 msgid "Make date Due" msgstr "新增到期日" -#: html/Search/Bulk.html:119 html/Work/Search/Bulk.html:78 +#: html/Search/Bulk.html:138 msgid "Make date Resolved" msgstr "新增解決日期" -#: html/Search/Bulk.html:113 html/Work/Search/Bulk.html:69 +#: html/Search/Bulk.html:132 msgid "Make date Started" msgstr "新增實際起始日期" -#: html/Search/Bulk.html:111 html/Work/Search/Bulk.html:66 +#: html/Search/Bulk.html:130 msgid "Make date Starts" msgstr "新增應起始日期" -#: html/Search/Bulk.html:115 html/Work/Search/Bulk.html:72 +#: html/Search/Bulk.html:134 msgid "Make date Told" msgstr "æ–°å¢žå ±å‘Šæ—¥æœŸ" -#: html/Search/Bulk.html:105 html/Work/Search/Bulk.html:57 +#: html/Search/Bulk.html:124 msgid "Make priority" msgstr "æ–°å¢žå„ªå…ˆé †ä½" -#: html/Search/Bulk.html:107 html/Work/Search/Bulk.html:60 +#: html/Search/Bulk.html:126 msgid "Make queue" msgstr "新增表單" -#: html/Search/Bulk.html:103 html/Work/Search/Bulk.html:59 +#: html/Search/Bulk.html:122 msgid "Make subject" msgstr "新增主題" +#: lib/RT/Group_Overlay.pm:177 +msgid "Make this group visible to user" +msgstr "" + #: NOT FOUND IN SOURCE msgid "Male" msgstr "ç”·" -#: html/Admin/index.html:32 +#: html/Admin/index.html:78 +msgid "Manage custom fields and custom field values" +msgstr "管ç†è‡ªè¨‚欄ä½åŠæ¬„ä½å€¼" + +#: html/Admin/index.html:69 msgid "Manage groups and group membership" msgstr "管ç†ç¾¤çµ„åŠæ‰€å±¬æˆå“¡" -#: html/Admin/index.html:38 +#: html/Admin/index.html:85 msgid "Manage properties and configuration which apply to all queues" msgstr "管ç†é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„屬性與è¨å®š" -#: html/Admin/index.html:35 +#: html/Admin/index.html:74 msgid "Manage queues and queue-specific properties" msgstr "管ç†å„表單åŠç›¸é—œå±¬æ€§" -#: html/Admin/index.html:29 +#: html/Admin/index.html:64 msgid "Manage users and passwords" msgstr "管ç†ä½¿ç”¨è€…與密碼" @@ -3171,7 +3859,7 @@ msgstr "ç¶“ç†" msgid "Mar" msgstr "三月" -#: lib/RT/Date.pm:413 +#: lib/RT/Date.pm:439 msgid "Mar." msgstr "03" @@ -3184,30 +3872,44 @@ msgid "Marketing Department" msgstr "行銷部" #: NOT FOUND IN SOURCE +msgid "Match Pattern" +msgstr "ç¬¦åˆæ¨£å¼" + +#: NOT FOUND IN SOURCE msgid "May" msgstr "五月" -#: lib/RT/Date.pm:415 +#: lib/RT/Date.pm:441 msgid "May." msgstr "05" -#: lib/RT/Group_Overlay.pm:981 +#: lib/RT/Transaction_Overlay.pm:720 +#. ($value) +msgid "Member %1 added" +msgstr "æˆå“¡ %1 新增完畢" + +#: lib/RT/Transaction_Overlay.pm:760 +#. ($value) +msgid "Member %1 deleted" +msgstr "æˆå“¡ %1 刪除完畢" + +#: lib/RT/Group_Overlay.pm:1008 msgid "Member added" msgstr "新增æˆå“¡å®Œç•¢" -#: lib/RT/Group_Overlay.pm:1139 +#: lib/RT/Group_Overlay.pm:1170 msgid "Member deleted" msgstr "æˆå“¡å·²åˆªé™¤" -#: lib/RT/Group_Overlay.pm:1143 +#: lib/RT/Group_Overlay.pm:1174 msgid "Member not deleted" -msgstr "æˆå“¡æœªè¢«åˆªé™¤" +msgstr "æˆå“¡æœªåˆªé™¤" -#: html/Elements/SelectLinkType:25 +#: html/Elements/SelectLinkType:47 msgid "Member of" msgstr "隸屬於" -#: html/Work/Preferences/index.html:20 +#: NOT FOUND IN SOURCE msgid "Member since" msgstr "註冊日期" @@ -3215,55 +3917,129 @@ msgstr "註冊日期" msgid "MemberOf" msgstr "隸屬於" -#: html/Admin/Elements/GroupTabs:41 html/Admin/Elements/ModifyTemplateAsWorkflow:232 html/User/Elements/GroupTabs:41 +#: html/Admin/Elements/GroupTabs:63 html/User/Elements/GroupTabs:63 msgid "Members" msgstr "æˆå“¡" -#: lib/RT/Ticket_Overlay.pm:2904 +#: lib/RT/Transaction_Overlay.pm:717 +#. ($value) +msgid "Membership in %1 added" +msgstr "所屬群組 %1 åŠ å…¥å®Œç•¢" + +#: lib/RT/Transaction_Overlay.pm:757 +#. ($value) +msgid "Membership in %1 deleted" +msgstr "所屬群組 %1 移除完畢" + +#: html/Admin/Elements/UserTabs:61 +msgid "Memberships" +msgstr "所屬群組" + +#: html/Admin/Users/Memberships.html:60 +#. ($UserObj->Name) +msgid "Memberships of the user %1" +msgstr "使用者 %1 的所屬群組" + +#: lib/RT/Ticket_Overlay.pm:2849 msgid "Merge Successful" msgstr "æ•´åˆå®Œç•¢" -#: lib/RT/Ticket_Overlay.pm:2824 +#: lib/RT/Ticket_Overlay.pm:2736 msgid "Merge failed. Couldn't set EffectiveId" msgstr "æ•´åˆå¤±æ•—。無法è¨å®š EffectiveId" -#: html/Ticket/Elements/BulkLinks:26 html/Ticket/Elements/EditLinks:114 html/Work/Search/BulkLinks:2 +#: lib/RT/Ticket_Overlay.pm:2744 +msgid "Merge failed. Couldn't set Status" +msgstr "" + +#: html/Elements/EditLinks:129 html/Ticket/Elements/BulkLinks:48 msgid "Merge into" msgstr "æ•´åˆé€²" -#: html/Search/Bulk.html:137 html/Ticket/Update.html:100 +#: lib/RT/Transaction_Overlay.pm:723 +#. ($value) +msgid "Merged into %1" +msgstr "已整åˆé€² %1" + +#: html/Search/Bulk.html:165 html/Ticket/Update.html:116 msgid "Message" msgstr "訊æ¯" #: NOT FOUND IN SOURCE +msgid "Message body not shown because it is too large or is not plain text." +msgstr "ä¿¡ä»¶å…§æ–‡ä¸æ˜¯ç´”æ–‡å—ï¼Œå› æ¤ç„¡æ³•顯示。" + +#: lib/RT/Ticket_Overlay.pm:2406 +msgid "Message could not be recorded" +msgstr "無法紀錄訊æ¯" + +#: lib/RT/Ticket_Overlay.pm:2409 +msgid "Message recorded" +msgstr "訊æ¯ç´€éŒ„æˆåŠŸ" + +#: html/Ticket/Elements/PreviewScrips:115 +msgid "Messages about this ticket will not be sent to..." +msgstr "æ¤ç”³è«‹å–®çš„相關訊æ¯ä¸æœƒå¯„é€çµ¦..." + +#: NOT FOUND IN SOURCE msgid "Misc. Expense" msgstr "雜費" -#: lib/RT/Interface/Web.pm:903 x:906 +#: html/Search/Build.html:667 +msgid "Mismatched parentheses" +msgstr "" + +#: lib/RT/Record.pm:940 msgid "Missing a primary key?: %1" msgstr "缺少主éµå€¼ï¼Ÿ(%1)" -#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:53 html/Work/Preferences/Info:36 +#: NOT FOUND IN SOURCE +msgid "Missing mandatory fields" +msgstr "缺少必填欄ä½" + +#: html/Admin/Users/Modify.html:193 html/User/Prefs.html:93 msgid "Mobile" msgstr "行動電話" -#: html/Admin/Elements/ModifyUser:71 +#: NOT FOUND IN SOURCE msgid "MobilePhone" msgstr "行動電話" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:95 msgid "Modify Access Control List" msgstr "æ›´æ”¹æ¬Šé™æŽ§åˆ¶æ¸…å–®" -#: html/Admin/Global/CustomFields.html:43 html/Admin/Global/index.html:50 +#: html/Admin/Elements/ObjectCustomFields:96 +#. (loc(lc($FriendlySubTypes)), loc(lc($Types))) +msgid "Modify Custom Fields which apply to %1 for all %2" +msgstr "" + +#: html/Admin/Elements/ObjectCustomFields:98 +#. (loc(lc($Types))) +msgid "Modify Custom Fields which apply to all %1" +msgstr "更改é©ç”¨æ–¼æ‰€æœ‰%1的自訂欄ä½" + +#: NOT FOUND IN SOURCE msgid "Modify Custom Fields which apply to all queues" msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„自訂欄ä½" -#: lib/RT/Queue_Overlay.pm:72 +#: html/Admin/Global/GroupRights.html:106 html/Admin/Groups/GroupRights.html:94 html/Admin/Queues/GroupRights.html:107 +msgid "Modify Group Rights" +msgstr "更改群組權é™" + +#: html/Admin/Groups/Members.html:102 html/User/Groups/Members.html:101 +msgid "Modify Members" +msgstr "更改æˆå“¡" + +#: html/User/Delegation.html:58 +msgid "Modify Rights" +msgstr "更改權é™" + +#: lib/RT/Queue_Overlay.pm:98 msgid "Modify Scrip templates for this queue" msgstr "更改æ¤è¡¨å–®çš„範本" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:101 msgid "Modify Scrips for this queue" msgstr "更改æ¤è¡¨å–®çš„æ‰‹çºŒ" @@ -3275,47 +4051,60 @@ msgstr "æ›´æ”¹ç³»çµ±æ¬Šé™æ¸…å–®" msgid "Modify Template %1" msgstr "更改範本 %1" +#: html/Admin/Global/UserRights.html:75 html/Admin/Groups/UserRights.html:76 html/Admin/Queues/UserRights.html:75 +msgid "Modify User Rights" +msgstr "更改使用者權é™" + #: NOT FOUND IN SOURCE msgid "Modify Workflow" msgstr "更改æµç¨‹" -#: html/Admin/Queues/CustomField.html:44 +#: html/Admin/Queues/CustomField.html:66 #. ($QueueObj->Name()) msgid "Modify a CustomField for queue %1" msgstr "更改 %1 表單內的自訂欄ä½" -#: html/Admin/Global/CustomField.html:52 +#: NOT FOUND IN SOURCE msgid "Modify a CustomField which applies to all queues" msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„自訂欄ä½" -#: html/Admin/Queues/Scrip.html:53 +#: html/Admin/Queues/Scrip.html:75 #. ($QueueObj->Name) msgid "Modify a scrip for queue %1" msgstr "更改 %1 表單內的手續" -#: html/Admin/Global/Scrip.html:47 +#: html/Admin/Global/Scrip.html:69 msgid "Modify a scrip which applies to all queues" msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„æ‰‹çºŒ" +#: html/Admin/CustomFields/Objects.html:90 +#. ($CF->Name) +msgid "Modify associated objects for %1" +msgstr "更改é©ç”¨ %1 的物件" + #: NOT FOUND IN SOURCE msgid "Modify dates for # %1" msgstr "更改 # %1 的日期" -#: html/Ticket/ModifyDates.html:24 html/Ticket/ModifyDates.html:28 +#: html/Ticket/ModifyDates.html:46 html/Ticket/ModifyDates.html:50 #. ($TicketObj->Id) msgid "Modify dates for #%1" msgstr "更改 #%1 的日期" -#: html/Ticket/ModifyDates.html:34 +#: html/Ticket/ModifyDates.html:56 #. ($TicketObj->Id) msgid "Modify dates for ticket # %1" msgstr "更改申請單 # %1 的日期" -#: html/Admin/Global/GroupRights.html:24 html/Admin/Global/GroupRights.html:27 html/Admin/Global/index.html:55 +#: html/Admin/Elements/GlobalCustomFieldTabs:65 html/Admin/Global/index.html:72 +msgid "Modify global custom fields" +msgstr "" + +#: 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 "更改全域è¨å®šçš„群組權é™" -#: html/Admin/Global/GroupRights.html:32 +#: html/Admin/Global/GroupRights.html:54 msgid "Modify global group rights." msgstr "更改全域è¨å®šçš„群組權é™ã€‚" @@ -3331,100 +4120,110 @@ msgstr "更改全域è¨å®šçš„使用者權é™" msgid "Modify global scrips" msgstr "更改全域手續" -#: html/Admin/Global/UserRights.html:24 html/Admin/Global/UserRights.html:27 html/Admin/Global/index.html:59 +#: html/Admin/Global/UserRights.html:46 html/Admin/Global/UserRights.html:49 html/Admin/Global/index.html:81 msgid "Modify global user rights" msgstr "更改全域è¨å®šçš„使用者權é™" -#: html/Admin/Global/UserRights.html:32 +#: html/Admin/Global/UserRights.html:54 msgid "Modify global user rights." msgstr "更改全域è¨å®šçš„使用者權é™ã€‚" -#: lib/RT/Group_Overlay.pm:145 +#: lib/RT/Group_Overlay.pm:171 msgid "Modify group metadata or delete group" msgstr "更改群組資料åŠåˆªé™¤ç¾¤çµ„" -#: html/Admin/Groups/GroupRights.html:24 html/Admin/Groups/GroupRights.html:28 html/Admin/Groups/GroupRights.html:34 +#: html/Admin/CustomFields/GroupRights.html:164 +#. ($CustomFieldObj->Name) +msgid "Modify group rights for custom field %1" +msgstr "æ›´æ”¹è‡ªè¨‚æ¬„ä½ %1 的群組權é™" + +#: html/Admin/Groups/GroupRights.html:46 html/Admin/Groups/GroupRights.html:50 html/Admin/Groups/GroupRights.html:56 #. ($GroupObj->Name) msgid "Modify group rights for group %1" -msgstr "更改 %1 的群組權é™" +msgstr "更改群組 %1 的群組權é™" -#: html/Admin/Queues/GroupRights.html:24 html/Admin/Queues/GroupRights.html:28 +#: html/Admin/Queues/GroupRights.html:46 html/Admin/Queues/GroupRights.html:50 #. ($QueueObj->Name) msgid "Modify group rights for queue %1" msgstr "更改表單 %1 的群組權é™" -#: lib/RT/Group_Overlay.pm:147 +#: lib/RT/Group_Overlay.pm:173 msgid "Modify membership roster for this group" msgstr "更改æ¤ç¾¤çµ„çš„æˆå“¡åå–®" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:83 msgid "Modify one's own RT account" msgstr "更改個人的帳號資訊" -#: html/Admin/Queues/People.html:24 html/Admin/Queues/People.html:28 +#: html/Admin/Queues/People.html:46 html/Admin/Queues/People.html:50 #. ($QueueObj->Name) msgid "Modify people related to queue %1" msgstr "更改éˆçµåˆ°è¡¨å–® %1 的人員" -#: html/Ticket/ModifyPeople.html:24 html/Ticket/ModifyPeople.html:28 html/Ticket/ModifyPeople.html:34 +#: html/Ticket/ModifyPeople.html:46 html/Ticket/ModifyPeople.html:50 html/Ticket/ModifyPeople.html:56 #. ($Ticket->id) #. ($Ticket->Id) msgid "Modify people related to ticket #%1" msgstr "更改申請單 #%1 éˆçµåˆ°çš„人員" -#: html/Admin/Queues/Scrips.html:45 +#: html/Admin/Queues/Scrips.html:67 #. ($QueueObj->Name) msgid "Modify scrips for queue %1" msgstr "更改表單 %1 的手續" -#: html/Admin/Global/Scrips.html:43 html/Admin/Global/index.html:41 +#: 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 "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„æ‰‹çºŒ" -#: html/Admin/Global/Template.html:24 html/Admin/Global/Template.html:29 html/Admin/Global/Template.html:80 html/Admin/Queues/Template.html:77 +#: 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) msgid "Modify template %1" msgstr "更改範本 %1" -#: html/Admin/Global/Templates.html:43 +#: html/Admin/Global/Templates.html:65 msgid "Modify templates which apply to all queues" msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„範本" -#: html/Admin/Groups/Modify.html:86 html/User/Groups/Modify.html:85 +#: html/Admin/Groups/Modify.html:119 html/User/Groups/Modify.html:107 #. ($Group->Name) msgid "Modify the group %1" msgstr "更改群組 %1" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:96 msgid "Modify the queue watchers" msgstr "更改表單視察員" -#: html/Admin/Users/Modify.html:235 +#: html/Admin/Users/Modify.html:301 #. ($UserObj->Name) msgid "Modify the user %1" msgstr "更改使用者 %1" -#: html/Ticket/ModifyAll.html:36 +#: html/Ticket/ModifyAll.html:58 #. ($Ticket->Id) msgid "Modify ticket # %1" msgstr "更改申請單 # %1" -#: html/Ticket/Modify.html:24 html/Ticket/Modify.html:27 html/Ticket/Modify.html:33 +#: html/Ticket/Modify.html:46 html/Ticket/Modify.html:49 html/Ticket/Modify.html:55 #. ($TicketObj->Id) msgid "Modify ticket #%1" msgstr "更改申請單 # %1" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:114 msgid "Modify tickets" msgstr "更改申請單" -#: html/Admin/Groups/UserRights.html:24 html/Admin/Groups/UserRights.html:28 html/Admin/Groups/UserRights.html:34 +#: html/Admin/CustomFields/UserRights.html:157 +#. ($CustomFieldObj->Name) +msgid "Modify user rights for custom field %1" +msgstr "æ›´æ”¹è‡ªè¨‚æ¬„ä½ %1 的使用者權é™" + +#: html/Admin/Groups/UserRights.html:46 html/Admin/Groups/UserRights.html:50 html/Admin/Groups/UserRights.html:56 #. ($GroupObj->Name) msgid "Modify user rights for group %1" msgstr "更改群組 %1 的使用者權é™" -#: html/Admin/Queues/UserRights.html:24 html/Admin/Queues/UserRights.html:28 +#: html/Admin/Queues/UserRights.html:46 html/Admin/Queues/UserRights.html:50 #. ($QueueObj->Name) msgid "Modify user rights for queue %1" msgstr "更改表單 %1 的使用者權é™" @@ -3433,41 +4232,43 @@ msgstr "更改表單 %1 的使用者權é™" msgid "Modify watchers for queue '%1'" msgstr "更改 '%1' 的視察員" -#: html/Admin/Global/Workflow.html:25 html/Admin/Global/Workflow.html:30 html/Admin/Global/Workflow.html:81 html/Admin/Queues/Workflow.html:77 -#. (loc($WorkflowObj->Name())) -#. ($WorkflowObj->id) +#: NOT FOUND IN SOURCE msgid "Modify workflow %1" msgstr "更改æµç¨‹ %1" -#: html/Admin/Global/Workflows.html:44 +#: NOT FOUND IN SOURCE msgid "Modify workflows which apply to all queues" msgstr "更改é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„æµç¨‹" -#: lib/RT/Queue_Overlay.pm:69 +#: lib/RT/Queue_Overlay.pm:95 msgid "ModifyACL" msgstr "æ›´æ”¹æ¬Šé™æ¸…å–®" -#: lib/RT/Group_Overlay.pm:148 +#: lib/RT/CustomField_Overlay.pm:103 +msgid "ModifyCustomField" +msgstr "" + +#: lib/RT/Group_Overlay.pm:174 msgid "ModifyOwnMembership" msgstr "更改自己是å¦å±¬æ–¼æŸç¾¤çµ„" -#: lib/RT/Queue_Overlay.pm:70 +#: lib/RT/Queue_Overlay.pm:96 msgid "ModifyQueueWatchers" msgstr "更改表單視察員" -#: lib/RT/Queue_Overlay.pm:75 +#: lib/RT/Queue_Overlay.pm:101 msgid "ModifyScrips" msgstr "更改手續" -#: lib/RT/System.pm:60 +#: lib/RT/System.pm:83 msgid "ModifySelf" msgstr "更改個人帳號" -#: lib/RT/Queue_Overlay.pm:72 +#: lib/RT/Queue_Overlay.pm:98 msgid "ModifyTemplate" msgstr "更改範本" -#: lib/RT/Queue_Overlay.pm:87 +#: lib/RT/Queue_Overlay.pm:114 msgid "ModifyTicket" msgstr "更改申請單" @@ -3475,15 +4276,15 @@ msgstr "更改申請單" msgid "Mon" msgstr "星期一" -#: lib/RT/Date.pm:388 +#: lib/RT/Date.pm:413 msgid "Mon." msgstr "星期一" -#: html/Work/Elements/MyRequests:11 html/Work/Elements/MyTickets:11 +#: NOT FOUND IN SOURCE msgid "More" msgstr "更多" -#: html/Ticket/Elements/ShowRequestor:41 +#: html/Ticket/Elements/ShowRequestor:62 #. ($name) msgid "More about %1" msgstr "關於 %1 的進一æ¥è³‡è¨Š" @@ -3492,56 +4293,64 @@ msgstr "關於 %1 的進一æ¥è³‡è¨Š" msgid "Morning Shift" msgstr "æ—©ç" -#: html/Edit/Elements/ListButtons:16 +#: NOT FOUND IN SOURCE +msgid "Move" +msgstr "移動" + +#: NOT FOUND IN SOURCE msgid "Move All" msgstr "全移" -#: html/Admin/Elements/EditCustomFields:60 +#: html/Admin/Elements/PickCustomFields:83 msgid "Move down" msgstr "下移" -#: html/Admin/Elements/EditCustomFields:52 +#: html/Admin/Elements/PickCustomFields:75 msgid "Move up" msgstr "上移" -#: html/Admin/Elements/SelectSingleOrMultiple:26 +#: html/Admin/Elements/SelectSingleOrMultiple:48 msgid "Multiple" msgstr "多é‡" -#: lib/RT/User_Overlay.pm:238 +#: lib/RT/User_Overlay.pm:227 msgid "Must specify 'Name' attribute" msgstr "å¿…é ˆæŒ‡å®š 'Name' 的屬性" -#: html/SelfService/Elements/MyRequests:48 +#: html/SelfService/Elements/MyRequests:70 #. ($friendly_status) msgid "My %1 tickets" msgstr "我的 %1 申請單" -#: html/Work/Elements/Tab:37 +#: NOT FOUND IN SOURCE msgid "My Approvals" msgstr "è¡¨å–®ç°½æ ¸" -#: html/Work/Elements/Tab:35 +#: NOT FOUND IN SOURCE msgid "My Requests" msgstr "表單申請追蹤" -#: html/Work/Elements/Tab:39 +#: NOT FOUND IN SOURCE msgid "My Tickets" msgstr "表單處ç†" -#: html/Approvals/index.html:24 html/Approvals/index.html:25 +#: html/Approvals/index.html:46 html/Approvals/index.html:47 msgid "My approvals" msgstr "è¡¨å–®ç°½æ ¸" -#: html/Admin/Elements/AddCustomFieldValue:31 html/Admin/Elements/EditCustomField:33 html/Admin/Elements/ModifyTemplate:27 html/Admin/Elements/ModifyTemplateAsWorkflow:185 html/Admin/Elements/ModifyUser:29 html/Admin/Groups/Modify.html:43 html/Edit/Users/Add.html:22 html/Edit/Users/Search.html:31 html/Elements/SelectGroups:25 html/Elements/SelectUsers:27 html/User/Groups/Modify.html:43 html/Work/Tickets/Cc:18 +#: html/Search/Elements/SearchPrivacy:50 html/Search/Elements/SelectSearchObject:53 html/Search/Elements/SelectSearchesForObjects:53 +msgid "My saved searches" +msgstr "我已儲å˜çš„æŸ¥è©¢" + +#: 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 msgid "Name" msgstr "å稱" -#: lib/RT/User_Overlay.pm:245 +#: lib/RT/User_Overlay.pm:234 msgid "Name in use" msgstr "帳號已有人使用" -#: html/Edit/Users/Info:27 +#: NOT FOUND IN SOURCE msgid "Nationality" msgstr "國ç±" @@ -3549,51 +4358,59 @@ msgstr "國ç±" msgid "Need approval from system administrator" msgstr "需先由系統管ç†å“¡é€²è¡Œæ‰¹å‡†" -#: html/Ticket/Elements/ShowDates:51 +#: html/Ticket/Elements/ShowDates:73 msgid "Never" msgstr "從未更動" -#: html/Elements/Quicksearch:29 html/Work/Elements/Quicksearch:15 html/Work/Tickets/Create.html:54 +#: html/Elements/Quicksearch:51 msgid "New" msgstr "新建立" -#: html/Admin/Elements/ModifyUser:31 html/Admin/Users/Modify.html:92 html/User/Prefs.html:64 html/Work/Preferences/Info:47 +#: html/Elements/EditLinks:115 +msgid "New Links" +msgstr "新增關係" + +#: html/Admin/Users/Modify.html:119 html/User/Prefs.html:109 msgid "New Password" msgstr "新的密碼" -#: etc/initialdata.zh:341 etc/initialdata:317 etc/upgrade/2.1.71:16 html/Edit/Elements/CreateApprovalsQueue:21 +#: etc/initialdata:332 msgid "New Pending Approval" msgstr "æ–°çš„å¾…ç°½æ ¸äº‹é …" -#: html/Ticket/Elements/EditLinks:110 -msgid "New Relationships" -msgstr "新增關係" +#: html/Ticket/Elements/Tabs:193 +msgid "New Query" +msgstr "新增查詢" -#: html/Work/Elements/Tab:33 +#: NOT FOUND IN SOURCE msgid "New Request" msgstr "表單申請" -#: html/Ticket/Elements/Tabs:35 +#: NOT FOUND IN SOURCE msgid "New Search" msgstr "新增查詢" -#: html/Admin/Global/CustomField.html:40 html/Admin/Global/CustomFields.html:38 html/Admin/Queues/CustomField.html:51 html/Admin/Queues/CustomFields.html:39 +#: NOT FOUND IN SOURCE +msgid "New Watchers" +msgstr "新增視察員" + +#: html/Admin/Elements/CustomFieldTabs:93 html/Admin/Queues/CustomField.html:73 msgid "New custom field" msgstr "新增自訂欄ä½" -#: html/Admin/Elements/GroupTabs:53 html/User/Elements/GroupTabs:51 +#: html/Admin/Elements/GroupTabs:77 html/User/Elements/GroupTabs:73 msgid "New group" msgstr "新增群組" -#: html/SelfService/Prefs.html:31 +#: html/SelfService/Prefs.html:53 msgid "New password" msgstr "新的密碼" -#: lib/RT/User_Overlay.pm:764 +#: lib/RT/User_Overlay.pm:817 msgid "New password notification sent" msgstr "é€å‡ºæ–°å¯†ç¢¼é€šçŸ¥" -#: html/Admin/Elements/QueueTabs:69 +#: html/Admin/Elements/QueueTabs:95 msgid "New queue" msgstr "新增表單" @@ -3601,63 +4418,67 @@ msgstr "新增表單" msgid "New request" msgstr "æå‡ºç”³è«‹å–®" -#: html/Admin/Elements/SelectRights:41 +#: html/Admin/Elements/SelectRights:65 msgid "New rights" msgstr "新增權é™" -#: html/Admin/Global/Scrip.html:39 html/Admin/Global/Scrips.html:38 html/Admin/Queues/Scrip.html:42 html/Admin/Queues/Scrips.html:54 +#: 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 "新增手續" -#: html/Work/Search/index.html:62 +#: NOT FOUND IN SOURCE msgid "New search" msgstr "釿–°æŸ¥è©¢" -#: html/Admin/Global/Template.html:59 html/Admin/Global/Templates.html:38 html/Admin/Queues/Template.html:57 html/Admin/Queues/Templates.html:49 +#: 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 "新增範本" -#: html/SelfService/Elements/Tabs:47 +#: html/SelfService/Elements/Tabs:69 msgid "New ticket" msgstr "æå‡ºç”³è«‹å–®" -#: lib/RT/Ticket_Overlay.pm:2791 +#: lib/RT/Ticket_Overlay.pm:2713 msgid "New ticket doesn't exist" msgstr "沒有新申請單" -#: html/Admin/Elements/UserTabs:51 +#: html/Admin/Elements/UserTabs:78 msgid "New user" msgstr "新增使用者" -#: html/Admin/Elements/CreateUserCalled:25 +#: html/Admin/Elements/CreateUserCalled:47 msgid "New user called" msgstr "新使用者åå—" -#: html/Admin/Queues/People.html:54 html/Ticket/Elements/EditPeople:28 +#: html/Admin/Queues/People.html:76 html/Ticket/Elements/EditPeople:50 msgid "New watchers" msgstr "新視察員" -#: html/Admin/Users/Prefs.html:41 +#: NOT FOUND IN SOURCE msgid "New window setting" msgstr "更新視窗è¨å®š" -#: html/Admin/Global/Workflow.html:60 html/Admin/Global/Workflows.html:39 html/Admin/Queues/Workflow.html:57 html/Admin/Queues/Workflows.html:50 +#: NOT FOUND IN SOURCE msgid "New workflow" msgstr "新增æµç¨‹" -#: html/Ticket/Elements/Tabs:68 +#: html/Ticket/Elements/Tabs:92 msgid "Next" msgstr "ä¸‹ä¸€é …" -#: html/Search/Listing.html:47 html/Work/Search/index.html:24 +#: html/Elements/TicketList:104 +msgid "Next Page" +msgstr "下一é " + +#: NOT FOUND IN SOURCE msgid "Next page" msgstr "下一é " -#: html/Admin/Elements/ModifyUser:49 +#: NOT FOUND IN SOURCE msgid "NickName" msgstr "暱稱" -#: html/Admin/Users/Modify.html:62 html/User/Prefs.html:45 html/Work/Preferences/Info:26 +#: html/Admin/Users/Modify.html:84 html/User/Prefs.html:72 msgid "Nickname" msgstr "暱稱" @@ -3665,31 +4486,43 @@ msgstr "暱稱" msgid "Night Shift" msgstr "å°å¤œç" -#: html/Edit/Global/Basic/Top:27 +#: NOT FOUND IN SOURCE msgid "No" msgstr "å¦" -#: html/Admin/Elements/EditCustomField:89 html/Admin/Elements/EditCustomFields:104 +#: html/Admin/CustomFields/UserRights.html:145 +msgid "No Class defined" +msgstr "尚未定義類別" + +#: html/Admin/CustomFields/Modify.html:124 html/Admin/Elements/EditCustomField:119 msgid "No CustomField" msgstr "無自訂欄ä½" -#: html/Admin/Groups/GroupRights.html:83 html/Admin/Groups/UserRights.html:70 +#: html/Admin/CustomFields/GroupRights.html:103 +msgid "No CustomField defined" +msgstr "尚未定義自訂欄ä½" + +#: html/Admin/Groups/GroupRights.html:105 html/Admin/Groups/UserRights.html:92 msgid "No Group defined" msgstr "尚未定義群組" -#: html/Admin/Queues/GroupRights.html:96 html/Admin/Queues/UserRights.html:67 +#: lib/RT/Tickets_Overlay_SQL.pm:477 +msgid "No Query" +msgstr "沒有查詢" + +#: html/Admin/Queues/GroupRights.html:118 html/Admin/Queues/UserRights.html:89 msgid "No Queue defined" -msgstr "沒有定義好的表單" +msgstr "尚未定義表單" -#: bin/rt-crontool:55 +#: bin/rt-crontool:73 msgid "No RT user found. Please consult your RT administrator.\\n" msgstr "找ä¸åˆ° RT ä½¿ç”¨è€…ã€‚è«‹å‘ RT 管ç†å“¡æŸ¥è©¢ã€‚\\n" -#: html/Admin/Global/Template.html:78 html/Admin/Queues/Template.html:75 +#: html/Admin/Global/Template.html:100 html/Admin/Queues/Template.html:97 msgid "No Template" msgstr "沒有範本" -#: bin/rt-commit-handler:763 +#: NOT FOUND IN SOURCE msgid "No Ticket specified. Aborting ticket " msgstr "未指定申請單。退出申請單 " @@ -3697,15 +4530,15 @@ msgstr "未指定申請單。退出申請單 " msgid "No Ticket specified. Aborting ticket modifications\\n\\n" msgstr "未指定申請單。退出申請單更改\\n\\n" -#: html/Admin/Elements/ModifyWorkflow:237 html/Admin/Global/Workflow.html:79 html/Admin/Queues/Workflow.html:75 +#: NOT FOUND IN SOURCE msgid "No Workflow" msgstr "沒有æµç¨‹" -#: html/Approvals/Elements/Approve:45 html/Work/Approvals/Elements/Approve:35 +#: html/Approvals/Elements/Approve:67 msgid "No action" msgstr "æš«ä¸è™•ç†" -#: lib/RT/Interface/Web.pm:898 x:901 +#: lib/RT/Record.pm:935 msgid "No column specified" msgstr "未指定欄ä½" @@ -3713,53 +4546,61 @@ msgstr "未指定欄ä½" msgid "No command found\\n" msgstr "找ä¸åˆ°å‘½ä»¤" -#: html/Elements/ViewUser:35 html/Ticket/Elements/ShowRequestor:44 +#: html/Ticket/Elements/ShowRequestor:68 msgid "No comment entered about this user" msgstr "沒有å°é€™å使用者的評論" -#: lib/RT/Ticket_Overlay.pm:2202 lib/RT/Ticket_Overlay.pm:2270 +#: NOT FOUND IN SOURCE msgid "No correspondence attached" msgstr "沒有附上申請單回覆" -#: lib/RT/Action/Generic.pm:149 lib/RT/Condition/Generic.pm:175 lib/RT/Search/ActiveTicketsInQueue.pm:55 lib/RT/Search/Generic.pm:112 +#: 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) msgid "No description for %1" msgstr "æ²’æœ‰å° %1 çš„æè¿°" -#: lib/RT/Users_Overlay.pm:150 +#: lib/RT/Users_Overlay.pm:185 msgid "No group specified" msgstr "未指定群組" -#: lib/RT/User_Overlay.pm:982 +#: html/Admin/Groups/index.html:52 +msgid "No groups matching search criteria found." +msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„群組。" + +#: lib/RT/Ticket_Overlay.pm:2349 +msgid "No message attached" +msgstr "沒有附上訊æ¯" + +#: lib/RT/User_Overlay.pm:1035 msgid "No password set" msgstr "沒有è¨å®šå¯†ç¢¼" -#: lib/RT/Queue_Overlay.pm:260 +#: lib/RT/Queue_Overlay.pm:358 msgid "No permission to create queues" msgstr "沒有新增表單的權é™" -#: lib/RT/Ticket_Overlay.pm:342 +#: lib/RT/Ticket_Overlay.pm:409 #. ($QueueObj->Name) msgid "No permission to create tickets in the queue '%1'" msgstr "沒有在表單 '%1' 新增申請單的權é™" -#: lib/RT/User_Overlay.pm:211 +#: lib/RT/User_Overlay.pm:187 msgid "No permission to create users" msgstr "沒有新增使用者的權é™" -#: html/SelfService/Display.html:117 +#: html/SelfService/Display.html:165 msgid "No permission to display that ticket" msgstr "沒有顯示該申請單的權é™" -#: html/SelfService/Update.html:51 +#: html/SelfService/Update.html:117 msgid "No permission to view update ticket" msgstr "沒有檢視申請單更新的權é™" -#: lib/RT/Queue_Overlay.pm:675 lib/RT/Ticket_Overlay.pm:1487 +#: lib/RT/Queue_Overlay.pm:792 lib/RT/Ticket_Overlay.pm:1450 msgid "No principal specified" msgstr "未指定單ä½" -#: html/Admin/Queues/People.html:153 html/Admin/Queues/People.html:163 +#: html/Admin/Queues/People.html:175 html/Admin/Queues/People.html:185 msgid "No principals selected." msgstr "未指定單ä½ã€‚" @@ -3767,27 +4608,35 @@ msgstr "未指定單ä½ã€‚" msgid "No protocol specified in %1" msgstr "%1 內未指定å”定" -#: html/Admin/Queues/index.html:34 +#: html/Admin/Queues/index.html:57 msgid "No queues matching search criteria found." msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„表單。" -#: html/Admin/Elements/SelectRights:80 +#: html/Admin/Elements/SelectRights:106 msgid "No rights found" msgstr "找ä¸åˆ°æ¬Šé™" -#: html/Admin/Elements/SelectRights:32 +#: html/Admin/Elements/SelectRights:53 msgid "No rights granted." msgstr "沒有é¸å®šæ¬Šé™" -#: html/Search/Bulk.html:160 html/Work/Search/Bulk.html:117 +#: lib/RT/SavedSearch.pm:187 +msgid "No search loaded" +msgstr "" + +#: html/Search/Bulk.html:194 msgid "No search to operate on." msgstr "沒有è¦é€²è¡Œçš„æŸ¥è©¢" +#: html/Elements/RT__Ticket/ColumnMap:134 +msgid "No subject" +msgstr "沒有標題" + #: NOT FOUND IN SOURCE msgid "No ticket id specified" msgstr "未指定申請單編號" -#: lib/RT/Transaction_Overlay.pm:478 lib/RT/Transaction_Overlay.pm:516 +#: lib/RT/Transaction_Overlay.pm:517 lib/RT/Transaction_Overlay.pm:554 msgid "No transaction type specified" msgstr "æœªæŒ‡å®šæ›´å‹•å ±å‘Šé¡žåˆ¥" @@ -3795,23 +4644,23 @@ msgstr "æœªæŒ‡å®šæ›´å‹•å ±å‘Šé¡žåˆ¥" msgid "No user or email address specified" msgstr "未指定使用者或電å郵件地å€" -#: html/Admin/Users/index.html:35 +#: html/Admin/Users/index.html:55 msgid "No users matching search criteria found." msgstr "找ä¸åˆ°ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„使用者。" -#: bin/rt-commit-handler:643 +#: NOT FOUND IN SOURCE msgid "No valid RT user found. RT cvs handler disengaged. Please consult your RT administrator.\\n" msgstr "找ä¸åˆ°åˆæ ¼çš„ RT 使用者。RT cvs 處ç†å™¨å·²åœç”¨ã€‚è«‹å‘ RT 管ç†è€…è©¢å•。\\n" -#: lib/RT/Interface/Web.pm:895 x:898 +#: lib/RT/Record.pm:932 msgid "No value sent to _Set!\\n" msgstr "_Set 沒有收到任何值!\\n" -#: html/Search/Elements/TicketRow:36 html/Work/Search/TicketRow:9 +#: html/Elements/QuickCreate:61 msgid "Nobody" msgstr "沒有人" -#: lib/RT/Interface/Web.pm:900 x:903 +#: lib/RT/Record.pm:937 msgid "Nonexistant field?" msgstr "欄ä½ä¸å˜åœ¨ï¼Ÿ" @@ -3827,15 +4676,15 @@ msgstr "未è¨å®šæˆå¾ž %2 å…§æ“·å– %1" msgid "Not logged in" msgstr "尚未登入" -#: html/Elements/Header:59 +#: html/Elements/Header:96 msgid "Not logged in." msgstr "尚未登入" -#: lib/RT/Date.pm:369 +#: lib/RT/Date.pm:393 msgid "Not set" msgstr "尚未è¨å®š" -#: html/NoAuth/Reminder.html:26 +#: html/NoAuth/Reminder.html:48 msgid "Not yet implemented." msgstr "尚未完工。" @@ -3843,7 +4692,7 @@ msgstr "尚未完工。" msgid "Not yet implemented...." msgstr "尚未完工..." -#: html/Approvals/Elements/Approve:48 html/Work/Tickets/Create.html:143 +#: html/Approvals/Elements/Approve:70 msgid "Notes" msgstr "備註" @@ -3851,71 +4700,79 @@ msgstr "備註" msgid "Notes:" msgstr "備註:" -#: lib/RT/User_Overlay.pm:767 +#: lib/RT/User_Overlay.pm:820 msgid "Notification could not be sent" msgstr "無法é€å‡ºé€šçŸ¥" -#: etc/initialdata.zh:111 etc/initialdata:93 +#: etc/initialdata:101 msgid "Notify AdminCcs" msgstr "通知管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:107 etc/initialdata:89 +#: etc/initialdata:97 msgid "Notify AdminCcs as Comment" msgstr "以評論方å¼é€šçŸ¥ç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:138 etc/initialdata:120 +#: etc/initialdata:93 etc/upgrade/3.1.17/content:6 +msgid "Notify Ccs" +msgstr "通知副本收件人" + +#: etc/initialdata:89 etc/upgrade/3.1.17/content:2 +msgid "Notify Ccs as Comment" +msgstr "以評論方å¼é€šçŸ¥å‰¯æœ¬æ”¶ä»¶äºº" + +#: etc/initialdata:128 msgid "Notify Other Recipients" msgstr "通知其他收件人" -#: etc/initialdata.zh:134 etc/initialdata:116 +#: etc/initialdata:124 msgid "Notify Other Recipients as Comment" msgstr "以評論方å¼é€šçŸ¥å…¶ä»–收件人" -#: etc/initialdata.zh:103 etc/initialdata:85 +#: etc/initialdata:85 msgid "Notify Owner" msgstr "通知承辦人" -#: etc/initialdata.zh:99 etc/initialdata:81 +#: etc/initialdata:81 msgid "Notify Owner as Comment" msgstr "以評論方å¼é€šçŸ¥æ‰¿è¾¦äºº" -#: etc/initialdata.zh:385 etc/initialdata:361 +#: etc/initialdata:376 msgid "Notify Owner of their rejected ticket" msgstr "通知承辦人申請單已é§å›ž" -#: etc/initialdata.zh:374 etc/initialdata:350 +#: etc/initialdata:365 msgid "Notify Owner of their ticket has been approved by all approvers" msgstr "通知承辦人申請單已完æˆå…¨éƒ¨ç°½æ ¸" -#: etc/initialdata.zh:359 etc/initialdata:338 +#: etc/initialdata:353 msgid "Notify Owner of their ticket has been approved by some approver" msgstr "é€šçŸ¥æ‰¿è¾¦äººç”³è«‹å–®å·²å®ŒæˆæŸé …ç°½æ ¸" -#: etc/initialdata.zh:343 etc/initialdata:319 etc/upgrade/2.1.71:17 html/Edit/Elements/CreateApprovalsQueue:22 +#: etc/initialdata:334 msgid "Notify Owners and AdminCcs of new items pending their approval" msgstr "æ•´ç†å¾…ç°½æ ¸äº‹é …ï¼Œé€šçŸ¥æ‰¿è¾¦äººåŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:95 etc/initialdata:77 +#: etc/initialdata:77 msgid "Notify Requestors" msgstr "通知申請人" -#: etc/initialdata.zh:121 etc/initialdata:103 +#: etc/initialdata:111 msgid "Notify Requestors and Ccs" msgstr "通知申請人åŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:116 etc/initialdata:98 +#: etc/initialdata:106 msgid "Notify Requestors and Ccs as Comment" msgstr "以評論方å¼é€šçŸ¥ç”³è«‹äººåŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:130 etc/initialdata:112 +#: etc/initialdata:120 msgid "Notify Requestors, Ccs and AdminCcs" msgstr "通知申請人ã€å‰¯æœ¬åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:126 etc/initialdata:108 +#: etc/initialdata:116 msgid "Notify Requestors, Ccs and AdminCcs as Comment" msgstr "以評論方å¼é€šçŸ¥ç”³è«‹äººã€å‰¯æœ¬åŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: html/Work/Tickets/Cc:55 +#: NOT FOUND IN SOURCE msgid "Notify people:" msgstr "通知å°è±¡" @@ -3923,7 +4780,7 @@ msgstr "通知å°è±¡" msgid "Nov" msgstr "å一月" -#: lib/RT/Date.pm:421 +#: lib/RT/Date.pm:447 msgid "Nov." msgstr "11" @@ -3931,23 +4788,45 @@ msgstr "11" msgid "November" msgstr "å一月" -#: html/Edit/Global/Basic/Top:74 +#: NOT FOUND IN SOURCE msgid "OIN104" -msgstr "é…åˆ 104eHRMS 介é¢" +msgstr "104eHRMS 介é¢" -#: html/Edit/Global/Workflow/Export.html:30 html/Work/Copyright.html:23 +#: NOT FOUND IN SOURCE msgid "OK" msgstr "確定" -#: lib/RT/Record.pm:156 +#: html/Search/Elements/SelectAndOr:47 +msgid "OR" +msgstr "" + +#: lib/RT/Record.pm:319 msgid "Object could not be created" msgstr "無法新增物件" -#: lib/RT/Record.pm:175 +#: lib/RT/Record.pm:124 +msgid "Object could not be deleted" +msgstr "" + +#: lib/RT/Record.pm:338 msgid "Object created" msgstr "物件新增完畢" -#: html/Edit/Users/Info:35 +#: lib/RT/Record.pm:121 +msgid "Object deleted" +msgstr "" + +#: html/Admin/CustomFields/Objects.html:72 html/Admin/Elements/ObjectCustomFields:63 +#. ($ObjectType) +#. ($LookupType) +msgid "Object of type %1 cannot take custom fields" +msgstr "自訂欄ä½ä¸é©ç”¨æ–¼é¡žåˆ¥ç‚º %1 的物件" + +#: lib/RT/CustomField_Overlay.pm:901 +msgid "Object type mismatch" +msgstr "物件類別ä¸ç¬¦" + +#: NOT FOUND IN SOURCE msgid "Occupation Status" msgstr "在è·ç‹€æ…‹" @@ -3955,7 +4834,7 @@ msgstr "在è·ç‹€æ…‹" msgid "Oct" msgstr "åæœˆ" -#: lib/RT/Date.pm:420 +#: lib/RT/Date.pm:446 msgid "Oct." msgstr "10" @@ -3963,77 +4842,97 @@ msgstr "10" msgid "October" msgstr "åæœˆ" -#: html/Edit/Users/Info:32 +#: NOT FOUND IN SOURCE msgid "Office Phone" msgstr "辦公室電話" -#: html/Elements/SelectDateRelation:34 +#: html/Tools/Elements/Tabs:53 +msgid "Offline" +msgstr "離線" + +#: html/Tools/Offline.html:49 +msgid "Offline edits" +msgstr "離線編輯" + +#: html/Tools/Offline.html:46 +msgid "Offline upload" +msgstr "離線上載" + +#: html/Elements/SelectDateRelation:56 msgid "On" msgstr "ç‰æ–¼" -#: etc/initialdata.zh:173 etc/initialdata:155 +#: NOT FOUND IN SOURCE +msgid "On Change" +msgstr "更改申請單時" + +#: etc/initialdata:163 msgid "On Comment" msgstr "評論時" -#: etc/initialdata.zh:166 etc/initialdata:148 +#: etc/initialdata:156 msgid "On Correspond" msgstr "回覆申請單時" -#: etc/initialdata.zh:155 etc/initialdata:137 +#: etc/initialdata:145 msgid "On Create" msgstr "新增申請單時" -#: etc/initialdata.zh:187 etc/initialdata:169 +#: etc/initialdata:184 msgid "On Owner Change" msgstr "承辦人改變時" -#: etc/initialdata.zh:195 etc/initialdata:177 +#: etc/initialdata:177 etc/upgrade/3.1.17/content:15 +msgid "On Priority Change" +msgstr "å„ªå…ˆé †ä½æ”¹è®Šæ™‚" + +#: etc/initialdata:192 msgid "On Queue Change" msgstr "表單改變時" -#: etc/initialdata.zh:201 etc/initialdata:183 +#: etc/initialdata:198 msgid "On Resolve" msgstr "解決申請單時" -#: etc/initialdata.zh:179 etc/initialdata:161 +#: etc/initialdata:169 msgid "On Status Change" msgstr "ç¾æ³æ”¹è®Šæ™‚" -#: etc/initialdata.zh:160 etc/initialdata:142 +#: etc/initialdata:150 msgid "On Transaction" msgstr "發生更動時" -#: html/Approvals/Elements/PendingMyApproval:49 +#: html/Approvals/Elements/PendingMyApproval:71 #. ("<input size='15' value='".( $created_after->Unix >0 && $created_after->ISO)."' name='CreatedAfter'>") msgid "Only show approvals for requests created after %1" msgstr "僅顯示 %1 之後新增的申請單" -#: html/Approvals/Elements/PendingMyApproval:47 +#: html/Approvals/Elements/PendingMyApproval:69 #. ("<input size='15' value='".($created_before->Unix > 0 &&$created_before->ISO)."' name='CreatedBefore'>") msgid "Only show approvals for requests created before %1" msgstr "僅顯示 %1 之剿–°å¢žçš„申請單" -#: html/Edit/Global/GroupRight/List:9 html/Edit/Global/GroupRight/Top:16 html/Edit/Groups/List:11 html/Edit/Groups/Top:18 html/Edit/Queues/Basic/Top:69 html/Edit/Queues/List:13 html/Elements/Quicksearch:30 html/Work/Delegates/Info:48 html/Work/Delegates/Info:51 html/Work/Delegates/List:12 html/Work/Elements/Quicksearch:16 html/Work/Overview/Info:41 html/Work/Tickets/Display.html:28 +#: html/Elements/Quicksearch:52 msgid "Open" msgstr "開啟" -#: html/Ticket/Elements/Tabs:135 +#: html/Ticket/Elements/Tabs:159 msgid "Open it" msgstr "開啟" -#: html/SelfService/Elements/Tabs:41 +#: html/SelfService/Elements/Tabs:63 msgid "Open tickets" msgstr "開啟的申請單" -#: html/Admin/Users/Prefs.html:40 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in a new window" msgstr "在新視窗開啟(列表的)申請單" -#: html/Admin/Users/Prefs.html:39 +#: NOT FOUND IN SOURCE msgid "Open tickets (from listing) in another window" msgstr "在å¦ä¸€å€‹è¦–窗開啟(列表的)申請單" -#: etc/initialdata.zh:150 etc/initialdata:132 +#: etc/initialdata:140 msgid "Open tickets on correspondence" msgstr "收到回覆時å³é–‹å•Ÿç”³è«‹å–®" @@ -4045,19 +4944,23 @@ msgstr "已申請é‹è¡Œä¸è¡¨å–®" msgid "Opinion" msgstr "æ„見" -#: html/Edit/Global/CustomField/Info:35 +#: NOT FOUND IN SOURCE msgid "Option Description" msgstr "é¸é …æè¿°" -#: html/Edit/Global/CustomField/Info:29 +#: NOT FOUND IN SOURCE msgid "Option Name" msgstr "é¸é …å稱" -#: html/Search/Elements/PickRestriction:100 html/Work/Search/PickRestriction:81 +#: html/Search/Elements/DisplayOptions:56 +msgid "Order by" +msgstr "æŽ’åºæ–¹å¼" + +#: NOT FOUND IN SOURCE msgid "Ordering and sorting" msgstr "é †åºèˆ‡æŽ’åºæ–¹å¼" -#: html/Admin/Elements/ModifyUser:45 html/Admin/Users/Modify.html:116 html/Edit/Global/Basic/Top:50 html/Elements/SelectUsers:28 html/User/Prefs.html:85 html/Work/Preferences/Info:75 +#: html/Admin/Users/Modify.html:141 html/User/Prefs.html:129 msgid "Organization" msgstr "組織å稱" @@ -4065,16 +4968,28 @@ msgstr "組織å稱" msgid "Organization:" msgstr "組織:" -#: html/Approvals/Elements/Approve:32 +#: html/Approvals/Elements/Approve:54 #. ($approving->Id, $approving->Subject) msgid "Originating ticket: #%1" msgstr "原申請單:#%1" -#: html/Edit/Elements/PickUsers:109 html/Edit/Users/Add.html:106 html/Work/Tickets/Cc:80 +#: NOT FOUND IN SOURCE msgid "Other comma-delimited email addresses" msgstr "å…¶ä»–e-mail帳號 (僅e-mail通知;多ç†å¸³è™Ÿè«‹ç”¨é€—號','å€éš”)" -#: html/Admin/Elements/ModifyQueue:54 html/Admin/Queues/Modify.html:68 html/Edit/Queues/Basic/Top:41 +#: NOT FOUND IN SOURCE +msgid "Out of range" +msgstr "期é™å¤–" + +#: lib/RT/Transaction_Overlay.pm:611 +msgid "Outgoing email about a comment recorded" +msgstr "已紀錄發é€çš„評論郵件" + +#: lib/RT/Transaction_Overlay.pm:615 +msgid "Outgoing email recorded" +msgstr "已紀錄發é€çš„郵件" + +#: html/Admin/Queues/Modify.html:90 msgid "Over time, priority moves toward" msgstr "å„ªå…ˆé †ä½éš¨æ™‚é–“å¢žåŠ èª¿æ•´ç‚º" @@ -4082,28 +4997,27 @@ msgstr "å„ªå…ˆé †ä½éš¨æ™‚é–“å¢žåŠ èª¿æ•´ç‚º" msgid "Override current custom fields with fields from %1" msgstr "以 %1 表單的自訂欄ä½å–ä»£ç¾æœ‰æ¬„ä½" -#: html/Admin/Elements/CheckOverrideGlobalACL:25 +#: NOT FOUND IN SOURCE msgid "Override global rights" msgstr "å–代全域權é™" -#: html/Admin/Elements/CheckOverrideGlobalACL:34 -#. (loc_fuzzy($msg)) +#: NOT FOUND IN SOURCE msgid "OverrideGlobalACL status %1" msgstr "å–ä»£å…¨åŸŸæ¬Šé™ %1" -#: html/Work/Elements/Tab:31 +#: NOT FOUND IN SOURCE msgid "Overview" msgstr "總覽" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:113 msgid "Own tickets" msgstr "承辦申請單" -#: lib/RT/Queue_Overlay.pm:86 +#: lib/RT/Queue_Overlay.pm:113 msgid "OwnTicket" msgstr "承辦申請單" -#: etc/initialdata.zh:56 etc/initialdata:38 html/Admin/Elements/ModifyTemplateAsWorkflow:141 html/Edit/Global/Workflow/Owner.html:19 html/Edit/Queues/Basic/Top:47 html/Edit/Queues/Basic/Top:58 html/Elements/MyRequests:31 html/SelfService/Elements/MyRequests:29 html/Ticket/Create.html:47 html/Ticket/Elements/EditPeople:42 html/Ticket/Elements/EditPeople:43 html/Ticket/Elements/ShowPeople:26 html/Ticket/Update.html:62 html/Work/Elements/MyRequests:19 html/Work/Elements/Quicksearch:18 html/Work/Tickets/Elements/ShowBasics:21 html/Work/Tickets/Update.html:27 lib/RT/ACE_Overlay.pm:85 lib/RT/Tickets_Overlay.pm:1244 +#: 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 msgid "Owner" msgstr "承辦人" @@ -4111,40 +5025,49 @@ msgstr "承辦人" msgid "Owner changed from %1 to %2" msgstr "承辦人已從 %1 改為 %2" -#: lib/RT/Transaction_Overlay.pm:582 +#: lib/RT/Ticket_Overlay.pm:495 +msgid "Owner could not be set." +msgstr "無法è¨å®šæ‰¿è¾¦äººã€‚" + +#: lib/RT/Transaction_Overlay.pm:661 #. ($Old->Name , $New->Name) msgid "Owner forcibly changed from %1 to %2" msgstr "強制將承辦人從 %1 改為 %2" -#: html/Search/Elements/PickRestriction:30 html/Work/Search/PickRestriction:10 +#: NOT FOUND IN SOURCE msgid "Owner is" msgstr "承辦人" -#: html/Work/Elements/List:27 html/Work/Queues/List:8 html/Work/Tickets/Create.html:56 html/Work/Tickets/Elements/ShowBasics:60 +#: NOT FOUND IN SOURCE msgid "Owner's Phone" msgstr "承辦人電話" -#: html/Edit/Elements/Page:39 -msgid "Page" +#: NOT FOUND IN SOURCE +msgid "Page #" msgstr " " -#: html/Admin/Users/Modify.html:173 html/User/Prefs.html:55 html/Work/Preferences/Info:38 +#: html/Elements/TicketList:78 +#. ($Page, int($TotalFound/$Rows)+$oddRows) +msgid "Page %1 of %2" +msgstr "第 %1/%2 é " + +#: html/Admin/Users/Modify.html:198 html/User/Prefs.html:97 msgid "Pager" msgstr "呼å«å™¨" -#: html/Admin/Elements/ModifyUser:73 +#: NOT FOUND IN SOURCE msgid "PagerPhone" msgstr "呼å«å™¨è™Ÿç¢¼" -#: html/Edit/Global/Workflow/Action:81 html/Edit/Global/Workflow/Condition:66 +#: NOT FOUND IN SOURCE msgid "Parameter" msgstr "呼å«åƒæ•¸" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:225 +#: NOT FOUND IN SOURCE msgid "Parent" msgstr "上級" -#: html/Ticket/Create.html:181 html/Ticket/Elements/BulkLinks:38 html/Ticket/Elements/EditLinks:126 html/Ticket/Elements/EditLinks:57 html/Ticket/Elements/ShowLinks:46 html/Work/Search/BulkLinks:14 +#: html/Elements/EditLinks:142 html/Elements/EditLinks:76 html/Elements/ShowLinks:68 html/Ticket/Create.html:213 html/Ticket/Elements/BulkLinks:60 msgid "Parents" msgstr "æ¯ç”³è«‹å–®" @@ -4152,28 +5075,45 @@ msgstr "æ¯ç”³è«‹å–®" msgid "Park Space" msgstr "åœè»Šä½ç”³è«‹" -#: html/Elements/Login:52 html/User/Prefs.html:60 html/Work/Preferences/Info:44 +#: html/Elements/Login:74 html/User/Prefs.html:105 msgid "Password" msgstr "密碼" -#: html/NoAuth/Reminder.html:24 +#: html/NoAuth/Reminder.html:46 msgid "Password Reminder" msgstr "密碼æç¤º" -#: lib/RT/User_Overlay.pm:228 lib/RT/User_Overlay.pm:985 +#: lib/RT/Transaction_Overlay.pm:770 lib/RT/User_Overlay.pm:1046 +msgid "Password changed" +msgstr "" + +#: lib/RT/User_Overlay.pm:1038 lib/RT/User_Overlay.pm:215 +#. ($RT::MinimumPasswordLength) +msgid "Password needs to be at least %1 characters long" +msgstr "" + +#: lib/RT/User_Overlay.pm:1045 +msgid "Password set" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Password too short" msgstr "密碼太çŸ" -#: html/Admin/Users/Modify.html:290 html/User/Prefs.html:171 html/Work/Preferences/Info:167 +#: html/User/Prefs.html:232 #. (loc_fuzzy($msg)) msgid "Password: %1" msgstr "密碼:%1" -#: html/Admin/Users/Modify.html:292 +#: lib/RT/User_Overlay.pm:1031 +msgid "Password: Permission Denied" +msgstr "" + +#: html/Admin/Users/Modify.html:356 msgid "Passwords do not match." msgstr "密碼確èªå¤±æ•—。" -#: html/User/Prefs.html:173 html/Work/Preferences/Info:169 +#: html/User/Prefs.html:234 msgid "Passwords do not match. Your password has not been changed" msgstr "密碼確èªå¤±æ•—。您的密碼並未改變。" @@ -4185,7 +5125,7 @@ msgstr "è«‹é¸æ“‡è¡¨å–®å稱" msgid "Pending Approval" msgstr "ç‰å¾…ç°½æ ¸" -#: html/Ticket/Elements/ShowSummary:44 html/Ticket/Elements/Tabs:95 html/Ticket/ModifyAll.html:50 +#: html/Ticket/Elements/ShowSummary:66 html/Ticket/Elements/Tabs:119 html/Ticket/ModifyAll.html:72 msgid "People" msgstr "人員" @@ -4193,15 +5133,19 @@ msgstr "人員" msgid "People with Queue Rights" msgstr "æ“æœ‰è¡¨å–®æ¬Šé™äººå“¡" -#: etc/initialdata.zh:143 etc/initialdata:125 +#: etc/initialdata:133 msgid "Perform a user-defined action" msgstr "執行使用者自訂的動作" -#: lib/RT/ACE_Overlay.pm:230 lib/RT/ACE_Overlay.pm:236 lib/RT/ACE_Overlay.pm:562 lib/RT/ACE_Overlay.pm:572 lib/RT/ACE_Overlay.pm:582 lib/RT/ACE_Overlay.pm:647 lib/RT/CurrentUser.pm:82 lib/RT/CurrentUser.pm:91 lib/RT/CustomField_Overlay.pm:100 lib/RT/CustomField_Overlay.pm:201 lib/RT/CustomField_Overlay.pm:233 lib/RT/CustomField_Overlay.pm:510 lib/RT/CustomField_Overlay.pm:90 lib/RT/Group_Overlay.pm:1094 lib/RT/Group_Overlay.pm:1098 lib/RT/Group_Overlay.pm:1107 lib/RT/Group_Overlay.pm:1158 lib/RT/Group_Overlay.pm:1162 lib/RT/Group_Overlay.pm:1168 lib/RT/Group_Overlay.pm:425 lib/RT/Group_Overlay.pm:517 lib/RT/Group_Overlay.pm:595 lib/RT/Group_Overlay.pm:603 lib/RT/Group_Overlay.pm:700 lib/RT/Group_Overlay.pm:704 lib/RT/Group_Overlay.pm:710 lib/RT/Group_Overlay.pm:903 lib/RT/Group_Overlay.pm:907 lib/RT/Group_Overlay.pm:920 lib/RT/Queue_Overlay.pm:540 lib/RT/Queue_Overlay.pm:550 lib/RT/Queue_Overlay.pm:564 lib/RT/Queue_Overlay.pm:699 lib/RT/Queue_Overlay.pm:708 lib/RT/Queue_Overlay.pm:721 lib/RT/Queue_Overlay.pm:931 lib/RT/Scrip_Overlay.pm:125 lib/RT/Scrip_Overlay.pm:136 lib/RT/Scrip_Overlay.pm:196 lib/RT/Scrip_Overlay.pm:433 lib/RT/Template_Overlay.pm:283 lib/RT/Template_Overlay.pm:87 lib/RT/Template_Overlay.pm:93 lib/RT/Ticket_Overlay.pm:1359 lib/RT/Ticket_Overlay.pm:1369 lib/RT/Ticket_Overlay.pm:1383 lib/RT/Ticket_Overlay.pm:1517 lib/RT/Ticket_Overlay.pm:1526 lib/RT/Ticket_Overlay.pm:1539 lib/RT/Ticket_Overlay.pm:1888 lib/RT/Ticket_Overlay.pm:2026 lib/RT/Ticket_Overlay.pm:2190 lib/RT/Ticket_Overlay.pm:2257 lib/RT/Ticket_Overlay.pm:2616 lib/RT/Ticket_Overlay.pm:2688 lib/RT/Ticket_Overlay.pm:2782 lib/RT/Ticket_Overlay.pm:2797 lib/RT/Ticket_Overlay.pm:2996 lib/RT/Ticket_Overlay.pm:3006 lib/RT/Ticket_Overlay.pm:3011 lib/RT/Ticket_Overlay.pm:3233 lib/RT/Ticket_Overlay.pm:3431 lib/RT/Ticket_Overlay.pm:3593 lib/RT/Ticket_Overlay.pm:3645 lib/RT/Ticket_Overlay.pm:3823 lib/RT/Transaction_Overlay.pm:466 lib/RT/Transaction_Overlay.pm:473 lib/RT/Transaction_Overlay.pm:502 lib/RT/Transaction_Overlay.pm:509 lib/RT/User_Overlay.pm:1079 lib/RT/User_Overlay.pm:1527 lib/RT/User_Overlay.pm:687 lib/RT/User_Overlay.pm:722 lib/RT/User_Overlay.pm:978 +#: html/Admin/Tools/Configuration.html:94 +msgid "Perl configuration" +msgstr "Perl è¨å®š" + +#: lib/RT/ACE_Overlay.pm:252 lib/RT/ACE_Overlay.pm:258 lib/RT/ACE_Overlay.pm:581 lib/RT/ACE_Overlay.pm:591 lib/RT/ACE_Overlay.pm:601 lib/RT/ACE_Overlay.pm:666 lib/RT/Attribute_Overlay.pm:158 lib/RT/Attribute_Overlay.pm:164 lib/RT/Attribute_Overlay.pm: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 msgid "Permission Denied" msgstr "權é™ä¸è¶³" -#: html/Edit/Rights/index.html:3 +#: NOT FOUND IN SOURCE msgid "Permission Settings" msgstr "權é™è¨å®š" @@ -4213,39 +5157,59 @@ msgstr "æ“æœ‰æ¬Šé™è¡¨å–®åˆ—表:" msgid "Personal" msgstr "代ç†äººç¾¤çµ„" -#: html/User/Elements/Tabs:34 +#: html/User/Elements/Tabs:56 msgid "Personal Groups" msgstr "代ç†äººç¾¤çµ„" #: NOT FOUND IN SOURCE +msgid "Personal Homepage" +msgstr "個人首é " + +#: NOT FOUND IN SOURCE msgid "Personal Todo" msgstr "ç§äººå¾…è¾¦äº‹é …" -#: html/User/Groups/index.html:29 html/User/Groups/index.html:39 +#: html/User/Groups/index.html:51 html/User/Groups/index.html:61 msgid "Personal groups" msgstr "代ç†äººç¾¤çµ„" -#: html/User/Elements/DelegateRights:36 +#: html/User/Elements/DelegateRights:58 msgid "Personal groups:" msgstr "代ç†äººç¾¤çµ„:" -#: html/Work/Preferences/Info:24 +#: NOT FOUND IN SOURCE msgid "PersonalHomepage" msgstr "個人首é " #: NOT FOUND IN SOURCE +msgid "Phase 1: Create/Rename Groups (%1)" +msgstr "ç¬¬ä¸€éšŽæ®µï¼šç¾¤çµ„å»ºç«‹åŠæ”¹å (%1)" + +#: NOT FOUND IN SOURCE +msgid "Phase 2: Disable/Enable Groups (%1)" +msgstr "第二階段:群組åœç”¨åŠå•Ÿç”¨ (%1)" + +#: NOT FOUND IN SOURCE +msgid "Phase 3: Create/Rename Users (%1)" +msgstr "ç¬¬ä¸‰éšŽæ®µï¼šä½¿ç”¨è€…å»ºç«‹åŠæ”¹å (%1)" + +#: NOT FOUND IN SOURCE +msgid "Phase 4: Disable/Enable Users (%1)" +msgstr "第四階段:使用者åœç”¨åŠå•Ÿç”¨ (%1)" + +#: NOT FOUND IN SOURCE msgid "Phone" msgstr "電話" -#: html/Work/Delegates/Info:90 html/Work/Overview/Info:72 +#: NOT FOUND IN SOURCE msgid "Phone number" msgstr "電話號碼" -#: html/Admin/Users/Modify.html:155 html/User/Prefs.html:48 html/Work/Preferences/Info:30 +#: html/Admin/Users/Modify.html:180 html/User/Prefs.html:82 msgid "Phone numbers" msgstr "電話號碼" -#: html/Edit/Users/Add.html:3 html/Work/Delegates/Add.html:3 html/Work/Delegates/Info:34 html/Work/Tickets/ModifyPeople.html:2 +#: NOT FOUND IN SOURCE msgid "Pick" msgstr "挑é¸" @@ -4257,11 +5221,11 @@ msgstr "出發地點" msgid "Placeholder" msgstr "尚未完工" -#: html/Edit/Elements/PickUsers:31 html/Edit/Elements/PickUsers:44 html/Edit/Elements/SelectCustomFieldType:3 html/Work/Elements/SelectOwner:3 html/Work/Tickets/Elements/EditCustomField:183 html/Work/Tickets/Elements/EditCustomField:75 html/Work/Tickets/Elements/EditCustomFieldEntries:81 html/Work/Tickets/Elements/EditCustomFieldEntries:88 +#: NOT FOUND IN SOURCE msgid "Please Select" msgstr "è«‹é¸æ“‡" -#: html/Edit/Elements/104Buttons:30 +#: NOT FOUND IN SOURCE msgid "Please check items to be deleted first." msgstr "è«‹å…ˆé¸ä¸è¦åˆªé™¤çš„å°è±¡" @@ -4274,6 +5238,10 @@ msgid "Please select a queue's workflow" msgstr "è«‹é¸æ“‡è¡¨å–®æµç¨‹" #: NOT FOUND IN SOURCE +msgid "Please select one of the category types above." +msgstr "請從上é¢é¸æ“‡ä¸€é …分類。" + +#: NOT FOUND IN SOURCE msgid "Please select role" msgstr "è«‹é¸æ“‡è§’色" @@ -4285,19 +5253,19 @@ msgstr "經營è¦ç« " msgid "Position" msgstr "è·å‹™" -#: html/Edit/Users/Info:42 +#: NOT FOUND IN SOURCE msgid "Position Level" msgstr "è·ç‰" -#: html/Edit/Elements/PickUsers:41 html/Edit/Global/UserRight/List:13 html/Edit/Global/UserRight/Top:23 html/Edit/Users/Add.html:41 html/Edit/Users/List:11 html/Edit/Users/Top:22 html/Work/Delegates/Add.html:26 html/Work/Delegates/Info:84 html/Work/Overview/Info:66 +#: NOT FOUND IN SOURCE msgid "Position Name" msgstr "è·å‹™å稱" -#: html/Edit/Global/UserRight/List:14 html/Edit/Global/UserRight/Top:33 html/Edit/Users/List:12 html/Edit/Users/Top:32 +#: NOT FOUND IN SOURCE msgid "Position Number" msgstr "è·å‹™ä»£ç¢¼" -#: html/Edit/Users/Info:43 +#: NOT FOUND IN SOURCE msgid "Position Rank" msgstr "è·ç´š" @@ -4305,7 +5273,7 @@ msgstr "è·ç´š" msgid "Pref" msgstr "å好" -#: html/Edit/Elements/104Top:26 html/Elements/Header:51 html/Elements/Tabs:52 html/SelfService/Elements/Tabs:50 html/SelfService/Prefs.html:24 html/User/Prefs.html:24 html/User/Prefs.html:27 html/Work/Elements/Tab:43 +#: 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 msgid "Preferences" msgstr "å好" @@ -4313,15 +5281,19 @@ msgstr "å好" msgid "Prefs" msgstr "個人資訊" -#: lib/RT/Action/Generic.pm:159 +#: lib/RT/Action/Generic.pm:196 msgid "Prepare Stubbed" msgstr "é 備動作完畢" -#: html/Ticket/Elements/Tabs:60 +#: html/Ticket/Elements/Tabs:84 msgid "Prev" msgstr "ä¸Šä¸€é …" -#: html/Search/Listing.html:43 html/Work/Search/index.html:20 +#: html/Elements/TicketList:101 +msgid "Previous Page" +msgstr "上一é " + +#: NOT FOUND IN SOURCE msgid "Previous page" msgstr "å‰ä¸€é " @@ -4329,57 +5301,85 @@ msgstr "å‰ä¸€é " msgid "Pri" msgstr "å„ªå…ˆé †ä½" -#: lib/RT/ACE_Overlay.pm:132 lib/RT/ACE_Overlay.pm:207 lib/RT/ACE_Overlay.pm:551 +#: lib/RT/ACE_Overlay.pm:158 lib/RT/ACE_Overlay.pm:240 lib/RT/ACE_Overlay.pm:570 #. ($args{'PrincipalId'}) msgid "Principal %1 not found." msgstr "找ä¸åˆ°å–®ä½ %1。" -#: html/Search/Elements/PickRestriction:53 html/Ticket/Create.html:153 html/Ticket/Elements/EditBasics:53 html/Ticket/Elements/ShowBasics:38 html/Work/Search/PickRestriction:34 lib/RT/Tickets_Overlay.pm:1042 +#: 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 msgid "Priority" msgstr "å„ªå…ˆé †ä½" -#: html/Admin/Elements/ModifyQueue:50 html/Admin/Queues/Modify.html:64 +#: html/Admin/Queues/Modify.html:86 msgid "Priority starts at" msgstr "å„ªå…ˆé †ä½èµ·å§‹å€¼" -#: etc/initialdata.zh:43 etc/initialdata:25 +#: html/Search/Elements/EditSearches:50 +msgid "Privacy:" +msgstr "éš±ç§è¨å®šï¼š" + +#: etc/initialdata:25 msgid "Privileged" msgstr "內部æˆå“¡" -#: html/Admin/Users/Modify.html:270 html/User/Prefs.html:162 html/Work/Preferences/Info:158 +#: html/Admin/Users/Modify.html:334 html/User/Prefs.html:223 #. (loc_fuzzy($msg)) msgid "Privileged status: %1" msgstr "內部æˆå“¡ç‹€æ…‹ï¼š%1" -#: html/Admin/Users/index.html:61 +#: html/Admin/Users/index.html:102 msgid "Privileged users" msgstr "內部æˆå“¡" -#: html/Work/Elements/SelectSearch:16 +#: NOT FOUND IN SOURCE msgid "Process Status" msgstr "處ç†ç‹€æ…‹" -#: etc/initialdata.zh:41 etc/initialdata.zh:47 etc/initialdata.zh:53 etc/initialdata.zh:77 etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 +#: NOT FOUND IN SOURCE +msgid "Project" +msgstr "專案" + +#: NOT FOUND IN SOURCE +msgid "Project Name" +msgstr "專案å稱" + +#: NOT FOUND IN SOURCE +msgid "Projects" +msgstr "專案" + +#: etc/initialdata:23 etc/initialdata:29 etc/initialdata:35 etc/initialdata:59 msgid "Pseudogroup for internal use" msgstr "內部用的虛擬群組" -#: html/Work/Preferences/Info:68 +#: NOT FOUND IN SOURCE +msgid "Public Description" +msgstr "公開說明" + +#: NOT FOUND IN SOURCE msgid "Public Info" msgstr "公開資訊" -#: html/Work/Elements/104Header:88 +#: NOT FOUND IN SOURCE msgid "Public Service" msgstr "公共事務å€" -#: html/Edit/Users/Search.html:4 +#: NOT FOUND IN SOURCE +msgid "Purging stale data: %1" +msgstr "ç§»é™¤éŽæœŸè³‡æ–™: %1" + +#: html/Search/Elements/EditQuery:47 msgid "Query" msgstr "查詢" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:166 html/Elements/MyRequests:29 html/Elements/MyTickets:29 html/Elements/Quicksearch:28 html/Search/Elements/PickRestriction:45 html/SelfService/Create.html:32 html/Ticket/Create.html:37 html/Ticket/Elements/EditBasics:63 html/Ticket/Elements/ShowBasics:42 html/User/Elements/DelegateRights:79 html/Work/Elements/MyApprovals:10 html/Work/Elements/MyRequests:17 html/Work/Elements/MyTickets:17 html/Work/Elements/Quicksearch:14 html/Work/Search/PickRestriction:26 lib/RT/Tickets_Overlay.pm:883 +#: html/Search/Build.html:124 html/Ticket/Elements/Tabs:195 +msgid "Query Builder" +msgstr "建立查詢" + +#: 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 msgid "Queue" msgstr "表單" -#: html/Admin/Queues/CustomField.html:41 html/Admin/Queues/Scrip.html:49 html/Admin/Queues/Scrips.html:47 html/Admin/Queues/Templates.html:43 html/Admin/Queues/Workflows.html:44 +#: 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) msgid "Queue %1 not found" @@ -4393,19 +5393,19 @@ msgstr "找ä¸åˆ°è¡¨å–® '%1'\\n" msgid "Queue Keyword Selections" msgstr "表單關éµå—é¸å–" -#: html/Admin/Elements/ModifyQueue:30 html/Admin/Queues/Modify.html:42 html/Edit/Queues/Basic/Top:12 html/Edit/Queues/Basic/index.html:36 html/Edit/Queues/Global:21 html/Edit/Queues/List:6 html/Edit/Users/Queue:10 html/Work/Delegates/List:6 html/Work/Elements/List:11 html/Work/Queues/List:5 html/Work/Tickets/Create.html:22 html/Work/Tickets/Elements/ShowBasics:6 +#: html/Admin/Queues/Modify.html:64 msgid "Queue Name" msgstr "表單å稱" -#: html/Edit/Queues/List:8 html/Work/Elements/List:25 html/Work/Queues/List:7 html/Work/Tickets/Create.html:35 html/Work/Tickets/Elements/ShowBasics:19 +#: NOT FOUND IN SOURCE msgid "Queue Owner" msgstr "æ¥å‹™æ‰¿è¾¦äºº" -#: html/Edit/Queues/Basic/Top:35 +#: NOT FOUND IN SOURCE msgid "Queue Priority" msgstr "優先ç‰ç´š" -#: html/Edit/Global/GroupRight/Top:24 html/Edit/Global/UserRight/Top:43 html/Edit/Users/Queue:11 html/Edit/Users/index.html:124 +#: NOT FOUND IN SOURCE msgid "Queue Rights" msgstr "表單權é™" @@ -4413,58 +5413,65 @@ msgstr "表單權é™" msgid "Queue Scrips" msgstr "表單手續" -#: html/Edit/Elements/Tab:38 +#: NOT FOUND IN SOURCE msgid "Queue Setup" msgstr "表單è¨å®š" -#: lib/RT/Queue_Overlay.pm:264 +#: lib/RT/Queue_Overlay.pm:362 msgid "Queue already exists" msgstr "表單已å˜åœ¨" -#: lib/RT/Queue_Overlay.pm:273 lib/RT/Queue_Overlay.pm:279 +#: lib/RT/Queue_Overlay.pm:371 lib/RT/Queue_Overlay.pm:377 msgid "Queue could not be created" msgstr "無法新增表單" -#: html/Edit/Queues/autohandler:8 html/Ticket/Create.html:204 html/Work/Tickets/Create.html:185 +#: html/Ticket/Create.html:239 lib/t/regression/01ticket_link_searching.t:17 msgid "Queue could not be loaded." msgstr "無法載入表單" -#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:283 +#: docs/design_docs/string-extraction-guide.txt:83 lib/RT/Queue_Overlay.pm:381 lib/RT/StyleGuide.pod:809 msgid "Queue created" msgstr "表單新增完畢" -#: html/Admin/Elements/ModifyWorkflow:32 +#: NOT FOUND IN SOURCE msgid "Queue is not specified." msgstr "未指定表單。" -#: html/SelfService/Display.html:70 lib/RT/CustomField_Overlay.pm:97 +#: html/SelfService/Display.html:102 lib/RT/CustomField_Overlay.pm:192 msgid "Queue not found" msgstr "找ä¸åˆ°è¡¨å–®" -#: html/Admin/Elements/Tabs:37 html/Admin/index.html:34 +#: html/Admin/Elements/Tabs:59 html/Admin/index.html:72 msgid "Queues" msgstr "表單" -#: html/Work/Elements/Quicksearch:10 +#: NOT FOUND IN SOURCE msgid "Quick Search" msgstr "è¡¨å–®ç¾æ³" -#: html/Elements/Quicksearch:24 +#: html/Elements/Quicksearch:46 msgid "Quick search" msgstr "表單一覽" -#: html/Elements/Login:44 +#: html/Elements/QuickCreate:46 +msgid "Quick ticket creation" +msgstr "快速建立申請單" + +#: html/Search/Results.html:83 +msgid "RSS" +msgstr "RSS" + +#: html/Elements/Login:66 #. ($RT::VERSION) msgid "RT %1" msgstr "RT %1" -#: docs/design_docs/string-extraction-guide.txt:70 +#: docs/design_docs/string-extraction-guide.txt:70 lib/RT/StyleGuide.pod:796 #. ($RT::VERSION, $RT::rtname) msgid "RT %1 for %2" msgstr "%2:RT %1 版" -#: html/Elements/Footer:32 -#. ($RT::VERSION) +#: NOT FOUND IN SOURCE msgid "RT %1 from <a href=\"http://bestpractical.com\">Best Practical Solutions, LLC</a>." msgstr "RT %1 版,<a href=\"http://bestpractical.com\">Best Practical Solutions å…¬å¸</a>出å“。" @@ -4476,7 +5483,7 @@ msgstr "RT %1。版權所有 1996-%1 Jesse Vincent <jesse\\@bestpractical.com>\\ msgid "RT %1. Copyright 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" msgstr "RT %1。版權所有 1996-2002 Jesse Vincent <jesse\\@bestpractical.com>\\n" -#: html/Admin/index.html:24 html/Admin/index.html:25 +#: html/Admin/index.html:46 html/Admin/index.html:47 msgid "RT Administration" msgstr "RT 管ç†é é¢" @@ -4496,7 +5503,7 @@ msgstr "RT è¨å®šéŒ¯èª¤" msgid "RT Critical error. Message not recorded!" msgstr "RT è‡´å‘½éŒ¯èª¤ã€‚è¨Šæ¯æœªè¢«ç´€éŒ„。" -#: html/Elements/Error:41 html/SelfService/Error.html:40 +#: html/Elements/Error:65 html/SelfService/Error.html:62 msgid "RT Error" msgstr "RT 錯誤" @@ -4512,13 +5519,17 @@ msgstr "RT 收到從自己寄出的郵件 (%1)。" msgid "RT Self Service / Closed Tickets" msgstr "RT 自助æœå‹™/已解決的申請單" -#: html/index.html:24 html/index.html:27 +#: html/Admin/Tools/Configuration.html:73 +msgid "RT Variables" +msgstr "RT 的變數" + +#: html/index.html:72 html/index.html:75 msgid "RT at a glance" msgstr "RT 一覽" #: NOT FOUND IN SOURCE msgid "RT couldn't authenticate you" -msgstr "RT 無法èªè‰ä½ " +msgstr "RT 無法èªè‰æ‚¨çš„身份" #: NOT FOUND IN SOURCE msgid "RT couldn't find requestor via its external database lookup" @@ -4528,11 +5539,15 @@ msgstr "RT 無法從外部資料庫查詢找到申請人資訊" msgid "RT couldn't find the queue: %1" msgstr "RT 找ä¸åˆ°è¡¨å–®ï¼š%1" +#: html/Elements/SetupSessionCookie:90 +msgid "RT couldn't store your session." +msgstr "" + #: NOT FOUND IN SOURCE msgid "RT couldn't validate this PGP signature. \\n" msgstr "RT 無法確èªé€™å€‹ PGP ç°½ç« ã€‚\\n" -#: html/Edit/Elements/104Header:7 html/Edit/Elements/104Top:20 html/Elements/PageLayout:85 html/Work/Elements/104Header:7 +#: html/Elements/PageLayout:108 #. ($RT::rtname) msgid "RT for %1" msgstr "%1 專用æµç¨‹ç³»çµ±" @@ -4545,8 +5560,7 @@ msgstr "%1 專用 RT 系統:%2" msgid "RT has proccessed your commands" msgstr "RT 已執行您的命令" -#: html/Elements/Login:94 -#. ('2003') +#: NOT FOUND IN SOURCE msgid "RT is © Copyright 1996-%1 Jesse Vincent <jesse@bestpractical.com>. It is distributed under <a href=\"http://www.gnu.org/copyleft/gpl.html\">Version 2 of the GNU General Public License.</a>" msgstr "RT 版權所有 1996-%1 Jesse Vincent <jesse@bestpractical.com>。<br>æœ¬è»Ÿé«”ä¾ <a href=\"http://www.gnu.org/copyleft/gpl.html\">GNU 通用公共授權第二版</a> 散佈。" @@ -4574,27 +5588,51 @@ msgstr "系統é‹è¡Œè§’色" msgid "RT::Ticket-Role" msgstr "申請單é‹è¡Œè§’色" -#: html/Work/Tickets/Elements/ShowTransaction:11 +#: NOT FOUND IN SOURCE msgid "RT_System" msgstr "系統訊æ¯" -#: html/Admin/Users/Modify.html:57 html/Admin/Users/Prefs.html:51 html/User/Prefs.html:43 html/Work/Preferences/Info:18 +#: NOT FOUND IN SOURCE +msgid "Read Only" +msgstr "唯讀" + +#: html/Admin/Users/Modify.html:79 html/User/Prefs.html:69 msgid "Real Name" msgstr "真實姓å" -#: html/Admin/Elements/ModifyUser:47 +#: NOT FOUND IN SOURCE msgid "RealName" msgstr "真實姓å" -#: html/Work/Approvals/Display.html:27 html/Work/Tickets/Update.html:85 +#: NOT FOUND IN SOURCE msgid "Really reject this ticket?" msgstr "您確定è¦é§å›žé€™å¼µç”³è«‹å–®å—Žï¼Ÿ" -#: html/Ticket/Create.html:184 html/Ticket/Elements/BulkLinks:50 html/Ticket/Elements/EditLinks:138 html/Ticket/Elements/EditLinks:93 html/Ticket/Elements/ShowLinks:70 html/Work/Search/BulkLinks:26 +#: lib/RT/Transaction_Overlay.pm:714 +#. ($value) +msgid "Reference by %1 added" +msgstr "å·²åŠ å…¥ %1 為åƒè€ƒæœ¬ç”³è«‹å–®" + +#: lib/RT/Transaction_Overlay.pm:754 +#. ($value) +msgid "Reference by %1 deleted" +msgstr "已移除 %1 為åƒè€ƒæœ¬ç”³è«‹å–®" + +#: lib/RT/Transaction_Overlay.pm:711 +#. ($value) +msgid "Reference to %1 added" +msgstr "å·²åŠ å…¥åƒè€ƒç”³è«‹å–® %1" + +#: lib/RT/Transaction_Overlay.pm:751 +#. ($value) +msgid "Reference to %1 deleted" +msgstr "已移除åƒè€ƒç”³è«‹å–® %1" + +#: html/Elements/EditLinks:103 html/Elements/EditLinks:154 html/Elements/ShowLinks:92 html/Ticket/Create.html:216 html/Ticket/Elements/BulkLinks:72 msgid "Referred to by" msgstr "被åƒè€ƒ" -#: html/Elements/SelectLinkType:27 html/Ticket/Create.html:183 html/Ticket/Elements/BulkLinks:46 html/Ticket/Elements/EditLinks:134 html/Ticket/Elements/EditLinks:79 html/Ticket/Elements/ShowLinks:60 html/Work/Search/BulkLinks:22 +#: 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 msgid "Refers to" msgstr "åƒè€ƒ" @@ -4606,76 +5644,80 @@ msgstr "åƒè€ƒ" msgid "Refine" msgstr "åœ¨çµæžœç¯„åœå…§æŸ¥è©¢" -#: html/Search/Elements/PickRestriction:26 html/Work/Search/PickRestriction:7 +#: NOT FOUND IN SOURCE msgid "Refine search" msgstr "調整查詢æ¢ä»¶" -#: html/Work/Overview/index.html:12 +#: NOT FOUND IN SOURCE msgid "Refresh" msgstr "æ›´æ–°" -#: html/Elements/Refresh:35 +#: html/Elements/Refresh:57 #. ($value/60) msgid "Refresh this page every %1 minutes." msgstr "æ¯ %1 åˆ†é˜æ›´æ–°é é¢" -#: html/Ticket/Create.html:173 html/Ticket/Elements/ShowSummary:61 html/Ticket/ModifyAll.html:56 -msgid "Relationships" -msgstr "關係" - -#: html/Edit/Elements/ListButtons:13 +#: NOT FOUND IN SOURCE msgid "Remove" msgstr "移除" -#: html/Search/Bulk.html:97 html/Work/Search/Bulk.html:77 +#: html/Search/Bulk.html:116 msgid "Remove AdminCc" msgstr "移除管ç†å“¡å‰¯æœ¬" -#: html/Search/Bulk.html:93 html/Work/Search/Bulk.html:71 +#: html/Search/Bulk.html:112 msgid "Remove Cc" msgstr "移除副本" -#: html/Search/Bulk.html:89 html/Work/Search/Bulk.html:65 +#: html/Search/Bulk.html:108 msgid "Remove Requestor" msgstr "移除申請人" -#: html/Ticket/Elements/ShowTransaction:160 html/Ticket/Elements/Tabs:121 html/Work/Tickets/Display.html:31 html/Work/Tickets/Elements/ShowTransaction:108 +#: html/Ticket/Elements/ShowTransaction:171 html/Ticket/Elements/Tabs:145 msgid "Reply" msgstr "回覆" -#: lib/RT/Queue_Overlay.pm:84 +#: html/Admin/Queues/Modify.html:72 +msgid "Reply Address" +msgstr "回覆地å€" + +#: html/Search/Bulk.html:151 html/Ticket/ModifyAll.html:94 html/Ticket/Update.html:76 +msgid "Reply to requestors" +msgstr "回覆申請人" + +#: lib/RT/Queue_Overlay.pm:111 msgid "Reply to tickets" msgstr "å°ç”³è«‹å–®é€²è¡Œå›žè¦†" -#: lib/RT/Queue_Overlay.pm:84 +#: lib/RT/Queue_Overlay.pm:111 msgid "ReplyToTicket" msgstr "回覆申請單" -#: html/Edit/Users/Info:45 +#: NOT FOUND IN SOURCE msgid "Report to Duty" msgstr "上下ç刷å¡" -#: html/Edit/Users/Info:33 +#: NOT FOUND IN SOURCE msgid "Reported on" msgstr "åˆ°è·æ—¥æœŸ" -#: etc/initialdata.zh:62 etc/initialdata:44 html/Ticket/Update.html:39 html/Work/Elements/List:21 html/Work/Elements/MyApprovals:12 html/Work/Elements/MyTickets:20 html/Work/Elements/SelectSearch:30 html/Work/Tickets/Elements/ShowBasics:62 lib/RT/ACE_Overlay.pm:86 +#: etc/initialdata:44 lib/RT/ACE_Overlay.pm:112 msgid "Requestor" msgstr "申請人" -#: html/Edit/Global/Workflow/Owner.html:44 -msgid "Requestor Group's" -msgstr "申請人所屬群組之" - -#: html/Search/Elements/PickRestriction:37 html/Work/Search/PickRestriction:17 +#: NOT FOUND IN SOURCE msgid "Requestor email address" msgstr "申請人電å郵件信箱ä½å€" -#: html/Edit/Global/Workflow/Owner.html:28 +#: NOT FOUND IN SOURCE msgid "Requestor's" msgstr "申請人所屬之第上" -#: html/Work/Elements/List:23 +#: NOT FOUND IN SOURCE +msgid "Requestor's Dept." +msgstr "申請人所屬部門之" + +#: NOT FOUND IN SOURCE msgid "Requestor's Phone" msgstr "申請人電話" @@ -4687,19 +5729,24 @@ msgstr "申請人" msgid "RequestorAddresses" msgstr "申請人地å€" -#: html/SelfService/Create.html:40 html/Ticket/Create.html:55 html/Ticket/Elements/EditPeople:47 html/Ticket/Elements/ShowPeople:30 +#: html/SelfService/Create.html:63 html/Ticket/Create.html:77 html/Ticket/Elements/EditPeople:69 html/Ticket/Elements/ShowPeople:52 msgid "Requestors" msgstr "申請人" -#: html/Admin/Elements/ModifyQueue:60 html/Admin/Queues/Modify.html:74 +#: html/Admin/Queues/Modify.html:96 msgid "Requests should be due in" msgstr "ç”³è«‹å–®è™•ç†æœŸé™" -#: html/Elements/Submit:61 +#: lib/RT/Attribute_Overlay.pm:146 +#. ('Object') +msgid "Required parameter '%1' not specified" +msgstr "未指定必è¦çš„åƒæ•¸ã€Œ%1ã€" + +#: html/Elements/Submit:104 msgid "Reset" msgstr "é‡è¨" -#: html/Admin/Users/Modify.html:158 html/User/Prefs.html:49 html/Work/Preferences/Info:32 +#: html/Admin/Users/Modify.html:183 html/User/Prefs.html:85 msgid "Residence" msgstr "ä½è™•" @@ -4707,94 +5754,98 @@ msgstr "ä½è™•" msgid "Resolution" msgstr "解決狀態" -#: html/Ticket/Elements/Tabs:131 html/Work/Tickets/Display.html:34 +#: html/Ticket/Elements/Tabs:155 msgid "Resolve" msgstr "解決" -#: html/Ticket/Update.html:136 html/Work/Tickets/Update.html:120 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:154 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Resolve ticket #%1 (%2)" msgstr "解決申請單 #%1 (%2)" -#: etc/initialdata.zh:331 etc/initialdata:308 html/Elements/SelectDateType:27 lib/RT/Ticket_Overlay.pm:1188 +#: etc/initialdata:323 html/Elements/SelectDateType:49 lib/RT/Ticket_Overlay.pm:1148 msgid "Resolved" msgstr "已解決" -#: html/Search/Bulk.html:132 html/Ticket/ModifyAll.html:72 html/Ticket/Update.html:71 html/Work/Search/Bulk.html:84 html/Work/Tickets/Update.html:38 +#: NOT FOUND IN SOURCE msgid "Response to requestors" msgstr "回覆申請人" -#: html/Edit/Users/Info:44 +#: NOT FOUND IN SOURCE msgid "Responsibility Type" msgstr "責任å€åˆ†" -#: html/Elements/ListActions:25 +#: html/Elements/ListActions:47 html/Search/Elements/NewListActions:47 msgid "Results" msgstr "çµæžœ" -#: html/Search/Elements/PickRestriction:104 html/Work/Search/PickRestriction:84 +#: NOT FOUND IN SOURCE msgid "Results per page" msgstr "æ¯é 列出幾ç†çµæžœ" -#: html/Admin/Elements/ModifyUser:32 html/Admin/Users/Modify.html:99 html/User/Prefs.html:71 html/Work/Preferences/Info:54 +#: html/Admin/Users/Modify.html:126 html/User/Prefs.html:116 msgid "Retype Password" msgstr "冿¬¡è¼¸å…¥å¯†ç¢¼" +#: html/Search/Elements/EditSearches:61 +msgid "Revert" +msgstr "復原" + #: NOT FOUND IN SOURCE msgid "Right %1 not found for %2 %3 in scope %4 (%5)\\n" msgstr "在 %4 (%5) 的範åœå…§æ‰¾ä¸åˆ° %2 %3 çš„ %1 權é™\\n" -#: lib/RT/ACE_Overlay.pm:612 +#: lib/RT/ACE_Overlay.pm:631 msgid "Right Delegated" msgstr "權é™ä»£ç†å®Œç•¢" -#: lib/RT/ACE_Overlay.pm:302 +#: lib/RT/ACE_Overlay.pm:321 msgid "Right Granted" msgstr "權é™è¨å®šå®Œç•¢" -#: lib/RT/ACE_Overlay.pm:160 +#: lib/RT/ACE_Overlay.pm:179 msgid "Right Loaded" msgstr "權é™è¼‰å…¥å®Œç•¢" -#: lib/RT/ACE_Overlay.pm:677 lib/RT/ACE_Overlay.pm:692 +#: lib/RT/ACE_Overlay.pm:696 lib/RT/ACE_Overlay.pm:717 msgid "Right could not be revoked" msgstr "無法撤消權é™" -#: html/User/Delegation.html:63 +#: html/User/Delegation.html:85 msgid "Right not found" msgstr "找ä¸åˆ°æ¬Šé™" -#: lib/RT/ACE_Overlay.pm:542 lib/RT/ACE_Overlay.pm:637 +#: lib/RT/ACE_Overlay.pm:561 lib/RT/ACE_Overlay.pm:656 msgid "Right not loaded." msgstr "權é™ä¸¦æœªè¼‰å…¥ã€‚" -#: lib/RT/ACE_Overlay.pm:688 +#: lib/RT/ACE_Overlay.pm:713 msgid "Right revoked" msgstr "æ¬Šé™æ’¤æ¶ˆå®Œç•¢" -#: html/Admin/Elements/UserTabs:40 +#: html/Admin/Elements/UserTabs:67 msgid "Rights" msgstr "權é™åŠä»£ç†äºº" -#: lib/RT/Interface/Web.pm:794 x:797 +#: html/Admin/CustomFields/GroupRights.html:129 lib/RT/Interface/Web.pm:901 #. ($object_type) msgid "Rights could not be granted for %1" msgstr "無法將權é™è³¦äºˆ %1" -#: lib/RT/Interface/Web.pm:827 x:830 +#: html/Admin/CustomFields/GroupRights.html:156 lib/RT/Interface/Web.pm:930 #. ($object_type) msgid "Rights could not be revoked for %1" msgstr "無法撤消 %1 的權é™" -#: html/Edit/Groups/Member:55 html/Edit/Groups/Members/List:10 +#: NOT FOUND IN SOURCE msgid "Role Members" msgstr "角色æˆå“¡" -#: html/Edit/Groups/Member:37 html/Edit/Groups/Members/Add.html:13 html/Edit/Groups/Members/List:7 html/Edit/Groups/Roles/List:4 html/Edit/Groups/Roles/Top:7 +#: NOT FOUND IN SOURCE msgid "Role Name" msgstr "角色å稱" -#: html/Admin/Global/GroupRights.html:50 html/Admin/Queues/GroupRights.html:52 html/Edit/Global/Workflow/Owner.html:55 html/Edit/Global/Workflow/Owner.html:81 html/Edit/Groups/Member:24 +#: html/Admin/Global/GroupRights.html:72 html/Admin/Queues/GroupRights.html:74 msgid "Roles" msgstr "角色" @@ -4802,19 +5853,23 @@ msgstr "角色" msgid "RootApproval" msgstr "交由系統管ç†å“¡ç°½æ ¸" -#: html/Edit/Global/Workflow/Action:27 +#: html/Search/Elements/DisplayOptions:83 +msgid "Rows per page" +msgstr "æ¯é ç†æ•¸" + +#: NOT FOUND IN SOURCE msgid "Run Approval" msgstr "ç°½æ ¸åŸ·è¡Œ" -#: html/Edit/Global/Basic/Top:72 +#: NOT FOUND IN SOURCE msgid "SMTPDebug" msgstr "SMTP åµéŒ¯ç´€éŒ„" -#: html/Edit/Global/Basic/Top:58 +#: NOT FOUND IN SOURCE msgid "SMTPFrom" msgstr "SMTP 寄件ä½å€" -#: html/Edit/Global/Basic/Top:56 +#: NOT FOUND IN SOURCE msgid "SMTPServer" msgstr "SMTP 伺æœå™¨" @@ -4822,53 +5877,71 @@ msgstr "SMTP 伺æœå™¨" msgid "Sat" msgstr "星期å…" -#: lib/RT/Date.pm:393 +#: lib/RT/Date.pm:418 msgid "Sat." msgstr "星期å…" -#: html/Edit/Elements/104Buttons:72 html/Work/Preferences/index.html:35 +#: html/Search/Elements/EditSearches:70 msgid "Save" msgstr "儲å˜" -#: html/Admin/Queues/People.html:104 html/Ticket/Modify.html:38 html/Ticket/ModifyAll.html:93 html/Ticket/ModifyLinks.html:38 html/Ticket/ModifyPeople.html:37 +#: 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 msgid "Save Changes" msgstr "å„²å˜æ›´æ”¹" -#: NOT FOUND IN SOURCE +#: html/User/Prefs.html:179 +msgid "Save Preferences" +msgstr "儲å˜å好" + +#: html/Ticket/Elements/PreviewScrips:124 msgid "Save changes" msgstr "å„²å˜æ›´æ”¹" -#: html/Admin/Global/Scrip.html:48 html/Admin/Queues/Scrip.html:54 -#. ($QueueObj->id) +#: lib/RT/SavedSearch.pm:162 +#. ($name) +msgid "Saved search %1" +msgstr "" + +#: html/Search/Elements/EditSearches:46 +msgid "Saved searches" +msgstr "已儲å˜çš„æŸ¥è©¢" + +#: html/Admin/Elements/ListGlobalScrips:61 html/Admin/Global/Scrip.html:70 html/Admin/Queues/Scrip.html:76 +#. ($scrip->Id) +#. ($id) #. ($ARGS{'id'}) msgid "Scrip #%1" msgstr "手續 #%1" -#: html/Edit/Global/Scrip/List:9 html/Edit/Global/Scrip/Top:41 +#: NOT FOUND IN SOURCE msgid "Scrip Action" msgstr "訊æ¯é€šçŸ¥å‹•作" -#: html/Edit/Global/Scrip/List:8 html/Edit/Global/Scrip/Top:15 +#: NOT FOUND IN SOURCE msgid "Scrip Condition" msgstr "訊æ¯é€šçŸ¥æ¢ä»¶" -#: lib/RT/Scrip_Overlay.pm:175 +#: lib/RT/Scrip_Overlay.pm:205 msgid "Scrip Created" msgstr "手續新增完畢" -#: html/Edit/Global/Scrip/List:7 html/Edit/Global/Scrip/Top:9 +#: html/Admin/Elements/EditScrip:52 +msgid "Scrip Fields" +msgstr "手續欄ä½" + +#: NOT FOUND IN SOURCE msgid "Scrip Name" msgstr "訊æ¯å稱" -#: html/Admin/Elements/EditScrips:83 +#: html/Admin/Elements/EditScrips:107 msgid "Scrip deleted" msgstr "手續刪除完畢" -#: html/Admin/Elements/QueueTabs:45 html/Admin/Elements/SystemTabs:32 html/Admin/Global/index.html:40 +#: html/Admin/Elements/QueueTabs:67 html/Admin/Elements/SystemTabs:54 html/Admin/Global/index.html:62 msgid "Scrips" msgstr "手續" -#: html/Edit/Global/autohandler:9 html/Edit/Queues/autohandler:20 +#: NOT FOUND IN SOURCE msgid "Scrips " msgstr "訊æ¯é€šçŸ¥" @@ -4876,11 +5949,11 @@ msgstr "訊æ¯é€šçŸ¥" msgid "Scrips for %1\\n" msgstr "%1 的手續\\n" -#: html/Admin/Queues/Scrips.html:33 +#: html/Admin/Queues/Scrips.html:55 msgid "Scrips which apply to all queues" msgstr "é©ç”¨æ–¼æ‰€æœ‰è¡¨å–®çš„æ‰‹çºŒ" -#: html/Edit/Elements/104Buttons:75 html/Elements/SimpleSearch:26 html/Search/Elements/PickRestriction:125 html/Ticket/Elements/Tabs:158 html/Work/Elements/Tab:45 html/Work/Search/PickRestriction:102 +#: html/Elements/SimpleSearch:48 html/Search/Build.html:112 msgid "Search" msgstr "查詢" @@ -4888,79 +5961,148 @@ msgstr "查詢" msgid "Search Criteria" msgstr "查詢æ¢ä»¶" -#: html/Approvals/Elements/PendingMyApproval:38 +#: lib/RT/SavedSearch.pm:116 +msgid "Search attribute load failure" +msgstr "" + +#: html/Approvals/Elements/PendingMyApproval:60 msgid "Search for approvals" msgstr "ç°½æ ¸å–®æŸ¥è©¢" -#: html/Edit/Global/Workflow/Owner.html:31 +#: lib/RT/SavedSearch.pm:194 +#. ($msg) +msgid "Search update: %1" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "Searches can't be associated with that kind of object" +msgstr "ä¸èƒ½å°æ¤é¡žç‰©ä»¶é€²è¡ŒæŸ¥è©¢" + +#: NOT FOUND IN SOURCE msgid "Second-" msgstr "二" -#: html/Edit/Users/Info:40 +#: NOT FOUND IN SOURCE msgid "Second-level Users" msgstr "二階主管員工" -#: bin/rt-crontool:187 +#: bin/rt-crontool:213 msgid "Security:" msgstr "安全性:" -#: lib/RT/Queue_Overlay.pm:66 +#: lib/RT/CustomField_Overlay.pm:100 +msgid "See custom fields" +msgstr "查閱自訂欄ä½" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "See exact outgoing email messages and their recipeients" +msgstr "查閱é€å‡ºçš„é›»åéƒµä»¶åŠæ”¶ä»¶äºº" + +#: lib/RT/Queue_Overlay.pm:105 +msgid "See ticket private commentary" +msgstr "查閱申請單內的ç§äººè©•è«–" + +#: lib/RT/Queue_Overlay.pm:104 +msgid "See ticket summaries" +msgstr "查閱申請單總覽" + +#: lib/RT/CustomField_Overlay.pm:100 +msgid "SeeCustomField" +msgstr "查閱自訂欄ä½" + +#: lib/RT/Group_Overlay.pm:177 +msgid "SeeGroup" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:92 msgid "SeeQueue" msgstr "查閱表單" -#: html/Edit/Elements/ListButtons:10 +#: NOT FOUND IN SOURCE +msgid "Select" +msgstr "鏿“‡" + +#: NOT FOUND IN SOURCE msgid "Select All" msgstr "å…¨é¸" -#: html/Admin/Groups/index.html:39 +#: html/Admin/CustomFields/index.html:46 html/Admin/CustomFields/index.html:49 +msgid "Select a Custom Field" +msgstr "鏿“‡è‡ªè¨‚欄ä½" + +#: html/Admin/Groups/index.html:78 msgid "Select a group" msgstr "鏿“‡ç¾¤çµ„" -#: NOT FOUND IN SOURCE +#: html/Admin/Queues/index.html:54 msgid "Select a queue" msgstr "鏿“‡è¡¨å–®" -#: html/Work/Queues/Select.html:8 +#: html/SelfService/CreateTicketInQueue.html:48 +msgid "Select a queue for your new ticket" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "Select a queue to link to" msgstr "è«‹é¸æ“‡æ¬²é€£çµè¡¨å–®" -#: html/Admin/Users/index.html:24 html/Admin/Users/index.html:27 +#: html/Admin/Users/index.html:46 html/Admin/Users/index.html:49 html/Admin/Users/index.html:52 msgid "Select a user" msgstr "鏿“‡ä½¿ç”¨è€…" -#: html/Admin/Global/CustomField.html:37 html/Admin/Global/CustomFields.html:35 +#: html/Admin/Elements/CustomFieldTabs:90 msgid "Select custom field" msgstr "鏿“‡è‡ªè¨‚欄ä½" -#: html/Admin/Elements/GroupTabs:51 html/User/Elements/GroupTabs:49 +#: html/Admin/Global/CustomFields/index.html:70 +msgid "Select custom fields for all user groups" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:65 +msgid "Select custom fields for all users" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:76 +msgid "Select custom fields for tickets in all queues" +msgstr "" + +#: html/Admin/Global/CustomFields/index.html:83 +msgid "Select custom fields for transactions on tickets in all queues" +msgstr "" + +#: html/Admin/Elements/GroupTabs:75 html/User/Elements/GroupTabs:71 msgid "Select group" msgstr "鏿“‡ç¾¤çµ„" -#: lib/RT/CustomField_Overlay.pm:421 +#: lib/RT/CustomField_Overlay.pm:59 msgid "Select multiple values" msgstr "鏿“‡å¤šé‡é …ç›®" -#: lib/RT/CustomField_Overlay.pm:418 +#: lib/RT/CustomField_Overlay.pm:60 msgid "Select one value" msgstr "鏿“‡å–®ä¸€é …ç›®" -#: html/Admin/Elements/QueueTabs:66 +#: html/Admin/Elements/QueueTabs:92 msgid "Select queue" msgstr "鏿“‡è¡¨å–®" -#: html/Admin/Global/Scrip.html:36 html/Admin/Global/Scrips.html:35 html/Admin/Queues/Scrip.html:39 html/Admin/Queues/Scrips.html:51 +#: 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 "鏿“‡æ‰‹çºŒ" -#: html/Admin/Global/Template.html:56 html/Admin/Global/Templates.html:35 html/Admin/Queues/Template.html:54 html/Admin/Queues/Templates.html:46 +#: 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 "鏿“‡ç¯„本" -#: html/Admin/Elements/UserTabs:48 +#: lib/RT/CustomField_Overlay.pm:61 +msgid "Select up to %1 values" +msgstr "鏿“‡æœ€å¤š %1 個值" + +#: html/Admin/Elements/UserTabs:75 msgid "Select user" msgstr "鏿“‡ä½¿ç”¨è€…" -#: html/Admin/Global/Workflow.html:57 html/Admin/Global/Workflows.html:36 html/Admin/Queues/Workflow.html:54 html/Admin/Queues/Workflows.html:47 +#: NOT FOUND IN SOURCE msgid "Select workflow" msgstr "鏿“‡æµç¨‹" @@ -4968,15 +6110,23 @@ msgstr "鏿“‡æµç¨‹" msgid "SelectExternal" msgstr "系統é¸é …" -#: lib/RT/CustomField_Overlay.pm:35 +#: NOT FOUND IN SOURCE msgid "SelectMultiple" msgstr "多é‡é¸é …" -#: lib/RT/CustomField_Overlay.pm:34 +#: NOT FOUND IN SOURCE msgid "SelectSingle" msgstr "單一é¸é …" -#: html/Edit/Elements/PickUsers:85 html/Edit/Users/Add.html:78 +#: html/Admin/Elements/EditCustomFields:58 +msgid "Selected Custom Fields" +msgstr "å·²é¸å–的自訂欄ä½" + +#: html/Admin/CustomFields/Objects.html:59 +msgid "Selected objects" +msgstr "å·²é¸å–的物件" + +#: NOT FOUND IN SOURCE msgid "Selected users:" msgstr "新增å°è±¡ï¼š" @@ -4984,39 +6134,47 @@ msgstr "新增å°è±¡ï¼š" msgid "Self Service" msgstr "自助æœå‹™" -#: etc/initialdata.zh:131 etc/initialdata:113 +#: etc/initialdata:121 msgid "Send mail to all watchers" msgstr "寄信給所有視察員" -#: etc/initialdata.zh:127 etc/initialdata:109 +#: etc/initialdata:117 msgid "Send mail to all watchers as a \"comment\"" msgstr "以評論方å¼å¯„信給所有視察員" -#: etc/initialdata.zh:122 etc/initialdata:104 +#: etc/initialdata:112 msgid "Send mail to requestors and Ccs" msgstr "寄信給申請人åŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:117 etc/initialdata:99 +#: etc/initialdata:107 msgid "Send mail to requestors and Ccs as a comment" msgstr "以評論方å¼å¯„信給申請人åŠå‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:96 etc/initialdata:78 +#: etc/initialdata:78 msgid "Sends a message to the requestors" msgstr "寄信給申請人" -#: etc/initialdata.zh:135 etc/initialdata.zh:139 etc/initialdata:117 etc/initialdata:121 +#: etc/initialdata:125 etc/initialdata:129 msgid "Sends mail to explicitly listed Ccs and Bccs" msgstr "寄信給特定的副本åŠå¯†ä»¶å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:112 etc/initialdata:94 +#: etc/initialdata:94 etc/upgrade/3.1.17/content:7 +msgid "Sends mail to the Ccs" +msgstr "寄信給副本收件人" + +#: etc/initialdata:90 etc/upgrade/3.1.17/content:3 +msgid "Sends mail to the Ccs as a comment" +msgstr "以評論方å¼å¯„信給副本收件人" + +#: etc/initialdata:102 msgid "Sends mail to the administrative Ccs" msgstr "寄信給管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:108 etc/initialdata:90 +#: etc/initialdata:98 msgid "Sends mail to the administrative Ccs as a comment" msgstr "以評論寄信給管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:100 etc/initialdata.zh:104 etc/initialdata:82 etc/initialdata:86 +#: etc/initialdata:82 etc/initialdata:86 msgid "Sends mail to the owner" msgstr "寄信給申請人" @@ -5024,7 +6182,7 @@ msgstr "寄信給申請人" msgid "Sep" msgstr "乿œˆ" -#: lib/RT/Date.pm:419 +#: lib/RT/Date.pm:445 msgid "Sep." msgstr "09" @@ -5032,75 +6190,103 @@ msgstr "09" msgid "September" msgstr "乿œˆ" -#: html/Edit/Users/Info:38 +#: NOT FOUND IN SOURCE +msgid "Setting %1's 'Disabled' property to %2" +msgstr "%1 的「åœç”¨ã€å±¬æ€§å·²è¨ç‚º %2" + +#: NOT FOUND IN SOURCE msgid "Shift Type" msgstr "ç別屬性" -#: NOT FOUND IN SOURCE +#: html/Ticket/Elements/ShowTransaction:150 +msgid "Show" +msgstr "顯示" + +#: html/Approvals/index.html:52 +msgid "Show Approvals" +msgstr "é¡¯ç¤ºå¾…ç°½æ ¸ç”³è«‹å–®" + +#: html/Search/Elements/EditFormat:56 +msgid "Show Columns" +msgstr "顯示欄ä½" + +#: html/Ticket/Elements/Tabs:201 msgid "Show Results" msgstr "é¡¯ç¤ºçµæžœ" -#: html/Approvals/Elements/PendingMyApproval:43 +#: html/Approvals/Elements/PendingMyApproval:65 msgid "Show approved requests" msgstr "é¡¯ç¤ºå·²æ‰¹å‡†çš„ç°½æ ¸å–®" -#: html/Ticket/Create.html:143 html/Ticket/Create.html:33 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show basics" msgstr "顯示基本資訊" -#: html/Approvals/Elements/PendingMyApproval:44 +#: html/Approvals/Elements/PendingMyApproval:66 msgid "Show denied requests" msgstr "顯示已é§å›žçš„ç°½æ ¸å–®" -#: html/Ticket/Create.html:143 html/Ticket/Create.html:33 +#: html/Ticket/Create.html:174 html/Ticket/Create.html:55 msgid "Show details" msgstr "顯示細節" -#: html/Approvals/Elements/PendingMyApproval:42 +#: html/Approvals/Elements/PendingMyApproval:64 msgid "Show pending requests" msgstr "顯示待處ç†çš„ç°½æ ¸å–®" -#: html/Approvals/Elements/PendingMyApproval:45 +#: html/Approvals/Elements/PendingMyApproval:67 msgid "Show requests awaiting other approvals" msgstr "é¡¯ç¤ºå°šå¾…ä»–äººæ‰¹å‡†çš„ç°½æ ¸å–®" -#: lib/RT/Queue_Overlay.pm:80 +#: NOT FOUND IN SOURCE msgid "Show ticket private commentary" msgstr "顯示申請單內的ç§äººè©•è«–" -#: lib/RT/Queue_Overlay.pm:78 +#: NOT FOUND IN SOURCE msgid "Show ticket summaries" msgstr "顯示申請單摘è¦" -#: lib/RT/Queue_Overlay.pm:68 +#: lib/RT/Queue_Overlay.pm:94 msgid "ShowACL" msgstr "é¡¯ç¤ºæ¬Šé™æ¸…å–®" -#: lib/RT/Queue_Overlay.pm:77 +#: lib/RT/System.pm:86 +msgid "ShowConfigTab" +msgstr "" + +#: lib/RT/Queue_Overlay.pm:107 +msgid "ShowOutgoingEmail" +msgstr "顯示寄é€éƒµä»¶" + +#: lib/RT/Group_Overlay.pm:176 +msgid "ShowSavedSearches" +msgstr "顯示已儲å˜çš„æŸ¥è©¢" + +#: lib/RT/Queue_Overlay.pm:103 msgid "ShowScrips" msgstr "顯示手續" -#: lib/RT/Queue_Overlay.pm:74 +#: lib/RT/Queue_Overlay.pm:100 msgid "ShowTemplate" msgstr "顯示範本" -#: lib/RT/Queue_Overlay.pm:78 +#: lib/RT/Queue_Overlay.pm:104 msgid "ShowTicket" msgstr "顯示申請單" -#: lib/RT/Queue_Overlay.pm:80 +#: lib/RT/Queue_Overlay.pm:105 msgid "ShowTicketComments" msgstr "顯示申請單的評論" -#: lib/RT/Queue_Overlay.pm:81 +#: lib/RT/Queue_Overlay.pm:108 msgid "Sign up as a ticket Requestor or ticket or queue Cc" msgstr "登記æˆç‚ºç”³è«‹äººæˆ–副本收件人" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:109 msgid "Sign up as a ticket or queue AdminCc" msgstr "登記æˆç‚ºç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: html/Admin/Elements/ModifyUser:38 html/Admin/Users/Modify.html:190 html/Admin/Users/Prefs.html:31 html/User/Prefs.html:111 html/Work/Preferences/Info:111 +#: html/Admin/Users/Modify.html:229 html/User/Prefs.html:167 msgid "Signature" msgstr "ç°½åæª”" @@ -5108,15 +6294,23 @@ msgstr "ç°½åæª”" msgid "Signed in as %1" msgstr "使用者:%1" -#: html/Admin/Elements/SelectSingleOrMultiple:25 +#: html/Admin/Elements/SelectSingleOrMultiple:47 msgid "Single" msgstr "單一" -#: html/Edit/Elements/104Top:21 html/Elements/Header:50 +#: html/Search/Elements/EditFormat:75 +msgid "Size" +msgstr "" + +#: html/Elements/Header:85 msgid "Skip Menu" msgstr "ç•¥éŽé¸å–®" -#: html/Admin/Elements/AddCustomFieldValue:27 +#: html/Search/Elements/EditFormat:78 +msgid "Small" +msgstr "" + +#: html/Admin/Elements/AddCustomFieldValue:49 html/Admin/Elements/EditCustomFieldValues:54 msgid "Sort" msgstr "é †åº" @@ -5124,7 +6318,7 @@ msgstr "é †åº" msgid "Sort key" msgstr "æŽ’åºæ–¹å¼" -#: html/Search/Elements/PickRestriction:108 html/Work/Search/PickRestriction:89 +#: NOT FOUND IN SOURCE msgid "Sort results by" msgstr "çµæžœæŽ’åºæ–¹å¼" @@ -5132,19 +6326,19 @@ msgstr "çµæžœæŽ’åºæ–¹å¼" msgid "SortOrder" msgstr "排åºé †åº" -#: html/Work/Elements/List:8 html/Work/Elements/MyApprovals:11 +#: html/Admin/Elements/EditScrip:87 msgid "Stage" msgstr "é—œå¡" -#: html/Edit/Global/Workflow/Top:8 +#: NOT FOUND IN SOURCE msgid "Stage Action" msgstr "é—œå¡é‹è¡Œå‹•作" -#: html/Edit/Global/Workflow/Top:5 +#: NOT FOUND IN SOURCE msgid "Stage Condition" msgstr "é—œå¡é‹è¡Œæ¢ä»¶" -#: html/Work/Elements/Quicksearch:17 +#: NOT FOUND IN SOURCE msgid "Stalled" msgstr "延宕" @@ -5152,7 +6346,7 @@ msgstr "延宕" msgid "Start page" msgstr "首é " -#: html/Elements/SelectDateType:26 html/Ticket/Elements/EditDates:31 html/Ticket/Elements/ShowDates:34 +#: html/Elements/SelectDateType:48 html/Ticket/Elements/EditDates:53 html/Ticket/Elements/ShowDates:56 msgid "Started" msgstr "實際起始日" @@ -5160,7 +6354,7 @@ msgstr "實際起始日" msgid "Started date '%1' could not be parsed" msgstr "無法解讀起始日期 '%1" -#: html/Elements/SelectDateType:30 html/Ticket/Create.html:165 html/Ticket/Elements/EditDates:26 html/Ticket/Elements/ShowDates:30 +#: html/Elements/SelectDateType:52 html/Ticket/Create.html:196 html/Ticket/Elements/EditDates:48 html/Ticket/Elements/ShowDates:52 msgid "Starts" msgstr "應起始日" @@ -5172,20 +6366,19 @@ msgstr "應起始日" msgid "Starts date '%1' could not be parsed" msgstr "無法解讀起始日期 '%1" -#: html/Admin/Elements/ModifyUser:81 html/Admin/Users/Modify.html:137 html/User/Prefs.html:93 html/Work/Preferences/Info:83 +#: html/Admin/Users/Modify.html:162 html/User/Prefs.html:145 msgid "State" msgstr "å·ž" -#: html/Elements/MyRequests:30 html/Elements/MyTickets:30 html/Search/Elements/PickRestriction:73 html/SelfService/Elements/MyRequests:28 html/SelfService/Update.html:30 html/Ticket/Create.html:41 html/Ticket/Elements/EditBasics:37 html/Ticket/Elements/ShowBasics:30 html/Ticket/Update.html:59 html/Work/Elements/List:15 html/Work/Elements/MyRequests:18 html/Work/Elements/MyTickets:18 html/Work/Search/PickRestriction:54 html/Work/Tickets/Update.html:22 lib/RT/Ticket_Overlay.pm:1182 lib/RT/Tickets_Overlay.pm:908 +#: 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 msgid "Status" msgstr "ç¾æ³" -#: etc/initialdata.zh:317 etc/initialdata:294 +#: etc/initialdata:309 msgid "Status Change" msgstr "ç¾æ³æ”¹è®Šæ™‚" -#: lib/RT/Transaction_Overlay.pm:528 -#. ($self->loc($self->OldValue), $self->loc($self->NewValue)) +#: NOT FOUND IN SOURCE msgid "Status changed from %1 to %2" msgstr "ç¾æ³å¾ž %1 改為 %2" @@ -5193,37 +6386,45 @@ msgstr "ç¾æ³å¾ž %1 改為 %2" msgid "StatusChange" msgstr "ç¾æ³æ”¹è®Šæ™‚" -#: html/Ticket/Elements/Tabs:146 +#: html/Ticket/Elements/Tabs:170 msgid "Steal" msgstr "å¼·åˆ¶æ›´æ›æ‰¿è¾¦äºº" -#: lib/RT/Queue_Overlay.pm:91 +#: lib/RT/Queue_Overlay.pm:118 msgid "Steal tickets" msgstr "強制承辦申請單" -#: lib/RT/Queue_Overlay.pm:91 +#: lib/RT/Queue_Overlay.pm:118 msgid "StealTicket" msgstr "強制承辦申請單" -#: lib/RT/Transaction_Overlay.pm:587 +#: lib/RT/Transaction_Overlay.pm:667 #. ($Old->Name) +msgid "Stolen from %1" +msgstr "承辦人從 %1 強制更æ›" + +#: NOT FOUND IN SOURCE msgid "Stolen from %1 " -msgstr "被 %1 å¼·åˆ¶æ›´æ› " +msgstr "承辦人從 %1 å¼·åˆ¶æ›´æ› " + +#: html/Search/Elements/EditFormat:81 +msgid "Style" +msgstr "" -#: html/Edit/Groups/Member:69 +#: NOT FOUND IN SOURCE msgid "Subgroup" msgstr "å群組" -#: html/Elements/MyRequests:28 html/Elements/MyTickets:28 html/Search/Bulk.html:135 html/Search/Elements/PickRestriction:42 html/SelfService/Create.html:56 html/SelfService/Elements/MyRequests:27 html/SelfService/Update.html:31 html/Ticket/Create.html:83 html/Ticket/Elements/EditBasics:27 html/Ticket/ModifyAll.html:78 html/Ticket/Update.html:75 html/Work/Elements/MyApprovals:9 html/Work/Elements/MyRequests:16 html/Work/Elements/MyTickets:16 html/Work/Search/Bulk.html:87 html/Work/Search/PickRestriction:22 html/Work/Tickets/Create.html:131 html/Work/Tickets/Elements/ShowBasics:36 lib/RT/Ticket_Overlay.pm:1178 lib/RT/Tickets_Overlay.pm:987 +#: 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 msgid "Subject" msgstr "主題" -#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/Transaction_Overlay.pm:609 +#: docs/design_docs/string-extraction-guide.txt:89 lib/RT/StyleGuide.pod:815 lib/RT/Transaction_Overlay.pm:689 #. ($self->Data) msgid "Subject changed to %1" msgstr "標題已改為 %1" -#: html/Elements/Submit:58 html/Work/Search/Bulk.html:103 +#: html/Elements/Submit:97 msgid "Submit" msgstr "é€å‡º" @@ -5231,7 +6432,7 @@ msgstr "é€å‡º" msgid "Submit Workflow" msgstr "é€å‡ºæµç¨‹" -#: lib/RT/Group_Overlay.pm:748 +#: lib/RT/Group_Overlay.pm:782 msgid "Succeeded" msgstr "è¨å®šæˆåŠŸ" @@ -5239,23 +6440,39 @@ msgstr "è¨å®šæˆåŠŸ" msgid "Sun" msgstr "星期日" -#: lib/RT/Date.pm:394 +#: lib/RT/Date.pm:419 msgid "Sun." msgstr "星期日" -#: html/Edit/Users/System:17 lib/RT/System.pm:53 +#: lib/RT/System.pm:76 msgid "SuperUser" msgstr "系統管ç†å“¡" -#: html/User/Elements/DelegateRights:76 +#: NOT FOUND IN SOURCE +msgid "Sync now" +msgstr "åŸ·è¡ŒåŒæ¥" + +#: NOT FOUND IN SOURCE +msgid "Sync104HRMS" +msgstr "è‡ªå‹•åŒæ¥104HRMS" + +#: NOT FOUND IN SOURCE +msgid "Synchronizing HRMS data. This may take a while..." +msgstr "æ£åœ¨åŒæ¥åŒ– HRMS 人事系統資料。請ç¨å¾…..." + +#: html/User/Elements/DelegateRights:98 msgid "System" msgstr "系統" -#: html/Edit/Global/Scrip/Top:18 html/Edit/Global/Scrip/Top:44 +#: html/Admin/Elements/ToolTabs:54 html/Admin/Tools/Configuration.html:48 +msgid "System Configuration" +msgstr "系統è¨å®š" + +#: NOT FOUND IN SOURCE msgid "System Defined" msgstr "系統定義" -#: html/Admin/Elements/SelectRights:80 lib/RT/ACE_Overlay.pm:566 lib/RT/Interface/Web.pm:793 lib/RT/Interface/Web.pm:826 x:796 x:829 +#: 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 "系統錯誤" @@ -5267,15 +6484,24 @@ msgstr "系統錯誤。è¨å®šæ¬Šé™å¤±æ•—。" msgid "System Error. right not granted" msgstr "系統錯誤。è¨å®šæ¬Šé™å¤±æ•—。" -#: html/Edit/Users/index.html:122 +#: lib/RT/Transaction_Overlay.pm:215 lib/RT/Transaction_Overlay.pm:221 +#. ($msg) +msgid "System Error: %1" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "System Rights" msgstr "系統權é™" -#: lib/RT/ACE_Overlay.pm:615 +#: html/Admin/Tools/index.html:47 +msgid "System Tools" +msgstr "系統工具" + +#: lib/RT/ACE_Overlay.pm:634 msgid "System error. Right not delegated." msgstr "系統錯誤。權é™ä»£ç†å¤±æ•—。" -#: lib/RT/ACE_Overlay.pm:145 lib/RT/ACE_Overlay.pm:222 lib/RT/ACE_Overlay.pm:305 lib/RT/ACE_Overlay.pm:897 +#: 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 "系統錯誤。è¨å®šæ¬Šé™å¤±æ•—。" @@ -5283,7 +6509,7 @@ msgstr "系統錯誤。è¨å®šæ¬Šé™å¤±æ•—。" msgid "System error. Unable to grant rights." msgstr "系統錯誤。無法è¨å®šæ¬Šé™ã€‚" -#: html/Admin/Global/GroupRights.html:34 html/Admin/Groups/GroupRights.html:36 html/Admin/Queues/GroupRights.html:35 +#: 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 "系統群組" @@ -5291,11 +6517,11 @@ msgstr "系統群組" msgid "SystemInternal" msgstr "系統內部用" -#: etc/initialdata.zh:59 etc/initialdata.zh:65 etc/initialdata.zh:71 etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 +#: etc/initialdata:41 etc/initialdata:47 etc/initialdata:53 msgid "SystemRolegroup for internal use" msgstr "內部使用的系統角色群組" -#: lib/RT/CurrentUser.pm:319 +#: lib/RT/CurrentUser.pm:358 msgid "TEST_STRING" msgstr "TEST_STRING" @@ -5303,48 +6529,52 @@ msgstr "TEST_STRING" msgid "TabbedUI" msgstr "é 籤介é¢" -#: html/Ticket/Elements/Tabs:142 +#: html/Elements/MyRequests:50 html/Search/Elements/EditFormat:72 html/Ticket/Elements/Tabs:166 msgid "Take" msgstr "å—ç†" -#: lib/RT/Queue_Overlay.pm:89 +#: lib/RT/Queue_Overlay.pm:116 msgid "Take tickets" msgstr "自行承辦申請單" -#: lib/RT/Queue_Overlay.pm:89 +#: lib/RT/Queue_Overlay.pm:116 msgid "TakeTicket" msgstr "自行承辦申請單" -#: lib/RT/Transaction_Overlay.pm:573 +#: lib/RT/Transaction_Overlay.pm:652 msgid "Taken" msgstr "å·²å—ç†" -#: html/Admin/Elements/EditScrip:80 +#: NOT FOUND IN SOURCE +msgid "Task" +msgstr "å·¥ä½œäº‹é …" + +#: html/Admin/Elements/EditScrip:79 html/Tools/Offline.html:78 msgid "Template" msgstr "範本" -#: html/Admin/Global/Template.html:90 html/Admin/Queues/Template.html:89 +#: html/Admin/Global/Template.html:112 html/Admin/Queues/Template.html:113 #. ($TemplateObj->Id()) msgid "Template #%1" msgstr "範本 #%1" -#: html/Edit/Global/Template/List:9 html/Edit/Global/Template/Top:17 +#: NOT FOUND IN SOURCE msgid "Template Content" msgstr "通知範本內容" -#: html/Edit/Global/Template/List:8 html/Edit/Global/Template/Top:13 +#: NOT FOUND IN SOURCE msgid "Template Description" msgstr "通知範本æè¿°" -#: html/Edit/Global/Template/List:7 html/Edit/Global/Template/Top:9 +#: NOT FOUND IN SOURCE msgid "Template Name" msgstr "通知範本å稱" -#: html/Admin/Elements/EditTemplates:88 +#: html/Admin/Elements/EditTemplates:110 msgid "Template deleted" msgstr "範本已刪除" -#: lib/RT/Scrip_Overlay.pm:152 +#: lib/RT/Scrip_Overlay.pm:181 msgid "Template not found" msgstr "找ä¸åˆ°ç¯„本" @@ -5352,15 +6582,15 @@ msgstr "找ä¸åˆ°ç¯„本" msgid "Template not found\\n" msgstr "找ä¸åˆ°ç¯„本\\n" -#: lib/RT/Template_Overlay.pm:352 +#: lib/RT/Template_Overlay.pm:376 msgid "Template parsed" msgstr "範本剖æžå®Œç•¢" -#: html/Admin/Elements/QueueTabs:48 html/Admin/Elements/SystemTabs:35 html/Admin/Global/index.html:44 +#: html/Admin/Elements/QueueTabs:70 html/Admin/Elements/SystemTabs:57 html/Admin/Global/index.html:66 msgid "Templates" msgstr "範本" -#: html/Edit/Global/autohandler:8 html/Edit/Queues/autohandler:19 +#: NOT FOUND IN SOURCE msgid "Templates " msgstr "通知範本" @@ -5368,47 +6598,50 @@ msgstr "通知範本" msgid "Templates for %1\\n" msgstr "找ä¸åˆ° %1 的範本\\n" -#: lib/RT/Interface/Web.pm:894 x:897 +#: NOT FOUND IN SOURCE +msgid "Text" +msgstr "æ–‡å—" + +#: lib/RT/CustomField_Overlay.pm:877 lib/RT/Record.pm:931 msgid "That is already the current value" msgstr "å·²ç¶“æ˜¯ç›®å‰æ¬„ä½çš„值" -#: lib/RT/CustomField_Overlay.pm:242 +#: lib/RT/CustomField_Overlay.pm:407 msgid "That is not a value for this custom field" msgstr "這䏿˜¯è©²è‡ªè¨‚欄ä½çš„值" -#: lib/RT/Ticket_Overlay.pm:1899 +#: lib/RT/Ticket_Overlay.pm:1955 msgid "That is the same value" msgstr "åŒæ¨£çš„值" -#: lib/RT/ACE_Overlay.pm:287 lib/RT/ACE_Overlay.pm:596 +#: lib/RT/ACE_Overlay.pm:306 lib/RT/ACE_Overlay.pm:615 msgid "That principal already has that right" msgstr "é€™é …å–®ä½å·²ç¶“æ“æœ‰è©²æ¬Šé™" -#: lib/RT/Queue_Overlay.pm:633 +#: lib/RT/Queue_Overlay.pm:750 #. ($args{'Type'}) msgid "That principal is already a %1 for this queue" msgstr "é€™é …å–®ä½å·²ç¶“是這個表單的 %1" -#: lib/RT/Ticket_Overlay.pm:1433 +#: lib/RT/Ticket_Overlay.pm:1396 #. ($self->loc($args{'Type'})) msgid "That principal is already a %1 for this ticket" msgstr "é€™é …å–®ä½å·²ç¶“是這份申請單的 %1" -#: lib/RT/Queue_Overlay.pm:732 +#: lib/RT/Queue_Overlay.pm:849 #. ($args{'Type'}) msgid "That principal is not a %1 for this queue" msgstr "é€™é …å–®ä½ä¸æ˜¯é€™å€‹è¡¨å–®çš„ %1" -#: lib/RT/Ticket_Overlay.pm:1550 -#. ($args{'Type'}) +#: NOT FOUND IN SOURCE msgid "That principal is not a %1 for this ticket" msgstr "é€™é …å–®ä½ä¸æ˜¯é€™ä»½ç”³è«‹å–®çš„ %1" -#: lib/RT/Ticket_Overlay.pm:1895 +#: lib/RT/Ticket_Overlay.pm:1951 msgid "That queue does not exist" msgstr "æ¤è¡¨å–®ä¸å˜åœ¨" -#: lib/RT/Ticket_Overlay.pm:3237 +#: lib/RT/Ticket_Overlay.pm:3189 msgid "That ticket has unresolved dependencies" msgstr "這份申請單有尚未解決的附屬申請單" @@ -5416,27 +6649,27 @@ msgstr "這份申請單有尚未解決的附屬申請單" msgid "That user already has that right" msgstr "ä½¿ç”¨è€…å·²å…·æœ‰è©²é …æ¬Šé™" -#: lib/RT/Ticket_Overlay.pm:3047 +#: lib/RT/Ticket_Overlay.pm:2993 msgid "That user already owns that ticket" msgstr "該使用者已經承辦這份申請單" -#: lib/RT/Ticket_Overlay.pm:3019 +#: lib/RT/Ticket_Overlay.pm:2965 msgid "That user does not exist" msgstr "使用者ä¸å˜åœ¨" -#: lib/RT/User_Overlay.pm:376 +#: lib/RT/User_Overlay.pm:390 msgid "That user is already privileged" msgstr "這å使用者已經是內部æˆå“¡" -#: lib/RT/User_Overlay.pm:397 +#: lib/RT/User_Overlay.pm:411 msgid "That user is already unprivileged" msgstr "這å使用者屬於éžå…§éƒ¨æˆå“¡ç¾¤çµ„" -#: lib/RT/User_Overlay.pm:389 +#: lib/RT/User_Overlay.pm:403 msgid "That user is now privileged" msgstr "ä½¿ç”¨è€…åŠ å…¥å…§éƒ¨æˆå“¡ç¾¤çµ„完畢" -#: lib/RT/User_Overlay.pm:410 +#: lib/RT/User_Overlay.pm:424 msgid "That user is now unprivileged" msgstr "這åä½¿ç”¨è€…å·²åŠ å…¥éžå…§éƒ¨æˆå“¡ç¾¤çµ„" @@ -5444,71 +6677,83 @@ msgstr "這åä½¿ç”¨è€…å·²åŠ å…¥éžå…§éƒ¨æˆå“¡ç¾¤çµ„" msgid "That user is now unprivilegedileged" msgstr "這åä½¿ç”¨è€…å·²åŠ å…¥éžå…§éƒ¨æˆå“¡ç¾¤çµ„" -#: lib/RT/Ticket_Overlay.pm:3040 +#: lib/RT/Ticket_Overlay.pm:2986 msgid "That user may not own tickets in that queue" msgstr "使用者å¯èƒ½æ²’有承辦表單裡的申請單" -#: lib/RT/Link_Overlay.pm:205 +#: lib/RT/Link_Overlay.pm:234 msgid "That's not a numerical id" msgstr "這䏿˜¯ä¸€å€‹æ•¸å—編號" -#: html/SelfService/Display.html:31 html/Ticket/Create.html:149 html/Ticket/Elements/ShowSummary:27 +#: html/SelfService/Display.html:53 html/Ticket/Create.html:180 html/Ticket/Elements/ShowSummary:49 msgid "The Basics" msgstr "基本資訊" -#: lib/RT/ACE_Overlay.pm:87 +#: lib/RT/ACE_Overlay.pm:113 msgid "The CC of a ticket" msgstr "申請單的副本收件人" -#: lib/RT/ACE_Overlay.pm:88 +#: lib/RT/ACE_Overlay.pm:114 msgid "The administrative CC of a ticket" msgstr "申請單的管ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: lib/RT/Ticket_Overlay.pm:2226 +#: NOT FOUND IN SOURCE msgid "The comment has been recorded" msgstr "評論已被紀錄" -#: bin/rt-crontool:197 +#: 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 "下列命令會找到 'general' 表單內所有é‹ä½œä¸çš„ç”³è«‹å–®ï¼Œä¸¦å°‡å…¶ä¸ 4 å°æ™‚內未處ç†çš„申請單優先程度è¨ç‚º 99:" -#: bin/rt-commit-handler:755 bin/rt-commit-handler:765 +#: NOT FOUND IN SOURCE msgid "The following commands were not proccessed:\\n\\n" msgstr "以下命令未被執行:\\n\\n" -#: lib/RT/Interface/Web.pm:897 x:900 +#: lib/RT/Record.pm:934 msgid "The new value has been set." msgstr "新的欄ä½å€¼è¨å®šå®Œæˆã€‚" -#: lib/RT/ACE_Overlay.pm:85 +#: lib/RT/ACE_Overlay.pm:111 msgid "The owner of a ticket" msgstr "申請單的承辦人" -#: lib/RT/ACE_Overlay.pm:86 +#: lib/RT/ACE_Overlay.pm:112 msgid "The requestor of a ticket" msgstr "申請單的申請人" -#: html/Admin/Elements/EditUserComments:25 +#: html/Admin/Elements/EditUserComments:47 msgid "These comments aren't generally visible to the user" msgstr "è©²ä½¿ç”¨è€…ä¸æœƒçœ‹è¦‹é€™äº›è©•è«–" -#: html/Edit/Global/Workflow/Owner.html:32 +#: NOT FOUND IN SOURCE msgid "Third-" msgstr "三" +#: lib/RT/CustomField_Overlay.pm:912 +msgid "This custom field does not apply to that object" +msgstr "æ¤è‡ªè¨‚欄ä½ä¸é©ç”¨æ–¼è©²ç‰©ä»¶" + +#: html/Admin/Tools/Configuration.html:50 +msgid "This feature is only available to system administrators" +msgstr "æ¤é …功能僅é™ç³»çµ±ç®¡ç†å“¡ä½¿ç”¨" + +#: html/Ticket/Elements/PreviewScrips:93 +msgid "This message will be sent to..." +msgstr "æ¤è¨Šæ¯æœƒå¯„給..." + #: NOT FOUND IN SOURCE msgid "This ticket %1 %2 (%3)\\n" msgstr "申請單 %1 %2 (%3)\\n" -#: bin/rt-crontool:188 +#: bin/rt-crontool:214 msgid "This tool allows the user to run arbitrary perl modules from within RT." msgstr "æ¤å·¥å…·ç¨‹å¼æœƒè®“使用者經由 RT 執行任æ„命令。" -#: lib/RT/Transaction_Overlay.pm:251 +#: lib/RT/Transaction_Overlay.pm:288 msgid "This transaction appears to have no content" msgstr "æ¤é …æ›´å‹•å ±å‘Šæ²’æœ‰å…§å®¹" -#: html/Ticket/Elements/ShowRequestor:46 +#: html/Ticket/Elements/ShowRequestor:70 #. ($rows) msgid "This user's %1 highest priority tickets" msgstr "使用者é€å‡ºçš„å‰ %1 份優先處ç†ç”³è«‹å–®" @@ -5521,11 +6766,11 @@ msgstr "使用者é€å‡ºçš„å‰ 25 份優先處ç†ç”³è«‹å–®" msgid "Thu" msgstr "星期四" -#: lib/RT/Date.pm:391 +#: lib/RT/Date.pm:416 msgid "Thu." msgstr "星期四" -#: html/Admin/Elements/ModifyTemplateAsWorkflow:163 +#: NOT FOUND IN SOURCE msgid "Ticket" msgstr "申請單" @@ -5537,41 +6782,51 @@ msgstr "申請單 # %1 %2" msgid "Ticket # %1 Jumbo update: %2" msgstr "更新申請單 # %1 的全部資訊:%2" -#: html/Ticket/ModifyAll.html:24 html/Ticket/ModifyAll.html:28 +#: html/Ticket/ModifyAll.html:46 html/Ticket/ModifyAll.html:50 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket #%1 Jumbo update: %2" msgstr "更新申請單 #%1 的全部資訊:%2" -#: html/Approvals/Elements/ShowDependency:45 +#: html/Approvals/Elements/ShowDependency:67 #. ($link->BaseObj->Id, $link->BaseObj->Subject) msgid "Ticket #%1: %2" msgstr "申請單 #%1: %2" -#: lib/RT/Ticket_Overlay.pm:605 lib/RT/Ticket_Overlay.pm:626 +#: 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) +msgid "Ticket %1" +msgstr "申請單 %1" + +#: lib/RT/Ticket_Overlay.pm:731 lib/RT/Ticket_Overlay.pm:751 #. ($self->Id, $QueueObj->Name) msgid "Ticket %1 created in queue '%2'" msgstr "申請單 #%1 æˆåŠŸæ–°å¢žæ–¼ '%2' 表單" -#: bin/rt-commit-handler:759 -#. ($Ticket->Id) +#: NOT FOUND IN SOURCE msgid "Ticket %1 loaded\\n" msgstr "載入申請單 %1\\n" -#: html/Search/Bulk.html:212 html/Work/Search/Bulk.html:169 +#: html/Search/Bulk.html:269 #. ($Ticket->Id,$_) msgid "Ticket %1: %2" msgstr "申請單 %1:%2" -#: html/Edit/Queues/Basic/Top:28 html/Edit/Queues/List:16 html/Work/Queues/List:9 +#: html/Admin/Elements/QueueTabs:74 +msgid "Ticket Custom Fields" +msgstr "申請單的自訂欄ä½" + +#: NOT FOUND IN SOURCE msgid "Ticket Due" msgstr "è¡¨å–®è™•ç†æœŸé™" -#: html/Ticket/History.html:24 html/Ticket/History.html:27 +#: html/Ticket/History.html:46 html/Ticket/History.html:49 #. ($Ticket->Id, $Ticket->Subject) msgid "Ticket History # %1 %2" msgstr "申請單處ç†ç´€éŒ„ # %1 %2" -#: html/Work/Elements/List:6 +#: NOT FOUND IN SOURCE msgid "Ticket ID" msgstr "單號" @@ -5583,31 +6838,35 @@ msgstr "申請單編號" msgid "Ticket Processing Due" msgstr "表單é‹è¡ŒæœŸé™" -#: etc/initialdata.zh:332 etc/initialdata:309 +#: etc/initialdata:324 msgid "Ticket Resolved" msgstr "申請單已解決" -#: html/Edit/Queues/Basic/Top:18 html/Edit/Queues/Category/List:6 html/Edit/Queues/Category/Top:7 html/Edit/Queues/List:7 html/Edit/Queues/index.html:31 html/Work/Delegates/List:7 html/Work/Delegates/index.html:11 html/Work/Elements/List:12 html/Work/Elements/SelectSearch:9 html/Work/Queues/List:6 html/Work/Queues/Select.html:12 html/Work/Queues/index.html:11 html/Work/Tickets/Create.html:44 html/Work/Tickets/Elements/ShowBasics:34 +#: html/Admin/Elements/GlobalCustomFieldTabs:69 html/Admin/Global/CustomFields/index.html:81 lib/RT/CustomField_Overlay.pm:1085 +msgid "Ticket Transactions" +msgstr "申請單的更動" + +#: NOT FOUND IN SOURCE msgid "Ticket Type" msgstr "表單種類" -#: html/Search/Elements/PickRestriction:62 html/Work/Search/PickRestriction:43 +#: NOT FOUND IN SOURCE msgid "Ticket attachment" msgstr "申請單附件" -#: lib/RT/Tickets_Overlay.pm:1166 +#: lib/RT/Tickets_Overlay.pm:1648 msgid "Ticket content" msgstr "申請單內容" -#: lib/RT/Tickets_Overlay.pm:1212 +#: lib/RT/Tickets_Overlay.pm:1697 msgid "Ticket content type" msgstr "申請單內容類別" -#: lib/RT/Ticket_Overlay.pm:496 lib/RT/Ticket_Overlay.pm:505 lib/RT/Ticket_Overlay.pm:515 lib/RT/Ticket_Overlay.pm:615 +#: lib/RT/Ticket_Overlay.pm:593 lib/RT/Ticket_Overlay.pm:607 lib/RT/Ticket_Overlay.pm:618 lib/RT/Ticket_Overlay.pm:739 msgid "Ticket could not be created due to an internal error" msgstr "內部錯誤,無法新增申請單" -#: lib/RT/Transaction_Overlay.pm:520 +#: NOT FOUND IN SOURCE msgid "Ticket created" msgstr "申請單新增完畢" @@ -5615,7 +6874,7 @@ msgstr "申請單新增完畢" msgid "Ticket creation failed" msgstr "申請單新增失敗" -#: lib/RT/Transaction_Overlay.pm:525 +#: NOT FOUND IN SOURCE msgid "Ticket deleted" msgstr "申請單刪除完畢" @@ -5627,29 +6886,36 @@ msgstr "找ä¸åˆ°ç”³è«‹å–®ç·¨è™Ÿ" msgid "Ticket killed" msgstr "申請單刪除完畢" +#: html/Ticket/Display.html:55 +msgid "Ticket metadata" +msgstr "申請單的æè¿°è³‡è¨Š" + #: NOT FOUND IN SOURCE msgid "Ticket not found" msgstr "找ä¸åˆ°ç”³è«‹å–®" -#: etc/initialdata.zh:318 etc/initialdata:295 +#: etc/initialdata:310 msgid "Ticket status changed" msgstr "ç”³è«‹å–®ç¾æ³å·²æ”¹è®Š" -#: html/Ticket/Update.html:38 +#: NOT FOUND IN SOURCE msgid "Ticket watchers" msgstr "申請單視察員" -#: html/Elements/Tabs:46 +#: lib/RT/Search/FromSQL.pm:83 +#. (ref $self) +msgid "TicketSQL search module" +msgstr "" + +#: html/Admin/Elements/GlobalCustomFieldTabs:64 html/Admin/Global/CustomFields/index.html:75 html/Elements/Tabs:68 lib/RT/CustomField_Overlay.pm:1084 msgid "Tickets" msgstr "申請單" -#: lib/RT/Tickets_Overlay.pm:1383 -#. ($self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 %2" msgstr "申請單 %1 %2" -#: lib/RT/Tickets_Overlay.pm:1348 -#. ($self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'})) +#: NOT FOUND IN SOURCE msgid "Tickets %1 by %2" msgstr "申請單 %1 (%2)" @@ -5661,32 +6927,35 @@ msgstr "待處ç†çš„申請單" msgid "Tickets I requested" msgstr "é€å‡ºçš„申請單" -#: html/Elements/ViewUser:25 -#. ($name) +#: NOT FOUND IN SOURCE msgid "Tickets from %1" msgstr "%1 的申請單" -#: html/Approvals/Elements/ShowDependency:26 +#: html/Approvals/Elements/ShowDependency:48 msgid "Tickets which depend on this approval:" msgstr "æ‰¹å‡†ä¹‹å¾Œï¼Œå¯æŽ¥çºŒè™•ç†ï¼š" -#: html/Ticket/Create.html:156 html/Ticket/Elements/EditBasics:47 +#: html/Search/Elements/PickBasics:148 html/Ticket/Elements/EditBasics:61 +msgid "Time Estimated" +msgstr "é 計時間" + +#: html/Search/Elements/PickBasics:149 html/Ticket/Create.html:187 html/Ticket/Elements/EditBasics:69 msgid "Time Left" msgstr "剩餘時間" -#: html/Ticket/Create.html:155 html/Ticket/Elements/EditBasics:42 +#: html/Search/Elements/PickBasics:147 html/Ticket/Create.html:186 html/Ticket/Elements/EditBasics:65 msgid "Time Worked" msgstr "è™•ç†æ™‚é–“" -#: lib/RT/Tickets_Overlay.pm:1139 +#: lib/RT/Tickets_Overlay.pm:1619 msgid "Time left" msgstr "剩餘時間" -#: html/Elements/Footer:36 +#: html/Elements/Footer:71 msgid "Time to display" msgstr "顯示時間" -#: lib/RT/Tickets_Overlay.pm:1115 +#: lib/RT/Tickets_Overlay.pm:1594 msgid "Time worked" msgstr "å·²è™•ç†æ™‚é–“" @@ -5694,48 +6963,85 @@ msgstr "å·²è™•ç†æ™‚é–“" msgid "TimeLeft" msgstr "剩餘時間" -#: lib/RT/Ticket_Overlay.pm:1183 +#: lib/RT/Ticket_Overlay.pm:1143 msgid "TimeWorked" msgstr "å·²è™•ç†æ™‚é–“" -#: bin/rt-commit-handler:401 +#: html/Search/Elements/EditFormat:74 +msgid "Title" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:" msgstr "產生這次更動的差異檔:" -#: bin/rt-commit-handler:390 +#: NOT FOUND IN SOURCE msgid "To generate a diff of this commit:\\n" msgstr "產生這次更動的差異檔:\\n" -#: lib/RT/Ticket_Overlay.pm:1186 +#: html/Elements/Footer:61 +#. ('<a href="mailto:sales@bestpractical.com">sales@bestpractical.com</a>') +msgid "To inquire about support, training, custom development or licensing, please contact %1." +msgstr "如果有支æ´ã€æ•™è‚²è¨“ç·´åŠå®šè£½é–‹ç™¼çš„需è¦ï¼Œè«‹é€£çµ¡ %1。" + +#: NOT FOUND IN SOURCE +msgid "Todo" +msgstr "å¾…è¾¦äº‹é …" + +#: lib/RT/Ticket_Overlay.pm:1146 msgid "Told" msgstr "告知日期" -#: html/Edit/Elements/Page:46 +#: html/Admin/Elements/Tabs:68 html/Admin/index.html:88 html/Elements/Tabs:71 +msgid "Tools" +msgstr "工具" + +#: NOT FOUND IN SOURCE msgid "Total" msgstr "é " -#: etc/initialdata.zh:239 etc/initialdata:237 +#: etc/initialdata:252 msgid "Transaction" msgstr "æ›´å‹•" -#: lib/RT/Transaction_Overlay.pm:640 +#: lib/RT/Transaction_Overlay.pm:794 #. ($self->Data) msgid "Transaction %1 purged" msgstr "æ¸…é™¤æ›´å‹•å ±å‘Š %1" -#: lib/RT/Transaction_Overlay.pm:177 +#: lib/RT/Transaction_Overlay.pm:174 msgid "Transaction Created" msgstr "æ›´å‹•å ±å‘Šå·²æ–°å¢ž" -#: lib/RT/Transaction_Overlay.pm:88 +#: html/Admin/Elements/QueueTabs:78 +msgid "Transaction Custom Fields" +msgstr "更動的自訂欄ä½" + +#: NOT FOUND IN SOURCE msgid "Transaction->Create couldn't, as you didn't specify a ticket id" msgstr "未指定申請單編號,無法新增更動" -#: lib/RT/Transaction_Overlay.pm:699 +#: lib/RT/Transaction_Overlay.pm:125 +msgid "Transaction->Create couldn't, as you didn't specify an object type and id" +msgstr "未指定物件類別åŠç·¨è™Ÿï¼Œç„¡æ³•新增更動" + +#: NOT FOUND IN SOURCE +msgid "TransactionBatch" +msgstr "批次更動時" + +#: NOT FOUND IN SOURCE +msgid "TransactionCreate" +msgstr "新增更動時" + +#: lib/RT/Transaction_Overlay.pm:838 msgid "Transactions are immutable" msgstr "ä¸å¯æ›´æ”¹æ›´å‹•å ±å‘Š" #: NOT FOUND IN SOURCE +msgid "Transfer to" +msgstr "移交給" + +#: NOT FOUND IN SOURCE msgid "Trying to delete a right: %1" msgstr "試圖刪除æŸé …權é™ï¼š%1" @@ -5743,84 +7049,117 @@ msgstr "試圖刪除æŸé …權é™ï¼š%1" msgid "Tue" msgstr "星期二" -#: lib/RT/Date.pm:389 +#: lib/RT/Date.pm:414 msgid "Tue." msgstr "星期二" -#: html/Admin/Elements/EditCustomField:43 html/Admin/Elements/ModifyTemplateAsWorkflow:135 html/Ticket/Elements/AddWatchers:32 html/Ticket/Elements/AddWatchers:43 html/Ticket/Elements/AddWatchers:53 lib/RT/Ticket_Overlay.pm:1184 lib/RT/Tickets_Overlay.pm:959 +#: 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 msgid "Type" msgstr "類別" -#: lib/RT/ScripCondition_Overlay.pm:103 +#: lib/RT/ScripCondition_Overlay.pm:129 msgid "Unimplemented" msgstr "尚無實作" -#: html/Admin/Users/Modify.html:67 +#: html/Admin/Users/Modify.html:89 msgid "Unix login" msgstr "外部系統登入帳號" -#: html/Admin/Elements/ModifyUser:61 +#: NOT FOUND IN SOURCE msgid "UnixUsername" msgstr "外部系統登入帳號" -#: lib/RT/Attachment_Overlay.pm:266 lib/RT/Attachment_Overlay.pm:298 +#: lib/RT/Attachment_Overlay.pm:290 lib/RT/Record.pm:847 #. ($self->ContentEncoding) +#. ($ContentEncoding) msgid "Unknown ContentEncoding %1" msgstr "ä¸å¯è§£çš„內容文å—ç·¨ç¢¼æ–¹å¼ %1" -#: html/Elements/SelectResultsPerPage:36 +#: html/Search/Build.html:632 +msgid "Unknown field: $key" +msgstr "" + +#: html/Elements/SelectResultsPerPage:58 msgid "Unlimited" msgstr "全數顯示" -#: etc/initialdata.zh:50 etc/initialdata:32 +#: html/Search/Elements/SelectSearchesForObjects:63 +msgid "Unnamed search" +msgstr "未命å的查詢" + +#: etc/initialdata:32 msgid "Unprivileged" msgstr "éžå…§éƒ¨æˆå“¡" -#: lib/RT/Transaction_Overlay.pm:569 +#: html/Admin/Elements/EditCustomFields:60 +msgid "Unselected Custom Fields" +msgstr "未é¸å–的自訂欄ä½" + +#: html/Admin/CustomFields/Objects.html:61 +msgid "Unselected objects" +msgstr "未é¸å–的物件" + +#: lib/RT/Transaction_Overlay.pm:648 msgid "Untaken" msgstr "未被å—ç†" -#: html/Edit/Elements/Page:13 html/Edit/Elements/Page:15 +#: NOT FOUND IN SOURCE +msgid "Untitled search" +msgstr "未命å的查詢" + +#: NOT FOUND IN SOURCE msgid "Up" msgstr "上一é " -#: html/Elements/MyTickets:63 html/Search/Bulk.html:32 html/Work/Elements/MyTickets:82 html/Work/Search/Bulk.html:10 html/Work/Tickets/Elements/EditCustomFieldEntries:97 +#: html/Search/Bulk.html:54 msgid "Update" msgstr "處ç†" -#: html/Admin/Users/Prefs.html:61 +#: html/Search/Bulk.html:178 +msgid "Update All" +msgstr "全部更新" + +#: NOT FOUND IN SOURCE msgid "Update ID" msgstr "更新編號" -#: html/Search/Bulk.html:129 html/Ticket/ModifyAll.html:65 html/Ticket/Update.html:65 html/Work/Search/Bulk.html:81 html/Work/Tickets/Update.html:32 +#: html/Ticket/Update.html:133 +msgid "Update Ticket" +msgstr "更新申請單" + +#: html/Search/Bulk.html:148 html/Ticket/ModifyAll.html:87 html/Ticket/Update.html:70 msgid "Update Type" msgstr "更新類別" -#: html/Search/Listing.html:60 html/Work/Search/index.html:32 +#: NOT FOUND IN SOURCE msgid "Update all these tickets at once" msgstr "整批更新申請單" -#: html/Admin/Users/Prefs.html:48 +#: NOT FOUND IN SOURCE msgid "Update email" msgstr "æ›´æ–°é›»å郵件信箱" -#: html/Admin/Users/Prefs.html:54 +#: html/Search/Results.html:80 +msgid "Update multiple tickets" +msgstr "批次更新申請單" + +#: NOT FOUND IN SOURCE msgid "Update name" msgstr "更新帳號" -#: lib/RT/Interface/Web.pm:409 x:412 +#: lib/RT/Action/CreateTickets.pm:737 lib/RT/Interface/Web.pm:524 msgid "Update not recorded." msgstr "更新未被記錄" -#: html/Search/Bulk.html:80 html/Work/Search/Bulk.html:52 +#: html/Search/Bulk.html:99 msgid "Update selected tickets" msgstr "æ›´æ–°é¸æ“‡çš„申請單" -#: html/Admin/Users/Prefs.html:35 +#: NOT FOUND IN SOURCE msgid "Update signature" msgstr "æ›´æ–°ç°½ç« " -#: html/Ticket/ModifyAll.html:62 +#: html/Ticket/ModifyAll.html:84 msgid "Update ticket" msgstr "更新申請單" @@ -5828,25 +7167,61 @@ msgstr "更新申請單" msgid "Update ticket # %1" msgstr "更新申請單 # %1" -#: html/SelfService/Update.html:24 html/SelfService/Update.html:46 +#: html/SelfService/Update.html:112 html/SelfService/Update.html:47 #. ($Ticket->id) msgid "Update ticket #%1" msgstr "更新申請單 #%1" -#: html/Ticket/Update.html:138 html/Work/Tickets/Update.html:122 -#. ($Ticket->id, $Ticket->Subject) +#: html/Ticket/Update.html:156 +#. ($TicketObj->id, $TicketObj->Subject) msgid "Update ticket #%1 (%2)" msgstr "更新申請單 #%1 (%2)" -#: lib/RT/Interface/Web.pm:407 x:410 +#: lib/RT/Action/CreateTickets.pm:735 lib/RT/Interface/Web.pm:523 msgid "Update type was neither correspondence nor comment." msgstr "更新的內容並éžç”³è«‹å–®å›žè¦†ä¹Ÿä¸æ˜¯è©•è«–" -#: html/Elements/SelectDateType:32 html/Ticket/Elements/ShowDates:50 lib/RT/Ticket_Overlay.pm:1187 +#: html/Elements/SelectDateType:54 html/Ticket/Elements/ShowDates:72 lib/RT/Ticket_Overlay.pm:1147 msgid "Updated" msgstr "剿¬¡æ›´æ–°" -#: html/Work/Preferences/index.html:15 +#: html/Tools/Offline.html:95 +msgid "Upload" +msgstr "上載" + +#: lib/RT/CustomField_Overlay.pm:84 +msgid "Upload multiple files" +msgstr "上載多個檔案" + +#: lib/RT/CustomField_Overlay.pm:79 +msgid "Upload multiple images" +msgstr "上載多份圖片" + +#: lib/RT/CustomField_Overlay.pm:85 +msgid "Upload one file" +msgstr "上載一個檔案" + +#: lib/RT/CustomField_Overlay.pm:80 +msgid "Upload one image" +msgstr "上載一份圖片" + +#: lib/RT/CustomField_Overlay.pm:86 +msgid "Upload up to %1 files" +msgstr "上載最多 %1 個檔案" + +#: lib/RT/CustomField_Overlay.pm:81 +msgid "Upload up to %1 images" +msgstr "上載最多 %1 份圖片" + +#: html/Tools/Offline.html:95 +msgid "Upload your changes" +msgstr "上載您的更動" + +#: html/Admin/index.html:90 +msgid "Use other RT administrative tools" +msgstr "" + +#: NOT FOUND IN SOURCE msgid "User" msgstr "使用者" @@ -5858,6 +7233,11 @@ msgstr "使用者 %1 %2:%3\\n" msgid "User %1 Password: %2\\n" msgstr "使用者 %1 密碼:%2\\n" +#: lib/RT/Ticket_Overlay.pm:496 +#. ($args{'Owner'}) +msgid "User '%1' could not be found." +msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'。" + #: NOT FOUND IN SOURCE msgid "User '%1' not found" msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'" @@ -5866,48 +7246,65 @@ msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'" msgid "User '%1' not found\\n" msgstr "找ä¸åˆ°ä½¿ç”¨è€… '%1'\\n" -#: etc/initialdata.zh:142 etc/initialdata.zh:209 etc/initialdata:124 etc/initialdata:191 +#: etc/initialdata:132 etc/initialdata:206 msgid "User Defined" msgstr "使用者自訂" -#: html/Admin/Users/Prefs.html:58 html/Edit/Users/List:13 html/Edit/Users/Top:42 +#: html/Admin/Elements/EditScrip:98 +msgid "User Defined conditions and actions" +msgstr "使用者自訂的æ¢ä»¶åŠå‹•作" + +#: NOT FOUND IN SOURCE msgid "User ID" msgstr "使用者 ID" -#: html/Elements/SelectUsers:25 +#: NOT FOUND IN SOURCE msgid "User Id" msgstr "使用者 ID" -#: html/Edit/Elements/PickUsers:12 html/Edit/Global/UserRight/List:7 html/Edit/Global/UserRight/Top:9 html/Edit/Users/Add.html:13 html/Edit/Users/List:5 html/Edit/Users/Search.html:23 html/Edit/Users/Top:8 html/Work/Delegates/Info:60 html/Work/Tickets/Cc:10 +#: NOT FOUND IN SOURCE msgid "User Number" msgstr "員工編號" -#: html/Admin/Elements/GroupTabs:46 html/Admin/Elements/QueueTabs:59 html/Admin/Elements/SystemTabs:46 html/Admin/Global/index.html:58 html/Edit/Global/autohandler:11 html/Edit/Queues/autohandler:22 +#: 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 "使用者權é™" -#: html/Edit/Elements/Tab:34 +#: NOT FOUND IN SOURCE msgid "User Setup" msgstr "使用者è¨å®š" -#: html/Edit/Users/Info:37 +#: NOT FOUND IN SOURCE msgid "User Shift" msgstr "å“¡å·¥ç別" -#: html/Admin/Users/Modify.html:225 +#: lib/RT/Interface/Web.pm:1283 +#. ($cf->Name, $class, $Object->id) +msgid "User asked for an unknown update type for custom field %1 for %2 object #%3" +msgstr "使用者試圖在 %2 物件 #%3 çš„è‡ªè¨‚æ¬„ä½ %1 上執行未知的更新æ“作" + +#: html/Admin/Users/Modify.html:293 #. ($msg) msgid "User could not be created: %1" msgstr "無法新增使用者:%1" -#: lib/RT/User_Overlay.pm:321 +#: lib/RT/User_Overlay.pm:331 msgid "User created" msgstr "使用者新增完畢" -#: html/Admin/Global/GroupRights.html:66 html/Admin/Groups/GroupRights.html:53 html/Admin/Queues/GroupRights.html:68 +#: NOT FOUND IN SOURCE +msgid "User created: %1" +msgstr "使用者 %1 新增完畢" + +#: NOT FOUND IN SOURCE +msgid "User created: %1 (%2)" +msgstr "使用者 %1 (%2) 新增完畢" + +#: 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 "使用者定義的群組" -#: lib/RT/User_Overlay.pm:575 lib/RT/User_Overlay.pm:592 +#: lib/RT/User_Overlay.pm:593 lib/RT/User_Overlay.pm:613 msgid "User loaded" msgstr "已載入使用者" @@ -5915,39 +7312,55 @@ msgstr "已載入使用者" msgid "User notified" msgstr "已通知使用者" -#: html/Admin/Users/Prefs.html:24 html/Admin/Users/Prefs.html:28 +#: NOT FOUND IN SOURCE +msgid "User renamed from %1 to %2" +msgstr "使用者 %1 已改å為 %2" + +#: NOT FOUND IN SOURCE msgid "User view" msgstr "使用者ç§äººè³‡æ–™" +#: html/Admin/Groups/index.html:99 +msgid "User-defined groups" +msgstr "使用者自定群組" + #: NOT FOUND IN SOURCE msgid "UserDefined" msgstr "使用者自定" -#: html/Admin/Users/Modify.html:47 html/Elements/Login:51 html/Ticket/Elements/AddWatchers:34 +#: html/Admin/Users/Modify.html:69 html/Elements/Login:73 html/Ticket/Elements/AddWatchers:56 msgid "Username" msgstr "帳號" -#: html/Admin/Elements/SelectNewGroupMembers:25 html/Admin/Elements/Tabs:31 html/Admin/Groups/Members.html:54 html/Admin/Queues/People.html:67 html/Admin/index.html:28 html/User/Groups/Members.html:57 html/Work/Tickets/Elements/ShowTransaction:8 +#: 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 msgid "Users" msgstr "使用者" -#: html/Admin/Users/index.html:64 +#: html/Admin/Users/index.html:85 msgid "Users matching search criteria" msgstr "ç¬¦åˆæŸ¥è©¢æ¢ä»¶çš„使用者" -#: html/Search/Elements/PickRestriction:50 html/Work/Search/PickRestriction:31 +#: lib/RT/Tickets_Overlay_SQL.pm:523 +msgid "Valid Query" +msgstr "åˆç†çš„æŸ¥è©¢" + +#: NOT FOUND IN SOURCE msgid "ValueOfQueue" msgstr "鏿“‡è¡¨å–®" -#: html/Admin/Elements/EditCustomField:56 +#: html/Admin/CustomFields/Modify.html:89 html/Admin/Elements/EditCustomField:78 msgid "Values" msgstr "欄ä½å€¼" -#: lib/RT/Queue_Overlay.pm:81 +#: NOT FOUND IN SOURCE +msgid "View log" +msgstr "檢視紀錄檔" + +#: lib/RT/Queue_Overlay.pm:108 msgid "Watch" msgstr "視察" -#: lib/RT/Queue_Overlay.pm:82 +#: lib/RT/Queue_Overlay.pm:109 msgid "WatchAsAdminCc" msgstr "以管ç†å“¡å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è¦–察" @@ -5955,11 +7368,11 @@ msgstr "以管ç†å“¡å‰¯æœ¬æ”¶ä»¶äººèº«ä»½è¦–察" msgid "Watcher loaded" msgstr "æˆåŠŸè¼‰å…¥è¦–å¯Ÿå“¡è³‡è¨Š" -#: html/Admin/Elements/QueueTabs:41 +#: html/Admin/Elements/QueueTabs:63 msgid "Watchers" msgstr "視察員" -#: html/Admin/Elements/ModifyUser:55 +#: NOT FOUND IN SOURCE msgid "WebEncoding" msgstr "ç¶²é æ–‡å—編碼方å¼" @@ -5967,104 +7380,123 @@ msgstr "ç¶²é æ–‡å—編碼方å¼" msgid "Wed" msgstr "星期三" -#: lib/RT/Date.pm:390 +#: lib/RT/Date.pm:415 msgid "Wed." msgstr "星期三" -#: etc/initialdata.zh:533 etc/initialdata:503 etc/upgrade/2.1.71:161 html/Edit/Elements/CreateApprovalsQueue:135 +#: etc/initialdata:521 msgid "When a ticket has been approved by all approvers, add correspondence to the original ticket" msgstr "ç•¶ç”³è«‹å–®é€šéŽæ‰€æœ‰ç°½æ ¸å¾Œï¼Œå°‡æ¤è¨Šæ¯å›žè¦†åˆ°åŽŸç”³è«‹å–®" -#: etc/initialdata.zh:497 etc/initialdata:467 etc/upgrade/2.1.71:135 html/Edit/Elements/CreateApprovalsQueue:107 +#: etc/initialdata:485 msgid "When a ticket has been approved by any approver, add correspondence to the original ticket" msgstr "ç•¶ç”³è«‹å–®é€šéŽæŸé …ç°½æ ¸å¾Œï¼Œå°‡æ¤è¨Šæ¯å›žè¦†åˆ°åŽŸç”³è«‹å–®" -#: etc/initialdata.zh:156 etc/initialdata:138 +#: etc/initialdata:146 msgid "When a ticket is created" msgstr "新增申請單時" -#: etc/initialdata.zh:428 etc/initialdata:400 etc/upgrade/2.1.71:79 html/Edit/Elements/CreateApprovalsQueue:51 +#: etc/initialdata:418 msgid "When an approval ticket is created, notify the Owner and AdminCc of the item awaiting their approval" msgstr "ç°½æ ¸å–®æ–°å¢žä¹‹å¾Œï¼Œé€šçŸ¥æ‡‰å—ç†çš„æ‰¿è¾¦äººåŠç®¡ç†å“¡å‰¯æœ¬æ”¶ä»¶äºº" -#: etc/initialdata.zh:161 etc/initialdata:143 +#: etc/initialdata:151 msgid "When anything happens" msgstr "當任何事情發生時" -#: etc/initialdata.zh:202 etc/initialdata:184 +#: etc/initialdata:199 msgid "Whenever a ticket is resolved" msgstr "當申請單解決時" -#: etc/initialdata.zh:188 etc/initialdata:170 +#: etc/initialdata:185 msgid "Whenever a ticket's owner changes" msgstr "ç•¶ç”³è«‹å–®æ›´æ›æ‰¿è¾¦äººæ™‚" -#: etc/initialdata.zh:196 etc/initialdata:178 +#: etc/initialdata:178 etc/upgrade/3.1.17/content:16 +msgid "Whenever a ticket's priority changes" +msgstr "ç•¶ç”³è«‹å–®çš„å„ªå…ˆé †åºæ”¹è®Šæ™‚" + +#: etc/initialdata:193 msgid "Whenever a ticket's queue changes" msgstr "當申請單更æ›è¡¨å–®æ™‚" -#: etc/initialdata.zh:180 etc/initialdata:162 +#: etc/initialdata:170 msgid "Whenever a ticket's status changes" msgstr "ç•¶ç”³è«‹å–®æ›´æ–°ç¾æ³æ™‚" -#: etc/initialdata.zh:210 etc/initialdata:192 +#: etc/initialdata:207 msgid "Whenever a user-defined condition occurs" msgstr "當使用者自訂的情æ³ç™¼ç”Ÿæ™‚" -#: etc/initialdata.zh:174 etc/initialdata:156 +#: etc/initialdata:164 msgid "Whenever comments come in" msgstr "ç•¶è©•è«–é€é”時" -#: etc/initialdata.zh:167 etc/initialdata:149 +#: etc/initialdata:157 msgid "Whenever correspondence comes in" msgstr "當回覆é€é”時" -#: html/Admin/Users/Modify.html:163 html/User/Prefs.html:51 html/Work/Preferences/Info:34 +#: html/Admin/Users/Modify.html:188 html/User/Prefs.html:89 msgid "Work" msgstr "å…¬å¸" -#: html/Admin/Elements/ModifyUser:69 +#: html/Search/Results.html:84 +msgid "Work offline" +msgstr "離線工作" + +#: NOT FOUND IN SOURCE msgid "WorkPhone" msgstr "å…¬å¸é›»è©±" -#: html/Ticket/Elements/ShowBasics:34 html/Ticket/Update.html:64 +#: html/Ticket/Elements/ShowBasics:63 html/Ticket/Update.html:64 msgid "Worked" msgstr "è™•ç†æ™‚é–“" -#: html/Admin/Global/Workflow.html:91 html/Admin/Queues/Workflow.html:89 -#. ($WorkflowObj->Id()) +#: NOT FOUND IN SOURCE msgid "Workflow #%1" msgstr "æµç¨‹ #%1" -#: html/Edit/Global/Workflow/List:15 +#: NOT FOUND IN SOURCE msgid "Workflow Begin" msgstr "æµç¨‹é–‹å§‹" -#: html/Edit/Global/Workflow/List:20 +#: NOT FOUND IN SOURCE msgid "Workflow End" msgstr "æµç¨‹çµæŸ" -#: html/Admin/Elements/EditWorkflows:90 +#: NOT FOUND IN SOURCE msgid "Workflow deleted" msgstr "æµç¨‹å·²åˆªé™¤" -#: html/Edit/Global/autohandler:10 html/Edit/Queues/autohandler:21 +#: NOT FOUND IN SOURCE msgid "Workflows" msgstr "æµç¨‹" -#: html/Edit/Global/Basic/Top:25 +#: NOT FOUND IN SOURCE +msgid "Writable" +msgstr "å¯è®€å¯«" + +#: NOT FOUND IN SOURCE +msgid "XXX CHANGEME You are not an authorized user" +msgstr "XXX CHANGEME 您是未經授權的使用者" + +#: NOT FOUND IN SOURCE msgid "Yes" msgstr "是" -#: lib/RT/Ticket_Overlay.pm:3150 +#: lib/RT/Ticket_Overlay.pm:3096 msgid "You already own this ticket" msgstr "您已是這份申請單的承辦人" -#: html/autohandler:122 +#: html/autohandler:158 html/autohandler:166 msgid "You are not an authorized user" msgstr "æ‚¨ä¸æ˜¯è¢«æŽˆæ¬Šçš„使用者" -#: lib/RT/Ticket_Overlay.pm:3032 +#: NOT FOUND IN SOURCE +msgid "You can access it with the Download button on the right." +msgstr "您å¯ä»¥æŒ‰å³æ–¹çš„「下載ã€éµä¾†å–得。" + +#: lib/RT/Ticket_Overlay.pm:2978 msgid "You can only reassign tickets that you own or that are unowned" msgstr "ç¥‡èƒ½é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿è¾¦æˆ–是沒有承辦人的申請單" @@ -6072,28 +7504,28 @@ msgstr "ç¥‡èƒ½é‡æ–°æŒ‡æ´¾æ‚¨æ‰€æ‰¿è¾¦æˆ–是沒有承辦人的申請單" msgid "You don't have permission to view that ticket.\\n" msgstr "您沒有看那份申請單的權é™ã€‚\\n" -#: docs/design_docs/string-extraction-guide.txt:47 +#: docs/design_docs/string-extraction-guide.txt:47 lib/RT/StyleGuide.pod:780 #. ($num, $queue) msgid "You found %1 tickets in queue %2" msgstr "您會在表單 %2 找到 %1 的申請單" -#: html/NoAuth/Logout.html:30 +#: html/NoAuth/Logout.html:52 msgid "You have been logged out of RT." msgstr "您已登出 RT。" -#: html/SelfService/Display.html:77 +#: html/SelfService/Display.html:109 msgid "You have no permission to create tickets in that queue." msgstr "您沒有在該表單新增申請單的權é™ã€‚" -#: lib/RT/Ticket_Overlay.pm:1908 +#: lib/RT/Ticket_Overlay.pm:1964 msgid "You may not create requests in that queue." msgstr "您ä¸èƒ½åœ¨è©²è¡¨å–®ä¸æå‡ºç”³è«‹ã€‚" -#: html/Edit/Global/Basic/Top:38 +#: NOT FOUND IN SOURCE msgid "You need to restart the Request Tracker service for saved changes to take effect." msgstr "æ‚¨å¿…é ˆé‡æ–°å•Ÿå‹• Request Tracker æœå‹™ï¼Œå„²å˜çš„æ›´å‹•纔會生效。" -#: html/NoAuth/Logout.html:34 +#: html/NoAuth/Logout.html:56 msgid "You're welcome to login again" msgstr "æ¡è¿Žä¸‹æ¬¡å†ä¾†" @@ -6105,11 +7537,11 @@ msgstr "您æå‡ºçš„ %1 申請單" msgid "Your RT administrator has misconfigured the mail aliases which invoke RT" msgstr "RT 管ç†å“¡å¯èƒ½è¨éŒ¯äº†ç”± RT å¯„å‡ºçš„éƒµä»¶æ”¶ä»¶äººæ¨™é æª”" -#: etc/initialdata.zh:514 etc/initialdata:484 etc/upgrade/2.1.71:146 html/Edit/Elements/CreateApprovalsQueue:119 +#: etc/initialdata:502 msgid "Your request has been approved by %1. Other approvals may still be pending." msgstr "申請單已由 %1 批准。å¯èƒ½é‚„æœ‰å…¶ä»–å¾…ç°½æ ¸çš„æ¥é©Ÿã€‚" -#: etc/initialdata.zh:552 etc/initialdata:522 etc/upgrade/2.1.71:180 html/Edit/Elements/CreateApprovalsQueue:154 +#: etc/initialdata:540 msgid "Your request has been approved." msgstr "您的申請單已完æˆç°½æ ¸ç¨‹åºã€‚" @@ -6117,19 +7549,19 @@ msgstr "您的申請單已完æˆç°½æ ¸ç¨‹åºã€‚" msgid "Your request was rejected" msgstr "您的申請單已被é§å›ž" -#: etc/initialdata.zh:455 +#: NOT FOUND IN SOURCE msgid "Your request was rejected by %1." msgstr "您的申請單已被 %1 é§å›žã€‚" -#: etc/initialdata:427 etc/upgrade/2.1.71:101 html/Edit/Elements/CreateApprovalsQueue:73 +#: etc/initialdata:445 msgid "Your request was rejected." msgstr "您的申請單已被é§å›žã€‚" -#: html/autohandler:144 +#: html/autohandler:193 msgid "Your username or password is incorrect" msgstr "您的帳號或密碼有誤" -#: html/Admin/Elements/ModifyUser:83 html/Admin/Users/Modify.html:143 html/User/Prefs.html:95 html/Work/Preferences/Info:85 +#: html/Admin/Users/Modify.html:168 html/User/Prefs.html:149 msgid "Zip" msgstr "郵éžå€è™Ÿ" @@ -6145,32 +7577,48 @@ msgstr "éŽæœŸ" msgid "alert" msgstr "急訊" -#: html/User/Elements/DelegateRights:58 +#: lib/RT/System.pm:88 +msgid "allow creation of saved searches" +msgstr "" + +#: lib/RT/System.pm:87 +msgid "allow loading of saved searches" +msgstr "" + +#: NOT FOUND IN SOURCE +msgid "approving" +msgstr "å¾…ç°½æ ¸" + +#: html/User/Elements/DelegateRights:80 #. ($right->PrincipalObj->Object->SelfDescription) msgid "as granted to %1" msgstr "權é™åŒ %1" -#: html/SelfService/Closed.html:27 +#: html/Search/Elements/PickBasics:127 +msgid "belongs to" +msgstr "" + +#: html/SelfService/Closed.html:49 msgid "closed" msgstr "已解決" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:33 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:55 msgid "contains" msgstr "包å«" -#: html/Elements/SelectAttachmentField:25 +#: NOT FOUND IN SOURCE msgid "content" msgstr "內容" -#: html/Elements/SelectAttachmentField:26 +#: NOT FOUND IN SOURCE msgid "content-type" msgstr "類型" -#: lib/RT/Ticket_Overlay.pm:2295 +#: NOT FOUND IN SOURCE msgid "correspondence (probably) not sent" msgstr "申請單回覆(å¯èƒ½)未é€å‡º" -#: lib/RT/Ticket_Overlay.pm:2305 +#: NOT FOUND IN SOURCE msgid "correspondence sent" msgstr "申請單回覆已é€å‡º" @@ -6178,7 +7626,7 @@ msgstr "申請單回覆已é€å‡º" msgid "critical" msgstr "åš´é‡" -#: html/Admin/Elements/ModifyQueue:62 html/Admin/Queues/Modify.html:76 html/Edit/Queues/Basic/Top:31 html/Edit/Queues/List:18 html/Work/Queues/List:11 lib/RT/Date.pm:319 +#: html/Admin/Queues/Modify.html:98 lib/RT/Date.pm:342 msgid "days" msgstr "天" @@ -6190,27 +7638,35 @@ msgstr "拒絕處ç†" msgid "debug" msgstr "åµéŒ¯" -#: html/Search/Listing.html:74 +#: NOT FOUND IN SOURCE msgid "delete" msgstr "刪除" -#: lib/RT/Queue_Overlay.pm:62 +#: lib/RT/Queue_Overlay.pm:88 msgid "deleted" msgstr "已刪除" -#: html/Search/Elements/PickRestriction:67 html/Work/Search/PickRestriction:47 +#: html/Search/Elements/PickBasics:128 +msgid "does not belong to" +msgstr "" + +#: html/Search/Elements/PickBasics:61 msgid "does not match" msgstr "ä¸ç¬¦åˆ" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:34 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectMatch:56 msgid "doesn't contain" msgstr "ä¸åŒ…å«" #: NOT FOUND IN SOURCE +msgid "email address" +msgstr "é›»å郵件信箱" + +#: NOT FOUND IN SOURCE msgid "emergency" msgstr "å±é›£" -#: html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectEqualityOperator:59 msgid "equal to" msgstr "ç‰æ–¼" @@ -6218,28 +7674,52 @@ msgstr "ç‰æ–¼" msgid "error" msgstr "錯誤" +#: html/Search/Build.html:387 +msgid "error: can't move down" +msgstr "" + +#: html/Search/Build.html:409 +msgid "error: can't move left" +msgstr "" + +#: html/Search/Build.html:368 +msgid "error: can't move up" +msgstr "" + +#: html/Search/Build.html:451 +msgid "error: nothing to delete" +msgstr "" + +#: html/Search/Build.html:373 html/Search/Build.html:392 html/Search/Build.html:414 html/Search/Build.html:443 +msgid "error: nothing to move" +msgstr "" + +#: html/Search/Build.html:469 +msgid "error: nothing to toggle" +msgstr "" + #: NOT FOUND IN SOURCE msgid "false" msgstr "å‡" -#: html/Elements/SelectAttachmentField:27 +#: NOT FOUND IN SOURCE msgid "filename" msgstr "檔å" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "greater than" msgstr "大於" -#: lib/RT/Group_Overlay.pm:193 +#: lib/RT/Group_Overlay.pm:222 #. ($self->Name) msgid "group '%1'" msgstr "群組 '%1'" -#: lib/RT/Date.pm:315 +#: lib/RT/Date.pm:338 msgid "hours" msgstr "å°æ™‚" -#: NOT FOUND IN SOURCE +#: html/Search/Elements/PickBasics:48 msgid "id" msgstr "編號" @@ -6247,27 +7727,27 @@ msgstr "編號" msgid "info" msgstr "資訊" -#: html/Elements/SelectBoolean:31 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:35 html/Search/Elements/PickRestriction:46 html/Search/Elements/PickRestriction:75 html/Search/Elements/PickRestriction:87 html/Work/Search/PickRestriction:27 html/Work/Search/PickRestriction:56 html/Work/Search/PickRestriction:69 +#: 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 msgid "is" msgstr "是" -#: html/Elements/SelectBoolean:35 html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectMatch:36 html/Search/Elements/PickRestriction:47 html/Search/Elements/PickRestriction:76 html/Search/Elements/PickRestriction:88 html/Work/Search/PickRestriction:28 html/Work/Search/PickRestriction:57 html/Work/Search/PickRestriction:70 +#: 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 msgid "isn't" msgstr "䏿˜¯" -#: html/Elements/SelectCustomFieldOperator:37 html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectCustomFieldOperator:59 html/Elements/SelectEqualityOperator:59 msgid "less than" msgstr "å°æ–¼" -#: html/Edit/Global/Workflow/Owner.html:35 -msgid "level Admins" +#: NOT FOUND IN SOURCE +msgid "level Admin" msgstr "層主管" -#: html/Search/Elements/PickRestriction:66 html/Work/Search/PickRestriction:46 +#: html/Search/Elements/PickBasics:60 msgid "matches" msgstr "符åˆ" -#: lib/RT/Date.pm:311 +#: lib/RT/Date.pm:334 msgid "min" msgstr "分" @@ -6275,27 +7755,31 @@ msgstr "分" msgid "minutes" msgstr "分é˜" -#: bin/rt-commit-handler:764 +#: NOT FOUND IN SOURCE msgid "modifications\\n\\n" msgstr "更改\\n\\n" -#: lib/RT/Date.pm:327 +#: lib/RT/Date.pm:350 msgid "months" msgstr "月" -#: lib/RT/Queue_Overlay.pm:57 +#: lib/RT/Queue_Overlay.pm:83 msgid "new" msgstr "新建立" -#: html/Admin/Elements/EditScrips:42 +#: html/Admin/Elements/PickCustomFields:64 html/Admin/Elements/PickObjects:63 +msgid "no name" +msgstr "沒有å稱" + +#: html/Admin/Elements/EditScrips:64 msgid "no value" msgstr "沒有值" -#: html/Admin/Elements/EditQueueWatchers:26 html/Edit/Groups/Member:40 html/Edit/Groups/Members/Add.html:17 html/Edit/Groups/Members/List:8 html/Edit/Queues/Basic/Top:50 html/Edit/Queues/List:18 html/Ticket/Elements/EditWatchers:27 html/Work/Delegates/Info:37 html/Work/Delegates/Info:48 html/Work/Overview/Info:31 html/Work/Queues/List:11 html/Work/Tickets/Elements/ShowBasics:27 +#: html/Admin/Elements/EditQueueWatchers:48 html/Ticket/Elements/EditWatchers:49 msgid "none" msgstr "ç„¡" -#: html/Elements/SelectEqualityOperator:37 +#: html/Elements/SelectEqualityOperator:59 msgid "not equal to" msgstr "ä¸ç‰æ–¼" @@ -6307,11 +7791,11 @@ msgstr "æç¤º" msgid "notlike" msgstr "ä¸ç¬¦åˆ" -#: html/Edit/Elements/PickUsers:17 html/Edit/Users/Add.html:18 html/Edit/Users/Search.html:28 html/Work/Tickets/Cc:15 +#: NOT FOUND IN SOURCE msgid "number" msgstr "號" -#: html/SelfService/Elements/MyRequests:60 lib/RT/Queue_Overlay.pm:58 +#: html/SelfService/Elements/MyRequests:83 lib/RT/Queue_Overlay.pm:84 msgid "open" msgstr "開啟" @@ -6319,60 +7803,72 @@ msgstr "開啟" msgid "opened" msgstr "已開啟" -#: lib/RT/Group_Overlay.pm:198 +#: lib/RT/Group_Overlay.pm:227 #. ($self->Name, $user->Name) msgid "personal group '%1' for user '%2'" msgstr "使用者「%2ã€çš„「%1ã€ä»£ç†äººç¾¤çµ„" -#: lib/RT/Group_Overlay.pm:206 +#: lib/RT/Group_Overlay.pm:235 #. ($queue->Name, $self->Type) msgid "queue %1 %2" msgstr "表單 %1 %2" -#: lib/RT/Queue_Overlay.pm:61 +#: lib/RT/Queue_Overlay.pm:87 msgid "rejected" msgstr "å·²é§å›ž" -#: html/Work/Elements/SelectSearch:21 lib/RT/Queue_Overlay.pm:60 +#: lib/RT/Queue_Overlay.pm:86 msgid "resolved" msgstr "已處ç†" -#: html/Edit/Global/Basic/Top:48 +#: NOT FOUND IN SOURCE msgid "rtname" msgstr "伺æœå™¨å稱" -#: lib/RT/Date.pm:307 +#: lib/RT/Date.pm:330 msgid "sec" msgstr "ç§’" -#: lib/RT/Queue_Overlay.pm:59 +#: lib/RT/System.pm:86 +msgid "show Configuration tab" +msgstr "" + +#: html/Search/Results.html:82 +msgid "spreadsheet" +msgstr "試算表" + +#: lib/RT/Queue_Overlay.pm:85 msgid "stalled" msgstr "延宕" -#: lib/RT/Group_Overlay.pm:201 +#: lib/RT/Group_Overlay.pm:230 #. ($self->Type) msgid "system %1" msgstr "系統 %1" -#: lib/RT/Group_Overlay.pm:212 +#: lib/RT/Group_Overlay.pm:241 #. ($self->Type) msgid "system group '%1'" msgstr "系統群組 '%1'" -#: html/Elements/Error:42 html/SelfService/Error.html:41 +#: html/Elements/Error:66 html/SelfService/Error.html:63 msgid "the calling component did not specify why" msgstr "呼å«å…ƒä»¶æœªæŒ‡æ˜ŽåŽŸå› " -#: lib/RT/Group_Overlay.pm:209 +#: NOT FOUND IN SOURCE +msgid "ticket #%1" +msgstr "申請單 #%1" + +#: lib/RT/Group_Overlay.pm:238 #. ($self->Instance, $self->Type) msgid "ticket #%1 %2" msgstr "申請單 #%1 %2" -#: html/Work/Elements/SelectSearch:27 +#: NOT FOUND IN SOURCE msgid "till" msgstr "至" -#: html/Edit/Elements/PickUsers:15 html/Edit/Global/Workflow/Condition:30 html/Edit/Users/Add.html:16 html/Edit/Users/Search.html:26 html/Work/Tickets/Cc:13 +#: NOT FOUND IN SOURCE msgid "to" msgstr "到" @@ -6380,16 +7876,16 @@ msgstr "到" msgid "true" msgstr "真" -#: lib/RT/Group_Overlay.pm:215 +#: lib/RT/Group_Overlay.pm:244 #. ($self->Id) msgid "undescribed group %1" msgstr "沒有æè¿°çš„群組 %1" -#: html/Work/Elements/SelectSearch:19 +#: NOT FOUND IN SOURCE msgid "unresolved" msgstr "未處ç†" -#: lib/RT/Group_Overlay.pm:190 +#: lib/RT/Group_Overlay.pm:219 #. ($user->Object->Name) msgid "user %1" msgstr "使用者 %1" @@ -6398,7 +7894,7 @@ msgstr "使用者 %1" msgid "warning" msgstr "è¦å‘Š" -#: lib/RT/Date.pm:323 +#: lib/RT/Date.pm:346 msgid "weeks" msgstr "週" @@ -6406,11 +7902,7 @@ msgstr "週" msgid "with template %1" msgstr "範本:%1" -#: lib/RT/Date.pm:331 +#: lib/RT/Date.pm:354 msgid "years" msgstr "å¹´" -#: lib/RT/Date.pm:331 -msgid "approving" -msgstr "å¾…ç°½æ ¸" - diff --git a/rt/lib/RT/Interface/CLI.pm b/rt/lib/RT/Interface/CLI.pm index a3c840af5..8c9329508 100644 --- a/rt/lib/RT/Interface/CLI.pm +++ b/rt/lib/RT/Interface/CLI.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} use strict; use RT; @@ -33,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.1 $ =~ /\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 $ =~ /\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 bc1a55da2..5db7c8aa7 100755 --- a/rt/lib/RT/Interface/Email.pm +++ b/rt/lib/RT/Interface/Email.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,27 +20,43 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::Interface::Email; use strict; use Mail::Address; use MIME::Entity; use RT::EmailParser; - +use File::Temp; BEGIN { use Exporter (); 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.1 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker + $VERSION = do { my @r = (q$Revision: 1.1.1.5 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # must be all one line, for MakeMaker @ISA = qw(Exporter); @@ -42,22 +64,22 @@ BEGIN { # as well as any optionally exported functions @EXPORT_OK = qw( &CreateUser - &GetMessageContent - &CheckForLoops - &CheckForSuspiciousSender - &CheckForAutoGenerated - &MailError - &ParseCcAddressesFromHead - &ParseSenderAddressFromHead - &ParseErrorsToAddressFromHead - &ParseAddressFromHeader + &GetMessageContent + &CheckForLoops + &CheckForSuspiciousSender + &CheckForAutoGenerated + &MailError + &ParseCcAddressesFromHead + &ParseSenderAddressFromHead + &ParseErrorsToAddressFromHead + &ParseAddressFromHeader &Gateway); } =head1 NAME - RT::Interface::CLI - helper functions for creating a commandline RT interface + RT::Interface::Email - helper functions for parsing email sent to RT =head1 SYNOPSIS @@ -117,8 +139,8 @@ sub CheckForSuspiciousSender { my ($From, $junk) = ParseSenderAddressFromHead($head); - if (($From =~ /^mailer-daemon/i) or - ($From =~ /^postmaster/i)){ + if (($From =~ /^mailer-daemon\@/i) or + ($From =~ /^postmaster\@/i)){ return (1); } @@ -137,13 +159,57 @@ sub CheckForAutoGenerated { if ($Precedence =~ /^(bulk|junk)/i) { return (1); } - else { - return (0); + + # First Class mailer uses this as a clue. + my $FCJunk = $head->get("X-FC-Machinegenerated") || ""; + if ($FCJunk =~ /^true/i) { + return (1); } + + return (0); } # }}} +# {{{ IsRTAddress + +=head2 IsRTAddress ADDRESS + +Takes a single parameter, an email address. +Returns true if that address matches the $RTAddressRegexp. +Returns false, otherwise. + +=cut + +sub IsRTAddress { + my $address = shift || ''; + + # Example: the following rule would tell RT not to Cc + # "tickets@noc.example.com" + if ( defined($RT::RTAddressRegexp) && + $address =~ /$RT::RTAddressRegexp/ ) { + return(1); + } else { + return (undef); + } +} + +# }}} + +# {{{ CullRTAddresses + +=head2 CullRTAddresses ARRAY + +Takes a single argument, an array of email addresses. +Returns the same array with any IsRTAddress()es weeded out. + +=cut + +sub CullRTAddresses { + return (grep { IsRTAddress($_) } @_); +} + +# }}} # {{{ sub MailError sub MailError { @@ -153,6 +219,7 @@ sub MailError { Subject => 'There has been an error', Explanation => 'Unexplained error', MIMEObj => undef, + Attach => undef, LogLevel => 'crit', @_); @@ -165,6 +232,7 @@ sub MailError { Bcc => $args{'Bcc'}, To => $args{'To'}, Subject => $args{'Subject'}, + Precedence => 'bulk', 'X-RT-Loop-Prevention' => $RT::rtname, ); @@ -175,14 +243,19 @@ sub MailError { $mimeobj->sync_headers(); $entity->add_part($mimeobj); } - + + if ($args{'Attach'}) { + $entity->attach(Data => $args{'Attach'}, Type => 'message/rfc822'); + + } + if ($RT::MailCommand eq 'sendmailpipe') { open (MAIL, "|$RT::SendmailPath $RT::SendmailArguments") || return(0); print MAIL $entity->as_string; close(MAIL); } else { - $entity->send($RT::MailCommand, $RT::MailParams); + $entity->send($RT::MailCommand, $RT::MailParams); } } @@ -194,12 +267,6 @@ sub CreateUser { my ($Username, $Address, $Name, $ErrorsTo, $entity) = @_; my $NewUser = RT::User->new($RT::SystemUser); - # This data is tainted by some Very Broken mailers. - # (Sometimes they send raw ISO 8859-1 data here. fear that. - require Encode; - $Username = Encode::encode(utf8 => $Username, Encode::FB_PERLQQ()) if defined $Username; - $Name = Encode::encode(utf8 => $Name, Encode::FB_PERLQQ()) if defined $Name; - my ($Val, $Message) = $NewUser->Create(Name => ($Username || $Address), EmailAddress => $Address, @@ -247,7 +314,8 @@ sub CreateUser { return $CurrentUser; } -# }}} +# }}} + # {{{ ParseCcAddressesFromHead =head2 ParseCcAddressesFromHead HASHREF @@ -273,10 +341,10 @@ sub ParseCcAddressesFromHead { foreach my $AddrObj (@ToObjs, @CcObjs) { my $Address = $AddrObj->address; $Address = $args{'CurrentUser'}->UserObj->CanonicalizeEmailAddress($Address); - next if ($args{'CurrentUser'}->EmailAddress =~ /^$Address$/i); - next if ($args{'QueueObj'}->CorrespondAddress =~ /^$Address$/i); - next if ($args{'QueueObj'}->CommentAddress =~ /^$Address$/i); - next if (RT::EmailParser::IsRTAddress(undef, $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); } @@ -342,6 +410,8 @@ Takes an address from $head->get('Line') and returns a tuple: user@host, friendl 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]; @@ -359,129 +429,226 @@ sub ParseAddressFromHeader{ } # }}} +# {{{ sub ParseTicketId + + +sub ParseTicketId { + my $Subject = shift; + my $id; + + my $test_name = $RT::EmailSubjectTagRegex || qr/\Q$RT::rtname\E/; + + if ( $Subject =~ s/\[$test_name\s+\#(\d+)\s*\]//i ) { + my $id = $1; + $RT::Logger->debug("Found a ticket ID. It's $id"); + return ($id); + } + else { + return (undef); + } +} + +# }}} + + +=head2 Gateway ARGSREF -=head2 Gateway +Takes parameters: + + action + queue + message + This performs all the "guts" of the mail rt-mailgate program, and is designed to be called from the web interface with a message, user object, and so on. +Can also take an optional 'ticket' parameter; this ticket id overrides +any ticket id found in the subject. + +Returns: + + An array of: + + (status code, message, optional ticket object) + + status code is a numeric value. + + for temporary failures, the status code should be -75 + + for permanent failures which are handled by RT, the status code + should be 0 + + for succces, the status code should be 1 + + + =cut sub Gateway { - my %args = ( message => undef, - queue => 1, - action => 'correspond', - ticket => undef, - @_ ); + my $argsref = shift; + + my %args = %$argsref; + + # Set some reasonable defaults + $args{'action'} ||= 'correspond'; + $args{'queue'} ||= '1'; # Validate the action - unless ( $args{'action'} =~ /^(comment|correspond|action)$/ ) { + my ($status, @actions) = IsCorrectAction( $args{'action'} ); + unless ( $status ) { # Can't safely loc this. What object do we loc around? - return ( 0, "Invalid 'action' parameter", undef ); + $RT::Logger->crit("Mail gateway called with an invalid action paramenter '".$actions[0]."' for queue '".$args{'queue'}."'"); + + return ( -75, "Invalid 'action' parameter", undef ); } my $parser = RT::EmailParser->new(); - $parser->ParseMIMEEntityFromScalar( $args{'message'} ); + + $parser->SmartParseMIMEEntityFromScalar( Message => $args{'message'}); + + if (!$parser->Entity()) { + MailError( + To => $RT::OwnerEmail, + Subject => "RT Bounce: Unparseable message", + Explanation => "RT couldn't process the message below", + Attach => $args{'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 $head = $Message->head; + + my ( $CurrentUser, $AuthStat, $error ); - my ( $CurrentUser, $AuthStat, $status, $error ); + # Initalize AuthStat so comparisons work correctly + $AuthStat = -9999999; my $ErrorsTo = ParseErrorsToAddressFromHead($head); - my $MessageId = $head->get('Message-Id') + my $MessageId = $head->get('Message-ID') || "<no-message-id-" . time . rand(2000) . "\@.$RT::Organization>"; #Pull apart the subject line my $Subject = $head->get('Subject') || ''; chomp $Subject; - - $args{'ticket'} ||= $parser->ParseTicketId($Subject); + $args{'ticket'} ||= ParseTicketId($Subject); my $SystemTicket; - if ($args{'ticket'} ) { + my $Right = 'CreateTicket'; + if ( $args{'ticket'} ) { $SystemTicket = RT::Ticket->new($RT::SystemUser); - $SystemTicket->Load($args{'ticket'}); + $SystemTicket->Load( $args{'ticket'} ); + # if there's an existing ticket, this must be a reply + $Right = 'ReplyToTicket'; } #Set up a queue object my $SystemQueueObj = RT::Queue->new($RT::SystemUser); $SystemQueueObj->Load( $args{'queue'} ); - # We can safely have no queue of we have a known-good ticket unless ( $args{'ticket'} || $SystemQueueObj->id ) { - MailError( - To => $RT::OwnerEmail, - Subject => "RT Bounce: $Subject", - Explanation => "RT couldn't find the queue: " . $args{'queue'}, - MIMEObj => $Message ); - return ( 0, "RT couldn't find the queue: " . $args{'queue'}, undef ); + return ( -75, "RT couldn't find the queue: " . $args{'queue'}, undef ); } # Authentication Level - # -1 - Get out. this user has been explicitly declined + # -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 - push @RT::MailPlugins, "Auth::MailFrom" unless @RT::MailPlugins; + push @RT::MailPlugins, "Auth::MailFrom" unless @RT::MailPlugins; + # Since this needs loading, no matter what - for (@RT::MailPlugins) { + foreach (@RT::MailPlugins) { my $Code; my $NewAuthStat; if ( ref($_) eq "CODE" ) { $Code = $_; } else { - $_ = "RT::Interface::Email::$_" unless /^RT::Interface::Email::/; + $_ = "RT::Interface::Email::".$_ unless $_ =~ /^RT::Interface::Email::/; eval "require $_;"; if ($@) { - die ("Couldn't load module $_: $@"); + $RT::Logger->crit("Couldn't load module '$_': $@"); next; } no strict 'refs'; if ( !defined( $Code = *{ $_ . "::GetCurrentUser" }{CODE} ) ) { - die ("No GetCurrentUser code found in $_ module"); + $RT::Logger->crit("No GetCurrentUser code found in $_ module"); next; } } - ( $CurrentUser, $NewAuthStat ) = $Code->( Message => $Message, - CurrentUser => $CurrentUser, - AuthLevel => $AuthStat, - Action => $args{'action'}, - Ticket => $SystemTicket, - Queue => $SystemQueueObj ); + foreach my $action ( @actions ) { + + ( $CurrentUser, $NewAuthStat ) = $Code->( + Message => $Message, + RawMessageRef => \$args{'message'}, + 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; + + last if $AuthStat == -1; + } - # You get the highest level of authentication you were assigned. last if $AuthStat == -1; - $AuthStat = $NewAuthStat if $NewAuthStat > $AuthStat; } # {{{ If authentication fails and no new user was created, get out. if ( !$CurrentUser or !$CurrentUser->Id or $AuthStat == -1 ) { # If the plugins refused to create one, they lose. - MailError( - Subject => "Could not load a valid user", - Explanation => <<EOT, + 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 your email. +for the creation of a new user for this email ($ErrorsTo). -Your RT administrator needs to grant 'Everyone' the right 'CreateTicket' -for this queue. +You might need to grant 'Everyone' the right '$Right' for the +queue @{[$args{'queue'}]}. EOT - MIMEObj => $Message, - LogLevel => 'error' ) - unless $AuthStat == -1; + MIMEObj => $Message, + LogLevel => 'error' + ); + + # 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 ); } @@ -508,10 +675,11 @@ EOT # {{{ Drop it if it's disallowed if ( $AuthStat == 0 ) { MailError( - To => $ErrorsTo, - Subject => "Permission Denied", - Explanation => "You do not have permission to communicate with RT", - MIMEObj => $Message ); + To => $ErrorsTo, + Subject => "Permission Denied", + Explanation => "You do not have permission to communicate with RT", + MIMEObj => $Message + ); } # }}} @@ -523,14 +691,16 @@ EOT #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); + 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); } # }}} @@ -538,17 +708,23 @@ EOT # {{{ 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->add( + 'RT-Relocated-Squelch-Replies-To', + $head->get('RT-Squelch-Replies-To') + ); $head->delete('RT-Squelch-Replies-To'); } if ($SquelchReplies) { - ## TODO: This is a hack. It should be some other way to - ## indicate that the transaction should be "silent". + # 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' ); } # }}} @@ -556,7 +732,8 @@ EOT my $Ticket = RT::Ticket->new($CurrentUser); # {{{ If we don't have a ticket Id, we're creating a new ticket - if ( !$args{'ticket'} ) { + if ( (!$SystemTicket || !$SystemTicket->Id) && + grep /^(comment|correspond)$/, @actions ) { # {{{ Create a new ticket @@ -564,82 +741,140 @@ EOT my @Requestors = ( $CurrentUser->id ); if ($RT::ParseNewMessageForTicketCcs) { - @Cc = ParseCcAddressesFromHead( Head => $head, - CurrentUser => $CurrentUser, - QueueObj => $SystemQueueObj ); + @Cc = ParseCcAddressesFromHead( + Head => $head, + CurrentUser => $CurrentUser, + QueueObj => $SystemQueueObj + ); } my ( $id, $Transaction, $ErrStr ) = $Ticket->Create( - Queue => $SystemQueueObj->Id, - Subject => $Subject, - Requestor => \@Requestors, - Cc => \@Cc, - MIMEObj => $Message ); + Queue => $SystemQueueObj->Id, + Subject => $Subject, + Requestor => \@Requestors, + Cc => \@Cc, + MIMEObj => $Message + ); if ( $id == 0 ) { - MailError( To => $ErrorsTo, - Subject => "Ticket creation failed", - Explanation => $ErrStr, - MIMEObj => $Message ); + MailError( + To => $ErrorsTo, + Subject => "Ticket creation failed", + Explanation => $ErrStr, + MIMEObj => $Message + ); $RT::Logger->error("Create failed: $id / $Transaction / $ErrStr "); return ( 0, "Ticket creation failed", $Ticket ); } + # strip comments&corresponds from the actions we don't need record twice + @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 ); + } - # If the action is comment, add a comment. - elsif ( $args{'action'} =~ /^(comment|correspond)$/i ) { - $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); + # }}} + 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 ); + } + unless ($status) { + + #Warn the sender that we couldn't actually submit the comment. + MailError( + To => $ErrorsTo, + Subject => "Message not recorded", + Explanation => $msg, + MIMEObj => $Message + ); + return ( 0, "Message not recorded", $Ticket ); + } } - - my ( $status, $msg ); - if ( $args{'action'} =~ /^correspond$/ ) { - ( $status, $msg ) = $Ticket->Correspond( MIMEObj => $Message ); + 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 ); + } } - else { - ( $status, $msg ) = $Ticket->Comment( MIMEObj => $Message ); + 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 ); + } } - unless ($status) { - - #Warn the sender that we couldn't actually submit the comment. - MailError( To => $ErrorsTo, - Subject => "Message not recorded", - Explanation => $msg, - MIMEObj => $Message ); - return ( 0, "Message not recorded", $Ticket ); + + else { + + #Return mail to the sender with an error + 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 + ); + $RT::Logger->crit( $args{'action'} . " type unknown for $MessageId" ); + return ( + -75, + "Configuration error: " + . $args{'action'} + . " not a recognized action", + $Ticket + ); + } } - else { - - #Return mail to the sender with an error - 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 ); - $RT::Logger->crit( $args{'action'} . " type unknown for $MessageId" ); - return ( 0, "Configuration error: " . $args{'action'} . " not a recognized action", $Ticket ); - - } - + return ( 1, "Success", $Ticket ); +} -return ( 1, "Success", $Ticket ); +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}); eval "require RT::Interface::Email_Local"; diff --git a/rt/lib/RT/Interface/Email/Auth/GnuPG.pm b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm new file mode 100755 index 000000000..2dfada755 --- /dev/null +++ b/rt/lib/RT/Interface/Email/Auth/GnuPG.pm @@ -0,0 +1,121 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# +package RT::Interface::Email::Auth::GnuPG; +use Mail::GnuPG; + +=head2 GetCurrentUser + +To use the gnupg-secured mail gateway, you need to do the following: + +Set up a gnupgp key directory with a pubring containing only the keys +you care about and specify the following in your SiteConfig.pm + +Set($RT::GPGKeyDir, "/path/to/keyring-directory"); +@RT::MailPlugins = qw(Auth::MailFrom Auth::GnuPG Filter::TakeAction); + + + +=cut + + + +sub GetCurrentUser { + my %args = ( + Message => undef, + RawMessageRef => undef, + CurrentUser => undef, + AuthLevel => undef, + Ticket => undef, + Queue => undef, + Action => undef, + @_ + ); + + my ( $val, $key, $address,$gpg ); + + eval { + + my $parser = RT::EmailParser->new(); + $parser->SmartParseMIMEEntityFromScalar(Message => ${$args{'RawMessageRef'}}, Decode => 0); + $gpg = Mail::GnuPG->new( keydir => $RT::GPGKeyDir ); + my $entity = $parser->Entity; + ( $val, $key, $address ) = $gpg->verify( $parser->Entity); + $RT::Logger->crit("Got $val - $key - $address"); + }; + + if ($@) { + $RT::Logger->crit($@); + } + + unless ($address) { + $RT::Logger->crit( "Couldn't find a valid signature" . join ( "\n", @{ $gpg->{'last_message'} } ) ); + return ( $args{'CurrentUser'}, $args{'AuthLevel'} ); + } + + my @addrs = Mail::Address->parse($address); + $address = $addrs[0]->address(); + + my $CurrentUser = RT::CurrentUser->new(); + $CurrentUser->LoadByEmail($address); + + if ( $CurrentUser->Id ) { + $RT::Logger->crit($address . " authenticated via PGP signature"); + return ( $CurrentUser, 2 ); + } + +} + +eval "require RT::Interface::Email::Auth::GnuPG_Vendor"; +die $@ + if ( $@ + && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Vendor.pm} ); +eval "require RT::Interface::Email::Auth::GnuPG_Local"; +die $@ + if ( $@ + && $@ !~ qr{^Can't locate RT/Interface/Email/Auth/GnuPG_Local.pm} ); + +1; diff --git a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm index eb778ff30..ef315dd53 100644 --- a/rt/lib/RT/Interface/Email/Auth/MailFrom.pm +++ b/rt/lib/RT/Interface/Email/Auth/MailFrom.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::Interface::Email::Auth::MailFrom; use RT::Interface::Email qw(ParseSenderAddressFromHead CreateUser); @@ -35,6 +57,7 @@ sub GetCurrentUser { Action => undef, @_ ); + # We don't need to do any external lookups my ( $Address, $Name ) = ParseSenderAddressFromHead( $args{'Message'}->head ); my $CurrentUser = RT::CurrentUser->new(); @@ -71,7 +94,7 @@ sub GetCurrentUser { # We have a ticket. that means we're commenting or corresponding if ( $args{'Action'} =~ /^comment$/i ) { - # check to see whether "Everybody" or "Unprivileged users" can comment on tickets + # check to see whether "Everyone" or "Unprivileged users" can comment on tickets unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'}, Right => 'CommentOnTicket' @@ -99,6 +122,36 @@ sub GetCurrentUser { } } + elsif ( $args{'Action'} =~ /^take$/i ) { + + # check to see whether "Everybody" or "Unprivileged users" can correspond on tickets + unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'}, + Right => 'OwnTicket' + ) + || $unpriv->PrincipalObj->HasRight( + Object => $args{'Queue'}, + Right => 'OwnTicket' + ) + ) { + return ( $args{'CurrentUser'}, 0 ); + } + + } + elsif ( $args{'Action'} =~ /^resolve$/i ) { + + # check to see whether "Everybody" or "Unprivileged users" can correspond on tickets + unless ( $everyone->PrincipalObj->HasRight(Object => $args{'Queue'}, + Right => 'ModifyTicket' + ) + || $unpriv->PrincipalObj->HasRight( + Object => $args{'Queue'}, + Right => 'ModifyTicket' + ) + ) { + return ( $args{'CurrentUser'}, 0 ); + } + + } else { return ( $args{'CurrentUser'}, 0 ); } @@ -110,15 +163,13 @@ sub GetCurrentUser { # check to see whether "Everybody" or "Unprivileged users" can create tickets in this queue unless ( $everyone->PrincipalObj->HasRight( Object => $args{'Queue'}, Right => 'CreateTicket' ) - || $unpriv->PrincipalObj->HasRight( Object => $args{'Queue'}, - Right => 'CreateTicket' ) ) { return ( $args{'CurrentUser'}, 0 ); } } - $CurrentUser = CreateUser( undef, $Address, $Name, $args{'Message'} ); + $CurrentUser = CreateUser( undef, $Address, $Name, $Address, $args{'Message'} ); return ( $CurrentUser, 1 ); } diff --git a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm b/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm index f00e2d82b..c552d76e6 100644 --- a/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm +++ b/rt/lib/RT/Interface/Email/Filter/SpamAssassin.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,28 +20,53 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} package RT::Interface::Email::Filter::SpamAssassin; use Mail::SpamAssassin; my $spamtest = Mail::SpamAssassin->new(); sub GetCurrentUser { - my $item = shift; - my $status = $spamtest->check ($item); - return (undef, 0) unless $status->is_spam(); + my %args = ( + Message => undef, + CurrentUser => undef, + AuthLevel => undef, + @_ + ); + my $status = $spamtest->check( $args{'Message'} ); + return ( $args{'CurrentUser'}, $args{'AuthLevel'} ) + unless $status->is_spam(); + eval { $status->rewrite_mail() }; - if ($status->get_hits > $status->get_required_hits()*1.5) { + if ( $status->get_hits > $status->get_required_hits() * 1.5 ) { + # Spammy indeed - return (undef, -1); + return ( $args{'CurrentUser'}, -1 ); } - return (undef, 0); + return ( $args{'CurrentUser'}, $args{'AuthLevel'} ); + } =head1 NAME diff --git a/rt/lib/RT/Interface/REST.pm b/rt/lib/RT/Interface/REST.pm new file mode 100644 index 000000000..279ddf4b3 --- /dev/null +++ b/rt/lib/RT/Interface/REST.pm @@ -0,0 +1,274 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# lib/RT/Interface/REST.pm +# + +package RT::Interface::REST; +use strict; +use RT; + +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 }; + + @ISA = qw(Exporter); + @EXPORT = qw(expand_list form_parse form_compose vpush vsplit); +} + +my $field = '[a-zA-Z][a-zA-Z0-9_-]*'; + +sub expand_list { + my ($list) = @_; + my ($elt, @elts, %elts); + + foreach $elt (split /,/, $list) { + if ($elt =~ /^(\d+)-(\d+)$/) { push @elts, ($1..$2) } + else { push @elts, $elt } + } + + @elts{@elts}=(); + return sort {$a<=>$b} keys %elts; +} + +# Returns a reference to an array of parsed forms. +sub form_parse { + my $state = 0; + my @forms = (); + my @lines = split /\n/, $_[0]; + my ($c, $o, $k, $e) = ("", [], {}, ""); + + LINE: + while (@lines) { + my $line = shift @lines; + + next LINE if $line eq ''; + + if ($line eq '--') { + # We reached the end of one form. We'll ignore it if it was + # empty, and store it otherwise, errors and all. + if ($e || $c || @$o) { + push @forms, [ $c, $o, $k, $e ]; + $c = ""; $o = []; $k = {}; $e = ""; + } + $state = 0; + } + elsif ($state != -1) { + if ($state == 0 && $line =~ /^#/) { + # Read an optional block of comments (only) at the start + # of the form. + $state = 1; + $c = $line; + while (@lines && $lines[0] =~ /^#/) { + $c .= "\n".shift @lines; + } + $c .= "\n"; + } + elsif ($state <= 1 && $line =~ /^($field):(?:\s+(.*))?$/) { + # Read a field: value specification. + my $f = $1; + my @v = ($2 || ()); + + # Read continuation lines, if any. + while (@lines && ($lines[0] eq '' || $lines[0] =~ /^\s+/)) { + push @v, shift @lines; + } + pop @v while (@v && $v[-1] eq ''); + + # Strip longest common leading indent from text. + my ($ws, $ls) = (""); + foreach $ls (map {/^(\s+)/} @v[1..$#v]) { + $ws = $ls if (!$ws || length($ls) < length($ws)); + } + s/^$ws// foreach @v; + + push(@$o, $f) unless exists $k->{$f}; + vpush($k, $f, join("\n", @v)); + + $state = 1; + } + elsif ($line !~ /^#/) { + # We've found a syntax error, so we'll reconstruct the + # form parsed thus far, and add an error marker. (>>) + $state = -1; + $e = form_compose([[ "", $o, $k, "" ]]); + $e.= $line =~ /^>>/ ? "$line\n" : ">> $line\n"; + } + } + else { + # We saw a syntax error earlier, so we'll accumulate the + # contents of this form until the end. + $e .= "$line\n"; + } + } + push(@forms, [ $c, $o, $k, $e ]) if ($e || $c || @$o); + + my $l; + foreach $l (keys %$k) { + $k->{$l} = vsplit($k->{$l}) if (ref $k->{$l} eq 'ARRAY'); + } + + return \@forms; +} + +# Returns text representing a set of forms. +sub form_compose { + my ($forms) = @_; + my (@text, $form); + + foreach $form (@$forms) { + my ($c, $o, $k, $e) = @$form; + my $text = ""; + + if ($c) { + $c =~ s/\n*$/\n/; + $text = "$c\n"; + } + if ($e) { + $text .= $e; + } + elsif ($o) { + my (@lines, $key); + + foreach $key (@$o) { + my ($line, $sp, $v); + my @values = (ref $k->{$key} eq 'ARRAY') ? + @{ $k->{$key} } : + $k->{$key}; + + $sp = " "x(length("$key: ")); + $sp = " "x4 if length($sp) > 16; + + foreach $v (@values) { + if ($v =~ /\n/) { + $v =~ s/^/$sp/gm; + $v =~ s/^$sp//; + + if ($line) { + push @lines, "$line\n\n"; + $line = ""; + } + elsif (@lines && $lines[-1] !~ /\n\n$/) { + $lines[-1] .= "\n"; + } + push @lines, "$key: $v\n\n"; + } + elsif ($line && + length($line)+length($v)-rindex($line, "\n") >= 70) + { + $line .= ",\n$sp$v"; + } + else { + $line = $line ? "$line, $v" : "$key: $v"; + } + } + + $line = "$key:" unless @values; + if ($line) { + if ($line =~ /\n/) { + if (@lines && $lines[-1] !~ /\n\n$/) { + $lines[-1] .= "\n"; + } + $line .= "\n"; + } + push @lines, "$line\n"; + } + } + + $text .= join "", @lines; + } + else { + chomp $text; + } + push @text, $text; + } + + return join "\n--\n\n", @text; +} + +# Add a value to a (possibly multi-valued) hash key. +sub vpush { + my ($hash, $key, $val) = @_; + my @val = ref $val eq 'ARRAY' ? @$val : $val; + + if (exists $hash->{$key}) { + unless (ref $hash->{$key} eq 'ARRAY') { + my @v = $hash->{$key} ne '' ? $hash->{$key} : (); + $hash->{$key} = \@v; + } + push @{ $hash->{$key} }, @val; + } + else { + $hash->{$key} = $val; + } +} + +# "Normalise" a hash key that's known to be multi-valued. +sub vsplit { + my ($val) = @_; + my ($line, $word, @words); + + foreach $line (map {split /\n/} (ref $val eq 'ARRAY') ? @$val : $val) + { + # XXX: This should become a real parser, à la Text::ParseWords. + $line =~ s/^\s+//; + $line =~ s/\s+$//; + push @words, split /\s*,\s*/, $line; + } + + return \@words; +} + +1; + +=head1 NAME + + RT::Interface::REST - helper functions for the REST interface. + +=head1 SYNOPSIS + + Only the REST should use this module. diff --git a/rt/lib/RT/Interface/Web.pm b/rt/lib/RT/Interface/Web.pm index 5097f54a4..724d7e592 100644 --- a/rt/lib/RT/Interface/Web.pm +++ b/rt/lib/RT/Interface/Web.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} ## Portions Copyright 2000 Tobias Brox <tobix@fsck.com> ## This is a library of static subs to be used by the Mason web @@ -45,94 +67,102 @@ use strict; +# {{{ EscapeUTF8 +=head2 EscapeUTF8 SCALARREF -# {{{ sub NewApacheHandler - -=head2 NewApacheHandler - - Takes extra options to pass to HTML::Mason::ApacheHandler->new - Returns a new Mason::ApacheHandler object +does a css-busting but minimalist escaping of whatever html you're passing in. =cut -sub NewApacheHandler { - require HTML::Mason::ApacheHandler; - my $ah = new HTML::Mason::ApacheHandler( - - comp_root => [ - [ local => $RT::MasonLocalComponentRoot ], - [ standard => $RT::MasonComponentRoot ] - ], - args_method => "CGI", - default_escape_flags => 'h', - allow_globals => [qw(%session)], - data_dir => "$RT::MasonDataDir", - @_ - ); +sub EscapeUTF8 { + my $ref = shift; + return unless defined $$ref; + my $val = $$ref; + use bytes; + $val =~ s/&/&/g; + $val =~ s/</</g; + $val =~ s/>/>/g; + $val =~ s/\(/(/g; + $val =~ s/\)/)/g; + $val =~ s/"/"/g; + $val =~ s/'/'/g; + $$ref = $val; + Encode::_utf8_on($$ref); + - $ah->interp->set_escape( h => \&RT::Interface::Web::EscapeUTF8 ); - - return ($ah); } # }}} -# {{{ sub NewCGIHandler +# {{{ EscapeURI -=head2 NewCGIHandler +=head2 EscapeURI SCALARREF - Returns a new Mason::CGIHandler object +Escapes URI component according to RFC2396 =cut -sub NewCGIHandler { - my %args = ( - @_ - ); +use Encode qw(); +sub EscapeURI { + my $ref = shift; + $$ref = Encode::encode_utf8( $$ref ); + $$ref =~ s/([^a-zA-Z0-9_.!~*'()-])/uc sprintf("%%%02X", ord($1))/eg; + Encode::_utf8_on( $$ref ); +} - my $handler = HTML::Mason::CGIHandler->new( - comp_root => [ - [ local => $RT::MasonLocalComponentRoot ], - [ standard => $RT::MasonComponentRoot ] - ], - data_dir => "$RT::MasonDataDir", - default_escape_flags => 'h', - allow_globals => [qw(%session)] - ); - +# }}} + +# {{{ WebCanonicalizeInfo - $handler->interp->set_escape( h => \&RT::Interface::Web::EscapeUTF8 ); +=head2 WebCanonicalizeInfo(); +Different web servers set different environmental varibles. This +function must return something suitable for REMOTE_USER. By default, +just downcase $ENV{'REMOTE_USER'} + +=cut - return ($handler); +sub WebCanonicalizeInfo { + my $user; + if ( defined $ENV{'REMOTE_USER'} ) { + $user = lc ( $ENV{'REMOTE_USER'} ) if( length($ENV{'REMOTE_USER'}) ); + } + + return $user; } + # }}} +# {{{ WebExternalAutoInfo -# {{{ EscapeUTF8 +=head2 WebExternalAutoInfo($user); -=head2 EscapeUTF8 SCALARREF - -does a css-busting but minimalist escaping of whatever html you're passing in. +Returns a hash of user attributes, used when WebExternalAuto is set. =cut -sub EscapeUTF8 { - my $ref = shift; - my $val = $$ref; - use bytes; - $val =~ s/&/&/g; - $val =~ s/</</g; - $val =~ s/>/>/g; - $val =~ s/\(/(/g; - $val =~ s/\)/)/g; - $val =~ s/"/"/g; - $val =~ s/'/'/g; - $$ref = $val; - Encode::_utf8_on($$ref); +sub WebExternalAutoInfo { + my $user = shift; + + my %user_info; + $user_info{'Privileged'} = 1; + + if ($^O !~ /^(?:riscos|MacOS|MSWin32|dos|os2)$/) { + # Populate fields with information from Unix /etc/passwd + + my ($comments, $realname) = (getpwnam($user))[5, 6]; + $user_info{'Comments'} = $comments if defined $comments; + $user_info{'RealName'} = $realname if defined $realname; + } + elsif ($^O eq 'MSWin32' and eval 'use Net::AdminMisc; 1') { + # Populate fields with information from NT domain controller + } + + # and return the wad of stuff + return {%user_info}; } # }}} @@ -160,10 +190,13 @@ sub loc { UNIVERSAL::can($session{'CurrentUser'}, 'loc')){ return($session{'CurrentUser'}->loc(@_)); } - else { - my $u = RT::CurrentUser->new($RT::SystemUser); + elsif ( my $u = eval { RT::CurrentUser->new($RT::SystemUser->Id) } ) { return ($u->loc(@_)); } + else { + # pathetic case -- SystemUser is gone. + return $_[0]; + } } # }}} @@ -189,7 +222,7 @@ sub loc_fuzzy { return($session{'CurrentUser'}->loc_fuzzy($msg)); } else { - my $u = RT::CurrentUser->new($RT::SystemUser); + my $u = RT::CurrentUser->new($RT::SystemUser->Id); return ($u->loc_fuzzy($msg)); } } @@ -261,6 +294,7 @@ sub CreateTicket { } my %create_args = ( + Type => $ARGS{'Type'} || 'ticket', Queue => $ARGS{'Queue'}, Owner => $ARGS{'Owner'}, InitialPriority => $ARGS{'InitialPriority'}, @@ -277,36 +311,81 @@ sub CreateTicket { Starts => $starts->ISO, MIMEObj => $MIMEObj ); - foreach my $arg (%ARGS) { - if ($arg =~ /^CustomField-(\d+)(.*?)$/) { + foreach my $arg (keys %ARGS) { + my $cfid = $1; + next if ($arg =~ /-Magic$/); - $create_args{"CustomField-".$1} = $ARGS{"$arg"}; + #Object-RT::Ticket--CustomField-3-Values + if ($arg =~ /^Object-RT::Transaction--CustomField-/) { + $create_args{$arg} = $ARGS{$arg}; + } + elsif ($arg =~ /^Object-RT::Ticket--CustomField-(\d+)(.*?)$/) { + my $cfid = $1; + my $cf = RT::CustomField->new( $session{'CurrentUser'}); + $cf->Load($cfid); + + if ( $cf->Type eq 'Freeform' && ! $cf->SingleValue) { + $ARGS{$arg} =~ s/\r\n/\n/g; + $ARGS{$arg} = [split('\n', $ARGS{$arg})]; + } + + if ( $cf->Type =~ /text/i) { # Catch both Text and Wikitext + $ARGS{$arg} =~ s/\r//g; + } + + if ( $arg =~ /-Upload$/ ) { + $create_args{"CustomField-".$cfid} = _UploadedFile($arg); + } + else { + $create_args{"CustomField-".$cfid} = $ARGS{"$arg"}; + } } } - my ( $id, $Trans, $ErrMsg ) = $Ticket->Create(%create_args); - unless ( $id && $Trans ) { - Abort($ErrMsg); + + + # XXX TODO This code should be about six lines. and badly needs refactoring. + + # {{{ turn new link lists into arrays, and pass in the proper arguments + my (@dependson, @dependedonby, @parents, @children, @refersto, @referredtoby); + + foreach my $luri ( split ( / /, $ARGS{"new-DependsOn"} ) ) { + $luri =~ s/\s*$//; # Strip trailing whitespace + push @dependson, $luri; } - my @linktypes = qw( DependsOn MemberOf RefersTo ); + $create_args{'DependsOn'} = \@dependson; - foreach my $linktype (@linktypes) { - foreach my $luri ( split ( / /, $ARGS{"new-$linktype"} ) ) { - $luri =~ s/\s*$//; # Strip trailing whitespace - my ( $val, $msg ) = $Ticket->AddLink( - Target => $luri, - Type => $linktype - ); - push ( @Actions, $msg ) unless ($val); - } + foreach my $luri ( split ( / /, $ARGS{"DependsOn-new"} ) ) { + push @dependedonby, $luri; + } + $create_args{'DependedOnBy'} = \@dependedonby; - foreach my $luri ( split ( / /, $ARGS{"$linktype-new"} ) ) { - my ( $val, $msg ) = $Ticket->AddLink( - Base => $luri, - Type => $linktype - ); + foreach my $luri ( split ( / /, $ARGS{"new-MemberOf"} ) ) { + $luri =~ s/\s*$//; # Strip trailing whitespace + push @parents, $luri; + } + $create_args{'Parents'} = \@parents; - push ( @Actions, $msg ) unless ($val); - } + foreach my $luri ( split ( / /, $ARGS{"MemberOf-new"} ) ) { + push @children, $luri; + } + $create_args{'Children'} = \@children; + + foreach my $luri ( split ( / /, $ARGS{"new-RefersTo"} ) ) { + $luri =~ s/\s*$//; # Strip trailing whitespace + push @refersto, $luri; + } + $create_args{'RefersTo'} = \@refersto; + + foreach my $luri ( split ( / /, $ARGS{"RefersTo-new"} ) ) { + push @referredtoby, $luri; + } + $create_args{'ReferredToBy'} = \@referredtoby; + # }}} + + + my ( $id, $Trans, $ErrMsg ) = $Ticket->Create(%create_args); + unless ( $id && $Trans ) { + Abort($ErrMsg); } push ( @Actions, split("\n", $ErrMsg) ); @@ -365,7 +444,10 @@ sub ProcessUpdateMessage { ); #Make the update content have no 'weird' newlines in it - if ( $args{ARGSRef}->{'UpdateContent'} ) { + if ( $args{ARGSRef}->{'UpdateTimeWorked'} + || $args{ARGSRef}->{'UpdateContent'} + || $args{ARGSRef}->{'UpdateAttachments'} ) + { if ( $args{ARGSRef}->{'UpdateSubject'} eq $args{'TicketObj'}->Subject() ) @@ -374,43 +456,76 @@ sub ProcessUpdateMessage { } my $Message = MakeMIMEEntity( - Subject => $args{ARGSRef}->{'UpdateSubject'}, - Body => $args{ARGSRef}->{'UpdateContent'}, + Subject => $args{ARGSRef}->{'UpdateSubject'}, + Body => $args{ARGSRef}->{'UpdateContent'}, ); - if ($args{ARGSRef}->{'UpdateAttachments'}) { - $Message->make_multipart; - $Message->add_part($_) foreach values %{$args{ARGSRef}->{'UpdateAttachments'}}; - } - - ## TODO: Implement public comments - if ( $args{ARGSRef}->{'UpdateType'} =~ /^(private|public)$/ ) { - my ( $Transaction, $Description ) = $args{TicketObj}->Comment( - CcMessageTo => $args{ARGSRef}->{'UpdateCc'}, - BccMessageTo => $args{ARGSRef}->{'UpdateBcc'}, - MIMEObj => $Message, - TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'} - ); - push ( @{ $args{Actions} }, $Description ); - } - elsif ( $args{ARGSRef}->{'UpdateType'} eq 'response' ) { - my ( $Transaction, $Description ) = $args{TicketObj}->Correspond( - CcMessageTo => $args{ARGSRef}->{'UpdateCc'}, - BccMessageTo => $args{ARGSRef}->{'UpdateBcc'}, - MIMEObj => $Message, - TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'} - ); - push ( @{ $args{Actions} }, $Description ); + $Message->head->add( 'Message-ID' => + "<rt-" + . $RT::VERSION . "-" + . $$ . "-" + . CORE::time() . "-" + . int(rand(2000)) . "." + . $args{'TicketObj'}->id . "-" + . "0" . "-" # Scrip + . "0" . "@" # Email sent + . $RT::Organization + . ">" ); + my $old_txn = RT::Transaction->new( $session{'CurrentUser'} ); + if ( $args{ARGSRef}->{'QuoteTransaction'} ) { + $old_txn->Load( $args{ARGSRef}->{'QuoteTransaction'} ); } else { - push ( @{ $args{'Actions'} }, - loc("Update type was neither correspondence nor comment."). - " ". - loc("Update not recorded.") - ); + $old_txn = $args{TicketObj}->Transactions->First(); } + + if ( $old_txn->Message && $old_txn->Message->First ) { + my @in_reply_to = split(/\s+/m, $old_txn->Message->First->GetHeader('In-Reply-To') || ''); + my @references = split(/\s+/m, $old_txn->Message->First->GetHeader('References') || '' ); + my @msgid = split(/\s+/m,$old_txn->Message->First->GetHeader('Message-ID') || ''); + my @rtmsgid = split(/\s+/m,$old_txn->Message->First->GetHeader('RT-Message-ID') || ''); + + $Message->head->replace( 'In-Reply-To', join (' ', @rtmsgid ? @rtmsgid : @msgid)); + $Message->head->replace( 'References', join(' ', @references, @msgid, @rtmsgid)); + } + + if ( $args{ARGSRef}->{'UpdateAttachments'} ) { + $Message->make_multipart; + $Message->add_part($_) + foreach values %{ $args{ARGSRef}->{'UpdateAttachments'} }; + } + + ## TODO: Implement public comments + if ( $args{ARGSRef}->{'UpdateType'} =~ /^(private|public)$/ ) { + my ( $Transaction, $Description, $Object ) = $args{TicketObj}->Comment( + CcMessageTo => $args{ARGSRef}->{'UpdateCc'}, + BccMessageTo => $args{ARGSRef}->{'UpdateBcc'}, + MIMEObj => $Message, + TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'} + ); + push( @{ $args{Actions} }, $Description ); + $Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object; + } + elsif ( $args{ARGSRef}->{'UpdateType'} eq 'response' ) { + my ( $Transaction, $Description, $Object ) = + $args{TicketObj}->Correspond( + CcMessageTo => $args{ARGSRef}->{'UpdateCc'}, + BccMessageTo => $args{ARGSRef}->{'UpdateBcc'}, + MIMEObj => $Message, + TimeTaken => $args{ARGSRef}->{'UpdateTimeWorked'} + ); + push( @{ $args{Actions} }, $Description ); + $Object->UpdateCustomFields( ARGSRef => $args{ARGSRef} ) if $Object; + } + else { + push( + @{ $args{'Actions'} }, + loc("Update type was neither correspondence nor comment.") . " " + . loc("Update not recorded.") + ); } } +} # }}} @@ -433,7 +548,8 @@ sub MakeMIMEEntity { Cc => undef, Body => undef, AttachmentFieldName => undef, - map Encode::encode_utf8($_), @_, +# map Encode::encode_utf8($_), @_, + @_, ); #Make the update content have no 'weird' newlines in it @@ -449,6 +565,7 @@ sub MakeMIMEEntity { Subject => $args{'Subject'} || "", From => $args{'From'}, Cc => $args{'Cc'}, + Charset => 'utf8', Data => [ $args{'Body'} ] ); } @@ -463,7 +580,14 @@ sub MakeMIMEEntity { #foreach my $filehandle (@filenames) { - my ( $fh, $temp_file ) = tempfile(); + my ( $fh, $temp_file ); + for ( 1 .. 10 ) { + # on NFS and NTFS, it is possible that tempfile() conflicts + # with other processes, causing a race condition. we try to + # accommodate this by pausing and retrying. + last if ($fh, $temp_file) = eval { tempfile( UNLINK => 1) }; + sleep 1; + } binmode $fh; #thank you, windows my ($buffer); @@ -481,7 +605,7 @@ sub MakeMIMEEntity { $Message->attach( Path => $temp_file, - Filename => $filename, + Filename => Encode::decode_utf8($filename), Type => $uploadinfo->{'Content-Type'}, ); close($fh); @@ -594,13 +718,13 @@ sub ProcessSearchQuery { # }}} # {{{ Limit requestor email + if ( $args{ARGS}->{'ValueOfWatcherRole'} ne '' ) { + $session{'tickets'}->LimitWatcher( + TYPE => $args{ARGS}->{'WatcherRole'}, + VALUE => $args{ARGS}->{'ValueOfWatcherRole'}, + OPERATOR => $args{ARGS}->{'WatcherRoleOp'}, - if ( $args{ARGS}->{'ValueOfRequestor'} ne '' ) { - my $alias = $session{'tickets'}->LimitRequestor( - VALUE => $args{ARGS}->{'ValueOfRequestor'}, - OPERATOR => $args{ARGS}->{'RequestorOp'}, ); - } # }}} @@ -745,19 +869,6 @@ sub ParseDateToISO { # }}} -# {{{ sub Config -# TODO: This might eventually read the cookies, user configuration -# information from the DB, queue configuration information from the -# DB, etc. - -sub Config { - my $args = shift; - my $key = shift; - return $args->{$key} || $RT::WebOptions{$key}; -} - -# }}} - # {{{ sub ProcessACLChanges sub ProcessACLChanges { @@ -780,17 +891,13 @@ sub ProcessACLChanges { my $obj; - if ($object_type eq 'RT::Queue') { - $obj = RT::Queue->new($session{'CurrentUser'}); - $obj->Load($object_id); - } elsif ($object_type eq 'RT::Group') { - $obj = RT::Group->new($session{'CurrentUser'}); - $obj->Load($object_id); - - } elsif ($object_type eq 'RT::System') { + if ($object_type eq 'RT::System') { $obj = $RT::System; + } elsif ($RT::ACE::OBJECT_TYPES{$object_type}) { + $obj = $object_type->new($session{'CurrentUser'}); + $obj->Load($object_id); } else { - push (@results, loc("System Error"). + push (@results, loc("System Error"). ': '. loc("Rights could not be granted for [_1]", $object_type)); next; } @@ -813,17 +920,13 @@ sub ProcessACLChanges { next unless ($right); my $obj; - if ($object_type eq 'RT::Queue') { - $obj = RT::Queue->new($session{'CurrentUser'}); - $obj->Load($object_id); - } elsif ($object_type eq 'RT::Group') { - $obj = RT::Group->new($session{'CurrentUser'}); - $obj->Load($object_id); - - } elsif ($object_type eq 'RT::System') { + if ($object_type eq 'RT::System') { $obj = $RT::System; + } elsif ($RT::ACE::OBJECT_TYPES{$object_type}) { + $obj = $object_type->new($session{'CurrentUser'}); + $obj->Load($object_id); } else { - push (@results, loc("System Error"). + push (@results, loc("System Error"). ': '. loc("Rights could not be revoked for [_1]", $object_type)); next; } @@ -859,52 +962,12 @@ sub UpdateRecordObject { @_ ); - my (@results); - - my $object = $args{'Object'}; - my $attributes = $args{'AttributesRef'}; - my $ARGSRef = $args{'ARGSRef'}; - foreach my $attribute (@$attributes) { - my $value; - if ( defined $ARGSRef->{$attribute} ) { - $value = $ARGSRef->{$attribute}; - } - elsif ( - defined( $args{'AttributePrefix'} ) - && defined( - $ARGSRef->{ $args{'AttributePrefix'} . "-" . $attribute } - ) - ) { - $value = $ARGSRef->{ $args{'AttributePrefix'} . "-" . $attribute }; - - } else { - next; - } + my $Object = $args{'Object'}; + my @results = $Object->Update(AttributesRef => $args{'AttributesRef'}, + ARGSRef => $args{'ARGSRef'}, + AttributePrefix => $args{'AttributePrefix'} + ); - $value =~ s/\r\n/\n/gs; - - if ($value ne $object->$attribute()){ - - my $method = "Set$attribute"; - my ( $code, $msg ) = $object->$method($value); - - push @results, loc($attribute) . ': ' . loc_fuzzy($msg); -=for loc - "[_1] could not be set to [_2].", # loc - "That is already the current value", # loc - "No value sent to _Set!\n", # loc - "Illegal value for [_1]", # loc - "The new value has been set.", # loc - "No column specified", # loc - "Immutable field", # loc - "Nonexistant field?", # loc - "Invalid data", # loc - "Couldn't find row", # loc - "Missing a primary key?: [_1]", # loc - "Found Object", # loc -=cut - }; - } return (@results); } @@ -953,6 +1016,17 @@ sub ProcessCustomFieldUpdates { my ( $err, $msg ) = $Object->DeleteValue($id); push ( @results, $msg ); } + + my $vals = $Object->Values(); + while (my $cfv = $vals->Next()) { + if (my $so = $ARGSRef->{ 'CustomField-' . $Object->Id . '-SortOrder' . $cfv->Id }) { + if ($cfv->SortOrder != $so) { + my ( $err, $msg ) = $cfv->SetSortOrder($so); + push ( @results, $msg ); + } + } + } + return (@results); } @@ -985,6 +1059,7 @@ sub ProcessTicketBasics { TimeEstimated TimeWorked TimeLeft + Type Status Queue ); @@ -997,6 +1072,11 @@ sub ProcessTicketBasics { } } + + # Status isn't a field that can be set to a null value. + # RT core complains if you try + delete $ARGSRef->{'Status'} unless ($ARGSRef->{'Status'}); + my @results = UpdateRecordObject( AttributesRef => \@attribs, Object => $TicketObj, @@ -1025,109 +1105,158 @@ sub ProcessTicketBasics { # }}} -# {{{ Sub ProcessTicketCustomFieldUpdates - sub ProcessTicketCustomFieldUpdates { - my %args = ( - ARGSRef => undef, - @_ - ); + my %args = @_; + $args{'Object'} = delete $args{'TicketObj'}; + my $ARGSRef = { %{ $args{'ARGSRef'} } }; - my @results; + # Build up a list of objects that we want to work with + my %custom_fields_to_mod; + foreach my $arg ( keys %$ARGSRef ) { + if ( $arg =~ /^Ticket-(\d+-.*)/) { + $ARGSRef->{"Object-RT::Ticket-$1"} = delete $ARGSRef->{$arg}; + } + elsif ( $arg =~ /^CustomField-(\d+-.*)/) { + $ARGSRef->{"Object-RT::Ticket--$1"} = delete $ARGSRef->{$arg}; + } + } + + return ProcessObjectCustomFieldUpdates(%args, ARGSRef => $ARGSRef); +} +sub ProcessObjectCustomFieldUpdates { + my %args = @_; my $ARGSRef = $args{'ARGSRef'}; + my @results; - # Build up a list of tickets that we want to work with - my %tickets_to_mod; + # Build up a list of objects that we want to work with my %custom_fields_to_mod; - foreach my $arg ( keys %{$ARGSRef} ) { - if ( $arg =~ /^Ticket-(\d+)-CustomField-(\d+)-/ ) { - - # For each of those tickets, find out what custom fields we want to work with. - $custom_fields_to_mod{$1}{$2} = 1; + 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; } } - # For each of those tickets - foreach my $tick ( keys %custom_fields_to_mod ) { - my $Ticket = RT::Ticket->new( $session{'CurrentUser'} ); - $Ticket->Load($tick); - - # For each custom field - foreach my $cf ( keys %{ $custom_fields_to_mod{$tick} } ) { - + # 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); + } + + # 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} ) { - # 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 (exists $ARGSRef->{$1.'-Values'}) ; - - $arg = $1."-Values"; - $ARGSRef->{$1."-Values"} = undef; - - } - next unless ( $arg =~ /^Ticket-$tick-CustomField-$cf-/ ); - my @values = - ( ref( $ARGSRef->{$arg} ) eq 'ARRAY' ) - ? @{ $ARGSRef->{$arg} } - : ( $ARGSRef->{$arg} ); - if ( ( $arg =~ /-AddValue$/ ) || ( $arg =~ /-Value$/ ) ) { - foreach my $value (@values) { - next unless ($value); - my ( $val, $msg ) = $Ticket->AddCustomFieldValue( - Field => $cf, - Value => $value - ); - push ( @results, $msg ); - } - } - elsif ( $arg =~ /-DeleteValues$/ ) { - foreach my $value (@values) { - next unless ($value); - my ( $val, $msg ) = $Ticket->DeleteCustomFieldValue( + 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, - Value => $value - ); - push ( @results, $msg ); - } - } - elsif ( $arg =~ /-Values$/ and $CustomFieldObj->Type !~ /Entry/) { - my $cf_values = $Ticket->CustomFieldValues($cf); - - my %values_hash; - foreach my $value (@values) { - next unless ($value); - - # build up a hash of values that the new set has - $values_hash{$value} = 1; - - unless ( $cf_values->HasEntry($value) ) { - my ( $val, $msg ) = $Ticket->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 ) = $Ticket->DeleteCustomFieldValue( - Field => $cf, - Value => $cf_value->Content - ); - push ( @results, $msg); - - } - - } - } - elsif ( $arg =~ /-Values$/ ) { - my $cf_values = $Ticket->CustomFieldValues($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; @@ -1143,24 +1272,23 @@ sub ProcessTicketCustomFieldUpdates { # now add/replace extra things, if any foreach my $value (@values) { - my ( $val, $msg ) = $Ticket->AddCustomFieldValue( + my ( $val, $msg ) = $Object->AddCustomFieldValue( Field => $cf, Value => $value ); push ( @results, $msg ); } } - else { - push ( @results, "User asked for an unknown update type for custom field " . $cf->Name . " for ticket " . $Ticket->id ); - } - } - } - return (@results); + 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); + } } } -# }}} - # {{{ sub ProcessTicketWatchers =head2 ProcessTicketWatchers ( TicketObj => $Ticket, ARGSRef => \%ARGS ); @@ -1185,7 +1313,7 @@ sub ProcessTicketWatchers { foreach my $key ( keys %$ARGSRef ) { # {{{ Delete deletable watchers - if ( ( $key =~ /^Ticket-DelWatcher-Type-(.*)-Principal-(\d+)$/ ) ) { + if ( ( $key =~ /^Ticket-DeleteWatcher-Type-(.*)-Principal-(\d+)$/ ) ) { my ( $code, $msg ) = $Ticket->DeleteWatcher(PrincipalId => $2, Type => $1); @@ -1193,8 +1321,8 @@ sub ProcessTicketWatchers { } # Delete watchers in the simple style demanded by the bulk manipulator - elsif ( $key =~ /^Delete(Requestor|Cc|AdminCc)$/ ) { - my ( $code, $msg ) = $Ticket->DeleteWatcher( Type => $ARGSRef->{$key}, PrincipalId => $1 ); + elsif ( $key =~ /^Delete(Requestor|Cc|AdminCc)$/ ) { + my ( $code, $msg ) = $Ticket->DeleteWatcher( Email => $ARGSRef->{$key}, Type => $1 ); push @results, $msg; } @@ -1314,6 +1442,30 @@ sub ProcessTicketLinks { my $Ticket = $args{'TicketObj'}; my $ARGSRef = $args{'ARGSRef'}; + + my (@results) = ProcessRecordLinks(RecordObj => $Ticket, + ARGSRef => $ARGSRef); + + #Merge if we need to + if ( $ARGSRef->{ $Ticket->Id . "-MergeInto" } ) { + my ( $val, $msg ) = + $Ticket->MergeInto( $ARGSRef->{ $Ticket->Id . "-MergeInto" } ); + push @results, $msg; + } + + return (@results); +} + +# }}} + +sub ProcessRecordLinks { + my %args = ( RecordObj => undef, + ARGSRef => undef, + @_ ); + + my $Record = $args{'RecordObj'}; + my $ARGSRef = $args{'ARGSRef'}; + my (@results); # Delete links that are gone gone gone. @@ -1325,7 +1477,7 @@ sub ProcessTicketLinks { push @results, "Trying to delete: Base: $base Target: $target Type $type"; - my ( $val, $msg ) = $Ticket->DeleteLink( Base => $base, + my ( $val, $msg ) = $Record->DeleteLink( Base => $base, Type => $type, Target => $target ); @@ -1338,18 +1490,18 @@ sub ProcessTicketLinks { my @linktypes = qw( DependsOn MemberOf RefersTo ); foreach my $linktype (@linktypes) { - if ( $ARGSRef->{ $Ticket->Id . "-$linktype" } ) { - for my $luri ( split ( / /, $ARGSRef->{ $Ticket->Id . "-$linktype" } ) ) { + if ( $ARGSRef->{ $Record->Id . "-$linktype" } ) { + for my $luri ( split ( / /, $ARGSRef->{ $Record->Id . "-$linktype" } ) ) { $luri =~ s/\s*$//; # Strip trailing whitespace - my ( $val, $msg ) = $Ticket->AddLink( Target => $luri, + my ( $val, $msg ) = $Record->AddLink( Target => $luri, Type => $linktype ); push @results, $msg; } } - if ( $ARGSRef->{ "$linktype-" . $Ticket->Id } ) { + if ( $ARGSRef->{ "$linktype-" . $Record->Id } ) { - for my $luri ( split ( / /, $ARGSRef->{ "$linktype-" . $Ticket->Id } ) ) { - my ( $val, $msg ) = $Ticket->AddLink( Base => $luri, + for my $luri ( split ( / /, $ARGSRef->{ "$linktype-" . $Record->Id } ) ) { + my ( $val, $msg ) = $Record->AddLink( Base => $luri, Type => $linktype ); push @results, $msg; @@ -1357,17 +1509,36 @@ sub ProcessTicketLinks { } } - #Merge if we need to - if ( $ARGSRef->{ $Ticket->Id . "-MergeInto" } ) { - my ( $val, $msg ) = - $Ticket->MergeInto( $ARGSRef->{ $Ticket->Id . "-MergeInto" } ); - push @results, $msg; - } - return (@results); } -# }}} + +=head2 _UploadedFile ( $arg ); + +Takes a CGI parameter name; if a file is uploaded under that name, +return a hash reference suitable for AddCustomFieldValue's use: +C<( Value => $filename, LargeContent => $content, ContentType => $type )>. + +Returns C<undef> if no files were uploaded in the C<$arg> field. + +=cut + +sub _UploadedFile { + my $arg = shift; + my $cgi_object = $m->cgi_object; + my $fh = $cgi_object->upload($arg) or return undef; + my $upload_info = $cgi_object->uploadInfo($fh); + + my $filename = "$fh"; + $filename =~ s#^.*[\\/]##; + binmode($fh); + + return { + Value => $filename, + LargeContent => do { local $/; scalar <$fh> }, + ContentType => $upload_info->{'Content-Type'}, + }; +} eval "require RT::Interface::Web_Vendor"; die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web_Vendor.pm}); diff --git a/rt/lib/RT/Interface/Web/Handler.pm b/rt/lib/RT/Interface/Web/Handler.pm new file mode 100644 index 000000000..ce9222586 --- /dev/null +++ b/rt/lib/RT/Interface/Web/Handler.pm @@ -0,0 +1,221 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +package RT::Interface::Web::Handler; + +use CGI qw/-private_tempfiles/; +use MIME::Entity; +use Text::Wrapper; +use CGI::Cookie; +use Time::ParseDate; +use Time::HiRes; +use HTML::Entities; +use HTML::Scrubber; +use Text::Quoted; +use RT::Interface::Web::Handler; +use File::Path qw( rmtree ); +use File::Glob qw( bsd_glob ); +use File::Spec::Unix; + +sub DefaultHandlerArgs { ( + comp_root => [ + [ local => $RT::MasonLocalComponentRoot ], + [ standard => $RT::MasonComponentRoot ] + ], + default_escape_flags => 'h', + data_dir => "$RT::MasonDataDir", + allow_globals => [qw(%session)], + # Turn off static source if we're in developer mode. + static_source => ($RT::DevelMode ? '0' : '1'), + use_object_files => ($RT::DevelMode ? '0' : '1'), + autoflush => 0 +) }; + +# {{{ sub new + +=head2 new + + Constructs a web handler of the appropriate class. + Takes options to pass to the constructor. + +=cut + +sub new { + my $class = shift; + $class->InitSessionDir; + + if ( $mod_perl::VERSION && $mod_perl::VERSION >= 1.9908 ) { +# require Apache::RequestUtil; +# no warnings 'redefine'; +# my $sub = *Apache::request{CODE}; +# *Apache::request = sub { +# my $r; +# eval { $r = $sub->('Apache'); }; +# +# # warn $@ if $@; +# return $r; +# }; + goto &NewApacheHandler; + } + elsif ($CGI::MOD_PERL) { + goto &NewApacheHandler; + } + else { + goto &NewCGIHandler; + } +} + +sub InitSessionDir { + # Activate the following if running httpd as root (the normal case). + # Resets ownership of all files created by Mason at startup. + # Note that mysql uses DB for sessions, so there's no need to do this. + unless ( $RT::DatabaseType =~ /(?:mysql|Pg)/ ) { + + # Clean up our umask to protect session files + umask(0077); + + if ($CGI::MOD_PERL) { + chown( Apache->server->uid, Apache->server->gid, + $RT::MasonSessionDir ) + if Apache->server->can('uid'); + } + + # Die if WebSessionDir doesn't exist or we can't write to it + stat($RT::MasonSessionDir); + die "Can't read and write $RT::MasonSessionDir" + unless ( ( -d _ ) and ( -r _ ) and ( -w _ ) ); + } + +} + +# }}} + +# {{{ sub NewApacheHandler + +=head2 NewApacheHandler + + Takes extra options to pass to HTML::Mason::ApacheHandler->new + Returns a new Mason::ApacheHandler object + +=cut + +sub NewApacheHandler { + require HTML::Mason::ApacheHandler; + return NewHandler('HTML::Mason::ApacheHandler', args_method => "CGI", @_); +} + +# }}} + +# {{{ sub NewApache2Handler + +=head2 NewApache2Handler + + Takes extra options to pass to MasonX::Apache2Handler->new + Returns a new MasonX::Apache2Handler object + +=cut + +sub NewApache2Handler { + require MasonX::Apache2Handler; + return NewHandler('MasonX::Apache2Handler', args_method => "CGI", @_); +} + +# }}} + +# {{{ sub NewCGIHandler + +=head2 NewCGIHandler + + Returns a new Mason::CGIHandler object + +=cut + +sub NewCGIHandler { + require HTML::Mason::CGIHandler; + return NewHandler('HTML::Mason::CGIHandler', @_); +} + +sub NewHandler { + my $class = shift; + my $handler = $class->new( + DefaultHandlerArgs(), + @_ + ); + + $handler->interp->set_escape( h => \&RT::Interface::Web::EscapeUTF8 ); + $handler->interp->set_escape( u => \&RT::Interface::Web::EscapeURI ); + return($handler); +} + +=head2 CleanupRequest + +Rollback any uncommitted transaction. +Flush the ACL cache +Flush the searchbuilder query cache + +=cut + +sub CleanupRequest { + + if ( $RT::Handle->TransactionDepth ) { + $RT::Handle->ForceRollback; + $RT::Logger->crit( + "Transaction not committed. Usually indicates a software fault." + . "Data loss may have occurred" ); + } + + # Clean out the ACL cache. the performance impact should be marginal. + # Consistency is imprived, too. + RT::Principal->InvalidateACLCache(); + DBIx::SearchBuilder::Record::Cachable->FlushCache + if ( $RT::WebFlushDbCacheEveryRequest + and UNIVERSAL::can( + 'DBIx::SearchBuilder::Record::Cachable' => 'FlushCache' ) ); + +} +# }}} + +1; diff --git a/rt/lib/RT/Interface/Web/QueryBuilder.pm b/rt/lib/RT/Interface/Web/QueryBuilder.pm new file mode 100755 index 000000000..b7526b30a --- /dev/null +++ b/rt/lib/RT/Interface/Web/QueryBuilder.pm @@ -0,0 +1,56 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::Interface::Web::QueryBuilder; + +use strict; +use warnings; + +eval "require RT::Interface::Web::QueryBuilder_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder_Vendor.pm}); +eval "require RT::Interface::Web::QueryBuilder_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder_Local.pm}); + +1; diff --git a/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm new file mode 100755 index 000000000..67b728339 --- /dev/null +++ b/rt/lib/RT/Interface/Web/QueryBuilder/Tree.pm @@ -0,0 +1,245 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::Interface::Web::QueryBuilder::Tree; + +use strict; +use warnings; + +use base qw/Tree::Simple/; + +=head1 NAME + + RT::Interface::Web::QueryBuilder::Tree - subclass of Tree::Simple used in Query Builder + +=head1 DESCRIPTION + +This class provides support functionality for the Query Builder (Search/Build.html). +It is a subclass of L<Tree::Simple>. + +=head1 METHODS + +=head2 TraversePrePost PREFUNC POSTFUNC + +Traverses the tree depth-first. Before processing the node's children, +calls PREFUNC with the node as its argument; after processing all of the +children, calls POSTFUNC with the node as its argument. + +(Note that unlike Tree::Simple's C<traverse>, it actually calls its functions +on the root node passed to it.) + +=cut + +sub TraversePrePost { + my ($self, $prefunc, $postfunc) = @_; + + $prefunc->($self); + + foreach my $child ($self->getAllChildren()) { + $child->TraversePrePost($prefunc, $postfunc); + } + + $postfunc->($self); +} + +=head2 GetReferencedQueues + +Returns a hash reference with keys each queue name referenced in a clause in +the key (even if it's "Queue != 'Foo'"), and values all 1. + +=cut + +sub GetReferencedQueues { + my $self = shift; + + my $queues = {}; + + $self->traverse( + sub { + my $node = shift; + + return if $node->isRoot; + + my $clause = $node->getNodeValue(); + + if ( ref($clause) and $clause->{Key} eq 'Queue' ) { + $queues->{ $clause->{Value} } = 1; + }; + } + ); + + return $queues; +} + +=head2 GetQueryAndOptionList SELECTED_NODES + +Given an array reference of tree nodes that have been selected by the user, +traverses the tree and returns the equivalent SQL query and a list of hashes +representing the "clauses" select option list. Each has contains the keys +TEXT, INDEX, SELECTED, and DEPTH. TEXT is the displayed text of the option +(including parentheses, not including indentation); INDEX is the 0-based +index of the option in the list (also used as its CGI parameter); SELECTED +is either 'SELECTED' or '', depending on whether the node corresponding +to the select option was in the SELECTED_NODES list; and DEPTH is the +level of indentation for the option. + +=cut + +sub GetQueryAndOptionList { + my $self = shift; + my $selected_nodes = shift; + + my $optionlist = []; + + my $i = 0; + + $self->TraversePrePost( + sub { # This is called before recursing to the node's children. + my $node = shift; + + return if $node->isRoot or $node->getParent->isRoot; + + my $clause = $node->getNodeValue(); + my $str = ' '; + my $aggregator_context = $node->getParent()->getNodeValue(); + $str = $aggregator_context . " " if $node->getIndex() > 0; + + if ( ref($clause) ) { # ie, it's a leaf + $str .= + $clause->{Key} . " " . $clause->{Op} . " " . $clause->{Value}; + } + + unless ($node->getParent->getParent->isRoot) { + # used to check !ref( $parent->getNodeValue() ) ) + if ( $node->getIndex() == 0 ) { + $str = '( ' . $str; + } + } + + push @$optionlist, { + TEXT => $str, + INDEX => $i, + SELECTED => (grep { $_ == $node } @$selected_nodes) ? 'SELECTED' : '', + DEPTH => $node->getDepth() - 1, + }; + + $i++; + }, sub { + # This is called after recursing to the node's children. + my $node = shift; + + return if $node->isRoot or $node->getParent->isRoot or $node->getParent->getParent->isRoot; + + # Only do this for the rightmost child. + return unless $node->getIndex == $node->getParent->getChildCount - 1; + + $optionlist->[-1]{TEXT} .= ' )'; + } + ); + + return (join ' ', map { $_->{TEXT} } @$optionlist), $optionlist; +} + +=head2 PruneChildLessAggregators + +If tree manipulation has left it in a state where there are ANDs, ORs, +or parenthesizations with no children, get rid of them. + +=cut + +sub PruneChildlessAggregators { + my $self = shift; + + $self->TraversePrePost( + sub { + }, + sub { + my $node = shift; + + return if $node->isRoot or $node->getParent->isRoot; + + # We're only looking for aggregators (AND/OR) + return if ref $node->getNodeValue; + + return if $node->getChildCount != 0; + + # OK, this is a childless aggregator. Remove self. + + $node->getParent->removeChild($node); + + # Deal with circular refs + $node->DESTROY; + } + ); +} + +=head2 GetDisplayedNodes + +This function returns a list of the nodes of the tree in depth-first +order which correspond to options in the "clauses" multi-select box. +In fact, it's all of them but the root and its child. + +=cut + +sub GetDisplayedNodes { + my $self = shift; + my @lines; + + $self->traverse(sub { + my $node = shift; + + push @lines, $node unless $node->isRoot or $node->getParent->isRoot; + }); + + return @lines; +} + + +eval "require RT::Interface::Web::QueryBuilder::Tree_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Vendor.pm}); +eval "require RT::Interface::Web::QueryBuilder::Tree_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Local.pm}); + +1; diff --git a/rt/lib/RT/Interface/Web/Standalone.pm b/rt/lib/RT/Interface/Web/Standalone.pm new file mode 100755 index 000000000..bc2423e6d --- /dev/null +++ b/rt/lib/RT/Interface/Web/Standalone.pm @@ -0,0 +1,37 @@ +package RT::Interface::Web::Standalone; + +use strict; +use base 'HTTP::Server::Simple::Mason'; +use RT::Interface::Web::Handler; +use RT::Interface::Web; + +sub handler_class { "RT::Interface::Web::Handler" } + +sub setup_escapes { + my $self = shift; + my $handler = shift; + + # Override HTTP::Server::Simple::Mason's version of this method to do + # nothing. (RT::Interface::Web::Handler does this already for us in + # NewHandler.) +} + +sub default_mason_config { + return @RT::MasonParameters; +} + +sub handle_request { + + my $self = shift; + my $cgi = shift; + + Module::Refresh->refresh if $RT::DevelMode; + + $self->SUPER::handle_request($cgi); + $RT::Logger->crit($@) if ($@); + + RT::Interface::Web::Handler->CleanupRequest(); + +} + +1; diff --git a/rt/lib/RT/Interface/Web_Vendor.pm b/rt/lib/RT/Interface/Web_Vendor.pm new file mode 100644 index 000000000..5be20e6b9 --- /dev/null +++ b/rt/lib/RT/Interface/Web_Vendor.pm @@ -0,0 +1,95 @@ +# Copyright (c) 2004 Ivan Kohler <ivan-rt@420.am> +# +# 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. + +=head1 NAME + +RT::Interface::Web_Vendor + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +Freeside vendor overlay for RT::Interface::Web. + +=begin testing + +use_ok(RT::Interface::Web_Vendor); + +=end testing + +=cut + +#package RT::Interface::Web; +#use strict; + +package HTML::Mason::Commands; +use strict; + +=head2 ProcessTicketCustomers + +=cut + +sub ProcessTicketCustomers { + my %args = ( + TicketObj => undef, + ARGSRef => undef, + @_ + ); + my @results = (); + + my $Ticket = $args{'TicketObj'}; + my $ARGSRef = $args{'ARGSRef'}; + + ### false laziness w/RT::Interface::Web::ProcessTicketLinks + # Delete links that are gone gone gone. + foreach my $arg ( keys %$ARGSRef ) { + if ( $arg =~ /DeleteLink-(.*?)-(DependsOn|MemberOf|RefersTo)-(.*)$/ ) { + my $base = $1; + my $type = $2; + my $target = $3; + + push @results, + "Trying to delete: Base: $base Target: $target Type $type"; + my ( $val, $msg ) = $Ticket->DeleteLink( Base => $base, + Type => $type, + Target => $target ); + + push @results, $msg; + + } + + } + ### + + my @delete_custnums = + map { /^Ticket-AddCustomer-(\d+)$/; $1 } + grep { /^Ticket-AddCustomer-(\d+)$/ && $ARGSRef->{$_} } + keys %$ARGSRef; + + my @custnums = map { /^Ticket-AddCustomer-(\d+)$/; $1 } + grep { /^Ticket-AddCustomer-(\d+)$/ && $ARGSRef->{$_} } + keys %$ARGSRef; + + foreach my $custnum ( @custnums ) { + my( $val, $msg ) = + $Ticket->AddLink( 'Type' => 'MemberOf', + 'Target' => "freeside://freeside/cust_main/$custnum", + ); + push @results, $msg; + } + + return @results; + +} + +1; + diff --git a/rt/lib/RT/Link.pm b/rt/lib/RT/Link.pm index 962c378a8..cc68aa61d 100644 --- a/rt/lib/RT/Link.pm +++ b/rt/lib/RT/Link.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -98,7 +120,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -107,14 +129,14 @@ Returns the current value of id. =cut -=item Base +=head2 Base Returns the current value of Base. (In the database, Base is stored as varchar(240).) -=item SetBase VALUE +=head2 SetBase VALUE Set Base to VALUE. @@ -125,14 +147,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Target +=head2 Target Returns the current value of Target. (In the database, Target is stored as varchar(240).) -=item SetTarget VALUE +=head2 SetTarget VALUE Set Target to VALUE. @@ -143,14 +165,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Type +=head2 Type Returns the current value of Type. (In the database, Type is stored as varchar(20).) -=item SetType VALUE +=head2 SetType VALUE Set Type to VALUE. @@ -161,14 +183,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item LocalTarget +=head2 LocalTarget Returns the current value of LocalTarget. (In the database, LocalTarget is stored as int(11).) -=item SetLocalTarget VALUE +=head2 SetLocalTarget VALUE Set LocalTarget to VALUE. @@ -179,14 +201,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item LocalBase +=head2 LocalBase Returns the current value of LocalBase. (In the database, LocalBase is stored as int(11).) -=item SetLocalBase VALUE +=head2 SetLocalBase VALUE Set LocalBase to VALUE. @@ -197,7 +219,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -206,7 +228,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -215,7 +237,7 @@ Returns the current value of LastUpdated. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -224,7 +246,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -234,29 +256,29 @@ Returns the current value of Created. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Base => - {read => 1, write => 1, type => 'varchar(240)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 240, is_blob => 0, is_numeric => 0, type => 'varchar(240)', default => ''}, Target => - {read => 1, write => 1, type => 'varchar(240)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 240, is_blob => 0, is_numeric => 0, type => 'varchar(240)', default => ''}, Type => - {read => 1, write => 1, type => 'varchar(20)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 20, is_blob => 0, is_numeric => 0, type => 'varchar(20)', default => ''}, LocalTarget => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LocalBase => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -288,7 +310,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Link_Overlay.pm b/rt/lib/RT/Link_Overlay.pm index ac1bc370c..28143cfeb 100644 --- a/rt/lib/RT/Link_Overlay.pm +++ b/rt/lib/RT/Link_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Link - an RT Link object @@ -54,6 +77,9 @@ ok (UNIVERSAL::isa($link, 'DBIx::SearchBuilder::Record')); =cut + +package RT::Link; + use strict; no warnings qw(redefine); @@ -81,28 +107,31 @@ sub Create { my $base = RT::URI->new( $self->CurrentUser ); $base->FromURI( $args{'Base'} ); - unless ( $base->Scheme ) { - $RT::Logger->warning( "$self couldn't resolve base:'" - . $args{'Base'} . " - " - . $base->Scheme - . "' into a URI\n" ); + unless ( $base->Resolver && $base->Scheme ) { + my $msg = $self->loc("Couldn't resolve base '[_1]' into a URI.", + $args{'Base'}); + $RT::Logger->warning( "$self $msg\n" ); - #use Data::Dumper; - #$RT::Logger->warning(scalar Dumper $base); - return (undef); + if (wantarray) { + return(undef, $msg); + } else { + return (undef); + } } my $target = RT::URI->new( $self->CurrentUser ); $target->FromURI( $args{'Target'} ); unless ( $target->Resolver ) { - $RT::Logger->warning( "$self couldn't resolve target:'" - . $args{'Target'} . " - " - . "' into a URI\n" ); - - #use Data::Dumper; - #$RT::Logger->warning(scalar Dumper $target); - return (undef); + my $msg = $self->loc("Couldn't resolve target '[_1]' into a URI.", + $args{'Target'}); + $RT::Logger->warning( "$self $msg\n" ); + + if (wantarray) { + return(undef, $msg); + } else { + return (undef); + } } my $base_id = 0; diff --git a/rt/lib/RT/Links.pm b/rt/lib/RT/Links.pm index 7a1773af9..3626e2292 100644 --- a/rt/lib/RT/Links.pm +++ b/rt/lib/RT/Links.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Link item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Links_Overlay.pm b/rt/lib/RT/Links_Overlay.pm index d788a4275..203b60a9e 100644 --- a/rt/lib/RT/Links_Overlay.pm +++ b/rt/lib/RT/Links_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Links - A collection of Link objects @@ -44,6 +67,9 @@ ok (require RT::Links); =cut + +package RT::Links; + use strict; no warnings qw(redefine); use RT::URI; @@ -121,5 +147,29 @@ sub LimitReferredToBy { } # }}} + + +# {{{ Next +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; + } + } else { + return undef; + } +} + +# }}} 1; diff --git a/rt/lib/RT/ObjectCustomField.pm b/rt/lib/RT/ObjectCustomField.pm new file mode 100644 index 000000000..89c59c67d --- /dev/null +++ b/rt/lib/RT/ObjectCustomField.pm @@ -0,0 +1,293 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) +# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. +# +# !! DO NOT EDIT THIS FILE !! +# + +use strict; + + +=head1 NAME + +RT::ObjectCustomField + + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=cut + +package RT::ObjectCustomField; +use RT::Record; +use RT::CustomField; + + +use vars qw( @ISA ); +@ISA= qw( RT::Record ); + +sub _Init { + my $self = shift; + + $self->Table('ObjectCustomFields'); + $self->SUPER::_Init(@_); +} + + + + + +=head2 Create PARAMHASH + +Create takes a hash of values and creates a row in the database: + + int(11) 'CustomField'. + int(11) 'ObjectId'. + int(11) 'SortOrder'. + +=cut + + + + +sub Create { + my $self = shift; + my %args = ( + CustomField => '0', + ObjectId => '0', + SortOrder => '0', + + @_); + $self->SUPER::Create( + CustomField => $args{'CustomField'}, + ObjectId => $args{'ObjectId'}, + SortOrder => $args{'SortOrder'}, +); + +} + + + +=head2 id + +Returns the current value of id. +(In the database, id is stored as int(11).) + + +=cut + + +=head2 CustomField + +Returns the current value of CustomField. +(In the database, CustomField is stored as int(11).) + + + +=head2 SetCustomField VALUE + + +Set CustomField to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, CustomField will be stored as a int(11).) + + +=cut + + +=head2 CustomFieldObj + +Returns the CustomField Object which has the id returned by CustomField + + +=cut + +sub CustomFieldObj { + my $self = shift; + my $CustomField = RT::CustomField->new($self->CurrentUser); + $CustomField->Load($self->__Value('CustomField')); + return($CustomField); +} + +=head2 ObjectId + +Returns the current value of ObjectId. +(In the database, ObjectId is stored as int(11).) + + + +=head2 SetObjectId VALUE + + +Set ObjectId to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ObjectId will be stored as a int(11).) + + +=cut + + +=head2 SortOrder + +Returns the current value of SortOrder. +(In the database, SortOrder is stored as int(11).) + + + +=head2 SetSortOrder VALUE + + +Set SortOrder to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, SortOrder will be stored as a int(11).) + + +=cut + + +=head2 Creator + +Returns the current value of Creator. +(In the database, Creator is stored as int(11).) + + +=cut + + +=head2 Created + +Returns the current value of Created. +(In the database, Created is stored as datetime.) + + +=cut + + +=head2 LastUpdatedBy + +Returns the current value of LastUpdatedBy. +(In the database, LastUpdatedBy is stored as int(11).) + + +=cut + + +=head2 LastUpdated + +Returns the current value of LastUpdated. +(In the database, LastUpdated is stored as datetime.) + + +=cut + + + +sub _CoreAccessible { + { + + id => + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, + CustomField => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + ObjectId => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + SortOrder => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + Creator => + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + Created => + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, + LastUpdatedBy => + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + LastUpdated => + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, + + } +}; + + + eval "require RT::ObjectCustomField_Overlay"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomField_Overlay.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomField_Vendor"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomField_Vendor.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomField_Local"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomField_Local.pm}) { + die $@; + }; + + + + +=head1 SEE ALSO + +This class allows "overlay" methods to be placed +into the following files _Overlay is for a System overlay by the original author, +_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. + +These overlay files can contain new subs or subs to replace existing subs in this module. + +Each of these files should begin with the line + + no warnings qw(redefine); + +so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. + +RT::ObjectCustomField_Overlay, RT::ObjectCustomField_Vendor, RT::ObjectCustomField_Local + +=cut + + +1; diff --git a/rt/lib/RT/ObjectCustomFieldValue.pm b/rt/lib/RT/ObjectCustomFieldValue.pm new file mode 100644 index 000000000..5b80906bb --- /dev/null +++ b/rt/lib/RT/ObjectCustomFieldValue.pm @@ -0,0 +1,431 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) +# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. +# +# !! DO NOT EDIT THIS FILE !! +# + +use strict; + + +=head1 NAME + +RT::ObjectCustomFieldValue + + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=cut + +package RT::ObjectCustomFieldValue; +use RT::Record; +use RT::CustomField; + + +use vars qw( @ISA ); +@ISA= qw( RT::Record ); + +sub _Init { + my $self = shift; + + $self->Table('ObjectCustomFieldValues'); + $self->SUPER::_Init(@_); +} + + + + + +=head2 Create PARAMHASH + +Create takes a hash of values and creates a row in the database: + + int(11) 'CustomField'. + varchar(255) 'ObjectType'. + int(11) 'ObjectId'. + int(11) 'SortOrder'. + varchar(255) 'Content'. + longtext 'LargeContent'. + varchar(80) 'ContentType'. + varchar(80) 'ContentEncoding'. + smallint(6) 'Disabled'. + +=cut + + + + +sub Create { + my $self = shift; + my %args = ( + CustomField => '0', + ObjectType => '', + ObjectId => '0', + SortOrder => '0', + Content => '', + LargeContent => '', + ContentType => '', + ContentEncoding => '', + Disabled => '0', + + @_); + $self->SUPER::Create( + CustomField => $args{'CustomField'}, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, + SortOrder => $args{'SortOrder'}, + Content => $args{'Content'}, + LargeContent => $args{'LargeContent'}, + ContentType => $args{'ContentType'}, + ContentEncoding => $args{'ContentEncoding'}, + Disabled => $args{'Disabled'}, +); + +} + + + +=head2 id + +Returns the current value of id. +(In the database, id is stored as int(11).) + + +=cut + + +=head2 CustomField + +Returns the current value of CustomField. +(In the database, CustomField is stored as int(11).) + + + +=head2 SetCustomField VALUE + + +Set CustomField to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, CustomField will be stored as a int(11).) + + +=cut + + +=head2 CustomFieldObj + +Returns the CustomField Object which has the id returned by CustomField + + +=cut + +sub CustomFieldObj { + my $self = shift; + my $CustomField = RT::CustomField->new($self->CurrentUser); + $CustomField->Load($self->__Value('CustomField')); + return($CustomField); +} + +=head2 ObjectType + +Returns the current value of ObjectType. +(In the database, ObjectType is stored as varchar(255).) + + + +=head2 SetObjectType VALUE + + +Set ObjectType to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ObjectType will be stored as a varchar(255).) + + +=cut + + +=head2 ObjectId + +Returns the current value of ObjectId. +(In the database, ObjectId is stored as int(11).) + + + +=head2 SetObjectId VALUE + + +Set ObjectId to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ObjectId will be stored as a int(11).) + + +=cut + + +=head2 SortOrder + +Returns the current value of SortOrder. +(In the database, SortOrder is stored as int(11).) + + + +=head2 SetSortOrder VALUE + + +Set SortOrder to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, SortOrder will be stored as a int(11).) + + +=cut + + +=head2 Content + +Returns the current value of Content. +(In the database, Content is stored as varchar(255).) + + + +=head2 SetContent VALUE + + +Set Content to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, Content will be stored as a varchar(255).) + + +=cut + + +=head2 LargeContent + +Returns the current value of LargeContent. +(In the database, LargeContent is stored as longtext.) + + + +=head2 SetLargeContent VALUE + + +Set LargeContent to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, LargeContent will be stored as a longtext.) + + +=cut + + +=head2 ContentType + +Returns the current value of ContentType. +(In the database, ContentType is stored as varchar(80).) + + + +=head2 SetContentType VALUE + + +Set ContentType to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ContentType will be stored as a varchar(80).) + + +=cut + + +=head2 ContentEncoding + +Returns the current value of ContentEncoding. +(In the database, ContentEncoding is stored as varchar(80).) + + + +=head2 SetContentEncoding VALUE + + +Set ContentEncoding to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ContentEncoding will be stored as a varchar(80).) + + +=cut + + +=head2 Creator + +Returns the current value of Creator. +(In the database, Creator is stored as int(11).) + + +=cut + + +=head2 Created + +Returns the current value of Created. +(In the database, Created is stored as datetime.) + + +=cut + + +=head2 LastUpdatedBy + +Returns the current value of LastUpdatedBy. +(In the database, LastUpdatedBy is stored as int(11).) + + +=cut + + +=head2 LastUpdated + +Returns the current value of LastUpdated. +(In the database, LastUpdated is stored as datetime.) + + +=cut + + +=head2 Disabled + +Returns the current value of Disabled. +(In the database, Disabled is stored as smallint(6).) + + + +=head2 SetDisabled VALUE + + +Set Disabled to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, Disabled will be stored as a smallint(6).) + + +=cut + + + +sub _CoreAccessible { + { + + id => + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, + CustomField => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + ObjectType => + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, + ObjectId => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + SortOrder => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + Content => + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, + LargeContent => + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'longtext', default => ''}, + ContentType => + {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, + ContentEncoding => + {read => 1, write => 1, sql_type => 12, length => 80, is_blob => 0, is_numeric => 0, type => 'varchar(80)', default => ''}, + Creator => + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + Created => + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, + LastUpdatedBy => + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, + LastUpdated => + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, + Disabled => + {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, + + } +}; + + + eval "require RT::ObjectCustomFieldValue_Overlay"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValue_Overlay.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomFieldValue_Vendor"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValue_Vendor.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomFieldValue_Local"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValue_Local.pm}) { + die $@; + }; + + + + +=head1 SEE ALSO + +This class allows "overlay" methods to be placed +into the following files _Overlay is for a System overlay by the original author, +_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. + +These overlay files can contain new subs or subs to replace existing subs in this module. + +Each of these files should begin with the line + + no warnings qw(redefine); + +so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. + +RT::ObjectCustomFieldValue_Overlay, RT::ObjectCustomFieldValue_Vendor, RT::ObjectCustomFieldValue_Local + +=cut + + +1; diff --git a/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm b/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm new file mode 100644 index 000000000..9b753e846 --- /dev/null +++ b/rt/lib/RT/ObjectCustomFieldValue_Overlay.pm @@ -0,0 +1,174 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::ObjectCustomFieldValue; + +use strict; +no warnings qw(redefine); + + +sub Create { + my $self = shift; + my %args = ( + CustomField => '0', + ObjectType => '', + ObjectId => '0', + Disabled => '0', + Content => '', + LargeContent => '', + ContentType => '', + ContentEncoding => '', + + @_); + + + if( $args{'Content'} && length($args{'Content'}) > 255 && !$args{'LargeContent'} ) { + + $args{'LargeContent'} = $args{'Content'}; + $args{'Content'} = ''; + $args{'ContentType'} = 'text/plain'; + } + + ( $args{'ContentEncoding'}, $args{'LargeContent'} ) = + $self->_EncodeLOB( $args{'LargeContent'}, $args{'ContentType'} ) + if ( $args{'LargeContent'} ); + + $self->SUPER::Create( + CustomField => $args{'CustomField'}, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, + Disabled => $args{'Disabled'}, + Content => $args{'Content'}, + LargeContent => $args{'LargeContent'}, + ContentType => $args{'ContentType'}, + ContentEncoding => $args{'ContentEncoding'}, +); + + + +} + + +sub LargeContent { + my $self = shift; + $self->_DecodeLOB( $self->ContentType, $self->ContentEncoding, + $self->_Value( 'LargeContent', decode_utf8 => 0 ) ); + +} + + + + +=head2 LoadByTicketContentAndCustomField { Ticket => TICKET, CustomField => CUSTOMFIELD, Content => CONTENT } + +Loads a custom field value by Ticket, Content and which CustomField it's tied to + +=cut + + +sub LoadByTicketContentAndCustomField { + my $self = shift; + my %args = ( Ticket => undef, + CustomField => undef, + Content => undef, + @_ + ); + + + $self->LoadByCols( Content => $args{'Content'}, + CustomField => $args{'CustomField'}, + ObjectType => 'RT::Ticket', + ObjectId => $args{'Ticket'}, + Disabled => 0 + ); + + +} + +sub LoadByObjectContentAndCustomField { + my $self = shift; + my %args = ( Object => undef, + CustomField => undef, + Content => undef, + @_ + ); + + my $obj = $args{'Object'} or return; + + $self->LoadByCols( Content => $args{'Content'}, + CustomField => $args{'CustomField'}, + ObjectType => ref($obj), + ObjectId => $obj->Id, + Disabled => 0 + ); + +} + + +=head2 Content + +Return this custom field's content. If there's no "regular" +content, try "LargeContent" + +=cut + + +sub Content { + my $self = shift; + my $content = $self->SUPER::Content; + if (!$content && $self->ContentType eq 'text/plain') { + return $self->LargeContent(); + } else { + return $content; + } +} + + +sub Delete { + my $self = shift; + $self->SetDisabled(1); +} + +1; diff --git a/rt/lib/RT/ObjectCustomFieldValues.pm b/rt/lib/RT/ObjectCustomFieldValues.pm new file mode 100644 index 000000000..296a92557 --- /dev/null +++ b/rt/lib/RT/ObjectCustomFieldValues.pm @@ -0,0 +1,148 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) +# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. +# +# !! DO NOT EDIT THIS FILE !! +# + +use strict; + + +=head1 NAME + + RT::ObjectCustomFieldValues -- Class Description + +=head1 SYNOPSIS + + use RT::ObjectCustomFieldValues + +=head1 DESCRIPTION + + +=head1 METHODS + +=cut + +package RT::ObjectCustomFieldValues; + +use RT::SearchBuilder; +use RT::ObjectCustomFieldValue; + +use vars qw( @ISA ); +@ISA= qw(RT::SearchBuilder); + + +sub _Init { + my $self = shift; + $self->{'table'} = 'ObjectCustomFieldValues'; + $self->{'primary_key'} = 'id'; + + + + # By default, order by SortOrder + $self->OrderByCols( + { ALIAS => 'main', + FIELD => 'SortOrder', + ORDER => 'ASC' }, + { ALIAS => 'main', + FIELD => 'id', + ORDER => 'ASC' }, + ); + + return ( $self->SUPER::_Init(@_) ); +} + + +=head2 NewItem + +Returns an empty new RT::ObjectCustomFieldValue item + +=cut + +sub NewItem { + my $self = shift; + return(RT::ObjectCustomFieldValue->new($self->CurrentUser)); +} + + eval "require RT::ObjectCustomFieldValues_Overlay"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValues_Overlay.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomFieldValues_Vendor"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValues_Vendor.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomFieldValues_Local"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFieldValues_Local.pm}) { + die $@; + }; + + + + +=head1 SEE ALSO + +This class allows "overlay" methods to be placed +into the following files _Overlay is for a System overlay by the original author, +_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. + +These overlay files can contain new subs or subs to replace existing subs in this module. + +Each of these files should begin with the line + + no warnings qw(redefine); + +so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. + +RT::ObjectCustomFieldValues_Overlay, RT::ObjectCustomFieldValues_Vendor, RT::ObjectCustomFieldValues_Local + +=cut + + +1; diff --git a/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm b/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm new file mode 100644 index 000000000..315c16f30 --- /dev/null +++ b/rt/lib/RT/ObjectCustomFieldValues_Overlay.pm @@ -0,0 +1,153 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::ObjectCustomFieldValues; + +use strict; +no warnings qw(redefine); + +# {{{ sub LimitToCustomField + +=head2 LimitToCustomField FIELD + +Limits the returned set to values for the custom field with Id FIELD + +=cut + +sub LimitToCustomField { + my $self = shift; + my $cf = shift; + return ($self->Limit( FIELD => 'CustomField', + VALUE => $cf, + OPERATOR => '=')); + +} + +# }}} + +# {{{ sub LimitToTicket + +=head2 LimitToTicket TICKETID + +Limits the returned set to values for the ticket with Id TICKETID + +=cut + +sub LimitToTicket { + my $self = shift; + my $ticket = shift; + + + $RT::Logger->warning(ref($self) . " -> LimitToTicket deprecated in favor of LimitToObject"); + + $self->Limit( FIELD => 'ObjectType', + VALUE => 'RT::Ticket', + OPERATOR => '='); + return ($self->Limit( FIELD => 'ObjectId', + VALUE => $ticket, + OPERATOR => '=')); + +} + +# }}} + + +sub LimitToObject { + my $self = shift; + my $object = shift; + $self->Limit( FIELD => 'ObjectType', + VALUE => ref($object), + OPERATOR => '='); + return ($self->Limit( FIELD => 'ObjectId', + VALUE => $object->Id, + OPERATOR => '=')); + +} + +=sub HasEntry VALUE + +Returns true if this CustomFieldValues collection has an entry with content that eq VALUE + +=cut + + +sub HasEntry { + my $self = shift; + my $value = shift; + + #TODO: this could cache and optimize a fair bit. + foreach my $item (@{$self->ItemsArrayRef}) { + return(1) if ($item->Content eq $value); + } + return undef; + +} + +sub _DoSearch { + my $self = shift; + + #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. + unless($self->{'find_expired_rows'}) { + $self->LimitToEnabled(); + } + + return($self->SUPER::_DoSearch(@_)); + +} + +sub _DoCount { + my $self = shift; + + #unless we really want to find disabled rows, make sure we\'re only finding enabled ones. + unless($self->{'find_expired_rows'}) { + $self->LimitToEnabled(); + } + + return($self->SUPER::_DoCount(@_)); + +} + +1; + diff --git a/rt/lib/RT/ObjectCustomField_Overlay.pm b/rt/lib/RT/ObjectCustomField_Overlay.pm new file mode 100644 index 000000000..e1dc7e21b --- /dev/null +++ b/rt/lib/RT/ObjectCustomField_Overlay.pm @@ -0,0 +1,101 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::ObjectCustomField; + +use strict; +no warnings qw(redefine); + +sub Create { + my $self = shift; + my %args = ( + CustomField => '0', + ObjectId => '0', + SortOrder => undef, + @_); + + if (!defined $args{SortOrder}) { + my $CF = $self->CustomFieldObj($args{'CustomField'}); + my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser); + $ObjectCFs->LimitToObjectId($args{'ObjectId'}); + $ObjectCFs->LimitToLookupType($CF->LookupType); + + $args{SortOrder} = $ObjectCFs->Count + 1; + } + + $self->SUPER::Create( + CustomField => $args{'CustomField'}, + ObjectId => $args{'ObjectId'}, + SortOrder => $args{'SortOrder'}, + ); +} + +sub Delete { + my $self = shift; + + my $ObjectCFs = RT::ObjectCustomFields->new($self->CurrentUser); + $ObjectCFs->LimitToObjectId($self->ObjectId); + $ObjectCFs->LimitToLookupType($self->CustomFieldObj->LookupType); + + # Move everything below us up + my $sort_order = $self->SortOrder; + while (my $OCF = $ObjectCFs->Next) { + my $this_order = $OCF->SortOrder; + next if $this_order <= $sort_order; + $OCF->SetSortOrder($this_order - 1); + } + + $self->SUPER::Delete; +} + +sub CustomFieldObj { + my $self = shift; + my $id = shift || $self->CustomField; + my $CF = RT::CustomField->new($self->CurrentUser); + $CF->Load($id) or die "Cannot load CustomField $id"; + return $CF; +} + +1; diff --git a/rt/lib/RT/ObjectCustomFields.pm b/rt/lib/RT/ObjectCustomFields.pm new file mode 100644 index 000000000..fcbf332fd --- /dev/null +++ b/rt/lib/RT/ObjectCustomFields.pm @@ -0,0 +1,148 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) +# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. +# +# !! DO NOT EDIT THIS FILE !! +# + +use strict; + + +=head1 NAME + + RT::ObjectCustomFields -- Class Description + +=head1 SYNOPSIS + + use RT::ObjectCustomFields + +=head1 DESCRIPTION + + +=head1 METHODS + +=cut + +package RT::ObjectCustomFields; + +use RT::SearchBuilder; +use RT::ObjectCustomField; + +use vars qw( @ISA ); +@ISA= qw(RT::SearchBuilder); + + +sub _Init { + my $self = shift; + $self->{'table'} = 'ObjectCustomFields'; + $self->{'primary_key'} = 'id'; + + + + # By default, order by SortOrder + $self->OrderByCols( + { ALIAS => 'main', + FIELD => 'SortOrder', + ORDER => 'ASC' }, + { ALIAS => 'main', + FIELD => 'id', + ORDER => 'ASC' }, + ); + + return ( $self->SUPER::_Init(@_) ); +} + + +=head2 NewItem + +Returns an empty new RT::ObjectCustomField item + +=cut + +sub NewItem { + my $self = shift; + return(RT::ObjectCustomField->new($self->CurrentUser)); +} + + eval "require RT::ObjectCustomFields_Overlay"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFields_Overlay.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomFields_Vendor"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFields_Vendor.pm}) { + die $@; + }; + + eval "require RT::ObjectCustomFields_Local"; + if ($@ && $@ !~ qr{^Can't locate RT/ObjectCustomFields_Local.pm}) { + die $@; + }; + + + + +=head1 SEE ALSO + +This class allows "overlay" methods to be placed +into the following files _Overlay is for a System overlay by the original author, +_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. + +These overlay files can contain new subs or subs to replace existing subs in this module. + +Each of these files should begin with the line + + no warnings qw(redefine); + +so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. + +RT::ObjectCustomFields_Overlay, RT::ObjectCustomFields_Vendor, RT::ObjectCustomFields_Local + +=cut + + +1; diff --git a/rt/lib/RT/ObjectCustomFields_Overlay.pm b/rt/lib/RT/ObjectCustomFields_Overlay.pm new file mode 100644 index 000000000..a496c4bbd --- /dev/null +++ b/rt/lib/RT/ObjectCustomFields_Overlay.pm @@ -0,0 +1,113 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::ObjectCustomFields; + +use strict; +no warnings qw(redefine); + +sub LimitToCustomField { + my $self = shift; + my $id = shift; + $self->Limit( FIELD => 'CustomField', VALUE => $id ); +} + +sub LimitToObjectId { + my $self = shift; + my $id = shift || 0; + $self->Limit( FIELD => 'ObjectId', VALUE => $id ); +} + +sub LimitToLookupType { + my $self = shift; + my $lookup = shift; + unless ($self->{'_cfs_alias'}) { + $self->{'_cfs_alias'} = $self->NewAlias('CustomFields'); + } + $self->Join( ALIAS1 => 'main', + FIELD1 => 'CustomField', + ALIAS2 => $self->{'_cfs_alias'}, + FIELD2 => 'id' ); + $self->Limit( ALIAS => $self->{'_cfs_alias'}, + FIELD => 'LookupType', + OPERATOR => '=', + VALUE => $lookup ); +} + +sub HasEntryForCustomField { + my $self = shift; + my $id = shift; + + my @items = grep {$_->CustomField == $id } @{$self->ItemsArrayRef}; + + if ($#items > 1) { + die "$self HasEntry had a list with more than one of $id in it. this can never happen"; + } + if ($#items == -1 ) { + return undef; + } + else { + return ($items[0]); + } +} + +sub CustomFields { + my $self = shift; + my %seen; + map { $_->CustomFieldObj } @{$self->ItemsArrayRef}; +} + +sub _DoSearch { + my $self = shift; + if ($self->{'_cfs_alias'}) { + $self->Limit( ALIAS => $self->{'_cfs_alias'}, + FIELD => 'Disabled', + OPERATOR => '!=', + VALUE => 1); + } + $self->SUPER::_DoSearch() +} + +1; diff --git a/rt/lib/RT/Principal.pm b/rt/lib/RT/Principal.pm index cffee4cb2..da0c66992 100644 --- a/rt/lib/RT/Principal.pm +++ b/rt/lib/RT/Principal.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -92,7 +114,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -101,14 +123,14 @@ Returns the current value of id. =cut -=item PrincipalType +=head2 PrincipalType Returns the current value of PrincipalType. (In the database, PrincipalType is stored as varchar(16).) -=item SetPrincipalType VALUE +=head2 SetPrincipalType VALUE Set PrincipalType to VALUE. @@ -119,14 +141,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ObjectId +=head2 ObjectId Returns the current value of ObjectId. (In the database, ObjectId is stored as int(11).) -=item SetObjectId VALUE +=head2 SetObjectId VALUE Set ObjectId to VALUE. @@ -137,14 +159,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Disabled +=head2 Disabled Returns the current value of Disabled. (In the database, Disabled is stored as smallint(6).) -=item SetDisabled VALUE +=head2 SetDisabled VALUE Set Disabled to VALUE. @@ -156,17 +178,17 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, PrincipalType => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, ObjectId => - {read => 1, write => 1, type => 'int(11)', default => ''}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Disabled => - {read => 1, write => 1, type => 'smallint(6)', default => '0'}, + {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, } }; @@ -198,7 +220,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Principal_Overlay.pm b/rt/lib/RT/Principal_Overlay.pm index d2782b730..4783c5ca6 100644 --- a/rt/lib/RT/Principal_Overlay.pm +++ b/rt/lib/RT/Principal_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,21 +20,49 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +# + +package RT::Principal; + use strict; +use warnings; no warnings qw(redefine); -use vars qw(%_ACL_KEY_CACHE); + +use Cache::Simple::TimedExpiry; + + use RT::Group; use RT::User; +# Set up the ACL cache on startup +our $_ACL_CACHE; +InvalidateACLCache(); + # {{{ IsGroup =head2 IsGroup @@ -109,6 +143,11 @@ sub Object { A helper function which calls RT::ACE->Create + + + Returns a tuple of (STATUS, MESSAGE); If the call succeeded, STATUS is true. Otherwise it's + false. + =cut sub GrantRight { @@ -118,11 +157,6 @@ sub GrantRight { @_); - #if we haven't specified any sort of right, we're talking about a global right - if (!defined $args{'Object'} && !defined $args{'ObjectId'} && !defined $args{'ObjectType'}) { - $args{'Object'} = $RT::System; - } - unless ($args{'Right'}) { return(0, $self->loc("Invalid Right")); } @@ -150,6 +184,11 @@ sub GrantRight { Delete a right that a user has + + Returns a tuple of (STATUS, MESSAGE); If the call succeeded, STATUS is true. Otherwise it's + false. + + =cut sub RevokeRight { @@ -184,7 +223,40 @@ sub RevokeRight { # }}} +# {{{ sub _CleanupInvalidDelegations + +=head2 sub _CleanupInvalidDelegations { InsideTransaction => undef } + +Revokes all ACE entries delegated by this principal which are +inconsistent with this principal's current delegation rights. Does +not perform permission checks, but takes no action and returns success +if this principal still retains DelegateRights. Should only ever be +called from inside the RT library. +If this principal is a group, recursively calls this method on each +cached user member of itself. + +If called from inside a transaction, specify a true value for the +InsideTransaction parameter. + +Returns a true value if the deletion succeeded; returns a false value +and logs an internal error if the deletion fails (should not happen). + +=cut + +# This is currently just a stub for the methods of the same name in +# RT::User and RT::Group. + +sub _CleanupInvalidDelegations { + my $self = shift; + unless ( $self->Id ) { + $RT::Logger->warning("Principal not loaded."); + return (undef); + } + return ($self->Object->_CleanupInvalidDelegations(@_)); +} + +# }}} # {{{ sub HasRight @@ -219,28 +291,31 @@ Returns undef if no ACE was found. sub HasRight { my $self = shift; - my %args = ( Right => undef, - Object => undef, - EquivObjects => undef, - @_ ); + my %args = ( + Right => undef, + Object => undef, + EquivObjects => undef, + @_ + ); if ( $self->Disabled ) { - $RT::Logger->err( "Disabled User: " . $self->id . " failed access check for " . $args{'Right'} ); + $RT::Logger->err( "Disabled User: " + . $self->id + . " failed access check for " + . $args{'Right'} ); return (undef); } if ( !defined $args{'Right'} ) { - require Carp; - $RT::Logger->debug( Carp::cluck("HasRight called without a right") ); + $RT::Logger->crit("HasRight called without a right"); return (undef); } - if ( defined( $args{'Object'} )) { - return (undef) unless (UNIVERSAL::can( $args{'Object'}, 'id' ) ); - push(@{$args{'EquivObjects'}}, $args{Object}); - } - elsif ( $args{'ObjectId'} && $args{'ObjectType'} ) { - $RT::Logger->crit(Carp::cluck("API not supprted")); + if ( defined( $args{'Object'} ) + && UNIVERSAL::can( $args{'Object'}, 'id' ) + && $args{'Object'}->id ) + { + push( @{ $args{'EquivObjects'} }, $args{Object} ); } else { $RT::Logger->crit("$self HasRight called with no valid object"); @@ -248,88 +323,50 @@ sub HasRight { } # If this object is a ticket, we care about ticket roles and queue roles - if ( (ref($args{'Object'}) eq 'RT::Ticket') && $args{'Object'}->Id) { - # this is a little bit hacky, but basically, now that we've done the ticket roles magic, we load the queue object - # and ask all the rest of our questions about the queue. - push (@{$args{'EquivObjects'}}, $args{'Object'}->QueueObj); + if ( ( ref( $args{'Object'} ) eq 'RT::Ticket' ) && $args{'Object'}->Id ) { - } +# this is a little bit hacky, but basically, now that we've done the ticket roles magic, we load the queue object +# and ask all the rest of our questions about the queue. + push( @{ $args{'EquivObjects'} }, $args{'Object'}->QueueObj ); + } # {{{ If we've cached a win or loss for this lookup say so # {{{ Construct a hashkey to cache decisions in my $hashkey = do { - no warnings 'uninitialized'; - - # We don't worry about the hash ordering, as this is only - # temporarily used; also if the key changes it would be - # invalidated anyway. - join ( - ";:;", $self->Id, map { - $_, # the key of each arguments - ($_ eq 'EquivObjects') # for object arrayref... - ? map(_ReferenceId($_), @{$args{$_}}) # calculate each - : _ReferenceId( $args{$_} ) # otherwise just the value - } keys %args + no warnings 'uninitialized'; + + # We don't worry about the hash ordering, as this is only + # temporarily used; also if the key changes it would be + # invalidated anyway. + join( + ";:;", + $self->Id, + map { + $_, # the key of each arguments + ( $_ eq 'EquivObjects' ) # for object arrayref... + ? map( _ReferenceId($_), @{ $args{$_} } ) # calculate each + : _ReferenceId( $args{$_} ) # otherwise just the value + } keys %args ); }; - # }}} - #Anything older than 60 seconds needs to be rechecked - my $cache_timeout = ( time - 60 ); - - # {{{ if we've cached a positive result for this query, return 1 - if ( ( defined $self->_ACLCache->{"$hashkey"} ) - && ( $self->_ACLCache->{"$hashkey"}{'val'} == 1 ) - && ( defined $self->_ACLCache->{"$hashkey"}{'set'} ) - && ( $self->_ACLCache->{"$hashkey"}{'set'} > $cache_timeout ) ) { - - #$RT::Logger->debug("Cached ACL win for ". $args{'Right'}.$args{'Scope'}. $args{'AppliesTo'}."\n"); - return ( 1); - } # }}} - # {{{ if we've cached a negative result for this query return undef - elsif ( ( defined $self->_ACLCache->{"$hashkey"} ) - && ( $self->_ACLCache->{"$hashkey"}{'val'} == -1 ) - && ( defined $self->_ACLCache->{"$hashkey"}{'set'} ) - && ( $self->_ACLCache->{"$hashkey"}{'set'} > $cache_timeout ) ) { + # {{{ if we've cached a positive result for this query, return 1 - #$RT::Logger->debug("Cached ACL loss decision for ". $args{'Right'}.$args{'Scope'}. $args{'AppliesTo'}."\n"); + my $cached_answer = $_ACL_CACHE->fetch($hashkey); - return (undef); + # Returns undef on cache miss + if ( defined $cached_answer ) { + if ( $cached_answer == 1 ) { + return (1); + } + elsif ( $cached_answer == -1 ) { + return (0); + } } - # }}} - - # }}} - - - - # {{{ Out of date docs - - # We want to grant the right if: - - - # # The user has the right as a member of a system-internal or - # # user-defined group - # - # Find all records from the ACL where they're granted to a group - # of type "UserDefined" or "System" - # for the object "System or the object "Queue N" and the group we're looking - # at has the recursive member $self->Id - # - # # The user has the right based on a role - # - # Find all the records from ACL where they're granted to the role "foo" - # for the object "System" or the object "Queue N" and the group we're looking - # at is of domain ("RT::Queue-Role" and applies to the right queue) - # or ("RT::Ticket-Role" and applies to the right ticket) - # and the type is the same as the type of the ACL and the group has - # the recursive member $self->Id - # - - # }}} my ( $or_look_at_object_rights, $or_check_roles ); my $right = $args{'Right'}; @@ -337,111 +374,108 @@ sub HasRight { # {{{ Construct Right Match # If an object is defined, we want to look at rights for that object - - my @look_at_objects; - push (@look_at_objects, "ACL.ObjectType = 'RT::System'") - unless $self->can('_IsOverrideGlobalACL') and $self->_IsOverrideGlobalACL($args{Object}); - - - foreach my $obj (@{$args{'EquivObjects'}}) { - next unless (UNIVERSAL::can($obj, 'id')); - my $type = ref($obj); - my $id = $obj->id; - push @look_at_objects, "(ACL.ObjectType = '$type' AND ACL.ObjectId = '$id')"; - } + my @look_at_objects; + push( @look_at_objects, "ACL.ObjectType = 'RT::System'" ) + unless $self->can('_IsOverrideGlobalACL') + and $self->_IsOverrideGlobalACL( $args{Object} ); + + foreach my $obj ( @{ $args{'EquivObjects'} } ) { + next unless ( UNIVERSAL::can( $obj, 'id' ) ); + my $type = ref($obj); + my $id = $obj->id; + + unless ($id) { + use Carp; + Carp::cluck( + "Trying to check $type rights for an unspecified $type"); + $RT::Logger->crit( + "Trying to check $type rights for an unspecified $type"); + } + push @look_at_objects, + "(ACL.ObjectType = '$type' AND ACL.ObjectId = '$id')"; + } - # }}} # {{{ Build that honkin-big SQL query - + my $query_base = + "SELECT ACL.id from ACL, Groups, Principals, CachedGroupMembers WHERE " . - my $query_base = "SELECT ACL.id from ACL, Groups, Principals, CachedGroupMembers WHERE ". - # Only find superuser or rights with the name $right - "(ACL.RightName = 'SuperUser' OR ACL.RightName = '$right') ". - # Never find disabled groups. - "AND Principals.Disabled = 0 " . - "AND CachedGroupMembers.Disabled = 0 ". - "AND Principals.id = Groups.id " . # We always grant rights to Groups + # Only find superuser or rights with the name $right + "(ACL.RightName = 'SuperUser' OR ACL.RightName = '$right') " . - # See if the principal is a member of the group recursively or _is the rightholder_ - # never find recursively disabled group members - # also, check to see if the right is being granted _directly_ to this principal, - # as is the case when we want to look up group rights - "AND Principals.id = CachedGroupMembers.GroupId AND CachedGroupMembers.MemberId = '" . $self->Id . "' ". + # Never find disabled groups. + "AND Principals.Disabled = 0 " + . "AND CachedGroupMembers.Disabled = 0 " + . "AND Principals.id = Groups.id " + . # We always grant rights to Groups - # Make sure the rights apply to the entire system or to the object in question - "AND ( ".join(' OR ', @look_at_objects).") "; +# See if the principal is a member of the group recursively or _is the rightholder_ +# never find recursively disabled group members +# also, check to see if the right is being granted _directly_ to this principal, +# as is the case when we want to look up group rights +"AND Principals.id = CachedGroupMembers.GroupId AND CachedGroupMembers.MemberId = '" + . $self->Id . "' " + . + # Make sure the rights apply to the entire system or to the object in question + "AND ( " . join( ' OR ', @look_at_objects ) . ") "; +# The groups query does the query based on group membership and individual user rights - # The groups query does the query based on group membership and individual user rights + my $groups_query = $query_base . - my $groups_query = $query_base . +# limit the result set to groups of types ACLEquivalence (user) UserDefined, SystemInternal and Personal +"AND ( ( ACL.PrincipalId = Principals.id AND ACL.PrincipalType = 'Group' AND " + . "(Groups.Domain = 'SystemInternal' OR Groups.Domain = 'UserDefined' OR Groups.Domain = 'ACLEquivalence' OR Groups.Domain = 'Personal'))" + . - # limit the result set to groups of types ACLEquivalence (user) UserDefined, SystemInternal and Personal - "AND ( ( ACL.PrincipalId = Principals.id AND ACL.PrincipalType = 'Group' AND ". - "(Groups.Domain = 'SystemInternal' OR Groups.Domain = 'UserDefined' OR Groups.Domain = 'ACLEquivalence' OR Groups.Domain = 'Personal'))". + " ) "; + $self->_Handle->ApplyLimits( \$groups_query, 1 ); #only return one result - " ) LIMIT 1"; - my @roles; - foreach my $object (@{$args{'EquivObjects'}}) { - push (@roles, $self->_RolesForObject(ref($object), $object->id)); + foreach my $object ( @{ $args{'EquivObjects'} } ) { + push( @roles, $self->_RolesForObject( ref($object), $object->id ) ); } # The roles query does the query based on roles my $roles_query; if (@roles) { - $roles_query = $query_base . "AND ". - " ( (".join (' OR ', @roles)." ) ". - " AND Groups.Type = ACL.PrincipalType AND Groups.Id = Principals.id AND Principals.PrincipalType = 'Group') LIMIT 1"; - - } - + $roles_query = + $query_base . "AND " . " ( (" + . join( ' OR ', @roles ) . " ) " + . " AND Groups.Type = ACL.PrincipalType AND Groups.Id = Principals.id AND Principals.PrincipalType = 'Group') "; + $self->_Handle->ApplyLimits( \$roles_query, 1 ); #only return one result + } # }}} # {{{ Actually check the ACL by performing an SQL query - # $RT::Logger->debug("Now Trying $groups_query"); + # $RT::Logger->debug("Now Trying $groups_query"); my $hitcount = $self->_Handle->FetchResult($groups_query); # }}} - - # {{{ if there's a match, the right is granted - if ($hitcount) { - # Cache a positive hit. - $self->_ACLCache->{"$hashkey"}{'set'} = time; - $self->_ACLCache->{"$hashkey"}{'val'} = 1; + # {{{ if there's a match, the right is granted + if ($hitcount) { + $_ACL_CACHE->set( $hashkey => 1 ); return (1); } - # }}} - # {{{ If there's no match on groups, try it on roles - else { - - $hitcount = $self->_Handle->FetchResult($roles_query); - - if ($hitcount) { - # Cache a positive hit. - $self->_ACLCache->{"$hashkey"}{'set'} = time; - $self->_ACLCache->{"$hashkey"}{'val'} = 1; - return (1); - } - - else { - # cache a negative hit - $self->_ACLCache->{"$hashkey"}{'set'} = time; - $self->_ACLCache->{"$hashkey"}{'val'} = -1; + # Now check the roles query + $hitcount = $self->_Handle->FetchResult($roles_query); - return (undef); - } + if ($hitcount) { + $_ACL_CACHE->set( $hashkey => 1 ); + return (1); } - # }}} + + # We failed to find an acl hit + $_ACL_CACHE->set( $hashkey => -1 ); + return (undef); } # }}} @@ -461,7 +495,18 @@ sub _RolesForObject { my $self = shift; my $type = shift; my $id = shift; - my $clause = "(Groups.Domain = '".$type."-Role' AND Groups.Instance = '" . $id. "') "; + + unless ($id) { + $id = '0'; + } + + # This should never be true. + unless ($id =~ /^\d+$/) { + $RT::Logger->crit("RT::Prinicipal::_RolesForObject called with type $type and a non-integer id: '$id'"); + $id = "'$id'"; + } + + my $clause = "(Groups.Domain = '".$type."-Role' AND Groups.Instance = $id) "; return($clause); } @@ -472,34 +517,19 @@ sub _RolesForObject { # {{{ ACL caching -# {{{ _ACLCache - -=head2 _ACLCache -# Function: _ACLCache -# Type : private instance -# Args : none -# Lvalue : hash: ACLCache -# Desc : Returns a reference to the Key cache hash +# {{{ InvalidateACLCache -=cut +=head2 InvalidateACLCache -sub _ACLCache { - return(\%_ACL_KEY_CACHE); -} - -# }}} - -# {{{ _InvalidateACLCache - -=head2 _InvalidateACLCache - -Cleans out and reinitializes the user rights key cache +Cleans out and reinitializes the user rights cache =cut -sub _InvalidateACLCache { - %_ACL_KEY_CACHE = (); +sub InvalidateACLCache { + $_ACL_CACHE = Cache::Simple::TimedExpiry->new(); + $_ACL_CACHE->expire_after($RT::ACLCacheLifetime||60); + } # }}} @@ -538,7 +568,7 @@ sub _GetPrincipalTypeForACL { Returns a list uniquely representing an object or normal scalar. For scalars, its string value is returned; for objects that has an -id() method, its class name and Id are returned as a string seperated by a "-". +id() method, its class name and Id are returned as a string separated by a "-". =cut diff --git a/rt/lib/RT/Principals.pm b/rt/lib/RT/Principals.pm index c45a4c734..a61cfb96a 100644 --- a/rt/lib/RT/Principals.pm +++ b/rt/lib/RT/Principals.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Principal item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Principals_Overlay.pm b/rt/lib/RT/Principals_Overlay.pm index 0d8c54c76..c06b9c657 100644 --- a/rt/lib/RT/Principals_Overlay.pm +++ b/rt/lib/RT/Principals_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Principals - a collection of RT::Principal objects @@ -43,6 +66,9 @@ ok (require RT::Principals); =cut + +package RT::Principals; + use strict; no warnings qw(redefine); diff --git a/rt/lib/RT/Queue.pm b/rt/lib/RT/Queue.pm index b362c9f0d..23839d4d9 100755 --- a/rt/lib/RT/Queue.pm +++ b/rt/lib/RT/Queue.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -107,7 +129,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -116,14 +138,14 @@ Returns the current value of id. =cut -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -134,14 +156,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Description +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -152,14 +174,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item CorrespondAddress +=head2 CorrespondAddress Returns the current value of CorrespondAddress. (In the database, CorrespondAddress is stored as varchar(120).) -=item SetCorrespondAddress VALUE +=head2 SetCorrespondAddress VALUE Set CorrespondAddress to VALUE. @@ -170,14 +192,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item CommentAddress +=head2 CommentAddress Returns the current value of CommentAddress. (In the database, CommentAddress is stored as varchar(120).) -=item SetCommentAddress VALUE +=head2 SetCommentAddress VALUE Set CommentAddress to VALUE. @@ -188,14 +210,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item InitialPriority +=head2 InitialPriority Returns the current value of InitialPriority. (In the database, InitialPriority is stored as int(11).) -=item SetInitialPriority VALUE +=head2 SetInitialPriority VALUE Set InitialPriority to VALUE. @@ -206,14 +228,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item FinalPriority +=head2 FinalPriority Returns the current value of FinalPriority. (In the database, FinalPriority is stored as int(11).) -=item SetFinalPriority VALUE +=head2 SetFinalPriority VALUE Set FinalPriority to VALUE. @@ -224,14 +246,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item DefaultDueIn +=head2 DefaultDueIn Returns the current value of DefaultDueIn. (In the database, DefaultDueIn is stored as int(11).) -=item SetDefaultDueIn VALUE +=head2 SetDefaultDueIn VALUE Set DefaultDueIn to VALUE. @@ -242,7 +264,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -251,7 +273,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -260,7 +282,7 @@ Returns the current value of Created. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -269,7 +291,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -278,14 +300,14 @@ Returns the current value of LastUpdated. =cut -=item Disabled +=head2 Disabled Returns the current value of Disabled. (In the database, Disabled is stored as smallint(6).) -=item SetDisabled VALUE +=head2 SetDisabled VALUE Set Disabled to VALUE. @@ -297,35 +319,35 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, CorrespondAddress => - {read => 1, write => 1, type => 'varchar(120)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''}, CommentAddress => - {read => 1, write => 1, type => 'varchar(120)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''}, InitialPriority => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, FinalPriority => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, DefaultDueIn => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Disabled => - {read => 1, write => 1, type => 'smallint(6)', default => '0'}, + {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, } }; @@ -357,7 +379,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Queue_Overlay.pm b/rt/lib/RT/Queue_Overlay.pm index 4eb265f2a..2f180fc56 100644 --- a/rt/lib/RT/Queue_Overlay.pm +++ b/rt/lib/RT/Queue_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Queue - an RT Queue object @@ -42,17 +65,20 @@ use RT::Queue; =cut + +package RT::Queue; + use strict; no warnings qw(redefine); -use vars qw(@STATUS @ACTIVE_STATUS @INACTIVE_STATUS $RIGHTS); +use vars qw(@DEFAULT_ACTIVE_STATUS @DEFAULT_INACTIVE_STATUS $RIGHTS); + use RT::Groups; use RT::ACL; +use RT::Interface::Email; - -@ACTIVE_STATUS = qw(new open stalled); -@INACTIVE_STATUS = qw(resolved rejected deleted); -@STATUS = (@ACTIVE_STATUS, @INACTIVE_STATUS); +@DEFAULT_ACTIVE_STATUS = qw(new open stalled); +@DEFAULT_INACTIVE_STATUS = qw(resolved rejected deleted); # $self->loc('new'); # For the string extractor to get a string to localize # $self->loc('open'); # For the string extractor to get a string to localize @@ -68,15 +94,16 @@ $RIGHTS = { ShowACL => 'Display Access Control List', # loc_pair ModifyACL => 'Modify Access Control List', # loc_pair ModifyQueueWatchers => 'Modify the queue watchers', # loc_pair - AdminCustomFields => 'Create, delete and modify custom fields', # loc_pair + AssignCustomFields => 'Assign and remove custom fields', # loc_pair ModifyTemplate => 'Modify Scrip templates for this queue', # loc_pair ShowTemplate => 'Display Scrip templates for this queue', # loc_pair ModifyScrips => 'Modify Scrips for this queue', # loc_pair ShowScrips => 'Display Scrips for this queue', # loc_pair - ShowTicket => 'Show ticket summaries', # loc_pair - ShowTicketComments => 'Show ticket private commentary', # loc_pair + ShowTicket => 'See ticket summaries', # loc_pair + ShowTicketComments => 'See ticket private commentary', # loc_pair + ShowOutgoingEmail => 'See exact outgoing email messages and their recipeients', # loc_pair Watch => 'Sign up as a ticket Requestor or ticket or queue Cc', # loc_pair WatchAsAdminCc => 'Sign up as a ticket or queue AdminCc', # loc_pair @@ -102,6 +129,39 @@ foreach my $right ( keys %{$RIGHTS} ) { } +sub AddLink { + my $self = shift; + my %args = ( Target => '', + Base => '', + Type => '', + Silent => undef, + @_ ); + + unless ( $self->CurrentUserHasRight('ModifyQueue') ) { + return ( 0, $self->loc("Permission Denied") ); + } + + return $self->SUPER::_AddLink(%args); +} + +sub DeleteLink { + my $self = shift; + my %args = ( + Base => undef, + Target => undef, + Type => undef, + @_ + ); + + #check acls + unless ( $self->CurrentUserHasRight('ModifyQueue') ) { + $RT::Logger->debug("No permission to delete links\n"); + return ( 0, $self->loc('Permission Denied')) + } + + return $self->SUPER::_DeleteLink(%args); +} + =head2 AvailableRights Returns a hash of available rights for this object. The keys are the right names and the values are a description of what the rights do @@ -123,7 +183,12 @@ Returns an array of all ActiveStatuses for this queue sub ActiveStatusArray { my $self = shift; - return (@ACTIVE_STATUS); + if (@RT::ActiveStatus) { + return (@RT::ActiveStatus) + } else { + $RT::Logger->warning("RT::ActiveStatus undefined, falling back to deprecated defaults"); + return (@DEFAULT_ACTIVE_STATUS); + } } # }}} @@ -138,7 +203,12 @@ Returns an array of all InactiveStatuses for this queue sub InactiveStatusArray { my $self = shift; - return (@INACTIVE_STATUS); + if (@RT::InactiveStatus) { + return (@RT::InactiveStatus) + } else { + $RT::Logger->warning("RT::InactiveStatus undefined, falling back to deprecated defaults"); + return (@DEFAULT_INACTIVE_STATUS); + } } # }}} @@ -153,7 +223,7 @@ Returns an array of all statuses for this queue sub StatusArray { my $self = shift; - return (@STATUS); + return ($self->ActiveStatusArray(), $self->InactiveStatusArray()); } # }}} @@ -162,20 +232,23 @@ sub StatusArray { =head2 IsValidStatus VALUE -Returns true if VALUE is a valid status. Otherwise, returns 0 +Returns true if VALUE is a valid status. Otherwise, returns 0. + +=begin testing -=for testing my $q = RT::Queue->new($RT::SystemUser); ok($q->IsValidStatus('new')== 1, 'New is a valid status'); ok($q->IsValidStatus('f00')== 0, 'f00 is not a valid status'); +=end testing + =cut sub IsValidStatus { my $self = shift; my $value = shift; - my $retval = grep ( /^$value$/, $self->StatusArray ); + my $retval = grep ( $_ eq $value, $self->StatusArray ); return ($retval); } @@ -188,19 +261,22 @@ sub IsValidStatus { Returns true if VALUE is a Active status. Otherwise, returns 0 -=for testing +=begin testing + my $q = RT::Queue->new($RT::SystemUser); ok($q->IsActiveStatus('new')== 1, 'New is a Active status'); ok($q->IsActiveStatus('rejected')== 0, 'Rejected is an inactive status'); ok($q->IsActiveStatus('f00')== 0, 'f00 is not a Active status'); +=end testing + =cut sub IsActiveStatus { my $self = shift; my $value = shift; - my $retval = grep ( /^$value$/, $self->ActiveStatusArray ); + my $retval = grep ( $_ eq $value, $self->ActiveStatusArray ); return ($retval); } @@ -213,19 +289,22 @@ sub IsActiveStatus { Returns true if VALUE is a Inactive status. Otherwise, returns 0 -=for testing +=begin testing + my $q = RT::Queue->new($RT::SystemUser); ok($q->IsInactiveStatus('new')== 0, 'New is a Active status'); ok($q->IsInactiveStatus('rejected')== 1, 'rejeected is an Inactive status'); ok($q->IsInactiveStatus('f00')== 0, 'f00 is not a Active status'); +=end testing + =cut sub IsInactiveStatus { my $self = shift; my $value = shift; - my $retval = grep ( /^$value$/, $self->InactiveStatusArray ); + my $retval = grep ( $_ eq $value, $self->InactiveStatusArray ); return ($retval); } @@ -235,11 +314,34 @@ sub IsInactiveStatus { # {{{ sub Create -=head2 Create -Create takes the name of the new queue + + +=head2 Create(ARGS) + +Arguments: ARGS is a hash of named parameters. Valid parameters are: + + Name (required) + Description + CorrespondAddress + CommentAddress + InitialPriority + FinalPriority + DefaultDueIn + If you pass the ACL check, it creates the queue and returns its queue id. +=begin testing + +my $queue = RT::Queue->new($RT::SystemUser); +my ($id, $val) = $queue->Create( Name => 'Test1'); +ok($id, $val); + +($id, $val) = $queue->Create( Name => '66'); +ok(!$id, $val); + +=end testing + =cut sub Create { @@ -300,8 +402,8 @@ sub Delete { =head2 SetDisabled Takes a boolean. -1 will cause this queue to no longer be avaialble for tickets. -0 will re-enable this queue +1 will cause this queue to no longer be available for tickets. +0 will re-enable this queue. =cut @@ -327,7 +429,7 @@ sub Load { $self->SUPER::LoadById($identifier); } else { - $self->LoadByCol( "Name", $identifier ); + $self->LoadByCols( Name => $identifier ); } return ( $self->Id ); @@ -352,20 +454,14 @@ sub ValidateName { my $tempqueue = new RT::Queue($RT::SystemUser); $tempqueue->Load($name); - #If we couldn't load it :) - unless ( $tempqueue->id() ) { - return (1); - } - #If this queue exists, return undef - #Avoid the ACL check. - if ( $tempqueue->Name() ) { + if ( $tempqueue->Name() && $tempqueue->id != $self->id) { return (undef); } #If the queue doesn't exist, return 1 else { - return (1); + return ($self->SUPER::ValidateName($name)); } } @@ -398,7 +494,7 @@ sub Templates { # {{{ CustomField -=item CustomField NAME +=head2 CustomField NAME Load the queue-specific custom field named NAME @@ -415,18 +511,38 @@ sub CustomField { # {{{ CustomFields -=item CustomFields +=head2 CustomFields Returns an RT::CustomFields object containing all global custom fields, as well as those tied to this queue =cut +# XXX TODO - this should become TicketCustomFields + sub CustomFields { my $self = shift; + warn "Queue->CustomFields is deprecated, use Queue->TicketCustomFields instead"; + return $self->TicketCustomFields(@_); +} + +sub TicketCustomFields { + my $self = shift; my $cfs = RT::CustomFields->new( $self->CurrentUser ); if ( $self->CurrentUserHasRight('SeeQueue') ) { - $cfs->LimitToGlobalOrQueue( $self->Id ); + $cfs->LimitToGlobalOrObjectId( $self->Id ); + $cfs->LimitToLookupType( 'RT::Queue-RT::Ticket' ); + } + return ($cfs); +} + +sub TicketTransactionCustomFields { + my $self = shift; + + my $cfs = RT::CustomFields->new( $self->CurrentUser ); + if ( $self->CurrentUserHasRight('SeeQueue') ) { + $cfs->LimitToGlobalOrObjectId( $self->Id ); + $cfs->LimitToLookupType( 'RT::Queue-RT::Ticket-RT::Transaction' ); } return ($cfs); } @@ -442,7 +558,7 @@ sub CustomFields { =head2 _CreateQueueGroups -Create the ticket groups and relationships for this ticket. +Create the ticket groups and links for this ticket. This routine expects to be called from Ticket->Create _inside of a transaction_ It will create four groups for this ticket: Requestor, Cc, AdminCc and Owner. @@ -518,6 +634,8 @@ Email The email address of the new watcher. If a user with this If the watcher you\'re trying to set has an RT account, set the Owner paremeter to their User Id. Otherwise, set the Email parameter to their Email address. +Returns a tuple of (status/id, message). + =cut sub AddWatcher { @@ -551,7 +669,7 @@ sub AddWatcher { } } else { - $RT::Logger->warn( "$self -> AddWatcher got passed a bogus type"); + $RT::Logger->warning( "$self -> AddWatcher got passed a bogus type"); return ( 0, $self->loc('Error in parameters to Queue->AddWatcher') ); } } @@ -602,10 +720,13 @@ sub _AddWatcher { # if the user doesn't exist, we need to create a new user my $new_user = RT::User->new($RT::SystemUser); + my ( $Address, $Name ) = + RT::Interface::Email::ParseAddressFromHeader($args{'Email'}); + my ( $Val, $Message ) = $new_user->Create( - Name => $args{'Email'}, - EmailAddress => $args{'Email'}, - RealName => $args{'Email'}, + Name => $Address, + EmailAddress => $Address, + RealName => $Name, Privileged => 0, Comments => 'Autocreated when added as a watcher'); unless ($Val) { @@ -709,8 +830,8 @@ sub DeleteWatcher { } } else { - $RT::Logger->warn( "$self -> DelWatcher got passed a bogus type"); - return ( 0, $self->loc('Error in parameters to Queue->DelWatcher') ); + $RT::Logger->warning( "$self -> DeleteWatcher got passed a bogus type"); + return ( 0, $self->loc('Error in parameters to Queue->DeleteWatcher') ); } } @@ -866,8 +987,11 @@ sub IsWatcher { my $principal = RT::Principal->new($self->CurrentUser); $principal->Load($args{'PrincipalId'}); + unless ($principal->Id) { + return (undef); + } - return ($group->HasMember($principal)); + return ($group->HasMemberRecursively($principal)); } # }}} @@ -877,8 +1001,8 @@ sub IsWatcher { =head2 IsCc PRINCIPAL_ID - Takes an RT::Principal id. - Returns true if the principal is a requestor of the current queue. +Takes an RT::Principal id. +Returns true if the principal is a requestor of the current queue. =cut @@ -897,8 +1021,8 @@ sub IsCc { =head2 IsAdminCc PRINCIPAL_ID - Takes an RT::Principal id. - Returns true if the principal is a requestor of the current queue. +Takes an RT::Principal id. +Returns true if the principal is a requestor of the current queue. =cut @@ -999,7 +1123,7 @@ sub HasRight { } return ( $args{'Principal'}->HasRight( - Object => $self, + Object => $self->Id ? $self : $RT::System, Right => $args{'Right'} ) ); diff --git a/rt/lib/RT/Queues.pm b/rt/lib/RT/Queues.pm index 60aec9086..a7020812f 100755 --- a/rt/lib/RT/Queues.pm +++ b/rt/lib/RT/Queues.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Queue item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Queues_Overlay.pm b/rt/lib/RT/Queues_Overlay.pm index b85144b52..06e3e12a8 100644 --- a/rt/lib/RT/Queues_Overlay.pm +++ b/rt/lib/RT/Queues_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Queues - a collection of RT::Queue objects @@ -43,6 +66,9 @@ ok (require RT::Queues); =cut + +package RT::Queues; + use strict; no warnings qw(redefine); diff --git a/rt/lib/RT/Record.pm b/rt/lib/RT/Record.pm index 6962221ea..d3a826808 100755 --- a/rt/lib/RT/Record.pm +++ b/rt/lib/RT/Record.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Record - Base class for RT record objects @@ -44,12 +67,12 @@ ok (require RT::Record); package RT::Record; use RT::Date; use RT::User; - +use RT::Attributes; use RT::Base; use DBIx::SearchBuilder::Record::Cachable; use strict; -use vars qw/@ISA/; +use vars qw/@ISA $_TABLE_ATTR/; @ISA = qw(RT::Base); @@ -64,8 +87,8 @@ if ($RT::DontCacheSearchBuilderRecords ) { sub _Init { my $self = shift; + $self->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); $self->CurrentUser(@_); - } # }}} @@ -85,6 +108,146 @@ sub _PrimaryKeys { # }}} +=head2 Delete + +Delete this record object from the database. + +=cut + +sub Delete { + my $self = shift; + my ($rv) = $self->SUPER::Delete; + if ($rv) { + return ($rv, $self->loc("Object deleted")); + } else { + + return(0, $self->loc("Object could not be deleted")) + } +} + +=head2 ObjectTypeStr + +Returns a string which is this object's type. The type is the class, +without the "RT::" prefix. + +=begin testing + +my $ticket = RT::Ticket->new($RT::SystemUser); +my $group = RT::Group->new($RT::SystemUser); +is($ticket->ObjectTypeStr, 'Ticket', "Ticket returns correct typestring"); +is($group->ObjectTypeStr, 'Group', "Group returns correct typestring"); + +=end testing + +=cut + +sub ObjectTypeStr { + my $self = shift; + if (ref($self) =~ /^.*::(\w+)$/) { + return $self->loc($1); + } else { + return $self->loc(ref($self)); + } +} + +=head2 Attributes + +Return this object's attributes as an RT::Attributes object + +=cut + +sub Attributes { + my $self = shift; + + unless ($self->{'attributes'}) { + $self->{'attributes'} = RT::Attributes->new($self->CurrentUser); + $self->{'attributes'}->LimitToObject($self); + } + return ($self->{'attributes'}); + +} + + +=head2 AddAttribute { Name, Description, Content } + +Adds a new attribute for this object. + +=cut + +sub AddAttribute { + my $self = shift; + my %args = ( Name => undef, + Description => undef, + Content => undef, + @_ ); + + my $attr = RT::Attribute->new( $self->CurrentUser ); + my ( $id, $msg ) = $attr->Create( + Object => $self, + Name => $args{'Name'}, + Description => $args{'Description'}, + Content => $args{'Content'} ); + + + # XXX TODO: Why won't RedoSearch work here? + $self->Attributes->_DoSearch; + + return ($id, $msg); +} + + +=head2 SetAttribute { Name, Description, Content } + +Like AddAttribute, but replaces all existing attributes with the same Name. + +=cut + +sub SetAttribute { + my $self = shift; + my %args = ( Name => undef, + Description => undef, + Content => undef, + @_ ); + + my @AttributeObjs = $self->Attributes->Named( $args{'Name'} ) + or return $self->AddAttribute( %args ); + + my $AttributeObj = pop( @AttributeObjs ); + $_->Delete foreach @AttributeObjs; + + $AttributeObj->SetDescription( $args{'Description'} ); + $AttributeObj->SetContent( $args{'Content'} ); + + $self->Attributes->RedoSearch; + return 1; +} + +=head2 DeleteAttribute NAME + +Deletes all attributes with the matching name for this object. + +=cut + +sub DeleteAttribute { + my $self = shift; + my $name = shift; + return $self->Attributes->DeleteEntry( Name => $name ); +} + +=head2 FirstAttribute NAME + +Returns the value of the first attribute with the matching name +for this object, or C<undef> if no such attributes exist. + +=cut + +sub FirstAttribute { + my $self = shift; + my $name = shift; + return ($self->Attributes->Named( $name ))[0]; +} + + # {{{ sub _Handle sub _Handle { my $self = shift; @@ -95,7 +258,7 @@ sub _Handle { # {{{ sub Create -=item Create PARAMHASH +=head2 Create PARAMHASH Takes a PARAMHASH of Column -> Value pairs. If any Column has a Validate$PARAMNAME subroutine defined and the @@ -195,6 +358,9 @@ sub LoadByCols { my $self = shift; my %hash = (@_); + # We don't want to hang onto this + delete $self->{'attributes'}; + # If this database is case sensitive we need to uncase objects for # explicit loading if ( $self->_Handle->CaseSensitive ) { @@ -211,7 +377,11 @@ sub LoadByCols { $newhash{$key} = $hash{$key}; } else { - $newhash{ "lower(" . $key . ")" } = lc( $hash{$key} ); + my ($op, $val, $func); + ($key, $op, $val, $func) = $self->_Handle->_MakeClauseCaseInsensitive($key, '=', $hash{$key}); + $newhash{$key}->{operator} = $op; + $newhash{$key}->{value} = $val; + $newhash{$key}->{function} = $func; } } @@ -313,6 +483,7 @@ sub LongSinceUpdateAsString { # }}} Datehandling # {{{ sub _Set +# sub _Set { my $self = shift; @@ -330,12 +501,33 @@ sub _Set { $args{'Value'} = 0; } - $self->_SetLastUpdated(); - my ( $val, $msg ) = $self->SUPER::_Set( + my $old_val = $self->__Value($args{'Field'}); + $self->_SetLastUpdated(); + my $ret = $self->SUPER::_Set( Field => $args{'Field'}, Value => $args{'Value'}, IsSQL => $args{'IsSQL'} ); + my ($status, $msg) = $ret->as_array(); + + # @values has two values, a status code and a message. + + # $ret is a Class::ReturnValue object. as such, in a boolean context, it's a bool + # we want to change the standard "success" message + if ($status) { + $msg = + $self->loc( + "[_1] changed from [_2] to [_3]", + $args{'Field'}, + ( $old_val ? "'$old_val'" : $self->loc("(no value)") ), + '"' . $self->__Value( $args{'Field'}) . '"' + ); + } else { + + $msg = $self->CurrentUser->loc_fuzzy($msg); + } + return wantarray ? ($status, $msg) : $ret; + } # }}} @@ -410,10 +602,61 @@ sub LastUpdatedByObj { # }}} +# {{{ sub URI + +=head2 URI + +Returns this record's URI + +=cut + +sub URI { + my $self = shift; + my $uri = RT::URI::fsck_com_rt->new($self->CurrentUser); + return($uri->URIForObject($self)); +} + +# }}} + +=head2 ValidateName NAME + +Validate the name of the record we're creating. Mostly, just make sure it's not a numeric ID, which is invalid for Name + +=cut + +sub ValidateName { + my $self = shift; + my $value = shift; + if ($value && $value=~ /^\d+$/) { + return(0); + } else { + return (1); + } +} + + + +=head2 SQLType attribute + +return the SQL type for the attribute 'attribute' as stored in _ClassAccessible + +=cut + +sub SQLType { + my $self = shift; + my $field = shift; + + return ($self->_Accessible($field, 'type')); + + +} require Encode::compat if $] < 5.007001; require Encode; + + + sub __Value { my $self = shift; my $field = shift; @@ -436,17 +679,1190 @@ sub __Value { sub _CacheConfig { { 'cache_p' => 1, - 'fast_update_p' => 1, 'cache_for_sec' => 30, } } -=head2 _DecodeUTF8 - When passed a string will "decode" it int a proper UTF-8 string + +sub _BuildTableAttributes { + my $self = shift; + + my $attributes; + if ( UNIVERSAL::can( $self, '_CoreAccessible' ) ) { + $attributes = $self->_CoreAccessible(); + } elsif ( UNIVERSAL::can( $self, '_ClassAccessible' ) ) { + $attributes = $self->_ClassAccessible(); + + } + + foreach my $column (%$attributes) { + foreach my $attr ( %{ $attributes->{$column} } ) { + $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; + } + } + if ( UNIVERSAL::can( $self, '_OverlayAccessible' ) ) { + $attributes = $self->_OverlayAccessible(); + + foreach my $column (%$attributes) { + foreach my $attr ( %{ $attributes->{$column} } ) { + $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; + } + } + } + if ( UNIVERSAL::can( $self, '_VendorAccessible' ) ) { + $attributes = $self->_VendorAccessible(); + + foreach my $column (%$attributes) { + foreach my $attr ( %{ $attributes->{$column} } ) { + $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; + } + } + } + if ( UNIVERSAL::can( $self, '_LocalAccessible' ) ) { + $attributes = $self->_LocalAccessible(); + + foreach my $column (%$attributes) { + foreach my $attr ( %{ $attributes->{$column} } ) { + $_TABLE_ATTR->{ref($self)}->{$column}->{$attr} = $attributes->{$column}->{$attr}; + } + } + } + +} + + +=head2 _ClassAccessible + +Overrides the "core" _ClassAccessible using $_TABLE_ATTR. Behaves identical to the version in +DBIx::SearchBuilder::Record + +=cut + +sub _ClassAccessible { + my $self = shift; + return $_TABLE_ATTR->{ref($self)}; +} + +=head2 _Accessible COLUMN ATTRIBUTE + +returns the value of ATTRIBUTE for COLUMN + + +=cut + +sub _Accessible { + my $self = shift; + my $column = shift; + my $attribute = lc(shift); + return 0 unless defined ($_TABLE_ATTR->{ref($self)}->{$column}); + return $_TABLE_ATTR->{ref($self)}->{$column}->{$attribute} || 0; + +} + +=head2 _EncodeLOB BODY MIME_TYPE + +Takes a potentially large attachment. Returns (ContentEncoding, EncodedBody) based on system configuration and selected database + +=cut + +sub _EncodeLOB { + my $self = shift; + my $Body = shift; + my $MIMEType = shift; + + my $ContentEncoding = 'none'; + + #get the max attachment length from RT + my $MaxSize = $RT::MaxAttachmentSize; + + #if the current attachment contains nulls and the + #database doesn't support embedded nulls + + if ( $RT::AlwaysUseBase64 or + ( !$RT::Handle->BinarySafeBLOBs ) && ( $Body =~ /\x00/ ) ) { + + # set a flag telling us to mimencode the attachment + $ContentEncoding = 'base64'; + + #cut the max attchment size by 25% (for mime-encoding overhead. + $RT::Logger->debug("Max size is $MaxSize\n"); + $MaxSize = $MaxSize * 3 / 4; + # Some databases (postgres) can't handle non-utf8 data + } elsif ( !$RT::Handle->BinarySafeBLOBs + && $MIMEType !~ /text\/plain/gi + && !Encode::is_utf8( $Body, 1 ) ) { + $ContentEncoding = 'quoted-printable'; + } + + #if the attachment is larger than the maximum size + if ( ($MaxSize) and ( $MaxSize < length($Body) ) ) { + + # if we're supposed to truncate large attachments + if ($RT::TruncateLongAttachments) { + + # truncate the attachment to that length. + $Body = substr( $Body, 0, $MaxSize ); + + } + + # elsif we're supposed to drop large attachments on the floor, + 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" ); + return ("none", "Large attachment dropped" ); + } + } + + # if we need to mimencode the attachment + if ( $ContentEncoding eq 'base64' ) { + + # base64 encode the attachment + Encode::_utf8_off($Body); + $Body = MIME::Base64::encode_base64($Body); + + } elsif ($ContentEncoding eq 'quoted-printable') { + Encode::_utf8_off($Body); + $Body = MIME::QuotedPrint::encode($Body); + } + + + return ($ContentEncoding, $Body); + +} + +sub _DecodeLOB { + my $self = shift; + my $ContentType = shift; + my $ContentEncoding = shift; + my $Content = shift; + + if ( $ContentEncoding eq 'base64' ) { + $Content = MIME::Base64::decode_base64($Content); + } + elsif ( $ContentEncoding eq 'quoted-printable' ) { + $Content = MIME::QuotedPrint::decode($Content); + } + elsif ( $ContentEncoding && $ContentEncoding ne 'none' ) { + return ( $self->loc( "Unknown ContentEncoding [_1]", $ContentEncoding ) ); + } + if ( $ContentType eq 'text/plain' ) { + $Content = Encode::decode_utf8($Content) unless Encode::is_utf8($Content); + } + return ($Content); +} + +# {{{ LINKDIRMAP +# A helper table for links mapping to make it easier +# to build and parse links between tickets + +use vars '%LINKDIRMAP'; + +%LINKDIRMAP = ( + MemberOf => { Base => 'MemberOf', + Target => 'HasMember', }, + RefersTo => { Base => 'RefersTo', + Target => 'ReferredToBy', }, + DependsOn => { Base => 'DependsOn', + Target => 'DependedOnBy', }, + MergedInto => { Base => 'MergedInto', + Target => 'MergedInto', }, + +); + +sub Update { + my $self = shift; + + my %args = ( + ARGSRef => undef, + AttributesRef => undef, + AttributePrefix => undef, + @_ + ); + + my $attributes = $args{'AttributesRef'}; + my $ARGSRef = $args{'ARGSRef'}; + my @results; + + foreach my $attribute (@$attributes) { + my $value; + if ( defined $ARGSRef->{$attribute} ) { + $value = $ARGSRef->{$attribute}; + } + elsif ( + defined( $args{'AttributePrefix'} ) + && defined( + $ARGSRef->{ $args{'AttributePrefix'} . "-" . $attribute } + ) + ) { + $value = $ARGSRef->{ $args{'AttributePrefix'} . "-" . $attribute }; + + } + else { + next; + } + + $value =~ s/\r\n/\n/gs; + + + # If Queue is 'General', we want to resolve the queue name for + # the object. + + # This is in an eval block because $object might not exist. + # and might not have a Name method. But "can" won't find autoloaded + # items. If it fails, we don't care + eval { + my $object = $attribute . "Obj"; + next if ($self->$object->Name eq $value); + }; + next if ( $value eq $self->$attribute() ); + my $method = "Set$attribute"; + my ( $code, $msg ) = $self->$method($value); + my ($prefix) = ref($self) =~ /RT::(\w+)/; + + # Default to $id, but use name if we can get it. + my $label = $self->id; + $label = $self->Name if (UNIVERSAL::can($self,'Name')); + push @results, $self->loc( "$prefix [_1]", $label ) . ': '. $msg; + +=for loc + + "[_1] could not be set to [_2].", # loc + "That is already the current value", # loc + "No value sent to _Set!\n", # loc + "Illegal value for [_1]", # loc + "The new value has been set.", # loc + "No column specified", # loc + "Immutable field", # loc + "Nonexistant field?", # loc + "Invalid data", # loc + "Couldn't find row", # loc + "Missing a primary key?: [_1]", # loc + "Found Object", # loc + +=cut + + } + + return @results; +} + +# {{{ Routines dealing with Links + +# {{{ Link Collections + +# {{{ sub Members + +=head2 Members + + This returns an RT::Links object which references all the tickets +which are 'MembersOf' this ticket + +=cut + +sub Members { + my $self = shift; + return ( $self->_Links( 'Target', 'MemberOf' ) ); +} + +# }}} + +# {{{ sub MemberOf + +=head2 MemberOf + + This returns an RT::Links object which references all the tickets that this +ticket is a 'MemberOf' + +=cut + +sub MemberOf { + my $self = shift; + return ( $self->_Links( 'Base', 'MemberOf' ) ); +} + +# }}} + +# {{{ RefersTo + +=head2 RefersTo + + This returns an RT::Links object which shows all references for which this ticket is a base + +=cut + +sub RefersTo { + my $self = shift; + return ( $self->_Links( 'Base', 'RefersTo' ) ); +} + +# }}} + +# {{{ ReferredToBy + +=head2 ReferredToBy + + This returns an RT::Links object which shows all references for which this ticket is a target + +=cut + +sub ReferredToBy { + my $self = shift; + return ( $self->_Links( 'Target', 'RefersTo' ) ); +} + +# }}} + +# {{{ DependedOnBy + +=head2 DependedOnBy + + This returns an RT::Links object which references all the tickets that depend on this one + +=cut + +sub DependedOnBy { + my $self = shift; + return ( $self->_Links( 'Target', 'DependsOn' ) ); +} + +# }}} + + + +=head2 HasUnresolvedDependencies + + Takes a paramhash of Type (default to '__any'). Returns true if +$self->UnresolvedDependencies returns an object with one or more members +of that type. Returns false otherwise + + +=begin testing + +my $t1 = RT::Ticket->new($RT::SystemUser); +my ($id, $trans, $msg) = $t1->Create(Subject => 'DepTest1', Queue => 'general'); +ok($id, "Created dep test 1 - $msg"); + +my $t2 = RT::Ticket->new($RT::SystemUser); +my ($id2, $trans, $msg2) = $t2->Create(Subject => 'DepTest2', Queue => 'general'); +ok($id2, "Created dep test 2 - $msg2"); +my $t3 = RT::Ticket->new($RT::SystemUser); +my ($id3, $trans, $msg3) = $t3->Create(Subject => 'DepTest3', Queue => 'general', Type => 'approval'); +ok($id3, "Created dep test 3 - $msg3"); +my ($addid, $addmsg); +ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t2->id)); +ok ($addid, $addmsg); +ok (($addid, $addmsg) =$t1->AddLink( Type => 'DependsOn', Target => $t3->id)); + +ok ($addid, $addmsg); +my $link = RT::Link->new($RT::SystemUser); +my ($rv, $msg) = $link->Load($addid); +ok ($rv, $msg); +ok ($link->LocalTarget == $t3->id, "Link LocalTarget is correct"); +ok ($link->LocalBase == $t1->id, "Link LocalBase is correct"); + +ok ($t1->HasUnresolvedDependencies, "Ticket ".$t1->Id." has unresolved deps"); +ok (!$t1->HasUnresolvedDependencies( Type => 'blah' ), "Ticket ".$t1->Id." has no unresolved blahs"); +ok ($t1->HasUnresolvedDependencies( Type => 'approval' ), "Ticket ".$t1->Id." has unresolved approvals"); +ok (!$t2->HasUnresolvedDependencies, "Ticket ".$t2->Id." has no unresolved deps"); +; + +my ($rid, $rmsg)= $t1->Resolve(); +ok(!$rid, $rmsg); +my ($rid2, $rmsg2) = $t2->Resolve(); +ok ($rid2, $rmsg2); +($rid, $rmsg)= $t1->Resolve(); +ok(!$rid, $rmsg); +my ($rid3,$rmsg3) = $t3->Resolve; +ok ($rid3,$rmsg3); +($rid, $rmsg)= $t1->Resolve(); +ok($rid, $rmsg); + + +=end testing + +=cut + +sub HasUnresolvedDependencies { + my $self = shift; + my %args = ( + Type => undef, + @_ + ); + + my $deps = $self->UnresolvedDependencies; + + if ($args{Type}) { + $deps->Limit( FIELD => 'Type', + OPERATOR => '=', + VALUE => $args{Type}); + } + else { + $deps->IgnoreType; + } + + if ($deps->Count > 0) { + return 1; + } + else { + return (undef); + } +} + + +# {{{ UnresolvedDependencies + +=head2 UnresolvedDependencies + +Returns an RT::Tickets object of tickets which this ticket depends on +and which have a status of new, open or stalled. (That list comes from +RT::Queue->ActiveStatusArray + +=cut + + +sub UnresolvedDependencies { + my $self = shift; + my $deps = RT::Tickets->new($self->CurrentUser); + + my @live_statuses = RT::Queue->ActiveStatusArray(); + foreach my $status (@live_statuses) { + $deps->LimitStatus(VALUE => $status); + } + $deps->LimitDependedOnBy($self->Id); + + return($deps); + +} + +# }}} + +# {{{ AllDependedOnBy + +=head2 AllDependedOnBy + +Returns an array of RT::Ticket objects which (directly or indirectly) +depends on this ticket; takes an optional 'Type' argument in the param +hash, which will limit returned tickets to that type, as well as cause +tickets with that type to serve as 'leaf' nodes that stops the recursive +dependency search. + +=cut + +sub AllDependedOnBy { + my $self = shift; + my $dep = $self->DependedOnBy; + my %args = ( + Type => undef, + _found => {}, + _top => 1, + @_ + ); + + while (my $link = $dep->Next()) { + next unless ($link->BaseURI->IsLocal()); + next if $args{_found}{$link->BaseObj->Id}; + + if (!$args{Type}) { + $args{_found}{$link->BaseObj->Id} = $link->BaseObj; + $link->BaseObj->AllDependedOnBy( %args, _top => 0 ); + } + elsif ($link->BaseObj->Type eq $args{Type}) { + $args{_found}{$link->BaseObj->Id} = $link->BaseObj; + } + else { + $link->BaseObj->AllDependedOnBy( %args, _top => 0 ); + } + } + + if ($args{_top}) { + return map { $args{_found}{$_} } sort keys %{$args{_found}}; + } + else { + return 1; + } +} + +# }}} + +# {{{ DependsOn + +=head2 DependsOn + + This returns an RT::Links object which references all the tickets that this ticket depends on + +=cut + +sub DependsOn { + my $self = shift; + return ( $self->_Links( 'Base', 'DependsOn' ) ); +} + +# }}} + + + + +# {{{ sub _Links + +=head2 Links DIRECTION TYPE + +return links to/from this object. + +=cut + +*Links = \&_Links; + +sub _Links { + my $self = shift; + + #TODO: Field isn't the right thing here. but I ahave no idea what mnemonic --- + #tobias meant by $f + my $field = shift; + my $type = shift || ""; + + unless ( $self->{"$field$type"} ) { + $self->{"$field$type"} = new RT::Links( $self->CurrentUser ); + # at least to myself + $self->{"$field$type"}->Limit( FIELD => $field, + VALUE => $self->URI, + ENTRYAGGREGATOR => 'OR' ); + $self->{"$field$type"}->Limit( FIELD => 'Type', + VALUE => $type ) + if ($type); + } + return ( $self->{"$field$type"} ); +} + +# }}} + +# }}} + +# {{{ sub _AddLink + +=head2 _AddLink + +Takes a paramhash of Type and one of Base or Target. Adds that link to this ticket. + + +=cut + + +sub _AddLink { + my $self = shift; + my %args = ( Target => '', + Base => '', + Type => '', + Silent => undef, + @_ ); + + + # Remote_link is the URI of the object that is not this ticket + my $remote_link; + my $direction; + + if ( $args{'Base'} and $args{'Target'} ) { + $RT::Logger->debug( "$self tried to create a link. both base and target were specified\n" ); + return ( 0, $self->loc("Can't specifiy both base and target") ); + } + elsif ( $args{'Base'} ) { + $args{'Target'} = $self->URI(); + my $class = ref($self); + $remote_link = $args{'Base'}; + $direction = 'Target'; + } + elsif ( $args{'Target'} ) { + $args{'Base'} = $self->URI(); + my $class = ref($self); + $remote_link = $args{'Target'}; + $direction = 'Base'; + } + else { + return ( 0, $self->loc('Either base or target must be specified') ); + } + + # {{{ Check if the link already exists - we don't want duplicates + use RT::Link; + my $old_link = RT::Link->new( $self->CurrentUser ); + $old_link->LoadByParams( Base => $args{'Base'}, + Type => $args{'Type'}, + Target => $args{'Target'} ); + if ( $old_link->Id ) { + $RT::Logger->debug("$self Somebody tried to duplicate a link"); + return ( $old_link->id, $self->loc("Link already exists"), 0 ); + } + + # }}} + + + # Storing the link in the DB. + my $link = RT::Link->new( $self->CurrentUser ); + my ($linkid, $linkmsg) = $link->Create( Target => $args{Target}, + Base => $args{Base}, + Type => $args{Type} ); + + unless ($linkid) { + $RT::Logger->error("Link could not be created: ".$linkmsg); + return ( 0, $self->loc("Link could not be created") ); + } + + my $TransString = + "Record $args{'Base'} $args{Type} record $args{'Target'}."; + + return ( $linkid, $self->loc( "Link created ([_1])", $TransString ) ); +} + +# }}} + +# {{{ sub _DeleteLink + +=head2 _DeleteLink + +Delete a link. takes a paramhash of Base, Target and Type. +Either Base or Target must be null. The null value will +be replaced with this ticket\'s id + +=cut + +sub _DeleteLink { + my $self = shift; + my %args = ( + Base => undef, + Target => undef, + Type => undef, + @_ + ); + + #we want one of base and target. we don't care which + #but we only want _one_ + + my $direction; + my $remote_link; + + if ( $args{'Base'} and $args{'Target'} ) { + $RT::Logger->debug("$self ->_DeleteLink. got both Base and Target\n"); + return ( 0, $self->loc("Can't specifiy both base and target") ); + } + elsif ( $args{'Base'} ) { + $args{'Target'} = $self->URI(); + $remote_link = $args{'Base'}; + $direction = 'Target'; + } + elsif ( $args{'Target'} ) { + $args{'Base'} = $self->URI(); + $remote_link = $args{'Target'}; + $direction='Base'; + } + else { + $RT::Logger->debug("$self: Base or Target must be specified\n"); + return ( 0, $self->loc('Either base or target must be specified') ); + } + + my $link = new RT::Link( $self->CurrentUser ); + $RT::Logger->debug( "Trying to load link: " . $args{'Base'} . " " . $args{'Type'} . " " . $args{'Target'} . "\n" ); + + + $link->LoadByParams( Base=> $args{'Base'}, Type=> $args{'Type'}, Target=> $args{'Target'} ); + #it's a real link. + if ( $link->id ) { + + my $linkid = $link->id; + $link->Delete(); + + my $TransString = "Record $args{'Base'} no longer $args{Type} record $args{'Target'}."; + return ( 1, $self->loc("Link deleted ([_1])", $TransString)); + } + + #if it's not a link we can find + else { + $RT::Logger->debug("Couldn't find that link\n"); + return ( 0, $self->loc("Link not found") ); + } +} + +# }}} + +# }}} + +# {{{ Routines dealing with transactions + +# {{{ sub _NewTransaction + +=head2 _NewTransaction PARAMHASH + +Private function to create a new RT::Transaction object for this ticket update + +=cut + +sub _NewTransaction { + my $self = shift; + my %args = ( + TimeTaken => undef, + Type => undef, + OldValue => undef, + NewValue => undef, + OldReference => undef, + NewReference => undef, + ReferenceType => undef, + Data => undef, + Field => undef, + MIMEObj => undef, + ActivateScrips => 1, + CommitScrips => 1, + @_ + ); + + my $old_ref = $args{'OldReference'}; + my $new_ref = $args{'NewReference'}; + my $ref_type = $args{'ReferenceType'}; + if ($old_ref or $new_ref) { + $ref_type ||= ref($old_ref) || ref($new_ref); + if (!$ref_type) { + $RT::Logger->error("Reference type not specified for transaction"); + return; + } + $old_ref = $old_ref->Id if ref($old_ref); + $new_ref = $new_ref->Id if ref($new_ref); + } + + require RT::Transaction; + my $trans = new RT::Transaction( $self->CurrentUser ); + my ( $transaction, $msg ) = $trans->Create( + ObjectId => $self->Id, + ObjectType => ref($self), + TimeTaken => $args{'TimeTaken'}, + Type => $args{'Type'}, + Data => $args{'Data'}, + Field => $args{'Field'}, + NewValue => $args{'NewValue'}, + OldValue => $args{'OldValue'}, + NewReference => $new_ref, + OldReference => $old_ref, + ReferenceType => $ref_type, + MIMEObj => $args{'MIMEObj'}, + ActivateScrips => $args{'ActivateScrips'}, + CommitScrips => $args{'CommitScrips'}, + ); + + # Rationalize the object since we may have done things to it during the caching. + $self->Load($self->Id); + + $RT::Logger->warning($msg) unless $transaction; + + $self->_SetLastUpdated; + + if ( defined $args{'TimeTaken'} ) { + $self->_UpdateTimeTaken( $args{'TimeTaken'} ); + } + if ( $RT::UseTransactionBatch and $transaction ) { + push @{$self->{_TransactionBatch}}, $trans; + } + return ( $transaction, $msg, $trans ); +} + +# }}} + +# {{{ sub Transactions + +=head2 Transactions + + Returns an RT::Transactions object of all transactions on this record object + +=cut + +sub Transactions { + my $self = shift; + + use RT::Transactions; + my $transactions = RT::Transactions->new( $self->CurrentUser ); + + #If the user has no rights, return an empty object + $transactions->Limit( + FIELD => 'ObjectId', + VALUE => $self->id, + ); + $transactions->Limit( + FIELD => 'ObjectType', + VALUE => ref($self), + ); + + return ($transactions); +} + +# }}} +# }}} +# +# {{{ Routines dealing with custom fields + +sub CustomFields { + my $self = shift; + my $cfs = RT::CustomFields->new( $self->CurrentUser ); + + # XXX handle multiple types properly + $cfs->LimitToLookupType( $self->CustomFieldLookupType ); + $cfs->LimitToGlobalOrObjectId( + $self->_LookupId( $self->CustomFieldLookupType ) ); + + return $cfs; +} + +# TODO: This _only_ works for RT::Class classes. it doesn't work, for example, for RT::FM classes. + +sub _LookupId { + my $self = shift; + my $lookup = shift; + my @classes = ($lookup =~ /RT::(\w+)-/g); + + my $object = $self; + foreach my $class (reverse @classes) { + my $method = "${class}Obj"; + $object = $object->$method; + } + + return $object->Id; +} + + +=head2 CustomFieldLookupType + +Returns the path RT uses to figure out which custom fields apply to this object. + +=cut + +sub CustomFieldLookupType { + my $self = shift; + return ref($self); +} + +#TODO Deprecated API. Destroy in 3.6 +sub _LookupTypes { + my $self = shift; + $RT::Logger->warning("_LookupTypes call is deprecated. Replace with CustomFieldLookupType"); + $RT::Logger->warning("Besides, it was a private API. Were you doing using it?"); + + return($self->CustomFieldLookupType); + +} + +# {{{ AddCustomFieldValue + +=head2 AddCustomFieldValue { Field => FIELD, Value => VALUE } + +VALUE should be a string. +FIELD can be a CustomField object OR a CustomField ID. + + +Adds VALUE as a value of CustomField FIELD. If this is a single-value custom field, +deletes the old value. +If VALUE is not a valid value for the custom field, returns +(0, 'Error message' ) otherwise, returns (1, 'Success Message') + +=cut + +sub AddCustomFieldValue { + my $self = shift; + $self->_AddCustomFieldValue(@_); +} + +sub _AddCustomFieldValue { + my $self = shift; + my %args = ( + Field => undef, + Value => undef, + RecordTransaction => 1, + @_ + ); + + my $cf = $self->LoadCustomFieldByIdentifier($args{'Field'}); + + unless ( $cf->Id ) { + return ( 0, $self->loc( "Custom field [_1] not found", $args{'Field'} ) ); + } + + my $OCFs = $self->CustomFields; + $OCFs->Limit( FIELD => 'id', VALUE => $cf->Id ); + unless ( $OCFs->Count ) { + return ( + 0, + $self->loc( + "Custom field [_1] does not apply to this object", + $args{'Field'} + ) + ); + } + # Load up a ObjectCustomFieldValues object for this custom field and this ticket + my $values = $cf->ValuesForObject($self); + + unless ( $cf->ValidateValue( $args{'Value'} ) ) { + return ( 0, $self->loc("Invalid value for custom field") ); + } + + # If the custom field only accepts a certain # of values, delete the existing + # value and record a "changed from foo to bar" transaction + unless ( $cf->UnlimitedValues) { + + # We need to whack any old values here. In most cases, the custom field should + # only have one value to delete. In the pathalogical case, this custom field + # used to be a multiple and we have many values to whack.... + my $cf_values = $values->Count; + + if ( $cf_values > $cf->MaxValues ) { + my $i = 0; #We want to delete all but the max we can currently have , so we can then + # execute the same code to "change" the value from old to new + while ( my $value = $values->Next ) { + $i++; + if ( $i < $cf_values ) { + my ( $val, $msg ) = $cf->DeleteValueForObject( + Object => $self, + Content => $value->Content + ); + unless ($val) { + return ( 0, $msg ); + } + my ( $TransactionId, $Msg, $TransactionObj ) = + $self->_NewTransaction( + Type => 'CustomField', + Field => $cf->Id, + OldReference => $value, + ); + } + } + } + + my ( $old_value, $old_content ); + if ( $old_value = $cf->ValuesForObject($self)->First ) { + $old_content = $old_value->Content(); + return (1) if( $old_content eq $args{'Value'} && $old_value->LargeContent eq $args{'LargeContent'});; + } + + my ( $new_value_id, $value_msg ) = $cf->AddValueForObject( + Object => $self, + Content => $args{'Value'}, + LargeContent => $args{'LargeContent'}, + ContentType => $args{'ContentType'}, + ); + + unless ($new_value_id) { + return ( 0, $self->loc( "Could not add new custom field value. [_1] ",, $value_msg)); + } + + my $new_value = RT::ObjectCustomFieldValue->new( $self->CurrentUser ); + $new_value->Load($new_value_id); + + # now that adding the new value was successful, delete the old one + if ($old_value) { + my ( $val, $msg ) = $old_value->Delete(); + unless ($val) { + return ( 0, $msg ); + } + } + + if ( $args{'RecordTransaction'} ) { + my ( $TransactionId, $Msg, $TransactionObj ) = + $self->_NewTransaction( + Type => 'CustomField', + Field => $cf->Id, + OldReference => $old_value, + NewReference => $new_value, + ); + } + + if ( $old_value eq '' ) { + return ( 1, $self->loc( "[_1] [_2] added", $cf->Name, $new_value->Content )); + } + elsif ( $new_value->Content eq '' ) { + return ( 1, + $self->loc( "[_1] [_2] deleted", $cf->Name, $old_value->Content ) ); + } + else { + return ( 1, $self->loc( "[_1] [_2] changed to [_3]", $cf->Name, $old_content, $new_value->Content)); + } + + } + + # otherwise, just add a new value and record "new value added" + else { + my ($new_value_id) = $cf->AddValueForObject( + Object => $self, + Content => $args{'Value'}, + LargeContent => $args{'LargeContent'}, + ContentType => $args{'ContentType'}, + ); + + unless ($new_value_id) { + return ( 0, $self->loc("Could not add new custom field value. ") ); + } + if ( $args{'RecordTransaction'} ) { + my ( $TransactionId, $Msg, $TransactionObj ) = + $self->_NewTransaction( + Type => 'CustomField', + Field => $cf->Id, + NewReference => $new_value_id, + ReferenceType => 'RT::ObjectCustomFieldValue', + ); + unless ($TransactionId) { + return ( 0, + $self->loc( "Couldn't create a transaction: [_1]", $Msg ) ); + } + } + return ( 1, $self->loc( "[_1] added as a value for [_2]", $args{'Value'}, $cf->Name)); + } + +} + +# }}} + +# {{{ DeleteCustomFieldValue + +=head2 DeleteCustomFieldValue { Field => FIELD, Value => VALUE } + +Deletes VALUE as a value of CustomField FIELD. + +VALUE can be a string, a CustomFieldValue or a ObjectCustomFieldValue. + +If VALUE is not a valid value for the custom field, returns +(0, 'Error message' ) otherwise, returns (1, 'Success Message') + +=cut + +sub DeleteCustomFieldValue { + my $self = shift; + my %args = ( + Field => undef, + Value => undef, + ValueId => undef, + @_ + ); + + my $cf = $self->LoadCustomFieldByIdentifier($args{'Field'}); + + unless ( $cf->Id ) { + return ( 0, $self->loc( "Custom field [_1] not found", $args{'Field'} ) ); + } + my ( $val, $msg ) = $cf->DeleteValueForObject( + Object => $self, + Id => $args{'ValueId'}, + Content => $args{'Value'}, + ); + unless ($val) { + return ( 0, $msg ); + } + my ( $TransactionId, $Msg, $TransactionObj ) = $self->_NewTransaction( + Type => 'CustomField', + Field => $cf->Id, + OldReference => $val, + ReferenceType => 'RT::ObjectCustomFieldValue', + ); + unless ($TransactionId) { + return ( 0, $self->loc( "Couldn't create a transaction: [_1]", $Msg ) ); + } + + return ( + $TransactionId, + $self->loc( + "[_1] is no longer a value for custom field [_2]", + $TransactionObj->OldValue, $cf->Name + ) + ); +} + +# }}} + +# {{{ FirstCustomFieldValue + +=head2 FirstCustomFieldValue FIELD + +Return the content of the first value of CustomField FIELD for this ticket +Takes a field id or name + +=cut + +sub FirstCustomFieldValue { + my $self = shift; + my $field = shift; + my $values = $self->CustomFieldValues($field); + if ($values->First) { + return $values->First->Content; + } else { + return undef; + } + +} + + + +# {{{ CustomFieldValues + +=head2 CustomFieldValues FIELD + +Return a ObjectCustomFieldValues object of all values of the CustomField whose +id or Name is FIELD for this record. + +Returns an RT::ObjectCustomFieldValues object + +=cut + +sub CustomFieldValues { + my $self = shift; + my $field = shift; + + if ($field) { + my $cf = $self->LoadCustomFieldByIdentifier($field); + + # we were asked to search on a custom field we couldn't fine + unless ( $cf->id ) { + return RT::ObjectCustomFieldValues->new( $self->CurrentUser ); + } + return ( $cf->ValuesForObject($self) ); + } + + # we're not limiting to a specific custom field; + my $ocfs = RT::ObjectCustomFieldValues->new( $self->CurrentUser ); + $ocfs->LimitToObject($self); + return $ocfs; + +} + +=head2 CustomField IDENTIFER + +Find the custom field has id or name IDENTIFIER for this object. + +If no valid field is found, returns an empty RT::CustomField object. =cut +sub LoadCustomFieldByIdentifier { + my $self = shift; + my $field = shift; + + my $cf = RT::CustomField->new($self->CurrentUser); + + if ( UNIVERSAL::isa( $field, "RT::CustomField" ) ) { + $cf->LoadById( $field->id ); + } + elsif ($field =~ /^\d+$/) { + $cf = RT::CustomField->new($self->CurrentUser); + $cf->Load($field); + } else { + + my $cfs = $self->CustomFields($self->CurrentUser); + $cfs->Limit(FIELD => 'Name', VALUE => $field); + $cf = $cfs->First || RT::CustomField->new($self->CurrentUser); + } + return $cf; +} + + +# }}} + +# }}} + +# }}} + +sub BasicColumns { +} + eval "require RT::Record_Vendor"; die $@ if ($@ && $@ !~ qr{^Can't locate RT/Record_Vendor.pm}); eval "require RT::Record_Local"; diff --git a/rt/lib/RT/SavedSearch.pm b/rt/lib/RT/SavedSearch.pm new file mode 100644 index 000000000..65411a7b2 --- /dev/null +++ b/rt/lib/RT/SavedSearch.pm @@ -0,0 +1,327 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +=head1 NAME + + RT::SavedSearch - an API for saving and retrieving search form values. + +=head1 SYNOPSIS + + use RT::SavedSearch + +=head1 DESCRIPTION + + SavedSearch is an object that can belong to either an RT::User or an + RT::Group. It consists of an ID, a description, and a number of + search parameters. + +=head1 METHODS + +=begin testing + +use_ok(RT::SavedSearch); + +# Real tests are in lib/t/20savedsearch.t + +=end testing + +=cut + +package RT::SavedSearch; + +use RT::Base; +use RT::Attribute; + +use strict; +use vars qw/@ISA/; +@ISA = qw/RT::Base/; + +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + my $self = {}; + $self->{'Id'} = 0; + bless ($self, $class); + $self->CurrentUser(@_); + return $self; +} + +=head2 Load + +Takes a privacy specification, an object ID, and a search ID. Loads +the given search ID if it belongs to the stated user or group. +Returns a tuple of status and message, where status is true on +success. + +=cut + +sub Load { + my $self = shift; + my ($privacy, $id) = @_; + my $object = $self->_GetObject($privacy); + + if ($object) { + $self->{'Attribute'} = $object->Attributes->WithId($id); + if ($self->{'Attribute'}->Id) { + $self->{'Id'} = $self->{'Attribute'}->Id; + $self->{'Privacy'} = $privacy; + $self->{'Type'} = $self->{'Attribute'}->SubValue('SearchType'); + return (1, $self->loc("Loaded search [_1]", $self->Name)); + } else { + $RT::Logger->error("Could not load attribute " . $id + . " for object " . $privacy); + return (0, $self->loc("Search attribute load failure")); + } + } else { + $RT::Logger->error("Could not load object $privacy when loading search"); + return (0, $self->loc("Could not load object for [_1]", $privacy)); + } + +} + +=head2 Save + +Takes a privacy, an optional type, a name, and a hashref containing the +search parameters. Saves the given parameters to the appropriate user/ +group object, and loads the resulting search. Returns a tuple of status +and message, where status is true on success. Defaults are: + Privacy: undef + Type: Ticket + Name: "new search" + SearchParams: (empty hash) + +=cut + +sub Save { + my $self = shift; + my %args = ('Privacy' => 'RT::User-' . $self->CurrentUser->Id, + 'Type' => 'Ticket', + 'Name' => 'new search', + 'SearchParams' => {}, + @_); + my $privacy = $args{'Privacy'}; + my $type = $args{'Type'}; + my $name = $args{'Name'}; + my %params = %{$args{'SearchParams'}}; + + $params{'SearchType'} = $type; + my $object = $self->_GetObject($privacy); + if ($object) { + my ($att_id, $att_msg) = $object->AddAttribute( + 'Name' => 'SavedSearch', + 'Description' => $name, + 'Content' => \%params); + if ($att_id) { + $self->{'Attribute'} = $object->Attributes->WithId($att_id); + $self->{'Id'} = $att_id; + $self->{'Privacy'} = $privacy; + $self->{'Type'} = $type; + return (1, $self->loc("Saved search [_1]", $name)); + } else { + $RT::Logger->error("SavedSearch save failure: $att_msg"); + return (0, $self->loc("Failed to create search attribute")); + } + } else { + return (0, $self->loc("Failed to load object for [_1]", $privacy)); + } +} + +=head2 Update + +Updates the parameters of an existing search. Takes the arguments +"Name" and "SearchParams"; SearchParams should be a hashref containing +the new parameters of the search. If Name is not specified, the name +will not be changed. + +=cut + +sub Update { + my $self = shift; + my %args = ('Name' => '', + 'SearchParams' => {}, + @_); + + return(0, $self->loc("No search loaded")) unless $self->Id; + return(0, $self->loc("Could not load search attribute")) + unless $self->{'Attribute'}->Id; + my ($status, $msg) = $self->{'Attribute'}->SetSubValues(%{$args{'SearchParams'}}); + if ($status && $args{'Name'}) { + ($status, $msg) = $self->{'Attribute'}->SetDescription($args{'Name'}); + } + return ($status, $self->loc("Search update: [_1]", $msg)); +} + +=head2 Delete + +Deletes the existing search. Returns a tuple of status and message, +where status is true upon success. + +=cut + +sub Delete { + my $self = shift; + + my ($status, $msg) = $self->{'Attribute'}->Delete; + if ($status) { + return (1, $self->loc("Deleted search")); + } else { + return (0, $self->loc("Delete failed: [_1]", $msg)); + } +} + + +### Accessor methods + +=head2 Name + +Returns the name of the search. + +=cut + +sub Name { + my $self = shift; + return unless ref($self->{'Attribute'}) eq 'RT::Attribute'; + return $self->{'Attribute'}->Description(); +} + +=head2 GetParameter + +Returns the given named parameter of the search, e.g. 'Query', 'Format'. + +=cut + +sub GetParameter { + my $self = shift; + my $param = shift; + return unless ref($self->{'Attribute'}) eq 'RT::Attribute'; + return $self->{'Attribute'}->SubValue($param); +} + +=head2 Id + +Returns the numerical id of this search. + +=cut + +sub Id { + my $self = shift; + return $self->{'Id'}; +} + +=head2 Privacy + +Returns the principal object to whom this search belongs, in a string +"<class>-<id>", e.g. "RT::Group-16". + +=cut + +sub Privacy { + my $self = shift; + return $self->{'Privacy'}; +} + +=head2 Type + +Returns the type of this search, e.g. 'Ticket'. Useful for denoting the +saved searches that are relevant to a particular search page. + +=cut + +sub Type { + my $self = shift; + return $self->{'Type'}; +} + +### Internal methods + +# _GetObject: helper routine to load the correct object whose parameters +# have been passed. + +sub _GetObject { + my $self = shift; + my $privacy = shift; + + my ($obj_type, $obj_id) = split(/\-/, $privacy); + unless ($obj_type eq 'RT::User' || $obj_type eq 'RT::Group') { + $RT::Logger->error("Tried to load a search belonging to an $obj_type, which is neither a user nor a group"); + return undef; + } + + my $object; + eval " + require $obj_type; + \$object = $obj_type->new(\$self->CurrentUser); + \$object->Load(\$obj_id); + "; + unless (ref($object) eq $obj_type) { + $RT::Logger->error("Could not load object of type $obj_type with ID $obj_id"); + return undef; + } + + # Do not allow the loading of a user object other than the current + # user, or of a group object of which the current user is not a member. + + if ($obj_type eq 'RT::User' + && $object->Id != $self->CurrentUser->UserObj->Id()) { + $RT::Logger->debug("Permission denied for user other than self"); + return undef; + } + if ($obj_type eq 'RT::Group' && + !$object->HasMemberRecursively($self->CurrentUser->PrincipalObj)) { + $RT::Logger->debug("Permission denied, ".$self->CurrentUser->Name. + " is not a member of group"); + return undef; + } + + return $object; +} + +eval "require RT::SavedSearch_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearch_Vendor.pm}); +eval "require RT::SavedSearch_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearch_Local.pm}); + +1; diff --git a/rt/lib/RT/SavedSearches.pm b/rt/lib/RT/SavedSearches.pm new file mode 100644 index 000000000..262bfa8d0 --- /dev/null +++ b/rt/lib/RT/SavedSearches.pm @@ -0,0 +1,206 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +=head1 NAME + + RT::SavedSearches - a pseudo-collection for SavedSearch objects. + +=head1 SYNOPSIS + + use RT::SavedSearch + +=head1 DESCRIPTION + + SavedSearches is an object consisting of a number of SavedSearch objects. + It works more or less like a DBIx::SearchBuilder collection, although it + is not. + +=head1 METHODS + +=begin testing + +use_ok(RT::SavedSearches); + +# The real tests are in lib/t/20savedsearch.t + +=end testing + +=cut + +package RT::SavedSearches; + +use RT::Base; +use RT::SavedSearch; + +use strict; +use vars qw/@ISA/; +@ISA = qw/RT::Base/; + +sub new { + my $proto = shift; + my $class = ref($proto) || $proto; + my $self = {}; + bless ($self, $class); + $self->CurrentUser(@_); + $self->{'idx'} = 0; + $self->{'objects'} = []; + return $self; +} + +=head2 LimitToPrivacy + +Takes two argumets: a privacy string, of the format "<class>-<id>", as +produced by RT::SavedSearch::Privacy(); and a type string, as produced +by RT::SavedSearch::Type(). The SavedSearches object will load the +searches belonging to that user or group that are of the type +specified. If no type is specified, all the searches belonging to the +user/group will be loaded. Repeated calls to the same object should DTRT. + +=cut + +sub LimitToPrivacy { + my $self = shift; + my $privacy = shift; + my $type = shift; + + my $object = $self->_GetObject($privacy); + + if ($object) { + $self->{'objects'} = []; + my @search_atts = $object->Attributes->Named('SavedSearch'); + foreach my $att (@search_atts) { + my $search = RT::SavedSearch->new($self->CurrentUser); + $search->Load($privacy, $att->Id); + next if $type && $search->Type ne $type; + push(@{$self->{'objects'}}, $search); + } + } else { + $RT::Logger->error("Could not load object $privacy"); + } +} + +### Accessor methods + +=head2 Next + +Returns the next object in the collection. + +=cut + +sub Next { + my $self = shift; + my $search = $self->{'objects'}->[$self->{'idx'}]; + if ($search) { + $self->{'idx'}++; + } else { + # We have run out of objects; reset the counter. + $self->{'idx'} = 0; + } + return $search; +} + +=head2 Count + +Returns the number of search objects found. + +=cut + +sub Count { + my $self = shift; + return scalar @{$self->{'objects'}}; +} + +### Internal methods + +# _GetObject: helper routine to load the correct object whose parameters +# have been passed. + +sub _GetObject { + my $self = shift; + my $privacy = shift; + + my ($obj_type, $obj_id) = split(/\-/, $privacy); + unless ($obj_type eq 'RT::User' || $obj_type eq 'RT::Group') { + $RT::Logger->error("Tried to load a search belonging to an $obj_type, which is neither a user nor a group"); + return undef; + } + + my $object; + eval " + require $obj_type; + \$object = $obj_type->new(\$self->CurrentUser); + \$object->Load($obj_id); + "; + unless (ref($object) eq $obj_type) { + $RT::Logger->error("Could not load object of type $obj_type with ID $obj_id"); + return undef; + } + + # Do not allow the loading of a user object other than the current + # user, or of a group object of which the current user is not a member. + + if ($obj_type eq 'RT::User' + && $object->Id != $self->CurrentUser->UserObj->Id()) { + $RT::Logger->error('Requested user ' . $object->Id + . 'is not current user'); + return undef; + } + if ($obj_type eq 'RT::Group' + && !$object->HasMemberRecursively($self->CurrentUser->PrincipalObj)) { + $RT::Logger->error('Current user does not belong to requested group ' + . $object->Id); + return undef; + } + + return $object; +} + +eval "require RT::SavedSearches_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearches_Vendor.pm}); +eval "require RT::SavedSearches_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/SavedSearches_Local.pm}); + +1; diff --git a/rt/lib/RT/Scrip.pm b/rt/lib/RT/Scrip.pm index a69dde04e..85fe6a820 100755 --- a/rt/lib/RT/Scrip.pm +++ b/rt/lib/RT/Scrip.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -65,7 +87,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -120,7 +142,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -129,14 +151,14 @@ Returns the current value of id. =cut -=item Description +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -147,14 +169,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ScripCondition +=head2 ScripCondition Returns the current value of ScripCondition. (In the database, ScripCondition is stored as int(11).) -=item SetScripCondition VALUE +=head2 SetScripCondition VALUE Set ScripCondition to VALUE. @@ -165,7 +187,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ScripConditionObj +=head2 ScripConditionObj Returns the ScripCondition Object which has the id returned by ScripCondition @@ -179,14 +201,14 @@ sub ScripConditionObj { return($ScripCondition); } -=item ScripAction +=head2 ScripAction Returns the current value of ScripAction. (In the database, ScripAction is stored as int(11).) -=item SetScripAction VALUE +=head2 SetScripAction VALUE Set ScripAction to VALUE. @@ -197,7 +219,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ScripActionObj +=head2 ScripActionObj Returns the ScripAction Object which has the id returned by ScripAction @@ -211,14 +233,14 @@ sub ScripActionObj { return($ScripAction); } -=item ConditionRules +=head2 ConditionRules Returns the current value of ConditionRules. (In the database, ConditionRules is stored as text.) -=item SetConditionRules VALUE +=head2 SetConditionRules VALUE Set ConditionRules to VALUE. @@ -229,14 +251,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ActionRules +=head2 ActionRules Returns the current value of ActionRules. (In the database, ActionRules is stored as text.) -=item SetActionRules VALUE +=head2 SetActionRules VALUE Set ActionRules to VALUE. @@ -247,14 +269,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item CustomIsApplicableCode +=head2 CustomIsApplicableCode Returns the current value of CustomIsApplicableCode. (In the database, CustomIsApplicableCode is stored as text.) -=item SetCustomIsApplicableCode VALUE +=head2 SetCustomIsApplicableCode VALUE Set CustomIsApplicableCode to VALUE. @@ -265,14 +287,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item CustomPrepareCode +=head2 CustomPrepareCode Returns the current value of CustomPrepareCode. (In the database, CustomPrepareCode is stored as text.) -=item SetCustomPrepareCode VALUE +=head2 SetCustomPrepareCode VALUE Set CustomPrepareCode to VALUE. @@ -283,14 +305,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item CustomCommitCode +=head2 CustomCommitCode Returns the current value of CustomCommitCode. (In the database, CustomCommitCode is stored as text.) -=item SetCustomCommitCode VALUE +=head2 SetCustomCommitCode VALUE Set CustomCommitCode to VALUE. @@ -301,14 +323,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Stage +=head2 Stage Returns the current value of Stage. (In the database, Stage is stored as varchar(32).) -=item SetStage VALUE +=head2 SetStage VALUE Set Stage to VALUE. @@ -319,14 +341,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Queue +=head2 Queue Returns the current value of Queue. (In the database, Queue is stored as int(11).) -=item SetQueue VALUE +=head2 SetQueue VALUE Set Queue to VALUE. @@ -337,7 +359,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item QueueObj +=head2 QueueObj Returns the Queue Object which has the id returned by Queue @@ -351,14 +373,14 @@ sub QueueObj { return($Queue); } -=item Template +=head2 Template Returns the current value of Template. (In the database, Template is stored as int(11).) -=item SetTemplate VALUE +=head2 SetTemplate VALUE Set Template to VALUE. @@ -369,7 +391,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item TemplateObj +=head2 TemplateObj Returns the Template Object which has the id returned by Template @@ -383,7 +405,7 @@ sub TemplateObj { return($Template); } -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -392,7 +414,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -401,7 +423,7 @@ Returns the current value of Created. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -410,7 +432,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -420,41 +442,41 @@ Returns the current value of LastUpdated. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, ScripCondition => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, ScripAction => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, ConditionRules => - {read => 1, write => 1, type => 'text', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, ActionRules => - {read => 1, write => 1, type => 'text', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, CustomIsApplicableCode => - {read => 1, write => 1, type => 'text', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, CustomPrepareCode => - {read => 1, write => 1, type => 'text', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, CustomCommitCode => - {read => 1, write => 1, type => 'text', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, Stage => - {read => 1, write => 1, type => 'varchar(32)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 32, is_blob => 0, is_numeric => 0, type => 'varchar(32)', default => ''}, Queue => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Template => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -486,7 +508,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/ScripAction.pm b/rt/lib/RT/ScripAction.pm index 26824df5d..075162f80 100755 --- a/rt/lib/RT/ScripAction.pm +++ b/rt/lib/RT/ScripAction.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -95,7 +117,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -104,14 +126,14 @@ Returns the current value of id. =cut -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -122,14 +144,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Description +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -140,14 +162,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ExecModule +=head2 ExecModule Returns the current value of ExecModule. (In the database, ExecModule is stored as varchar(60).) -=item SetExecModule VALUE +=head2 SetExecModule VALUE Set ExecModule to VALUE. @@ -158,14 +180,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Argument +=head2 Argument Returns the current value of Argument. (In the database, Argument is stored as varchar(255).) -=item SetArgument VALUE +=head2 SetArgument VALUE Set Argument to VALUE. @@ -176,7 +198,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -185,7 +207,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -194,7 +216,7 @@ Returns the current value of Created. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -203,7 +225,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -213,27 +235,27 @@ Returns the current value of LastUpdated. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, ExecModule => - {read => 1, write => 1, type => 'varchar(60)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 60, is_blob => 0, is_numeric => 0, type => 'varchar(60)', default => ''}, Argument => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -265,7 +287,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/ScripAction_Overlay.pm b/rt/lib/RT/ScripAction_Overlay.pm index e2b018aaf..76e047f71 100644 --- a/rt/lib/RT/ScripAction_Overlay.pm +++ b/rt/lib/RT/ScripAction_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::ScripAction - RT Action object @@ -46,16 +69,12 @@ ok (require RT::ScripAction); =cut + +package RT::ScripAction; + use strict; no warnings qw(redefine); - -# {{{ sub _Init -sub _Init { - my $self = shift; - $self->{'table'} = "ScripActions"; - return ($self->SUPER::_Init(@_)); -} -# }}} +use RT::Template; # {{{ sub _Accessible sub _Accessible { @@ -74,10 +93,12 @@ sub _Accessible { # }}} # {{{ sub Create + =head2 Create - - Takes a hash. Creates a new Action entry. - should be better documented. + +Takes a hash. Creates a new Action entry. should be better +documented. + =cut sub Create { @@ -96,6 +117,15 @@ sub Delete { # }}} # {{{ sub Load + +=head2 Load IDENTIFIER + +Loads an action by its Name. + +Returns: Id, Error Message + +=cut + sub Load { my $self = shift; my $identifier = shift; @@ -118,7 +148,7 @@ sub Load { $self->{'Template'} = $template; } - return ($self->loc('[_1] ScripAction loaded', $self->Id)); + return ($self->Id, ($self->loc('[_1] ScripAction loaded', $self->Id))); } # }}} @@ -135,6 +165,8 @@ sub LoadAction { my %args = ( TransactionObj => undef, TicketObj => undef, @_ ); + + $self->{_TicketObj} = $args{TicketObj}; #TODO: Put this in an eval $self->ExecModule =~ /^(\w+)$/; @@ -143,12 +175,13 @@ sub LoadAction { eval "require $type" || die "Require of $type failed.\n$@\n"; - $self->{'Action'} = $type->new ( 'ScripActionObj' => $self, - 'TicketObj' => $args{'TicketObj'}, - 'ScripObj' => $args{'ScripObj'}, - 'TransactionObj' => $args{'TransactionObj'}, - 'TemplateObj' => $self->TemplateObj, - 'Argument' => $self->Argument, + $self->{'Action'} = $type->new ( Argument => $self->Argument, + CurrentUser => $self->CurrentUser, + ScripActionObj => $self, + ScripObj => $args{'ScripObj'}, + TemplateObj => $self->TemplateObj, + TicketObj => $args{'TicketObj'}, + TransactionObj => $args{'TransactionObj'}, ); } # }}} @@ -157,21 +190,36 @@ sub LoadAction { =head2 TemplateObj -Return this action\'s template object +Return this action's template object + +TODO: Why are we not using the Scrip's template object? + =cut sub TemplateObj { my $self = shift; return undef unless $self->{Template}; - if (!$self->{'TemplateObj'}) { - require RT::Template; - $self->{'TemplateObj'} = RT::Template->new($self->CurrentUser); - $self->{'TemplateObj'}->LoadById($self->{'Template'}); - + if ( !$self->{'TemplateObj'} ) { + $self->{'TemplateObj'} = RT::Template->new( $self->CurrentUser ); + $self->{'TemplateObj'}->LoadById( $self->{'Template'} ); + + if ( ( $self->{'TemplateObj'}->__Value('Queue') == 0 ) + && $self->{'_TicketObj'} ) { + my $tmptemplate = RT::Template->new( $self->CurrentUser ); + my ( $ok, $err ) = $tmptemplate->LoadQueueTemplate( + Queue => $self->{'_TicketObj'}->QueueObj->id, + Name => $self->{'TemplateObj'}->Name); + + if ( $tmptemplate->id ) { + # found the queue-specific template with the same name + $self->{'TemplateObj'} = $tmptemplate; + } + } + } - - return ($self->{'TemplateObj'}); + + return ( $self->{'TemplateObj'} ); } # }}} @@ -181,7 +229,8 @@ sub TemplateObj { sub Prepare { my $self = shift; - return ($self->{'Action'}->Prepare()); + $self->{_Message_ID} = 0; + return ($self->Action->Prepare()); } # }}} @@ -189,7 +238,7 @@ sub Prepare { # {{{ sub Commit sub Commit { my $self = shift; - return($self->{'Action'}->Commit()); + return($self->Action->Commit()); } @@ -198,19 +247,37 @@ sub Commit { # {{{ sub Describe sub Describe { my $self = shift; - return ($self->{'Action'}->Describe()); + return ($self->Action->Describe()); } # }}} +=head2 Action + +Return the actual RT::Action object for this scrip. + +=cut + +sub Action { + my $self = shift; + return ($self->{'Action'}); +} + # {{{ sub DESTROY sub DESTROY { my $self=shift; + $self->{'_TicketObj'} = undef; $self->{'Action'} = undef; $self->{'TemplateObj'} = undef; } # }}} +=head2 TODO + +Between this, RT::Scrip and RT::Action::*, we need to be able to get rid of a +class. This just reeks of too much complexity -- jesse + +=cut 1; diff --git a/rt/lib/RT/ScripActions.pm b/rt/lib/RT/ScripActions.pm index 614ff374f..c34e52ff5 100755 --- a/rt/lib/RT/ScripActions.pm +++ b/rt/lib/RT/ScripActions.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::ScripAction item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/ScripActions_Overlay.pm b/rt/lib/RT/ScripActions_Overlay.pm index 83cd646ef..9c29d4cb7 100644 --- a/rt/lib/RT/ScripActions_Overlay.pm +++ b/rt/lib/RT/ScripActions_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::ScripActions - Collection of Action objects @@ -43,6 +66,9 @@ ok (require RT::ScripActions); =cut + +package RT::ScripActions; + use strict; no warnings qw(redefine); diff --git a/rt/lib/RT/ScripCondition.pm b/rt/lib/RT/ScripCondition.pm index fe0aa2d5a..bf2c56093 100755 --- a/rt/lib/RT/ScripCondition.pm +++ b/rt/lib/RT/ScripCondition.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -98,7 +120,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -107,14 +129,14 @@ Returns the current value of id. =cut -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -125,14 +147,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Description +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -143,14 +165,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ExecModule +=head2 ExecModule Returns the current value of ExecModule. (In the database, ExecModule is stored as varchar(60).) -=item SetExecModule VALUE +=head2 SetExecModule VALUE Set ExecModule to VALUE. @@ -161,14 +183,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Argument +=head2 Argument Returns the current value of Argument. (In the database, Argument is stored as varchar(255).) -=item SetArgument VALUE +=head2 SetArgument VALUE Set Argument to VALUE. @@ -179,14 +201,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ApplicableTransTypes +=head2 ApplicableTransTypes Returns the current value of ApplicableTransTypes. (In the database, ApplicableTransTypes is stored as varchar(60).) -=item SetApplicableTransTypes VALUE +=head2 SetApplicableTransTypes VALUE Set ApplicableTransTypes to VALUE. @@ -197,7 +219,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -206,7 +228,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -215,7 +237,7 @@ Returns the current value of Created. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -224,7 +246,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -234,29 +256,29 @@ Returns the current value of LastUpdated. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, ExecModule => - {read => 1, write => 1, type => 'varchar(60)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 60, is_blob => 0, is_numeric => 0, type => 'varchar(60)', default => ''}, Argument => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, ApplicableTransTypes => - {read => 1, write => 1, type => 'varchar(60)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 60, is_blob => 0, is_numeric => 0, type => 'varchar(60)', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -288,7 +310,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/ScripCondition_Overlay.pm b/rt/lib/RT/ScripCondition_Overlay.pm index 158bc5771..4424657d0 100644 --- a/rt/lib/RT/ScripCondition_Overlay.pm +++ b/rt/lib/RT/ScripCondition_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::ScripCondition - RT scrip conditional @@ -46,6 +69,9 @@ ok (require RT::ScripCondition); =cut + +package RT::ScripCondition; + use strict; no warnings qw(redefine); @@ -157,7 +183,8 @@ sub LoadCondition { 'ScripObj' => $args{'ScripObj'}, 'TransactionObj' => $args{'TransactionObj'}, 'Argument' => $self->Argument, - 'ApplicableTransTypes' => $self->ApplicableTransTypes, + 'ApplicableTransTypes' => $self->ApplicableTransTypes, + CurrentUser => $self->CurrentUser ); } # }}} diff --git a/rt/lib/RT/ScripConditions.pm b/rt/lib/RT/ScripConditions.pm index 34f788d9c..99bde7dfd 100755 --- a/rt/lib/RT/ScripConditions.pm +++ b/rt/lib/RT/ScripConditions.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::ScripCondition item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/ScripConditions_Overlay.pm b/rt/lib/RT/ScripConditions_Overlay.pm index 8bef90801..7670d5825 100644 --- a/rt/lib/RT/ScripConditions_Overlay.pm +++ b/rt/lib/RT/ScripConditions_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::ScripConditions - Collection of Action objects @@ -44,6 +67,9 @@ ok (require RT::ScripConditions); =cut + +package RT::ScripConditions; + use strict; no warnings qw(redefine); diff --git a/rt/lib/RT/Scrip_Overlay.pm b/rt/lib/RT/Scrip_Overlay.pm index 06462a9ac..ae2782a23 100644 --- a/rt/lib/RT/Scrip_Overlay.pm +++ b/rt/lib/RT/Scrip_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Scrip - an RT Scrip object @@ -76,11 +99,13 @@ ok ($ticket2->Priority != '87', "Ticket priority is set right"); =cut + +package RT::Scrip; + use strict; no warnings qw(redefine); - -# {{{ sub Create +# {{{ sub Create =head2 Create @@ -107,24 +132,24 @@ sub Create { my $self = shift; my %args = ( Queue => 0, - Template => 0, # name or id - ScripAction => 0, # name or id - ScripCondition => 0, # name or id + Template => 0, # name or id + ScripAction => 0, # name or id + ScripCondition => 0, # name or id Stage => 'TransactionCreate', Description => undef, CustomPrepareCode => undef, CustomCommitCode => undef, CustomIsApplicableCode => undef, - @_ - ); - + @_ ); - if (! $args{'Queue'} ) { - unless ( $self->CurrentUser->HasRight( Object => $RT::System, Right => 'ModifyScrips') ) { + if ( !$args{'Queue'} ) { + unless ( $self->CurrentUser->HasRight( Object => $RT::System, + Right => 'ModifyScrips' ) + ) { return ( 0, $self->loc('Permission Denied') ); } - $args{'Queue'} = 0; # avoid undef sneaking in + $args{'Queue'} = 0; # avoid undef sneaking in } else { my $QueueObj = new RT::Queue( $self->CurrentUser ); @@ -138,28 +163,33 @@ sub Create { $args{'Queue'} = $QueueObj->id(); } - #TODO +++ validate input + #TODO +++ validate input require RT::ScripAction; my $action = new RT::ScripAction( $self->CurrentUser ); - $action->Load( $args{'ScripAction'} || '0' ); + if ( $args{'ScripAction'} ) { + $action->Load( $args{'ScripAction'} ); + } return ( 0, $self->loc( "Action [_1] not found", $args{'ScripAction'} ) ) unless $action->Id; require RT::Template; my $template = new RT::Template( $self->CurrentUser ); - $template->Load( $args{'Template'}||'0' ); + if ( $args{'Template'} ) { + $template->Load( $args{'Template'} ); + } return ( 0, $self->loc('Template not found') ) unless $template->Id; require RT::ScripCondition; my $condition = new RT::ScripCondition( $self->CurrentUser ); - $condition->Load( $args{'ScripCondition'}||'0' ); - + if ( $args{'ScripCondition'} ) { + $condition->Load( $args{'ScripCondition'} ); + } unless ( $condition->Id ) { return ( 0, $self->loc('Condition not found') ); } - my ($id,$msg) = $self->SUPER::Create( + my ( $id, $msg ) = $self->SUPER::Create( Queue => $args{'Queue'}, Template => $template->Id, ScripCondition => $condition->id, @@ -175,7 +205,7 @@ sub Create { return ( $id, $self->loc('Scrip Created') ); } else { - return($id,$msg); + return ( $id, $msg ); } } @@ -191,13 +221,14 @@ Delete this object sub Delete { my $self = shift; - - unless ($self->CurrentUserHasRight('ModifyScrips')) { - return (0, $self->loc('Permission Denied')); + + unless ( $self->CurrentUserHasRight('ModifyScrips') ) { + return ( 0, $self->loc('Permission Denied') ); } - - return ($self->SUPER::Delete(@_)); + + return ( $self->SUPER::Delete(@_) ); } + # }}} # {{{ sub QueueObj @@ -210,20 +241,19 @@ Retuns an RT::Queue object with this Scrip\'s queue sub QueueObj { my $self = shift; - - if (!$self->{'QueueObj'}) { - require RT::Queue; - $self->{'QueueObj'} = RT::Queue->new($self->CurrentUser); - $self->{'QueueObj'}->Load($self->__Value('Queue')); + + if ( !$self->{'QueueObj'} ) { + require RT::Queue; + $self->{'QueueObj'} = RT::Queue->new( $self->CurrentUser ); + $self->{'QueueObj'}->Load( $self->__Value('Queue') ); } - return ($self->{'QueueObj'}); + return ( $self->{'QueueObj'} ); } # }}} # {{{ sub ActionObj - =head2 ActionObj Retuns an RT::Action object with this Scrip\'s Action @@ -232,16 +262,17 @@ Retuns an RT::Action object with this Scrip\'s Action sub ActionObj { my $self = shift; - - unless (defined $self->{'ScripActionObj'}) { - require RT::ScripAction; - - $self->{'ScripActionObj'} = RT::ScripAction->new($self->CurrentUser); - #TODO: why are we loading Actions with templates like this. - # two seperate methods might make more sense - $self->{'ScripActionObj'}->Load($self->ScripAction, $self->Template); + + unless ( defined $self->{'ScripActionObj'} ) { + require RT::ScripAction; + + $self->{'ScripActionObj'} = RT::ScripAction->new( $self->CurrentUser ); + + #TODO: why are we loading Actions with templates like this. + # two separate methods might make more sense + $self->{'ScripActionObj'}->Load( $self->ScripAction, $self->Template ); } - return ($self->{'ScripActionObj'}); + return ( $self->{'ScripActionObj'} ); } # }}} @@ -256,18 +287,22 @@ Retuns an RT::ScripCondition object with this Scrip's IsApplicable sub ConditionObj { my $self = shift; - - unless (defined $self->{'ScripConditionObj'}) { - require RT::ScripCondition; - $self->{'ScripConditionObj'} = RT::ScripCondition->new($self->CurrentUser); - $self->{'ScripConditionObj'}->Load($self->ScripCondition); + + unless ( defined $self->{'ScripConditionObj'} ) { + require RT::ScripCondition; + $self->{'ScripConditionObj'} = + RT::ScripCondition->new( $self->CurrentUser ); + if ( $self->ScripCondition ) { + $self->{'ScripConditionObj'}->Load( $self->ScripCondition ); + } } - return ($self->{'ScripConditionObj'}); + return ( $self->{'ScripConditionObj'} ); } # }}} # {{{ sub TemplateObj + =head2 TemplateObj Retuns an RT::Template object with this Scrip\'s Template @@ -276,20 +311,21 @@ Retuns an RT::Template object with this Scrip\'s Template sub TemplateObj { my $self = shift; - - unless (defined $self->{'TemplateObj'}) { - require RT::Template; - $self->{'TemplateObj'} = RT::Template->new($self->CurrentUser); - $self->{'TemplateObj'}->Load($self->Template); + + unless ( defined $self->{'TemplateObj'} ) { + require RT::Template; + $self->{'TemplateObj'} = RT::Template->new( $self->CurrentUser ); + $self->{'TemplateObj'}->Load( $self->Template ); } - return ($self->{'TemplateObj'}); + return ( $self->{'TemplateObj'} ); } # }}} - # {{{ Dealing with this instance of a scrip +# {{{ sub Apply + =head2 Apply { TicketObj => undef, TransactionObj => undef} This method instantiates the ScripCondition and ScripAction objects for a @@ -304,7 +340,8 @@ should be loaded by the SuperUser role =cut -# {{{ sub Apply +# XXX TODO : This code appears to be obsoleted in favor of similar code in Scrips->Apply. +# Why is this here? Is it still called? sub Apply { my $self = shift; @@ -312,58 +349,38 @@ sub Apply { TransactionObj => undef, @_ ); - # We want to make sure that if a scrip dies, we don't get - # hurt - eval { - - #Load the scrip's Condition object - $self->ConditionObj->LoadCondition( - ScripObj => $self, - TicketObj => $args{'TicketObj'}, - TransactionObj => $args{'TransactionObj'}, - ); - - unless ( $self->IsApplicable() ) { - $self->ConditionObj->DESTROY; - return (undef); - } + $RT::Logger->debug("Now applying scrip ".$self->Id . " for transaction ".$args{'TransactionObj'}->id); - #If it's applicable, prepare and commit it - $self->ActionObj->LoadAction( ScripObj => $self, - TicketObj => $args{'TicketObj'}, - TransactionObj => $args{'TransactionObj'}, - ); + my $ApplicableTransactionObj = $self->IsApplicable( TicketObj => $args{'TicketObj'}, + TransactionObj => $args{'TransactionObj'} ); + unless ( $ApplicableTransactionObj ) { + return undef; + } - unless ( $self->Prepare() ) { - $RT::Logger->info( - "$self: Couldn't prepare " . $self->ActionObj->Name ); - $self->ActionObj->DESTROY(); - $self->ConditionObj->DESTROY(); - return (undef); - } - unless ( $self->Commit() ) { - $RT::Logger->info( - "$self: Couldn't commit " . $self->ActionObj->Name ); - $self->ActionObj->DESTROY(); - $self->ConditionObj->DESTROY(); - return (undef); - } + if ( $ApplicableTransactionObj->id != $args{'TransactionObj'}->id ) { + $RT::Logger->debug("Found an applicable transaction ".$ApplicableTransactionObj->Id . " in the same batch with transaction ".$args{'TransactionObj'}->id); + } - #Searchbuilder caching isn't perfectly coherent. got to reload the ticket object, since it - # may have changed - $args{'TicketObj'}->Load($args{'TicketObj'}->Id); + #If it's applicable, prepare and commit it + $RT::Logger->debug("Now preparing scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id); + unless ( $self->Prepare( TicketObj => $args{'TicketObj'}, + TransactionObj => $ApplicableTransactionObj ) + ) { + return undef; + } - #We're done with it. lets clean up. - #TODO: something else isn't letting these get garbage collected. check em out. - $self->ActionObj->DESTROY(); - $self->ConditionObj->DESTROY(); - return (1); - }; - if ($@) { - $RT::Logger->error( "Scrip " . $self->Id . " died. - " . $@ ); + $RT::Logger->debug("Now commiting scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id); + unless ( $self->Commit( TicketObj => $args{'TicketObj'}, + TransactionObj => $ApplicableTransactionObj) + ) { + return undef; } + $RT::Logger->debug("We actually finished scrip ".$self->Id . " for transaction ".$ApplicableTransactionObj->id); + return (1); + } + # }}} # {{{ sub IsApplicable @@ -372,16 +389,72 @@ sub Apply { Calls the Condition object\'s IsApplicable method +Upon success, returns the applicable Transaction object. +Otherwise, undef is returned. + +If the Scrip is in the TransactionCreate Stage (the usual case), only test +the associated Transaction object to see if it is applicable. + +For Scrips in the TransactionBatch Stage, test all Transaction objects +created during the Ticket object's lifetime, and returns the first one +that is applicable. + =cut sub IsApplicable { my $self = shift; - return ($self->ConditionObj->IsApplicable(@_)); + my %args = ( TicketObj => undef, + TransactionObj => undef, + @_ ); + + my $return; + eval { + + my @Transactions; + + if ( $self->Stage eq 'TransactionCreate') { + # Only look at our current Transaction + @Transactions = ( $args{'TransactionObj'} ); + } + elsif ( $self->Stage eq 'TransactionBatch') { + # Look at all Transactions in this Batch + @Transactions = @{ $args{'TicketObj'}->TransactionBatch || [] }; + } + else { + $RT::Logger->error( "Unknown Scrip stage:" . $self->Stage ); + return (undef); + } + my $ConditionObj = $self->ConditionObj; + foreach my $TransactionObj ( @Transactions ) { + # in TxnBatch stage we can select scrips that are not applicable to all txns + my $txn_type = $TransactionObj->Type; + next unless( $ConditionObj->ApplicableTransTypes =~ /(?:^|,)(?:Any|\Q$txn_type\E)(?:,|$)/i ); + # Load the scrip's Condition object + $ConditionObj->LoadCondition( + ScripObj => $self, + TicketObj => $args{'TicketObj'}, + TransactionObj => $TransactionObj, + ); + + if ( $ConditionObj->IsApplicable() ) { + # We found an application Transaction -- return it + $return = $TransactionObj; + last; + } + } + }; + if ($@) { + $RT::Logger->error( "Scrip IsApplicable " . $self->Id . " died. - " . $@ ); + return (undef); + } + + return ($return); + } # }}} -# {{{ sub Prepare +# {{{ SUb Prepare =head2 Prepare @@ -391,7 +464,26 @@ Calls the action object's prepare method sub Prepare { my $self = shift; - $self->ActionObj->Prepare(@_); + my %args = ( TicketObj => undef, + TransactionObj => undef, + @_ ); + + my $return; + eval { + $self->ActionObj->LoadAction( ScripObj => $self, + TicketObj => $args{'TicketObj'}, + TransactionObj => $args{'TransactionObj'}, + ); + + $return = $self->ActionObj->Prepare(); + }; + if ($@) { + $RT::Logger->error( "Scrip Prepare " . $self->Id . " died. - " . $@ ); + return (undef); + } + unless ($return) { + } + return ($return); } # }}} @@ -406,18 +498,32 @@ Calls the action object's commit method sub Commit { my $self = shift; - $self->ActionObj->Commit(@_); -} + my %args = ( TicketObj => undef, + TransactionObj => undef, + @_ ); -# }}} + my $return; + eval { + $return = $self->ActionObj->Commit(); + }; -# }}} +#Searchbuilder caching isn't perfectly coherent. got to reload the ticket object, since it +# may have changed + $args{'TicketObj'}->Load( $args{'TicketObj'}->Id ); -# {{{ sub DESTROY -sub DESTROY { - my $self = shift; - $self->{'ActionObj'} = undef; + if ($@) { + $RT::Logger->error( "Scrip Commit " . $self->Id . " died. - " . $@ ); + return (undef); + } + + # Not destroying or weakening hte Action and Condition here could cause a + # leak + + return ($return); } + +# }}} + # }}} # {{{ ACL related methods @@ -427,10 +533,11 @@ sub DESTROY { # does an acl check and then passes off the call sub _Set { my $self = shift; - - unless ($self->CurrentUserHasRight('ModifyScrips')) { - $RT::Logger->debug("CurrentUser can't modify Scrips for ".$self->Queue."\n"); - return (0, $self->loc('Permission Denied')); + + unless ( $self->CurrentUserHasRight('ModifyScrips') ) { + $RT::Logger->debug( + "CurrentUser can't modify Scrips for " . $self->Queue . "\n" ); + return ( 0, $self->loc('Permission Denied') ); } return $self->__Set(@_); } @@ -441,14 +548,17 @@ sub _Set { # does an acl check and then passes off the call sub _Value { my $self = shift; - - unless ($self->CurrentUserHasRight('ShowScrips')) { - $RT::Logger->debug("CurrentUser can't modify Scrips for ".$self->__Value('Queue')."\n"); - return (undef); + + unless ( $self->CurrentUserHasRight('ShowScrips') ) { + $RT::Logger->debug( "CurrentUser can't modify Scrips for " + . $self->__Value('Queue') + . "\n" ); + return (undef); } - + return $self->__Value(@_); } + # }}} # {{{ sub CurrentUserHasRight @@ -461,11 +571,11 @@ calls HasRight. =cut sub CurrentUserHasRight { - my $self = shift; + my $self = shift; my $right = shift; - return ($self->HasRight( Principal => $self->CurrentUser->UserObj, - Right => $right )); - + return ( $self->HasRight( Principal => $self->CurrentUser->UserObj, + Right => $right ) ); + } # }}} @@ -482,26 +592,25 @@ Right string that applies to Scrips. sub HasRight { my $self = shift; - my %args = ( Right => undef, + my %args = ( Right => undef, Principal => undef, @_ ); - - if ((defined $self->SUPER::_Value('Queue')) and ($self->SUPER::_Value('Queue') != 0)) { - return ( $args{'Principal'}->HasRight( - Right => $args{'Right'}, - Object => $self->QueueObj - ) - ); - + + if ( ( defined $self->SUPER::_Value('Queue') ) + and ( $self->SUPER::_Value('Queue') != 0 ) ) { + return ( $args{'Principal'}->HasRight( Right => $args{'Right'}, + Object => $self->QueueObj ) ); + } else { - return( $args{'Principal'}->HasRight( Object => $RT::System, Right => $args{'Right'}) ); + return ( $args{'Principal'} + ->HasRight( Object => $RT::System, Right => $args{'Right'} ) ); } } + # }}} # }}} 1; - diff --git a/rt/lib/RT/Scrips.pm b/rt/lib/RT/Scrips.pm index a39443136..9605a64f7 100755 --- a/rt/lib/RT/Scrips.pm +++ b/rt/lib/RT/Scrips.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Scrip item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Scrips_Overlay.pm b/rt/lib/RT/Scrips_Overlay.pm index 46e31c2a8..0f606c884 100644 --- a/rt/lib/RT/Scrips_Overlay.pm +++ b/rt/lib/RT/Scrips_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Scrips - a collection of RT Scrip objects @@ -43,6 +66,9 @@ ok (require RT::Scrips); =cut + +package RT::Scrips; + use strict; no warnings qw(redefine); @@ -129,5 +155,208 @@ sub Next { } # }}} +=head2 Apply + +Run through the relevant scrips. + +=cut + +sub Apply { + my $self = shift; + + my %args = ( TicketObj => undef, + Ticket => undef, + Transaction => undef, + TransactionObj => undef, + Stage => undef, + Type => undef, + @_ ); + + $self->Prepare(%args); + $self->Commit(); + +} + +=head2 Commit + +Commit all of this object's prepared scrips + +=cut + +sub Commit { + my $self = shift; + + + foreach my $scrip (@{$self->Prepared}) { + + $scrip->Commit( TicketObj => $self->{'TicketObj'}, + TransactionObj => $self->{'TransactionObj'} ); + } +} + + +=head2 Prepare + +Only prepare the scrips, returning an array of the scrips we're interested in +in order of preparation, not execution + +=cut + +sub Prepare { + my $self = shift; + my %args = ( TicketObj => undef, + Ticket => undef, + Transaction => undef, + TransactionObj => undef, + Stage => undef, + Type => undef, + @_ ); + + #We're really going to need a non-acled ticket for the scrips to work + $self->_SetupSourceObjects( TicketObj => $args{'TicketObj'}, + Ticket => $args{'Ticket'}, + TransactionObj => $args{'TransactionObj'}, + Transaction => $args{'Transaction'} ); + + + $self->_FindScrips( Stage => $args{'Stage'}, Type => $args{'Type'} ); + + + #Iterate through each script and check it's applicability. + while ( my $scrip = $self->Next() ) { + + next + unless ( $scrip->IsApplicable( + TicketObj => $self->{'TicketObj'}, + TransactionObj => $self->{'TransactionObj'} + ) ); + + #If it's applicable, prepare and commit it + next + unless ( $scrip->Prepare( TicketObj => $self->{'TicketObj'}, + TransactionObj => $self->{'TransactionObj'} + ) ); + push @{$self->{'prepared_scrips'}}, $scrip; + + } + + return (@{$self->Prepared}); + +}; + +=head2 Prepared + +Returns an arrayref of the scrips this object has prepared + + +=cut + +sub Prepared { + my $self = shift; + return ($self->{'prepared_scrips'} || []); +} + + +# {{{ sup _SetupSourceObjects + +=head2 _SetupSourceObjects { TicketObj , Ticket, Transaction, TransactionObj } + +Setup a ticket and transaction for this Scrip collection to work with as it runs through the +relevant scrips. (Also to figure out which scrips apply) + +Returns: nothing + +=cut + + +sub _SetupSourceObjects { + + my $self = shift; + my %args = ( + TicketObj => undef, + Ticket => undef, + Transaction => undef, + TransactionObj => undef, + @_ ); + + if ( ( $self->{'TicketObj'} = $args{'TicketObj'} ) ) { + $self->{'TicketObj'}->CurrentUser( $self->CurrentUser ); + } + else { + $self->{'TicketObj'} = RT::Ticket->new( $self->CurrentUser ); + $self->{'TicketObj'}->Load( $args{'Ticket'} ) + || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n"); + } + + if ( ( $self->{'TransactionObj'} = $args{'TransactionObj'} ) ) { + $self->{'TransactionObj'}->CurrentUser( $self->CurrentUser ); + } + else { + $self->{'TransactionObj'} = RT::Transaction->new( $self->CurrentUser ); + $self->{'TransactionObj'}->Load( $args{'Transaction'} ) + || $RT::Logger->err( "$self couldn't load transaction $args{'Transaction'}\n"); + } +} + +# }}} + +# {{{ sub _FindScrips; + +=head2 _FindScrips + +Find only the apropriate scrips for whatever we're doing now + +=cut + +sub _FindScrips { + my $self = shift; + my %args = ( + Stage => undef, + Type => undef, + @_ ); + + + $self->LimitToQueue( $self->{'TicketObj'}->QueueObj->Id ) + ; #Limit it to $Ticket->QueueObj->Id + $self->LimitToGlobal(); + # or to "global" + + $self->Limit( FIELD => "Stage", VALUE => $args{'Stage'} ); + + my $ConditionsAlias = $self->NewAlias('ScripConditions'); + + $self->Join( + ALIAS1 => 'main', + FIELD1 => 'ScripCondition', + ALIAS2 => $ConditionsAlias, + FIELD2 => 'id' + ); + + #We only want things where the scrip applies to this sort of transaction + # TransactionBatch stage can define list of transaction + foreach( split /\s*,\s*/, ($args{'Type'} || '') ) { + $self->Limit( + ALIAS => $ConditionsAlias, + FIELD => 'ApplicableTransTypes', + OPERATOR => 'LIKE', + VALUE => $_, + ENTRYAGGREGATOR => 'OR', + ) + } + + # Or where the scrip applies to any transaction + $self->Limit( + ALIAS => $ConditionsAlias, + FIELD => 'ApplicableTransTypes', + OPERATOR => 'LIKE', + VALUE => "Any", + ENTRYAGGREGATOR => 'OR', + ); + + $RT::Logger->debug("Found ".$self->Count. " scrips"); +} + +# }}} + 1; diff --git a/rt/lib/RT/Search/ActiveTicketsInQueue.pm b/rt/lib/RT/Search/ActiveTicketsInQueue.pm index 766e42e47..9f9dac70f 100644 --- a/rt/lib/RT/Search/ActiveTicketsInQueue.pm +++ b/rt/lib/RT/Search/ActiveTicketsInQueue.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Search::ActiveTicketsInQueue diff --git a/rt/lib/RT/Search/FromSQL.pm b/rt/lib/RT/Search/FromSQL.pm new file mode 100644 index 000000000..3842bb6ae --- /dev/null +++ b/rt/lib/RT/Search/FromSQL.pm @@ -0,0 +1,109 @@ +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +=head1 NAME + + RT::Search::FromSQL + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +Find all tickets described by the SQL statement passed as an argument + +=head1 METHODS + + +=begin testing + +ok (require RT::Search::Generic); + +=end testing + + +=cut + +package RT::Search::FromSQL; + +use strict; +use base qw(RT::Search::Generic); + +=head2 Describe + +Returns a localized string describing the module's function. + +=cut + +# {{{ sub Describe +sub Describe { + my $self = shift; + return ($self->loc("TicketSQL search module", ref $self)); +} +# }}} + +=head2 Prepare + +The meat of the module. Runs a search on its Tickets object, using +the SQL string described in its Argument object. The Tickets object +is reduced to those tickets matching the SQL query. + +=cut + +# {{{ sub Prepare +sub Prepare { + my $self = shift; + + $self->TicketsObj->FromSQL($self->Argument); + return(1); +} +# }}} + +eval "require RT::Search::FromSQL_Vendor"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/FromSQL_Vendor.pm}); +eval "require RT::Search::FromSQL_Local"; +die $@ if ($@ && $@ !~ qr{^Can't locate RT/Search/FromSQL_Local.pm}); + +1; diff --git a/rt/lib/RT/Search/Generic.pm b/rt/lib/RT/Search/Generic.pm index f872c2a3f..3f3aa837b 100644 --- a/rt/lib/RT/Search/Generic.pm +++ b/rt/lib/RT/Search/Generic.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Search::Generic - ; diff --git a/rt/lib/RT/SearchBuilder.pm b/rt/lib/RT/SearchBuilder.pm index 22c9aff8c..3de9fc265 100644 --- a/rt/lib/RT/SearchBuilder.pm +++ b/rt/lib/RT/SearchBuilder.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::SearchBuilder - a baseclass for RT collection objects @@ -102,6 +125,158 @@ sub LimitToDeleted { } # }}} +# {{{ sub LimitAttribute + +=head2 LimitAttribute PARAMHASH + +Takes NAME, OPERATOR and VALUE to find records that has the +matching Attribute. + +If EMPTY is set, also select rows with an empty string as +Attribute's Content. + +If NULL is set, also select rows without the named Attribute. + +=cut + +my %Negate = qw( + = != + != = + > <= + < >= + >= < + <= > + LIKE NOT LIKE + NOT LIKE LIKE + IS IS NOT + IS NOT IS +); + +sub LimitAttribute { + my ($self, %args) = @_; + my $clause = 'ALIAS'; + my $operator = ($args{OPERATOR} || '='); + + if ($args{NULL} and exists $args{VALUE}) { + $clause = 'LEFTJOIN'; + $operator = $Negate{$operator}; + } + elsif ($args{NEGATE}) { + $operator = $Negate{$operator}; + } + + my $alias = $self->Join( + TYPE => 'left', + ALIAS1 => $args{ALIAS} || 'main', + FIELD1 => 'id', + TABLE2 => 'Attributes', + FIELD2 => 'ObjectId' + ); + + my $type = ref($self); + $type =~ s/(?:s|Collection)$//; # XXX - Hack! + + $self->Limit( + $clause => $alias, + FIELD => 'ObjectType', + OPERATOR => '=', + VALUE => $type, + ); + $self->Limit( + $clause => $alias, + FIELD => 'Name', + OPERATOR => '=', + VALUE => $args{NAME}, + ) if exists $args{NAME}; + + return unless exists $args{VALUE}; + + $self->Limit( + $clause => $alias, + FIELD => 'Content', + OPERATOR => $operator, + VALUE => $args{VALUE}, + ); + + # Capture rows with the attribute defined as an empty string. + $self->Limit( + $clause => $alias, + FIELD => 'Content', + OPERATOR => '=', + VALUE => '', + ENTRYAGGREGATOR => $args{NULL} ? 'AND' : 'OR', + ) if $args{EMPTY}; + + # Capture rows without the attribute defined + $self->Limit( + %args, + ALIAS => $alias, + FIELD => 'id', + OPERATOR => ($args{NEGATE} ? 'IS NOT' : 'IS'), + VALUE => 'NULL', + ) if $args{NULL}; +} +# }}} + +# {{{ sub LimitCustomField + +=head2 LimitCustomField + +Takes a paramhash of key/value pairs with the following keys: + +=over 4 + +=item CUSTOMFIELD - CustomField id. Optional + +=item OPERATOR - The usual Limit operators + +=item VALUE - The value to compare against + +=back + +=cut + +sub _SingularClass { + my $self = shift; + my $class = ref($self); + $class =~ s/s$// or die "Cannot deduce SingularClass for $class"; + return $class; +} + +sub LimitCustomField { + my $self = shift; + my %args = ( VALUE => undef, + CUSTOMFIELD => undef, + OPERATOR => '=', + @_ ); + + my $alias = $self->Join( + TYPE => 'left', + ALIAS1 => 'main', + FIELD1 => 'id', + TABLE2 => 'ObjectCustomFieldValues', + FIELD2 => 'ObjectId' + ); + $self->Limit( + ALIAS => $alias, + FIELD => 'CustomField', + OPERATOR => '=', + VALUE => $args{'CUSTOMFIELD'}, + ) if ($args{'CUSTOMFIELD'}); + $self->Limit( + ALIAS => $alias, + FIELD => 'ObjectType', + OPERATOR => '=', + VALUE => $self->_SingularClass, + ); + $self->Limit( + ALIAS => $alias, + FIELD => 'Content', + OPERATOR => $args{'OPERATOR'}, + VALUE => $args{'VALUE'}, + ); +} + # {{{ sub FindAllRows =head2 FindAllRows @@ -111,7 +286,7 @@ Find all matching rows, regardless of whether they are disabled or not =cut sub FindAllRows { - shift->{'find_disabled_rows'} = 1; + shift->{'find_disabled_rows'} = 1; } # {{{ sub Limit @@ -125,24 +300,48 @@ match lower(colname) agaist lc($val); =cut sub Limit { - my $self = shift; - my %args = ( CASESENSITIVE => 1, - @_ ); + my $self = shift; + my %args = ( CASESENSITIVE => 1, + @_ ); - return $self->SUPER::Limit(%args); + return $self->SUPER::Limit(%args); } # }}} -# {{{ sub ItemsArrayRef +# {{{ sub ItemsOrderBy -=item ItemsArrayRef +=head2 ItemsOrderBy -Return this object's ItemsArray. If it has a SortOrder attribute, sort the array by SortOrder. Otherwise, if it has a "Name" attribute, sort alphabetically by Name -Otherwise, just give up and return it in the order it came from the db. +Otherwise, just give up and return it in the order it came from the +db. + +=cut + +sub ItemsOrderBy { + my $self = shift; + my $items = shift; + + if ($self->NewItem()->_Accessible('SortOrder','read')) { + $items = [ sort { $a->SortOrder <=> $b->SortOrder } @{$items} ]; + } + elsif ($self->NewItem()->_Accessible('Name','read')) { + $items = [ sort { lc($a->Name) cmp lc($b->Name) } @{$items} ]; + } + + return $items; +} + +# }}} + +# {{{ sub ItemsArrayRef + +=head2 ItemsArrayRef +Return this object's ItemsArray, in the order that ItemsOrderBy sorts +it. =begin testing @@ -174,18 +373,7 @@ sub ItemsArrayRef { my $self = shift; my @items; - if ($self->NewItem()->_Accessible('SortOrder','read')) { - @items = sort { $a->SortOrder <=> $b->SortOrder } @{$self->SUPER::ItemsArrayRef()}; - } - elsif ($self->NewItem()->_Accessible('Name','read')) { - @items = sort { lc($a->Name) cmp lc($b->Name) } @{$self->SUPER::ItemsArrayRef()}; - } - else { - @items = @{$self->SUPER::ItemsArrayRef()}; - } - - return(\@items); - + return $self->ItemsOrderBy($self->SUPER::ItemsArrayRef()); } # }}} diff --git a/rt/lib/RT/StyleGuide.pod b/rt/lib/RT/StyleGuide.pod new file mode 100644 index 000000000..f0d1d15e6 --- /dev/null +++ b/rt/lib/RT/StyleGuide.pod @@ -0,0 +1,922 @@ +=head1 NAME + +RT::StyleGuide - RT Style Guide + +=head1 INTRODUCTION + +All code and documentation that is submitted to be included in the RT +distribution should follow the style in this document. This is not to +try to stifle your creativity, but to make life easier for everybody who +has to work with your code, and to aid those who are not quite sure how +to do something. + +These conventions below apply to perl modules, web programs, and +command-line programs, specifically, but also might apply to some +degree to any Perl code written for use in RT. + +Note that these are all guidelines, not unbreakable rules. If you have +a really good need to break one of the rules herein, however, then it is +best to ask on the B<rt-devel> mailing list first. + +Note that with much of this document, it is not so much the Right Way as +it is Our Way. We need to have conventions in order to make life easier +for everyone. So don't gripe, and just follow it, because you didn't +get a good grade in "Plays Well With Others" in kindergarten and you +want to make up for it now. + +If you have any questions, please ask us on the B<rt-devel> mailing list: + + http://www.bestpractical.com/rt/lists.html + +We don't always follow this guide. We are making changes throughout +our code to be in line with it. But just because we didn't do +it yet, that is no excuse. Do it anyway. :-) + +This document is subject to change at the whims of the core RT team. +We hope to add any significant changes at the bottom of the document. + + +=head1 CODING PRINCIPLES + +=head2 Perl Version + +We code everything to perl 5.6.1. Some features require advanced unicode +features in perl 5.8.0. It is acceptable that unicode features work only for +US-ASCII on perl 5.6.1. + + +=head2 Documentation + +All modules will be documented using the POD examples in the module +boilerplate. The function, purpose, use of the module will be +explained, and each public API will be documented with name, +description, inputs, outputs, side effects, etc. + +If an array or hash reference is returned, document the size of the +array (including what each element is, as appropriate) and name each key +in the hash. For complex data structures, map out the structure as +appropriate (e.g., name each field returned for each column from a DB +call; yes, this means you shouldn't use "SELECT *", which you shouldn't +use anyway). + +Also document what kind of data returned values are. Is it an integer, +a block of HTML, a boolean? + +All command-line program options will be documented using the +boilerplate code for command-line programs, which doesn't yet exist. +Each available function, switch, etc. should be documented, along +with a statement of function, purpose, use of the program. Do not +use the same options as another program, for a different purpose. + +All web templates should be documented with a statement of function, +purpose, and use in a mason comment block. + +Any external documents, and documentation for command-line programs and +modules, should be written in POD, where appropriate. From there, they +can be translated to many formats with the various pod2* translators. +Read the perlpod manpage before writing any POD, because although POD is +not difficult, it is not what most people are used to. It is not a +regular markup language; it is just a way to make easy documentation +for translating to other formats. Read, and understand, the perlpod +manpage, and ask us or someone else who knows if you have any questions. + + +=head2 Version + +Our distribution versions use tuples, where the first number is the +major revision, the second number is the version, and third +number is the subversion. Odd-numbered versions are development +versions. Examples: + + 1.0.0 First release of RT 1 + 1.0.1 Second release of RT 1.0 + 1.0.10 etc. + 1.1.0 First development release of RT 1.2 (or 2.0) + 2.0.0 First release of RT 2 + +Versions can be modified with a hyphen followed by some text, for +special versions, or to give extra information. Examples: + + 2.0.0-pre1 Notes that this is not final, but preview + +In perl 5.6.0, you can have versions like C<v2.0.0>, but this is not +allowed in previous versions of perl. So to convert a tuple version +string to a string to use with $VERSION, use a regular integer for +the revision, and three digits for version and subversion. Examples: + + 1.1.6 -> 1.001006 + 2.0.0 -> 2.000000 + +This way, perl can use the version strings in greater-than and +less-than comparisons. + + +=head2 Comments + +All code should be self-documenting as much as possible. Only include +necessary comments. Use names like "$ticket_count", so you don't need to +do something like: + + # ticket count + my $tc = 0; + +Include any comments that are, or might be, necessary in order for +someone else to understand the code. Sometimes a simple one-line +comment is good to explain what the purpose of the following code is +for. Sometimes each line needs to be commented because of a complex +algorithm. Read Kernighan & Pike's I<Practice of Programming> about +commenting. Good stuff, Maynard. + + +=head2 Warnings and Strict + +All code must compile and run cleanly with "use strict" enabled and the +perl "-w" (warnings) option on. If you must do something that -w or +strict complains about, there are workarounds, but the chances that you +really need to do it that way are remote. + +=head2 Lexical Variables + +Use only lexical variables, except for special global variables +($VERSION, %ENV, @ISA, $!, etc.) or very special circumstances (see +%HTML::Mason::Commands::session ). Global variables +for regular use are never appropriate. When necessary, "declare" +globals with "use vars" or "our()". + +A lexical variable is created with my(). A global variable is +pre-existing (if it is a special variable), or it pops into existence +when it is used. local() is used to tell perl to assign a temporary +value to a variable. This should only be used with special variables, +like $/, or in special circumstances. If you must assign to any global +variable, consider whether or not you should use local(). + +local() may also be used on elements of arrays and hashes, though there +is seldom a need to do it, and you shouldn't. + + +=head2 Exporting + +Do not export anything from a module by default. Feel free to put +anything you want to in @EXPORT_OK, so users of your modules can +explicitly ask for symbols (e.g., "use Something::Something qw(getFoo +setFoo)"), but do not export them by default. + + +=head2 Pass by Reference + +Arrays and hashes should be passed to and from functions by reference +only. Note that a list and an array are NOT the same thing. This +is perfectly fine: + + return($user, $form, $constants); + +An exception might be a temporary array of discrete arguments: + + my @return = ($user, $form); + push @return, $constants if $flag; + return @return; + +Although, usually, this is better (faster, easier to read, etc.): + + if ($flag) { + return($user, $form, $constants); + } else { + return($user, $form); + } + +We need to talk about Class::ReturnValue here. + + +=head2 Garbage Collection + +Perl does pretty good garbage collection for you. It will automatically +clean up lexical variables that have gone out of scope and objects whose +references have gone away. Normally you don't need to worry about +cleaning up after yourself, if using lexicals. + +However, some glue code, code compiled in C and linked to Perl, might +not automatically clean up for you. In such cases, clean up for +yourself. If there is a method in that glue to dispose or destruct, +then use it as appropriate. + +Also, if you have a long-running function that has a large data +structure in it, it is polite to free up the memory as soon as you are +done with it, if possible. + + my $huge_data_structure = get_huge_data_structure(); + do_something_with($huge_data_structure); + undef $huge_data_structure; + +=head2 DESTROY + +All object classes must provide a DESTROY method. If it won't do +anything, provide it anyway: + + sub DESTROY { } + + + +=head2 die() and exit() + +Don't do it. Do not die() or exit() from a web template or module. Do +not call C<kill 9, $$>. Don't do it. + +In command-line programs, do as you please. + + +=head2 shift and @_ + +Do not use @_. Use shift. shift may take more lines, but Jesse thinks it +leads to cleaner code. + + my $var = shift; # right + my($var) = @_; # ick. no + sub foo { uc $_[0] } # icky. sometimes ok. + + + my($var1, $var2) = (shift, shift); # Um, no. + + my $var1 = shift; # right + my $var2 = shift; + +=head2 Method parameters + +If a method takes exactly one mandatory argument, the argument should be +passed in a straightforward manner: + + my $self = shift; + my $id = shift; + +In all other cases, the method needs to take named parameters, usually +using a C<%args> hash to store them: + + my $self = shift; + my %args = ( Name => undef, + Description => undef, + @_ ); + +You may specify defaults to those named parameters instead of using +C<undef> above, as long as it is documented as such. + +It is worth noting that the existing RT codebase had not followed this +style perfectly; we are trying to fix it without breaking exsiting APIs. + +=head2 Tests + +Modules should provide test code, with documentation on how to use +it. Test::Inline allows tests to be embedded in code. Test::More makes it +easy to create tests. Any code you write should have a testsuite. +Any code you alter should have a test suite. If a patch comes in without +tests, there is something wrong. + +When altering code, you must run the test harness before submitting a patch +or committing code to the repository. + +"make regression" will extract inline tests, blow away the system database +and run the test suite. + +"make regression-quiet" will do all that and not print the "ok" lines. + + + +=head2 STDIN/STDOUT + +Always report errors using $RT::Logger. It's a Log::Dispatch object. +Unlike message meant for the user, log messages are not to be +internationalized. + +There are several different levels ($RT::Logger methods) of logging: + +=over 4 + +=item debug + +Used for messages only needed during system debugging. + +=item info + +Should be used to describe "system-critical" events which aren't errors. +Examples: creating users, deleting users, creating tickets, creating queues, +sending email (message id, time, recipients), recieving mail, changing +passwords, changing access control, superuser logins) + +=item error + +Used for RT-generated failures during execution. + +=item crit + +Should be used for messages when an action can not be completed due to some +error condition beyond our control. + +=back + +In the web UI and modules, never print directly to STDERR. Do not print +directly to STDOUT, unless you need to print directly to the user's console. + +In command-line programs, feel free to print to STDERR and STDOUT as +needed for direct console communication. But for actual error reporting, +use the logging API. + + +=head2 System Calls + +Always check return values from system calls, including open(), +close(), mkdir(), or anything else that talks directly to the system. +Perl built-in system calls return the error in $!; some functions in +modules might return an error in $@ or some other way, so read the module's +documentation if you don't know. Always do something, even if it is +just calling $RT::Logger->warning(), when the return value is not what you'd expect. + + + +=head1 STYLE + +Much of the style section is taken from the perlsyle manpage. We make +some changes to it here, but it wouldn't be a bad idea to read that +document, too. + +=head2 Terminology + +=over 4 + +=item RT the name + +"RT" is the name of the project. "RT" is, optionally, the +specific name for the actual file distribution. That's it. + +While we sometimes use "RT2" or "RT3", that's shortand that's really +not recommended. The name of the project is "RT". + +To specify a major version, use "RT 3.0". +To specify a specific release, use "RT 3.0.12" + +=item function vs. sub(routine) vs. method + +Just because it is the Perl Way (not necessarily right for all +languages, but the documented terminology in the perl documentation), +"method" should be used only to refer to a subroutine that are object +methods or class methods; that is, these are functions that are used +with OOP that always take either an object or a class as the first +argument. Regular subroutines, ones that are not object or class +methods, are functions. Class methods that create and return an object +are optionally called constructors. + +=item Users + +"users" are normally users of RT, the ones hitting the site; if using +it in any other context, specify. +"system users" are user +names on the operating system. "database users" are the user names in +the database server. None of these needs to be capitalized. + +=back + + +=head2 Names + +Don't use single-character variables, except as iterator variables. + +Don't use two-character variables just to spite us over the above rule. + +Constants are in all caps; these are variables whose value will I<never> +change during the course of the program. + + $Minimum = 10; # wrong + $MAXIMUM = 50; # right + +Other variables are lowercase, with underscores separating the words. +They words used should, in general, form a noun (usually singular), +unless the variable is a flag used to denote some action that should be +taken, in which case they should be verbs (or gerunds, as appropriate) +describing that action. + + $thisVar = 'foo'; # wrong + $this_var = 'foo'; # right + $work_hard = 1; # right, verb, boolean flag + $running_fast = 0; # right, gerund, boolean flag + +Arrays and hashes should be plural nouns, whether as regular arrays and +hashes or array and hash references. Do not name references with "ref" +or the data type in the name. + + @stories = (1, 2, 3); # right + $comment_ref = [4, 5, 6]; # wrong + $comments = [4, 5, 6]; # right + $comment = $comments->[0]; # right + +Make the name descriptive. Don't use variables like "$sc" when you +could call it "$story_count". See L<"Comments">. + +There are several variables in RT that are used throughout the code, +that you should use in your code. Do not use these variable names for +anything other than how they are normally used, and do not use any +other variable names in their place. Some of these are: + + $self # first named argument in object method + +Subroutines (except for special cases, like AUTOLOAD and simple accessors) +begin with a verb, with words following to complete the action. Accessors +don't start with "Get" if they're just the name of the attribute. + +Accessors which return an object should end with the suffix Obj. + +This section needs clarification for RT. + +Words begin with a capital letter. They +should as clearly as possible describe the activity to be peformed, and +the data to be returned. + + + + Load(); # good + LoadByName(); # good + LoadById(); # good + +Subroutines beginning with C<_> are special: they are not to be used +outside the current object. There is not to be enforced by the code +itself, but by someone very big and very scary. + +For large for() loops, do not use $_, but name the variable. +Do not use $_ (or assume it) except for when it is absolutely +clear what is going on, or when it is required (such as with +map() and grep()). + + for (@list) { + print; # OK; everyone knows this one + print uc; # wrong; few people know this + print uc $_; # better + } + +Note that the special variable C<_> I<should> be used when possible. +It is a placeholder that can be passed to stat() and the file test +operators, that saves perl a trip to re-stat the file. In the +example below, using C<$file> over for each file test, instead of +C<_> for subsequent uses, is a performance hit. You should be +careful that the last-tested file is what you think it is, though. + + if (-d $file) { # $file is a directory + # ... + } elsif (-l _) { # $file is a symlink + # ... + } + +Package names begin with a capital letter in each word, followed by +lower case letters (for the most part). Multiple words should be StudlyCapped. + + RT::User # good + RT::Database::MySQL # proper name + RT::Display::Provider # good + RT::CustomField # not so good, but OK + +Plugin modules should begin with "RTx::", followed by the name +of the plugin. + +=head1 Code formatting + +Use perltidy. Anything we say here is wrong if it conflicts with what +perltidy does. Your perltidyrc should read: + +-lp -vt=2 -vtc=2 -nsfs -bar + +=head2 Indents and Blank Space + +All indents should be tabs. Set your tab stops whatever you want them +to be; I use 8 spaces per tabs. + +No space before a semicolon that closes a statement. + + foo(@bar) ; # wrong + foo(@bar); # right + +Line up corresponding items vertically. + + my $foo = 1; + my $bar = 2; + my $xyzzy = 3; + + open(FILE, $fh) or die $!; + open(FILE2, $fh2) or die $!; + + $rot13 =~ tr[abcedfghijklmnopqrstuvwxyz] + [nopqrstuvwxyzabcdefghijklm]; + + # note we use a-mn-z instead of a-z, + # for readability + $rot13 =~ tr[a-mn-z] + [n-za-m]; + +Put blank lines between groups of code that do different things. Put +blank lines after your variable declarations. Put a blank line before a +final return() statement. Put a blank line following a block (and +before, with the exception of comment lines). + +An example: + + # this is my function! + sub foo { + my $val = shift; + my $obj = new Constructor; + my($var1, $var2); + + $obj->SetFoo($val); + $var1 = $obj->Foo(); + + + return($val); + } + + print 1; + + +=head2 Parentheses + +For control structures, there is a space between the keyword and opening +parenthesis. For functions, there is not. + + for(@list) # wrong + for (@list) # right + + my ($ref) # wrong + my($ref) # right + +Be careful about list vs. scalar context with parentheses! + + my @array = ('a', 'b', 'c'); + my($first_element) = @array; # a + my($first_element) = ('a', 'b', 'c'); # a + my $element_count = @array; # 3 + my $last_element = ('a', 'b', 'c'); # c + +Always include parentheses after functions, even if there are no arguments. +There are some exceptions, such as list operators (like print) and unary +operators (like undef, delete, uc). + +There is no space inside the parentheses, unless it is needed for +readability. + + for ( map { [ $_, 1 ] } @list ) # OK + for ( @list ) # not really OK, not horrible + +On multi-line expressions, match up the closing parenthesis with either +the opening statement, or the opening parenthesis, whichever works best. +Examples: + + @list = qw( + bar + baz + ); # right + + if ($foo && $bar && $baz + && $buz && $xyzzy + ) { + print $foo; + } + +Whether or not there is space following a closing parenthesis is +dependent on what it is that follows. + + print foo(@bar), baz(@buz) if $xyzzy; + +Note also that parentheses around single-statement control expressions, +as in C<if $xyzzy>, are optional (and discouraged) C<if> it is I<absolutely> +clear -- to a programmer -- what is going on. There is absolutely no +need for parentheses around C<$xyzzy> above, so leaving them out enhances +readability. Use your best discretion. Better to include them, if +there is any question. + +The same essentially goes for perl's built-in functions, when there is +nothing confusing about what is going on (for example, there is only one +function call in the statement, or the function call is separated by a +flow control operator). User-supplied functions must always include +parentheses. + + print 1, 2, 3; # good + delete $hash{key} if isAnon($uid); # good + + +However, if there is any possible confusion at all, then include the +parentheses. Remember the words of Larry Wall in the perlstyle manpage: + + When in doubt, parenthesize. At the very least it will + let some poor schmuck bounce on the % key in vi. + + Even if you aren't in doubt, consider the mental welfare + of the person who has to maintain the code after you, and + who will probably put parens in the wrong place. + +So leave them out when it is absoutely clear to a programmer, but if +there is any question, leave them in. + + +=head2 Braces + +(This is about control braces, not hash/data structure braces.) + +There is always a space befor the opening brace. + + while (<$fh>){ # wrong + while (<$fh>) { # right + +A one-line block may be put on one line, and the semicolon may be +omitted. + + for (@list) { print } + +Otherwise, finish each statement with a semicolon, put the keyword and +opening curly on the first line, and the ending curly lined up with the +keyword at the end. + + for (@list) { + print; + smell(); + } + +Generally, we prefer "uncuddled elses": + + if ($foo) { + print; + } + else { + die; + } + +_If_ the if statement is very brief, sometimes "cuddling" the else makes code more readable. Feel free to cuddle them in that case: + + + if ($foo) { + print; + } else { + die; + } + +=head2 Operators + +Put space around most operators. The primary exception is the for +aesthetics; e.g., sometimes the space around "**" is ommitted, +and there is never a space before a ",", but always after. + + print $x , $y; # wrong + print $x, $y; # right + + $x = 2 >> 1; # good + $y = 2**2; # ok + +Note that "&&" and "||" have a higher precedence than "and" and "or". +Other than that, they are exactly the same. It is best to use the lower +precedence version for control, and the higher for testing/returning +values. Examples: + + $bool = $flag1 or $flag2; # WRONG (doesn't work) + $value = $foo || $bar; # right + open(FILE, $file) or die $!; + + $true = foo($bar) && baz($buz); + foo($bar) and baz($buz); + +Note that "and" is seldom ever used, because the statement above is +better written using "if": + + baz($buz) if foo($bar); + +Most of the time, the confusion between and/&&, or/|| can be alleviated +by using parentheses. If you want to leave off the parentheses then you +I<must> use the proper operator. But if you use parentheses -- and +normally, you should, if there is any question at all -- then it doesn't +matter which you use. Use whichever is most readable and aesthetically +pleasing to you at the time, and be consistent within your block of code. + +Break long lines AFTER operators, except for "and", "or", "&&", "||". +Try to keep the two parts to a binary operator (an operator that +has two operands) together when possible. + + print "foo" . "bar" . "baz" + . "buz"; # wrong + + print "foo" . "bar" . "baz" . + "buz"; # right + + print $foo unless $x == 3 && $y == + 4 && $z == 5; # wrong + + print $foo unless $x == 3 && $y == 4 + && $z == 5; # right + + +=head2 Other + +Put space around a complex subscript inside the brackets or braces. + + $foo{$bar{baz}{buz}}; # OK + $foo{ $bar{baz}{buz} }; # better + +In general, use single-quotes around literals, and double-quotes +when the text needs to be interpolated. + +It is OK to omit quotes around names in braces and when using +the => operator, but be careful not to use a name that doubles as +a function; in that case, quote. + + $what{'time'}{it}{is} = time(); + +When making compound statements, put the primary action first. + + open(FILE, $fh) or die $!; # right + die $! unless open(FILE, $fh); # wrong + + print "Starting\n" if $verbose; # right + $verbose && print "Starting\n"; # wrong + + +Use here-docs instead of repeated print statements. + + print <<EOT; + This is a whole bunch of text. + I like it. I don't need to worry about messing + with lots of print statements and lining them up. + EOT + +Just remember that unless you put single quotes around your here-doc +token (<<'EOT'), the text will be interpolated, so escape any "$" or "@" +as needed. + +=head1 INTERNATIONALIZATION + + +=head2 String extraction styleguide + +=over 4 + +=item Web templates + +Templates should use the /l filtering component to call the localisation +framework + +The string Foo! + +Should become <&|/l&>Foo!</&> + +All newlines should be removed from localized strings, to make it easy to +grep the codebase for strings to be localized + +The string Foo + Bar + Baz + +Should become <&|/l&>Foo Bar Baz</&> + + +Variable subsititutions should be moved to Locale::MakeText format + +The string Hello, <%$name %> + +should become <&|/l, $name &>Hello, [_1]</&> + + +Multiple variables work just like single variables + +The string You found <%$num%> tickets in queue <%$queue%> + +should become <&|/l, $num, $queue &>You found [_1] tickets in queue [_2]</&> + +When subcomponents are called in the middle of a phrase, they need to be escaped +too: + +The string <input type="submit" value="New ticket in"> <& /Elements/SelectNewTicketQueue&> + +should become <&|/l, $m->scomp('/Elements/SelectNewTicketQueue')&><input type="submit" value="New ticket in"> [_1]</&> + + + + +The string <& /Elements/TitleBoxStart, width=> "40%", titleright => "RT $RT::VERSION for $RT::rtname", title => 'Login' &> + +should become <& /Elements/TitleBoxStart, + width=> "40%", + titleright => loc("RT [_1] for [_2]",$RT::VERSION, $RT::rtname), + title => loc('Login'), + &> + + +=item Library code + + + +Within RT's core code, every module has a localization handle available through the 'loc' method: + +The code return ( $id, "Queue created" ); + +should become return ( $id, $self->loc("Queue created") ); + +When returning or localizing a single string, the "extra" set of parenthesis () should be omitted. + +The code return ("Subject changed to ". $self->Data ); + +should become return $self->loc( "Subject changed to [_1]", $self->Data ); + + +It is important not to localize the names of rights or statuses within RT's core, as there is logic that depends on them as string identifiers. The proper place to localize these values is when they're presented for display in the web or commandline interfaces. + + +=back 4 + +=head1 CODING PRCEDURE + +This is for new programs, modules, specific APIs, or anything else. + +=over 4 + +=item Present idea to rt-devel + +We may know of a better way to approach the problem, or know of an +existing way to deal with it, or know someone else is working on it. +This is mostly informal, but a fairly complete explanation for the need +and use of the code should be provided. + + +=item Present complete specs to rt-devel + +The complete proposed API should be submitted for +approval and discussion. For web and command-line programs, present the +functionality and interface (op codes, command-lin switches, etc.). + +The best way to do this is to take the documentation portion of the +boilerplate and fill it in. You can make changes later if necessary, +but fill it in as much as you can. + + + +=item Prepare for code review + +When you are done, the code will undergo a code review by a member of +the core team, or someone picked by the core team. This is not to +belittle you (that's just a nice side effect), it is to make sure that +you understand your code, that we understand your code, that it won't +break other code, that it follows the documentation and existing +proposal. It is to check for possible optimizations or better ways of +doing it. + +Note that all code is expected to follow the coding principles and style +guide contained in this document. + + +=item Finish it up + +After the code is done (possibly going through multiple code reviews), +if you do not have repository access, submit it to rt-<major-version>-bugs@fsck.com as a unified diff. From that point on, it'll be handled by someone with repository access. + +=back + + +=head1 BUG REPORTS, PATCHES + +Use rt-<major-version>-bugs@fsck.com for I<any> bug that is not +being fixed immediately. If it is not in RT, there +is a good chance it will not be dealt with. + +Send patches to rt-<major-version>-bugs@fsck.com, too. Use C<diff +-u> for patches. + +=head1 SCHEMA DESIGN + +RT uses a convention to denote the foreign key status in its tables. +The rule of thumb is: + +=over 4 + +=item When it references to another table, always use the table name + +For example, the C<Template> field in the C<Scrips> table refers to +the C<Id> of the same-named C<Template> table. + +=item Otherwise, always use the C<Id> suffix + +For example, the C<ObjectId> field in the C<ACL> table can refer +to any object, so it has the C<Id> suffix. + +=back + +There are some legacy fields that did not follow this rule, namely +C<ACL.PrincipalId>, C<GroupMembers.GroupId> and C<Attachments.TransactionId>, +but new tables are expected to be consistent. + +=head1 TO DO + +Talk about DBIx::SearchBuilder + +Talk about mason + component style + cascading style sheets + +Talk about adding a new translation + +Talk more about logging + +=head1 CHANGES + + Adapted from Slash Styleguide by jesse - 20 Dec, 2002 + + +=head1 VERSION + +0.1 diff --git a/rt/lib/RT/System.pm b/rt/lib/RT/System.pm index bfa5a4eb2..515e3a469 100644 --- a/rt/lib/RT/System.pm +++ b/rt/lib/RT/System.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::System @@ -59,7 +82,10 @@ $RIGHTS = { AdminUsers => 'Create, delete and modify users', # loc_pair ModifySelf => "Modify one's own RT account", # loc_pair DelegateRights => - "Delegate specific rights which have been granted to you." # loc_pair + "Delegate specific rights which have been granted to you.", # loc_pair + ShowConfigTab => "show Configuration tab", # loc_pair + LoadSavedSearch => "allow loading of saved searches", # loc_pair + CreateSavedSearch => "allow creation of saved searches", # loc_pair }; # Tell RT::ACE that this sort of object can get acls granted @@ -96,12 +122,14 @@ sub AvailableRights { my $queue = RT::Queue->new($RT::SystemUser); my $group = RT::Group->new($RT::SystemUser); + my $cf = RT::CustomField->new($RT::SystemUser); my $qr =$queue->AvailableRights(); my $gr = $group->AvailableRights(); + my $cr = $cf->AvailableRights(); # Build a merged list of all system wide rights, queue rights and group rights. - my %rights = (%{$RIGHTS}, %{$gr}, %{$qr}); + my %rights = (%{$RIGHTS}, %{$gr}, %{$qr}, %{$cr}); return(\%rights); } diff --git a/rt/lib/RT/Template.pm b/rt/lib/RT/Template.pm index f73ea3ed6..4f7aacb2c 100755 --- a/rt/lib/RT/Template.pm +++ b/rt/lib/RT/Template.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -62,7 +84,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -105,7 +127,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -114,14 +136,14 @@ Returns the current value of id. =cut -=item Queue +=head2 Queue Returns the current value of Queue. (In the database, Queue is stored as int(11).) -=item SetQueue VALUE +=head2 SetQueue VALUE Set Queue to VALUE. @@ -132,7 +154,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item QueueObj +=head2 QueueObj Returns the Queue Object which has the id returned by Queue @@ -146,14 +168,14 @@ sub QueueObj { return($Queue); } -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -164,14 +186,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Description +=head2 Description Returns the current value of Description. (In the database, Description is stored as varchar(255).) -=item SetDescription VALUE +=head2 SetDescription VALUE Set Description to VALUE. @@ -182,14 +204,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Type +=head2 Type Returns the current value of Type. (In the database, Type is stored as varchar(16).) -=item SetType VALUE +=head2 SetType VALUE Set Type to VALUE. @@ -200,14 +222,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Language +=head2 Language Returns the current value of Language. (In the database, Language is stored as varchar(16).) -=item SetLanguage VALUE +=head2 SetLanguage VALUE Set Language to VALUE. @@ -218,14 +240,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item TranslationOf +=head2 TranslationOf Returns the current value of TranslationOf. (In the database, TranslationOf is stored as int(11).) -=item SetTranslationOf VALUE +=head2 SetTranslationOf VALUE Set TranslationOf to VALUE. @@ -236,14 +258,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Content +=head2 Content Returns the current value of Content. (In the database, Content is stored as blob.) -=item SetContent VALUE +=head2 SetContent VALUE Set Content to VALUE. @@ -254,7 +276,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -263,7 +285,7 @@ Returns the current value of LastUpdated. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -272,7 +294,7 @@ Returns the current value of LastUpdatedBy. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -281,7 +303,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -291,33 +313,33 @@ Returns the current value of Created. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Queue => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Description => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Type => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, Language => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, TranslationOf => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Content => - {read => 1, write => 1, type => 'blob', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -349,7 +371,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Template_Overlay.pm b/rt/lib/RT/Template_Overlay.pm index 0b5e67d0f..bfff0f03e 100644 --- a/rt/lib/RT/Template_Overlay.pm +++ b/rt/lib/RT/Template_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Portions Copyright 2000 Tobias Brox <tobix@cpan.org> =head1 NAME @@ -44,6 +66,9 @@ ok(require RT::Template); =cut + +package RT::Template; + use strict; no warnings qw(redefine); @@ -203,10 +228,11 @@ sub LoadQueueTemplate { my $self = shift; my %args = ( Queue => undef, - Name => undef + Name => undef, + @_ ); - return ( $self->LoadByCols( Name => $args{'Name'}, Queue => {'Queue'} ) ); + return ( $self->LoadByCols( Name => $args{'Name'}, Queue => $args{'Queue'} ) ); } @@ -298,10 +324,13 @@ sub MIMEObj { # {{{ sub Parse -=item Parse +=head2 Parse This routine performs Text::Template parsing on the template and then imports the results into a MIME::Entity so we can really use it + + Takes a hash containing Argument, TicketObj, and TransactionObj. + It returns a tuple of (val, message) If val is 0, the message contains an error message @@ -317,25 +346,20 @@ sub Parse { my $parser = MIME::Parser->new(); - # Setup output directory for files. from RT::EmailParser::_SetupMIMEParser - if (my $AttachmentDir = eval { File::Temp::tempdir( TMPDIR => 1, CLEANUP => 1 ) }) { - # Set up output directory for files: - $parser->output_dir("$AttachmentDir"); - } - else { - # 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); + # Set up the prefix for files with auto-generated names: $parser->output_prefix("part"); + # If content length is <= 50000 bytes, store each msg as in-core scalar; # Else, write to a disk file (the default action): $parser->output_to_core(50000); - ### Should we forgive normally-fatal errors? $parser->ignore_errors(1); $self->{'MIMEObj'} = eval { $parser->parse_data($content) }; @@ -350,7 +374,6 @@ sub Parse { $self->{'MIMEObj'}->head->unfold(); return ( 1, $self->loc("Template parsed") ); - } @@ -369,12 +392,13 @@ sub _ParseContent { @_ ); - + no warnings 'redefine'; $T::Ticket = $args{'TicketObj'}; $T::Transaction = $args{'TransactionObj'}; $T::Argument = $args{'Argument'}; $T::Requestor = eval { $T::Ticket->Requestors->UserMembersObj->First->Name }; $T::rtname = $RT::rtname; + *T::loc = sub { $T::Ticket->loc(@_) }; # We need to untaint the content of the template, since we'll be working # with it @@ -385,7 +409,15 @@ sub _ParseContent { SOURCE => $content ); - my $retval = $template->fill_in( PACKAGE => 'T' ); + my $is_broken = 0; + 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() + $is_broken++; + return undef; + } ); + return undef if $is_broken; # MIME::Parser has problems dealing with high-bit utf8 data. Encode::_utf8_off($retval); @@ -408,4 +440,5 @@ sub CurrentUserHasQueueRight { } # }}} + 1; diff --git a/rt/lib/RT/Templates.pm b/rt/lib/RT/Templates.pm index 37db84086..6271b973f 100755 --- a/rt/lib/RT/Templates.pm +++ b/rt/lib/RT/Templates.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Template item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Templates_Overlay.pm b/rt/lib/RT/Templates_Overlay.pm index 6bc992e05..f5e8ce533 100644 --- a/rt/lib/RT/Templates_Overlay.pm +++ b/rt/lib/RT/Templates_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Templates - a collection of RT Template objects @@ -42,6 +65,9 @@ ok (require RT::Templates); =cut + +package RT::Templates; + use strict; no warnings qw(redefine); @@ -137,5 +163,40 @@ sub NewItem { } # }}} +# {{{ sub Next + +=head2 Next + +Returns the next template that this user can see. + +=cut + +sub Next { + my $self = shift; + + + my $templ = $self->SUPER::Next(); + if ((defined($templ)) and (ref($templ))) { + + # If it's part of a queue, and the user can read templates in + # that queue, or the user can globally read templates, show it + if ($templ->Queue && $templ->CurrentUserHasQueueRight('ShowTemplate') or + $templ->CurrentUser->HasRight(Object => $RT::System, Right => 'ShowTemplate')) { + return($templ); + } + + #If the user doesn't have the right to show this template + else { + return($self->Next()); + } + } + #if there never was any template + else { + return(undef); + } + +} +# }}} + 1; diff --git a/rt/lib/RT/Ticket.pm b/rt/lib/RT/Ticket.pm index 2f075a20c..905ae8fc6 100755 --- a/rt/lib/RT/Ticket.pm +++ b/rt/lib/RT/Ticket.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -62,7 +84,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -144,7 +166,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -153,14 +175,14 @@ Returns the current value of id. =cut -=item EffectiveId +=head2 EffectiveId Returns the current value of EffectiveId. (In the database, EffectiveId is stored as int(11).) -=item SetEffectiveId VALUE +=head2 SetEffectiveId VALUE Set EffectiveId to VALUE. @@ -171,14 +193,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Queue +=head2 Queue Returns the current value of Queue. (In the database, Queue is stored as int(11).) -=item SetQueue VALUE +=head2 SetQueue VALUE Set Queue to VALUE. @@ -189,7 +211,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item QueueObj +=head2 QueueObj Returns the Queue Object which has the id returned by Queue @@ -203,14 +225,14 @@ sub QueueObj { return($Queue); } -=item Type +=head2 Type Returns the current value of Type. (In the database, Type is stored as varchar(16).) -=item SetType VALUE +=head2 SetType VALUE Set Type to VALUE. @@ -221,14 +243,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item IssueStatement +=head2 IssueStatement Returns the current value of IssueStatement. (In the database, IssueStatement is stored as int(11).) -=item SetIssueStatement VALUE +=head2 SetIssueStatement VALUE Set IssueStatement to VALUE. @@ -239,14 +261,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Resolution +=head2 Resolution Returns the current value of Resolution. (In the database, Resolution is stored as int(11).) -=item SetResolution VALUE +=head2 SetResolution VALUE Set Resolution to VALUE. @@ -257,14 +279,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Owner +=head2 Owner Returns the current value of Owner. (In the database, Owner is stored as int(11).) -=item SetOwner VALUE +=head2 SetOwner VALUE Set Owner to VALUE. @@ -275,14 +297,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Subject +=head2 Subject Returns the current value of Subject. (In the database, Subject is stored as varchar(200).) -=item SetSubject VALUE +=head2 SetSubject VALUE Set Subject to VALUE. @@ -293,14 +315,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item InitialPriority +=head2 InitialPriority Returns the current value of InitialPriority. (In the database, InitialPriority is stored as int(11).) -=item SetInitialPriority VALUE +=head2 SetInitialPriority VALUE Set InitialPriority to VALUE. @@ -311,14 +333,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item FinalPriority +=head2 FinalPriority Returns the current value of FinalPriority. (In the database, FinalPriority is stored as int(11).) -=item SetFinalPriority VALUE +=head2 SetFinalPriority VALUE Set FinalPriority to VALUE. @@ -329,14 +351,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Priority +=head2 Priority Returns the current value of Priority. (In the database, Priority is stored as int(11).) -=item SetPriority VALUE +=head2 SetPriority VALUE Set Priority to VALUE. @@ -347,14 +369,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item TimeEstimated +=head2 TimeEstimated Returns the current value of TimeEstimated. (In the database, TimeEstimated is stored as int(11).) -=item SetTimeEstimated VALUE +=head2 SetTimeEstimated VALUE Set TimeEstimated to VALUE. @@ -365,14 +387,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item TimeWorked +=head2 TimeWorked Returns the current value of TimeWorked. (In the database, TimeWorked is stored as int(11).) -=item SetTimeWorked VALUE +=head2 SetTimeWorked VALUE Set TimeWorked to VALUE. @@ -383,14 +405,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Status +=head2 Status Returns the current value of Status. (In the database, Status is stored as varchar(10).) -=item SetStatus VALUE +=head2 SetStatus VALUE Set Status to VALUE. @@ -401,14 +423,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item TimeLeft +=head2 TimeLeft Returns the current value of TimeLeft. (In the database, TimeLeft is stored as int(11).) -=item SetTimeLeft VALUE +=head2 SetTimeLeft VALUE Set TimeLeft to VALUE. @@ -419,14 +441,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Told +=head2 Told Returns the current value of Told. (In the database, Told is stored as datetime.) -=item SetTold VALUE +=head2 SetTold VALUE Set Told to VALUE. @@ -437,14 +459,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Starts +=head2 Starts Returns the current value of Starts. (In the database, Starts is stored as datetime.) -=item SetStarts VALUE +=head2 SetStarts VALUE Set Starts to VALUE. @@ -455,14 +477,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Started +=head2 Started Returns the current value of Started. (In the database, Started is stored as datetime.) -=item SetStarted VALUE +=head2 SetStarted VALUE Set Started to VALUE. @@ -473,14 +495,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Due +=head2 Due Returns the current value of Due. (In the database, Due is stored as datetime.) -=item SetDue VALUE +=head2 SetDue VALUE Set Due to VALUE. @@ -491,14 +513,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Resolved +=head2 Resolved Returns the current value of Resolved. (In the database, Resolved is stored as datetime.) -=item SetResolved VALUE +=head2 SetResolved VALUE Set Resolved to VALUE. @@ -509,7 +531,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -518,7 +540,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -527,7 +549,7 @@ Returns the current value of LastUpdated. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -536,7 +558,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -545,14 +567,14 @@ Returns the current value of Created. =cut -=item Disabled +=head2 Disabled Returns the current value of Disabled. (In the database, Disabled is stored as smallint(6).) -=item SetDisabled VALUE +=head2 SetDisabled VALUE Set Disabled to VALUE. @@ -564,59 +586,59 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, EffectiveId => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Queue => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Type => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, IssueStatement => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Resolution => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Owner => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Subject => - {read => 1, write => 1, type => 'varchar(200)', default => '[no subject]'}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => '[no subject]'}, InitialPriority => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, FinalPriority => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Priority => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, TimeEstimated => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, TimeWorked => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Status => - {read => 1, write => 1, type => 'varchar(10)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 10, is_blob => 0, is_numeric => 0, type => 'varchar(10)', default => ''}, TimeLeft => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Told => - {read => 1, write => 1, type => 'datetime', default => ''}, + {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Starts => - {read => 1, write => 1, type => 'datetime', default => ''}, + {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Started => - {read => 1, write => 1, type => 'datetime', default => ''}, + {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Due => - {read => 1, write => 1, type => 'datetime', default => ''}, + {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Resolved => - {read => 1, write => 1, type => 'datetime', default => ''}, + {read => 1, write => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, Disabled => - {read => 1, write => 1, type => 'smallint(6)', default => '0'}, + {read => 1, write => 1, sql_type => 5, length => 6, is_blob => 0, is_numeric => 1, type => 'smallint(6)', default => '0'}, } }; @@ -648,7 +670,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/TicketCustomFieldValue.pm b/rt/lib/RT/TicketCustomFieldValue.pm deleted file mode 100644 index 862a5dc13..000000000 --- a/rt/lib/RT/TicketCustomFieldValue.pm +++ /dev/null @@ -1,286 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - -RT::TicketCustomFieldValue - - -=head1 SYNOPSIS - -=head1 DESCRIPTION - -=head1 METHODS - -=cut - -package RT::TicketCustomFieldValue; -use RT::Record; -use RT::CustomField; -use RT::Ticket; - - -use vars qw( @ISA ); -@ISA= qw( RT::Record ); - -sub _Init { - my $self = shift; - - $self->Table('TicketCustomFieldValues'); - $self->SUPER::_Init(@_); -} - - - - - -=item Create PARAMHASH - -Create takes a hash of values and creates a row in the database: - - int(11) 'Ticket'. - int(11) 'CustomField'. - varchar(255) 'Content'. - -=cut - - - - -sub Create { - my $self = shift; - my %args = ( - Ticket => '0', - CustomField => '0', - Content => '', - - @_); - $self->SUPER::Create( - Ticket => $args{'Ticket'}, - CustomField => $args{'CustomField'}, - Content => $args{'Content'}, -); - -} - - - -=item id - -Returns the current value of id. -(In the database, id is stored as int(11).) - - -=cut - - -=item Ticket - -Returns the current value of Ticket. -(In the database, Ticket is stored as int(11).) - - - -=item SetTicket VALUE - - -Set Ticket to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Ticket will be stored as a int(11).) - - -=cut - - -=item TicketObj - -Returns the Ticket Object which has the id returned by Ticket - - -=cut - -sub TicketObj { - my $self = shift; - my $Ticket = RT::Ticket->new($self->CurrentUser); - $Ticket->Load($self->__Value('Ticket')); - return($Ticket); -} - -=item CustomField - -Returns the current value of CustomField. -(In the database, CustomField is stored as int(11).) - - - -=item SetCustomField VALUE - - -Set CustomField to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, CustomField will be stored as a int(11).) - - -=cut - - -=item CustomFieldObj - -Returns the CustomField Object which has the id returned by CustomField - - -=cut - -sub CustomFieldObj { - my $self = shift; - my $CustomField = RT::CustomField->new($self->CurrentUser); - $CustomField->Load($self->__Value('CustomField')); - return($CustomField); -} - -=item Content - -Returns the current value of Content. -(In the database, Content is stored as varchar(255).) - - - -=item SetContent VALUE - - -Set Content to VALUE. -Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Content will be stored as a varchar(255).) - - -=cut - - -=item Creator - -Returns the current value of Creator. -(In the database, Creator is stored as int(11).) - - -=cut - - -=item Created - -Returns the current value of Created. -(In the database, Created is stored as datetime.) - - -=cut - - -=item LastUpdatedBy - -Returns the current value of LastUpdatedBy. -(In the database, LastUpdatedBy is stored as int(11).) - - -=cut - - -=item LastUpdated - -Returns the current value of LastUpdated. -(In the database, LastUpdated is stored as datetime.) - - -=cut - - - -sub _ClassAccessible { - { - - id => - {read => 1, type => 'int(11)', default => ''}, - Ticket => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - CustomField => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Content => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; - - - eval "require RT::TicketCustomFieldValue_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValue_Overlay.pm}) { - die $@; - }; - - eval "require RT::TicketCustomFieldValue_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValue_Vendor.pm}) { - die $@; - }; - - eval "require RT::TicketCustomFieldValue_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValue_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::TicketCustomFieldValue_Overlay, RT::TicketCustomFieldValue_Vendor, RT::TicketCustomFieldValue_Local - -=cut - - -1; diff --git a/rt/lib/RT/TicketCustomFieldValue_Overlay.pm b/rt/lib/RT/TicketCustomFieldValue_Overlay.pm deleted file mode 100644 index c395ecac4..000000000 --- a/rt/lib/RT/TicketCustomFieldValue_Overlay.pm +++ /dev/null @@ -1,52 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -use strict; -no warnings qw(redefine); - - - -=head2 LoadByTicketContentAndCustomField { Ticket => TICKET, CustomField => CUSTOMFIELD, Content => CONTENT } - -Loads a custom field value by Ticket, Content and which CustomField it's tied to - -=cut - - -sub LoadByTicketContentAndCustomField { - my $self = shift; - my %args = ( Ticket => undef, - CustomField => undef, - Content => undef, - @_ - ); - - - $self->LoadByCols( Content => $args{'Content'}, - CustomField => $args{'CustomField'}, - Ticket => $args{'Ticket'}); - - -} - -1; diff --git a/rt/lib/RT/TicketCustomFieldValues.pm b/rt/lib/RT/TicketCustomFieldValues.pm deleted file mode 100644 index f137f5375..000000000 --- a/rt/lib/RT/TicketCustomFieldValues.pm +++ /dev/null @@ -1,115 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -# Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) -# WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. -# -# !! DO NOT EDIT THIS FILE !! -# - -use strict; - - -=head1 NAME - - RT::TicketCustomFieldValues -- Class Description - -=head1 SYNOPSIS - - use RT::TicketCustomFieldValues - -=head1 DESCRIPTION - - -=head1 METHODS - -=cut - -package RT::TicketCustomFieldValues; - -use RT::SearchBuilder; -use RT::TicketCustomFieldValue; - -use vars qw( @ISA ); -@ISA= qw(RT::SearchBuilder); - - -sub _Init { - my $self = shift; - $self->{'table'} = 'TicketCustomFieldValues'; - $self->{'primary_key'} = 'id'; - - - return ( $self->SUPER::_Init(@_) ); -} - - -=item NewItem - -Returns an empty new RT::TicketCustomFieldValue item - -=cut - -sub NewItem { - my $self = shift; - return(RT::TicketCustomFieldValue->new($self->CurrentUser)); -} - - eval "require RT::TicketCustomFieldValues_Overlay"; - if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValues_Overlay.pm}) { - die $@; - }; - - eval "require RT::TicketCustomFieldValues_Vendor"; - if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValues_Vendor.pm}) { - die $@; - }; - - eval "require RT::TicketCustomFieldValues_Local"; - if ($@ && $@ !~ qr{^Can't locate RT/TicketCustomFieldValues_Local.pm}) { - die $@; - }; - - - - -=head1 SEE ALSO - -This class allows "overlay" methods to be placed -into the following files _Overlay is for a System overlay by the original author, -_Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customizations. - -These overlay files can contain new subs or subs to replace existing subs in this module. - -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line - - no warnings qw(redefine); - -so that perl does not kick and scream when you redefine a subroutine or variable in your overlay. - -RT::TicketCustomFieldValues_Overlay, RT::TicketCustomFieldValues_Vendor, RT::TicketCustomFieldValues_Local - -=cut - - -1; diff --git a/rt/lib/RT/TicketCustomFieldValues_Overlay.pm b/rt/lib/RT/TicketCustomFieldValues_Overlay.pm deleted file mode 100644 index 5777c37e3..000000000 --- a/rt/lib/RT/TicketCustomFieldValues_Overlay.pm +++ /dev/null @@ -1,86 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -use strict; -no warnings qw(redefine); - -# {{{ sub LimitToCustomField - -=head2 LimitToCustomField FIELD - -Limits the returned set to values for the custom field with Id FIELD - -=cut - -sub LimitToCustomField { - my $self = shift; - my $cf = shift; - return ($self->Limit( FIELD => 'CustomField', - VALUE => $cf, - OPERATOR => '=')); - -} - -# }}} - -# {{{ sub LimitToTicket - -=head2 LimitToTicket TICKETID - -Limits the returned set to values for the ticket with Id TICKETID - -=cut - -sub LimitToTicket { - my $self = shift; - my $ticket = shift; - return ($self->Limit( FIELD => 'Ticket', - VALUE => $ticket, - OPERATOR => '=')); - -} - -# }}} - - -=sub HasEntry VALUE - -Returns true if this CustomFieldValues collection has an entry with content that eq VALUE - -=cut - - -sub HasEntry { - my $self = shift; - my $value = shift; - - #TODO: this could cache and optimize a fair bit. - foreach my $item (@{$self->ItemsArrayRef}) { - return(1) if ($item->Content eq $value); - } - return undef; - -} - -1; - diff --git a/rt/lib/RT/Ticket_Overlay.pm b/rt/lib/RT/Ticket_Overlay.pm index c88bbc90f..d04ececd8 100644 --- a/rt/lib/RT/Ticket_Overlay.pm +++ b/rt/lib/RT/Ticket_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} # {{{ Front Material =head1 SYNOPSIS @@ -44,12 +66,16 @@ ok($testqueue->Create( Name => 'ticket tests')); ok($testqueue->Id != 0); use_ok(RT::CustomField); ok(my $testcf = RT::CustomField->new($RT::SystemUser)); -ok($testcf->Create( Name => 'selectmulti', +my ($ret, $cmsg) = $testcf->Create( Name => 'selectmulti', Queue => $testqueue->id, - Type => 'SelectMultiple')); -ok($testcf->AddValue ( Name => 'Value1', + Type => 'SelectMultiple'); +ok($ret,"Created the custom field - ".$cmsg); +($ret,$cmsg) = $testcf->AddValue ( Name => 'Value1', SortOrder => '1', - Description => 'A testing value')); + Description => 'A testing value'); + +ok($ret, "Added a value - ".$cmsg); + ok($testcf->AddValue ( Name => 'Value2', SortOrder => '2', Description => 'Another testing value')); @@ -85,8 +111,8 @@ ok($t->CustomFieldValues($testcf->Id)->Count == 0); ok(my $t2 = RT::Ticket->new($RT::SystemUser)); ok($t2->Load($id)); -ok($t2->Subject eq 'Testing'); -ok($t2->QueueObj->Id eq $testqueue->id); +is($t2->Subject, 'Testing'); +is($t2->QueueObj->Id, $testqueue->id); ok($t2->OwnerObj->Id == $u->Id); my $t3 = RT::Ticket->new($RT::SystemUser); @@ -111,6 +137,9 @@ ok($t3->CustomFieldValues($testcf->Id)->Count == 1, =cut + +package RT::Ticket; + use strict; no warnings qw(redefine); @@ -120,10 +149,11 @@ use RT::Record; use RT::Links; use RT::Date; use RT::CustomFields; -use RT::TicketCustomFieldValues; use RT::Tickets; +use RT::Transactions; use RT::URI::fsck_com_rt; use RT::URI; +use MIME::Entity; =begin testing @@ -137,7 +167,7 @@ ok(require RT::Ticket, "Loading the RT::Ticket library"); # }}} # {{{ LINKTYPEMAP -# A helper table for relationships mapping to make it easier +# A helper table for links mapping to make it easier # to build and parse links between tickets use vars '%LINKTYPEMAP'; @@ -145,8 +175,12 @@ use vars '%LINKTYPEMAP'; %LINKTYPEMAP = ( MemberOf => { Type => 'MemberOf', Mode => 'Target', }, + Parents => { Type => 'MemberOf', + Mode => 'Target', }, Members => { Type => 'MemberOf', Mode => 'Base', }, + Children => { Type => 'MemberOf', + Mode => 'Base', }, HasMember => { Type => 'MemberOf', Mode => 'Base', }, RefersTo => { Type => 'RefersTo', @@ -157,13 +191,15 @@ use vars '%LINKTYPEMAP'; Mode => 'Target', }, DependedOnBy => { Type => 'DependsOn', Mode => 'Base', }, + MergedInto => { Type => 'MergedInto', + Mode => 'Target', }, ); # }}} # {{{ LINKDIRMAP -# A helper table for relationships mapping to make it easier +# A helper table for links mapping to make it easier # to build and parse links between tickets use vars '%LINKDIRMAP'; @@ -175,11 +211,16 @@ use vars '%LINKDIRMAP'; Target => 'ReferredToBy', }, DependsOn => { Base => 'DependsOn', Target => 'DependedOnBy', }, + MergedInto => { Base => 'MergedInto', + Target => 'MergedInto', }, ); # }}} +sub LINKTYPEMAP { return \%LINKTYPEMAP } +sub LINKDIRMAP { return \%LINKDIRMAP } + # {{{ sub Load =head2 Load @@ -197,6 +238,7 @@ sub Load { #TODO modify this routine to look at EffectiveId and do the recursive load # thing. be careful to cache all the interim tickets we try so we don't loop forever. + #If it's a local URI, turn it into a ticket id if ( $id =~ /^$RT::TicketBaseURI(\d+)$/ ) { $id = $1; @@ -209,21 +251,23 @@ sub Load { #If we have an integer URI, load the ticket if ( $id =~ /^\d+$/ ) { - my $ticketid = $self->LoadById($id); + my ($ticketid,$msg) = $self->LoadById($id); - unless ($ticketid) { - $RT::Logger->debug("$self tried to load a bogus ticket: $id\n"); + unless ($self->Id) { + $RT::Logger->crit("$self tried to load a bogus ticket: $id\n"); return (undef); } } #It's not a URI. It's not a numerical ticket ID. Punt! else { + $RT::Logger->warning("Tried to load a bogus ticket id: '$id'"); return (undef); } #If we're merged, resolve the merge. if ( ( $self->EffectiveId ) and ( $self->EffectiveId != $self->Id ) ) { + $RT::Logger->debug ("We found a merged ticket.". $self->id ."/".$self->EffectiveId); return ( $self->Load( $self->EffectiveId ) ); } @@ -265,12 +309,13 @@ Arguments: ARGS is a hash of named parameters. Valid parameters are: id Queue - Either a Queue object or a Queue Name - Requestor - A reference to a list of RT::User objects, email addresses or RT user Names - Cc - A reference to a list of RT::User objects, email addresses or Names - AdminCc - A reference to a list of RT::User objects, email addresses or Names + Requestor - A reference to a list of email addresses or RT user Names + Cc - A reference to a list of email addresses or Names + AdminCc - A reference to a list of email addresses or Names Type -- The ticket\'s type. ignore this for now Owner -- This ticket\'s owner. either an RT::User object or this user\'s id Subject -- A string describing the subject of the ticket + Priority -- an integer from 0 to 99 InitialPriority -- an integer from 0 to 99 FinalPriority -- an integer from 0 to 99 Status -- any valid status (Defined in RT::Queue) @@ -304,37 +349,37 @@ ok ($t->ResolvedObj->Unix == -1, "It hasn't been resolved - ". $t->ResolvedObj-> sub Create { my $self = shift; - my %args = ( id => undef, - Queue => undef, - Requestor => undef, - Cc => undef, - AdminCc => undef, - Type => 'ticket', - Owner => undef, - Subject => '', - InitialPriority => undef, - FinalPriority => undef, - Status => 'new', - TimeWorked => "0", - TimeLeft => 0, - TimeEstimated => 0, - Due => undef, - Starts => undef, - Started => undef, - Resolved => undef, - MIMEObj => undef, - _RecordTransaction => 1, - - - - @_ ); + my %args = ( + id => undef, + EffectiveId => undef, + Queue => undef, + Requestor => undef, + Cc => undef, + AdminCc => undef, + Type => 'ticket', + Owner => undef, + Subject => '', + InitialPriority => undef, + FinalPriority => undef, + Priority => undef, + Status => 'new', + TimeWorked => "0", + TimeLeft => 0, + TimeEstimated => 0, + Due => undef, + Starts => undef, + Started => undef, + Resolved => undef, + MIMEObj => undef, + _RecordTransaction => 1, + @_ + ); my ( $ErrStr, $Owner, $resolved ); my (@non_fatal_errors); my $QueueObj = RT::Queue->new($RT::SystemUser); - if ( ( defined( $args{'Queue'} ) ) && ( !ref( $args{'Queue'} ) ) ) { $QueueObj->Load( $args{'Queue'} ); } @@ -342,9 +387,8 @@ sub Create { $QueueObj->Load( $args{'Queue'}->Id ); } else { - $RT::Logger->debug( $args{'Queue'} . " not a recognised queue object."); + $RT::Logger->debug( $args{'Queue'} . " not a recognised queue object." ); } -; #Can't create a ticket without a queue. unless ( defined($QueueObj) && $QueueObj->Id ) { @@ -353,30 +397,38 @@ sub Create { } #Now that we have a queue, Check the ACLS - unless ( $self->CurrentUser->HasRight( Right => 'CreateTicket', - Object => $QueueObj ) - ) { - return ( 0, 0, - $self->loc( "No permission to create tickets in the queue '[_1]'", $QueueObj->Name ) ); + unless ( + $self->CurrentUser->HasRight( + Right => 'CreateTicket', + Object => $QueueObj + ) + ) + { + return ( + 0, 0, + $self->loc( "No permission to create tickets in the queue '[_1]'", $QueueObj->Name)); } unless ( $QueueObj->IsValidStatus( $args{'Status'} ) ) { return ( 0, 0, $self->loc('Invalid value for status') ); } - #Since we have a queue, we can set queue defaults #Initial Priority # If there's no queue default initial priority and it's not set, set it to 0 $args{'InitialPriority'} = ( $QueueObj->InitialPriority || 0 ) - unless ( defined $args{'InitialPriority'} ); + unless ( $args{'InitialPriority'} ); - #Final priority + #Final priority # If there's no queue default final priority and it's not set, set it to 0 $args{'FinalPriority'} = ( $QueueObj->FinalPriority || 0 ) - unless ( defined $args{'FinalPriority'} ); + unless ( $args{'FinalPriority'} ); + + # Priority may have changed from InitialPriority, for the case + # where we're importing tickets (eg, from an older RT version.) + my $priority = $args{'Priority'} || $args{'InitialPriority'}; # {{{ Dates #TODO we should see what sort of due date we're getting, rather + @@ -386,32 +438,35 @@ sub Create { my $Due = new RT::Date( $self->CurrentUser ); if ( $args{'Due'} ) { - $Due->Set( Format => 'ISO', Value => $args{'Due'} ); + $Due->Set( Format => 'ISO', Value => $args{'Due'} ); } - elsif ( $QueueObj->DefaultDueIn ) { + elsif ( $QueueObj->DefaultDueIn ) { $Due->SetToNow; $Due->AddDays( $QueueObj->DefaultDueIn ); } my $Starts = new RT::Date( $self->CurrentUser ); if ( defined $args{'Starts'} ) { - $Starts->Set( Format => 'ISO', Value => $args{'Starts'} ); + $Starts->Set( Format => 'ISO', Value => $args{'Starts'} ); } my $Started = new RT::Date( $self->CurrentUser ); if ( defined $args{'Started'} ) { - $Started->Set( Format => 'ISO', Value => $args{'Started'} ); + $Started->Set( Format => 'ISO', Value => $args{'Started'} ); } my $Resolved = new RT::Date( $self->CurrentUser ); if ( defined $args{'Resolved'} ) { - $Resolved->Set( Format => 'ISO', Value => $args{'Resolved'} ); + $Resolved->Set( Format => 'ISO', Value => $args{'Resolved'} ); } - #If the status is an inactive status, set the resolved date - if ($QueueObj->IsInactiveStatus($args{'Status'}) && !$args{'Resolved'}) { - $RT::Logger->debug("Got a ".$args{'Status'} . "ticket with a resolved of ".$args{'Resolved'}); + if ( $QueueObj->IsInactiveStatus( $args{'Status'} ) && !$args{'Resolved'} ) + { + $RT::Logger->debug( "Got a " + . $args{'Status'} + . "ticket with a resolved of " + . $args{'Resolved'} ); $Resolved->SetToNow; } @@ -432,29 +487,44 @@ sub Create { } #If we've been handed something else, try to load the user. - elsif ( defined $args{'Owner'} ) { + elsif ( $args{'Owner'} ) { $Owner = RT::User->new( $self->CurrentUser ); $Owner->Load( $args{'Owner'} ); + push( @non_fatal_errors, + $self->loc("Owner could not be set.") . " " + . $self->loc( "User '[_1]' could not be found.", $args{'Owner'} ) + ) + unless ( $Owner->Id ); } - #If we have a proposed owner and they don't have the right + #If we have a proposed owner and they don't have the right #to own a ticket, scream about it and make them not the owner - if ( ( defined($Owner) ) - and ( $Owner->Id ) - and ( $Owner->Id != $RT::Nobody->Id ) - and ( !$Owner->HasRight( Object => $QueueObj, - Right => 'OwnTicket' ) ) - ) { + if ( + ( defined($Owner) ) + and ( $Owner->Id ) + and ( $Owner->Id != $RT::Nobody->Id ) + and ( + !$Owner->HasRight( + Object => $QueueObj, + Right => 'OwnTicket' + ) + ) + ) + { $RT::Logger->warning( "User " - . $Owner->Name . "(" - . $Owner->id - . ") was proposed " - . "as a ticket owner but has no rights to own " - . "tickets in ".$QueueObj->Name ); + . $Owner->Name . "(" + . $Owner->id + . ") was proposed " + . "as a ticket owner but has no rights to own " + . "tickets in " + . $QueueObj->Name ); - push @non_fatal_errors, $self->loc("Invalid owner. Defaulting to 'nobody'."); + push @non_fatal_errors, + $self->loc( "Owner '[_1]' does not have rights to own this ticket.", + $Owner->Name + ); $Owner = undef; } @@ -467,106 +537,133 @@ sub Create { # }}} - # We attempt to load or create each of the people who might have a role for this ticket - # _outside_ the transaction, so we don't get into ticket creation races +# We attempt to load or create each of the people who might have a role for this ticket +# _outside_ the transaction, so we don't get into ticket creation races foreach my $type ( "Cc", "AdminCc", "Requestor" ) { - next unless (defined $args{$type}); - foreach my $watcher ( ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) { - my $user = RT::User->new($RT::SystemUser); - $user->LoadOrCreateByEmail($watcher) if ($watcher !~ /^\d+$/); + next unless ( defined $args{$type} ); + foreach my $watcher ( + ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) + { + my $user = RT::User->new($RT::SystemUser); + $user->LoadOrCreateByEmail($watcher) + if ( $watcher && $watcher !~ /^\d+$/ ); } } - $RT::Handle->BeginTransaction(); - my %params =( Queue => $QueueObj->Id, - Owner => $Owner->Id, - Subject => $args{'Subject'}, - InitialPriority => $args{'InitialPriority'}, - FinalPriority => $args{'FinalPriority'}, - Priority => $args{'InitialPriority'}, - Status => $args{'Status'}, - TimeWorked => $args{'TimeWorked'}, - TimeEstimated => $args{'TimeEstimated'}, - TimeLeft => $args{'TimeLeft'}, - Type => $args{'Type'}, - Starts => $Starts->ISO, - Started => $Started->ISO, - Resolved => $Resolved->ISO, - Due => $Due->ISO ); - - # Parameters passed in during an import that we probably don't want to touch, otherwise + my %params = ( + Queue => $QueueObj->Id, + Owner => $Owner->Id, + Subject => $args{'Subject'}, + InitialPriority => $args{'InitialPriority'}, + FinalPriority => $args{'FinalPriority'}, + Priority => $priority, + Status => $args{'Status'}, + TimeWorked => $args{'TimeWorked'}, + TimeEstimated => $args{'TimeEstimated'}, + TimeLeft => $args{'TimeLeft'}, + Type => $args{'Type'}, + Starts => $Starts->ISO, + Started => $Started->ISO, + Resolved => $Resolved->ISO, + Due => $Due->ISO + ); + +# Parameters passed in during an import that we probably don't want to touch, otherwise foreach my $attr qw(id Creator Created LastUpdated LastUpdatedBy) { - $params{$attr} = $args{$attr} if ($args{$attr}); + $params{$attr} = $args{$attr} if ( $args{$attr} ); } # Delete null integer parameters - foreach my $attr qw(TimeWorked TimeLeft TimeEstimated InitialPriority FinalPriority) { - delete $params{$attr} unless (exists $params{$attr} && $params{$attr}); + foreach my $attr + qw(TimeWorked TimeLeft TimeEstimated InitialPriority FinalPriority) { + delete $params{$attr} + unless ( exists $params{$attr} && $params{$attr} ); } - - my $id = $self->SUPER::Create( %params); + # Delete the time worked if we're counting it in the transaction + delete $params{TimeWorked} if $args{'_RecordTransaction'}; + + my ($id,$ticket_message) = $self->SUPER::Create( %params); unless ($id) { - $RT::Logger->crit( "Couldn't create a ticket"); + $RT::Logger->crit( "Couldn't create a ticket: " . $ticket_message ); $RT::Handle->Rollback(); - return ( 0, 0, $self->loc( "Ticket could not be created due to an internal error") ); + return ( 0, 0, + $self->loc("Ticket could not be created due to an internal error") + ); } #Set the ticket's effective ID now that we've created it. - my ( $val, $msg ) = $self->__Set( Field => 'EffectiveId', Value => $id ); + my ( $val, $msg ) = $self->__Set( + Field => 'EffectiveId', + Value => ( $args{'EffectiveId'} || $id ) + ); unless ($val) { $RT::Logger->crit("$self ->Create couldn't set EffectiveId: $msg\n"); $RT::Handle->Rollback(); - return ( 0, 0, $self->loc( "Ticket could not be created due to an internal error") ); + return ( 0, 0, + $self->loc("Ticket could not be created due to an internal error") + ); } my $create_groups_ret = $self->_CreateTicketGroups(); unless ($create_groups_ret) { $RT::Logger->crit( "Couldn't create ticket groups for ticket " - . $self->Id - . ". aborting Ticket creation." ); + . $self->Id + . ". aborting Ticket creation." ); $RT::Handle->Rollback(); return ( 0, 0, - $self->loc( "Ticket could not be created due to an internal error") ); + $self->loc("Ticket could not be created due to an internal error") + ); } - # Set the owner in the Groups table - # We denormalize it into the Ticket table too because doing otherwise would - # kill performance, bigtime. It gets kept in lockstep thanks to the magic of transactionalization +# Set the owner in the Groups table +# We denormalize it into the Ticket table too because doing otherwise would +# kill performance, bigtime. It gets kept in lockstep thanks to the magic of transactionalization - $self->OwnerGroup->_AddMember( PrincipalId => $Owner->PrincipalId , InsideTransaction => 1); + $self->OwnerGroup->_AddMember( + PrincipalId => $Owner->PrincipalId, + InsideTransaction => 1 + ); # {{{ Deal with setting up watchers - foreach my $type ( "Cc", "AdminCc", "Requestor" ) { - next unless (defined $args{$type}); - foreach my $watcher ( ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) { + next unless ( defined $args{$type} ); + foreach my $watcher ( + ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) + { + + # If there is an empty entry in the list, let's get out of here. + next unless $watcher; - # we reason that all-digits number must be a principal id, not email - # this is the only way to can add - my $field = 'Email'; - $field = 'PrincipalId' if $watcher =~ /^\d+$/; + # we reason that all-digits number must be a principal id, not email + # this is the only way to can add + my $field = 'Email'; + $field = 'PrincipalId' if $watcher =~ /^\d+$/; - my ( $wval, $wmsg ); + my ( $wval, $wmsg ); if ( $type eq 'AdminCc' ) { - # Note that we're using AddWatcher, rather than _AddWatcher, as we - # actually _want_ that ACL check. Otherwise, random ticket creators - # could make themselves adminccs and maybe get ticket rights. that would - # be poor - ( $wval, $wmsg ) = $self->AddWatcher( Type => $type, - $field => $watcher, - Silent => 1 ); + # Note that we're using AddWatcher, rather than _AddWatcher, as we + # actually _want_ that ACL check. Otherwise, random ticket creators + # could make themselves adminccs and maybe get ticket rights. that would + # be poor + ( $wval, $wmsg ) = $self->AddWatcher( + Type => $type, + $field => $watcher, + Silent => 1 + ); } else { - ( $wval, $wmsg ) = $self->_AddWatcher( Type => $type, - $field => $watcher, - Silent => 1 ); + ( $wval, $wmsg ) = $self->_AddWatcher( + Type => $type, + $field => $watcher, + Silent => 1 + ); } push @non_fatal_errors, $wmsg unless ($wval); @@ -576,13 +673,12 @@ sub Create { # }}} # {{{ Deal with setting up links - foreach my $type ( keys %LINKTYPEMAP ) { - next unless (defined $args{$type}); + next unless ( defined $args{$type} ); foreach my $link ( ref( $args{$type} ) ? @{ $args{$type} } : ( $args{$type} ) ) { - my ( $wval, $wmsg ) = $self->AddLink( + my ( $wval, $wmsg ) = $self->_AddLink( Type => $LINKTYPEMAP{$type}->{'Type'}, $LINKTYPEMAP{$type}->{'Mode'} => $link, Silent => 1 @@ -594,47 +690,58 @@ sub Create { # }}} - # {{{ Add all the custom fields + # {{{ Add all the custom fields foreach my $arg ( keys %args ) { - next unless ( $arg =~ /^CustomField-(\d+)$/i ); - my $cfid = $1; - foreach - my $value ( ref( $args{$arg} ) ? @{ $args{$arg} } : ( $args{$arg} ) ) { - next unless ($value); - $self->_AddCustomFieldValue( Field => $cfid, - Value => $value, - RecordTransaction => 0 - ); - } + next unless ( $arg =~ /^CustomField-(\d+)$/i ); + my $cfid = $1; + foreach + my $value ( UNIVERSAL::isa( $args{$arg} => 'ARRAY' ) ? @{ $args{$arg} } : ( $args{$arg} ) ) + { + next unless ( length($value) ); + + # Allow passing in uploaded LargeContent etc by hash reference + $self->_AddCustomFieldValue( + (UNIVERSAL::isa( $value => 'HASH' ) + ? %$value + : (Value => $value) + ), + Field => $cfid, + RecordTransaction => 0, + ); + } } + # }}} if ( $args{'_RecordTransaction'} ) { + # {{{ Add a transaction for the create my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( Type => "Create", - TimeTaken => 0, + TimeTaken => $args{'TimeWorked'}, MIMEObj => $args{'MIMEObj'} ); - if ( $self->Id && $Trans ) { - $ErrStr = $self->loc( "Ticket [_1] created in queue '[_2]'", $self->Id, $QueueObj->Name ); - $ErrStr = join ( "\n", $ErrStr, @non_fatal_errors ); - $RT::Logger->info("Ticket ".$self->Id. " created in queue '".$QueueObj->Name."' by ".$self->CurrentUser->Name); + $TransObj->UpdateCustomFields(ARGSRef => \%args); + + $RT::Logger->info( "Ticket " . $self->Id . " created in queue '" . $QueueObj->Name . "' by " . $self->CurrentUser->Name ); + $ErrStr = $self->loc( "Ticket [_1] created in queue '[_2]'", $self->Id, $QueueObj->Name ); + $ErrStr = join( "\n", $ErrStr, @non_fatal_errors ); } else { $RT::Handle->Rollback(); - # TODO where does this get errstr from? + $ErrStr = join( "\n", $ErrStr, @non_fatal_errors ); $RT::Logger->error("Ticket couldn't be created: $ErrStr"); return ( 0, 0, $self->loc( "Ticket could not be created due to an internal error")); } $RT::Handle->Commit(); return ( $self->Id, $TransObj->Id, $ErrStr ); + # }}} } else { @@ -642,7 +749,7 @@ sub Create { # Not going to record a transaction $RT::Handle->Commit(); $ErrStr = $self->loc( "Ticket [_1] created in queue '[_2]'", $self->Id, $QueueObj->Name ); - $ErrStr = join ( "\n", $ErrStr, @non_fatal_errors ); + $ErrStr = join( "\n", $ErrStr, @non_fatal_errors ); return ( $self->Id, $0, $ErrStr ); } @@ -651,170 +758,6 @@ sub Create { # }}} -# {{{ sub CreateFromEmailMessage - - -=head2 CreateFromEmailMessage { Message, Queue, ExtractActorFromHeaders } - -This code replaces what was once a large part of the email gateway. -It takes an email message as a parameter, parses out the sender, subject -and a MIME object. It then creates a ticket based on those attributes - -=cut - -sub CreateFromEmailMessage { - my $self = shift; - my %args = ( Message => undef, - Queue => undef, - ExtractActorFromSender => undef, - @_ ); - - - # Pull out requestor - - # Pull out Cc? - - # - - -} - -# }}} - - -# {{{ CreateFrom822 - -=head2 FORMAT - -CreateTickets uses the template as a template for an ordered set of tickets -to create. The basic format is as follows: - - - ===Create-Ticket: identifier - Param: Value - Param2: Value - Param3: Value - Content: Blah - blah - blah - ENDOFCONTENT -=head2 Acceptable fields - -A complete list of acceptable fields for this beastie: - - - * Queue => Name or id# of a queue - Subject => A text string - Status => A valid status. defaults to 'new' - - Due => Dates can be specified in seconds since the epoch - to be handled literally or in a semi-free textual - format which RT will attempt to parse. - Starts => - Started => - Resolved => - Owner => Username or id of an RT user who can and should own - this ticket - + Requestor => Email address - + Cc => Email address - + AdminCc => Email address - TimeWorked => - TimeEstimated => - TimeLeft => - InitialPriority => - FinalPriority => - Type => - + DependsOn => - + DependedOnBy => - + RefersTo => - + ReferredToBy => - + Members => - + MemberOf => - Content => content. Can extend to multiple lines. Everything - within a template after a Content: header is treated - as content until we hit a line containing only - ENDOFCONTENT - ContentType => the content-type of the Content field - CustomField-<id#> => custom field value - -Fields marked with an * are required. - -Fields marked with a + man have multiple values, simply -by repeating the fieldname on a new line with an additional value. - - -When parsed, field names are converted to lowercase and have -s stripped. -Refers-To, RefersTo, refersto, refers-to and r-e-f-er-s-tO will all -be treated as the same thing. - - -=begin testing - -use_ok(RT::Ticket); - -=end testing - - -=cut - -sub CreateFrom822 { - my $self = shift; - my $content = shift; - - - - my %args = $self->_Parse822HeadersForAttributes($content); - - # Now we have a %args to work with. - # Make sure we have at least the minimum set of - # reasonable data and do our thang - my $ticket = RT::Ticket->new($RT::SystemUser); - - my %ticketargs = ( - Queue => $args{'queue'}, - Subject => $args{'subject'}, - Status => $args{'status'}, - Due => $args{'due'}, - Starts => $args{'starts'}, - Started => $args{'started'}, - Resolved => $args{'resolved'}, - Owner => $args{'owner'}, - Requestor => $args{'requestor'}, - Cc => $args{'cc'}, - AdminCc => $args{'admincc'}, - TimeWorked => $args{'timeworked'}, - TimeEstimated => $args{'timeestimated'}, - TimeLeft => $args{'timeleft'}, - InitialPriority => $args{'initialpriority'}, - FinalPriority => $args{'finalpriority'}, - Type => $args{'type'}, - DependsOn => $args{'dependson'}, - DependedOnBy => $args{'dependedonby'}, - RefersTo => $args{'refersto'}, - ReferredToBy => $args{'referredtoby'}, - Members => $args{'members'}, - MemberOf => $args{'memberof'}, - MIMEObj => $args{'mimeobj'} - ); - - # Add custom field entries to %ticketargs. - # TODO: allow named custom fields - map { - /^customfield-(\d+)$/ - && ( $ticketargs{ "CustomField-" . $1 } = $args{$_} ); - } keys(%args); - - my ( $id, $transid, $msg ) = $ticket->Create(%ticketargs); - unless ($id) { - $RT::Logger->error( "Couldn't create a related ticket for " - . $self->TicketObj->Id . " " - . $msg ); - } - - return (1); -} - -# }}} # {{{ UpdateFrom822 @@ -832,8 +775,8 @@ AddRequestor: jesse\@example.com EOF my $ticket = RT::Ticket->new($RT::SystemUser); -$ticket->Create(Subject => 'first', Queue => 'general'); -ok($ticket->Id, "Created the test ticket"); +my ($id,$msg) =$ticket->Create(Subject => 'first', Queue => 'general'); +ok($ticket->Id, "Created the test ticket - ".$id ." - ".$msg); $ticket->UpdateFrom822($simple_update); is($ticket->Subject, 'target', "changed the subject"); my $jesse = RT::User->new($RT::SystemUser); @@ -930,7 +873,6 @@ sub UpdateFrom822 { $ticketargs{'Queue'} = $tempqueue->Id() if ( $tempqueue->id ); } - # die "updaterecordobject is a webui thingy"; my @results; foreach my $attribute (@attribs) { @@ -970,7 +912,7 @@ sub UpdateFrom822 { # If we've been given a number of delresses to del, do it. foreach my $address (@{$ticketargs{'Del'.$type}}) { - my ($id, $msg) = $self->DelWatcher( Type => $type, Email => $address); + my ($id, $msg) = $self->DeleteWatcher( Type => $type, Email => $address); push (@results, $msg) ; } @@ -1222,16 +1164,24 @@ sub Import { } } + my $create_groups_ret = $self->_CreateTicketGroups(); + unless ($create_groups_ret) { + $RT::Logger->crit( + "Couldn't create ticket groups for ticket " . $self->Id ); + } + + $self->OwnerGroup->_AddMember( PrincipalId => $Owner->PrincipalId ); + my $watcher; foreach $watcher ( @{ $args{'Cc'} } ) { - $self->_AddWatcher( Type => 'Cc', Person => $watcher, Silent => 1 ); + $self->_AddWatcher( Type => 'Cc', Email => $watcher, Silent => 1 ); } foreach $watcher ( @{ $args{'AdminCc'} } ) { - $self->_AddWatcher( Type => 'AdminCc', Person => $watcher, + $self->_AddWatcher( Type => 'AdminCc', Email => $watcher, Silent => 1 ); } foreach $watcher ( @{ $args{'Requestor'} } ) { - $self->_AddWatcher( Type => 'Requestor', Person => $watcher, + $self->_AddWatcher( Type => 'Requestor', Email => $watcher, Silent => 1 ); } @@ -1240,14 +1190,13 @@ sub Import { # }}} - # {{{ Routines dealing with watchers. # {{{ _CreateTicketGroups =head2 _CreateTicketGroups -Create the ticket groups and relationships for this ticket. +Create the ticket groups and links for this ticket. This routine expects to be called from Ticket->Create _inside of a transaction_ It will create four groups for this ticket: Requestor, Cc, AdminCc and Owner. @@ -1388,7 +1337,7 @@ sub AddWatcher { } } else { - $RT::Logger->warn( "$self -> AddWatcher got passed a bogus type"); + $RT::Logger->warning( "$self -> AddWatcher got passed a bogus type"); return ( 0, $self->loc('Error in parameters to Ticket->AddWatcher') ); } } @@ -1424,6 +1373,10 @@ sub _AddWatcher { if ($args{'Email'}) { my $user = RT::User->new($RT::SystemUser); my ($pid, $msg) = $user->LoadOrCreateByEmail($args{'Email'}); + # If we can't load the user by email address, let's try to load by username + unless ($pid) { + ($pid,$msg) = $user->Load($args{'Email'}) + } if ($pid) { $args{'PrincipalId'} = $pid; } @@ -1496,61 +1449,66 @@ Email (the email address of an existing wathcer) sub DeleteWatcher { my $self = shift; - my %args = ( Type => undef, + my %args = ( Type => undef, PrincipalId => undef, - Email => undef, + Email => undef, @_ ); - unless ($args{'PrincipalId'} || $args{'Email'} ) { - return(0, $self->loc("No principal specified")); + unless ( $args{'PrincipalId'} || $args{'Email'} ) { + return ( 0, $self->loc("No principal specified") ); } - my $principal = RT::Principal->new($self->CurrentUser); - if ($args{'PrincipalId'} ) { + my $principal = RT::Principal->new( $self->CurrentUser ); + if ( $args{'PrincipalId'} ) { - $principal->Load($args{'PrincipalId'}); - } else { - my $user = RT::User->new($self->CurrentUser); - $user->LoadByEmail($args{'Email'}); - $principal->Load($user->Id); + $principal->Load( $args{'PrincipalId'} ); } + else { + my $user = RT::User->new( $self->CurrentUser ); + $user->LoadByEmail( $args{'Email'} ); + $principal->Load( $user->Id ); + } + # If we can't find this watcher, we need to bail. - unless ($principal->Id) { - return(0, $self->loc("Could not find that principal")); + unless ( $principal->Id ) { + return ( 0, $self->loc("Could not find that principal") ); } - my $group = RT::Group->new($self->CurrentUser); - $group->LoadTicketRoleGroup(Type => $args{'Type'}, Ticket => $self->Id); - unless ($group->id) { - return(0,$self->loc("Group not found")); + my $group = RT::Group->new( $self->CurrentUser ); + $group->LoadTicketRoleGroup( Type => $args{'Type'}, Ticket => $self->Id ); + unless ( $group->id ) { + return ( 0, $self->loc("Group not found") ); } # {{{ Check ACLS #If the watcher we're trying to add is for the current user - if ( $self->CurrentUser->PrincipalId eq $args{'PrincipalId'}) { - # If it's an AdminCc and they don't have + if ( $self->CurrentUser->PrincipalId eq $args{'PrincipalId'} ) { + + # If it's an AdminCc and they don't have # 'WatchAsAdminCc' or 'ModifyTicket', bail if ( $args{'Type'} eq 'AdminCc' ) { - unless ( $self->CurrentUserHasRight('ModifyTicket') - or $self->CurrentUserHasRight('WatchAsAdminCc') ) { - return ( 0, $self->loc('Permission Denied')) + unless ( $self->CurrentUserHasRight('ModifyTicket') + or $self->CurrentUserHasRight('WatchAsAdminCc') ) { + return ( 0, $self->loc('Permission Denied') ); } } # If it's a Requestor or Cc and they don't have # 'Watch' or 'ModifyTicket', bail - elsif ( ( $args{'Type'} eq 'Cc' ) or ( $args{'Type'} eq 'Requestor' ) ) { - unless ( $self->CurrentUserHasRight('ModifyTicket') - or $self->CurrentUserHasRight('Watch') ) { - return ( 0, $self->loc('Permission Denied')) + elsif ( ( $args{'Type'} eq 'Cc' ) or ( $args{'Type'} eq 'Requestor' ) ) + { + unless ( $self->CurrentUserHasRight('ModifyTicket') + or $self->CurrentUserHasRight('Watch') ) { + return ( 0, $self->loc('Permission Denied') ); } } else { - $RT::Logger->warn( "$self -> DeleteWatcher got passed a bogus type"); - return ( 0, $self->loc('Error in parameters to Ticket->DelWatcher') ); + $RT::Logger->warn("$self -> DeleteWatcher got passed a bogus type"); + return ( 0, + $self->loc('Error in parameters to Ticket->DeleteWatcher') ); } } - # If the watcher isn't the current user + # If the watcher isn't the current user # and the current user doesn't have 'ModifyTicket' bail else { unless ( $self->CurrentUserHasRight('ModifyTicket') ) { @@ -1560,39 +1518,125 @@ sub DeleteWatcher { # }}} - # see if this user is already a watcher. - unless ( $group->HasMember($principal)) { - return ( 0, - $self->loc('That principal is not a [_1] for this ticket', $args{'Type'}) ); + unless ( $group->HasMember($principal) ) { + return ( 0, + $self->loc( 'That principal is not a [_1] for this ticket', + $args{'Type'} ) ); } - my ($m_id, $m_msg) = $group->_DeleteMember($principal->Id); + my ( $m_id, $m_msg ) = $group->_DeleteMember( $principal->Id ); unless ($m_id) { - $RT::Logger->error("Failed to delete ".$principal->Id. - " as a member of group ".$group->Id."\n".$m_msg); + $RT::Logger->error( "Failed to delete " + . $principal->Id + . " as a member of group " + . $group->Id . "\n" + . $m_msg ); - return ( 0, $self->loc('Could not remove that principal as a [_1] for this ticket', $args{'Type'}) ); + return (0, + $self->loc( + 'Could not remove that principal as a [_1] for this ticket', + $args{'Type'} ) ); } unless ( $args{'Silent'} ) { - $self->_NewTransaction( - Type => 'DelWatcher', - OldValue => $principal->Id, - Field => $args{'Type'} - ); + $self->_NewTransaction( Type => 'DelWatcher', + OldValue => $principal->Id, + Field => $args{'Type'} ); } - return ( 1, $self->loc("[_1] is no longer a [_2] for this ticket.", $principal->Object->Name, $args{'Type'} )); + return ( 1, + $self->loc( "[_1] is no longer a [_2] for this ticket.", + $principal->Object->Name, + $args{'Type'} ) ); } - # }}} +=head2 SquelchMailTo [EMAIL] + +Takes an optional email address to never email about updates to this ticket. + + +Returns an array of the RT::Attribute objects for this ticket's 'SquelchMailTo' attributes. + +=begin testing + +my $t = RT::Ticket->new($RT::SystemUser); +ok($t->Create(Queue => 'general', Subject => 'SquelchTest')); + +is($#{$t->SquelchMailTo}, -1, "The ticket has no squelched recipients"); + +my @returned = $t->SquelchMailTo('nobody@example.com'); + +is($#returned, 0, "The ticket has one squelched recipients"); + +my @names = $t->Attributes->Names; +is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo"); +@returned = $t->SquelchMailTo('nobody@example.com'); + + +is($#returned, 0, "The ticket has one squelched recipients"); + +@names = $t->Attributes->Names; +is(shift @names, 'SquelchMailTo', "The attribute we have is SquelchMailTo"); + + +my ($ret, $msg) = $t->UnsquelchMailTo('nobody@example.com'); +ok($ret, "Removed nobody as a squelched recipient - ".$msg); +@returned = $t->SquelchMailTo(); +is($#returned, -1, "The ticket has no squelched recipients". join(',',@returned)); + + +=end testing + +=cut + +sub SquelchMailTo { + my $self = shift; + if (@_) { + unless ( $self->CurrentUserHasRight('ModifyTicket') ) { + return undef; + } + my $attr = shift; + $self->AddAttribute( Name => 'SquelchMailTo', Content => $attr ) + unless grep { $_->Content eq $attr } + $self->Attributes->Named('SquelchMailTo'); + + } + unless ( $self->CurrentUserHasRight('ShowTicket') ) { + return undef; + } + my @attributes = $self->Attributes->Named('SquelchMailTo'); + return (@attributes); +} + + +=head2 UnsquelchMailTo ADDRESS + +Takes an address and removes it from this ticket's "SquelchMailTo" list. If an address appears multiple times, each instance is removed. + +Returns a tuple of (status, message) + +=cut + +sub UnsquelchMailTo { + my $self = shift; + + my $address = shift; + unless ( $self->CurrentUserHasRight('ModifyTicket') ) { + return ( 0, $self->loc("Permission Denied") ); + } + + my ($val, $msg) = $self->Attributes->DeleteEntry ( Name => 'SquelchMailTo', Content => $address); + return ($val, $msg); +} + + # {{{ a set of [foo]AsString subs that will return the various sorts of watchers for a ticket/queue as a comma delineated string =head2 RequestorAddresses @@ -1736,6 +1780,8 @@ PrincipalId is an RT::Principal id, and Email is an email address. Returns true if the specified principal (or the one corresponding to the specified address) is a member of the group Type for this ticket. +XX TODO: This should be Memoized. + =cut sub IsWatcher { @@ -2188,11 +2234,16 @@ Takes a hashref with the following attributes: If MIMEObj is undefined, Content will be used to build a MIME::Entity for this commentl -MIMEObj, TimeTaken, CcMessageTo, BccMessageTo, Content. +MIMEObj, TimeTaken, CcMessageTo, BccMessageTo, Content, DryRun + +If DryRun is defined, this update WILL NOT BE RECORDED. Scrips will not be committed. +They will, however, be prepared and you'll be able to access them through the TransactionObj + +Returns: Transaction id, Error Message, Transaction Object +(note the different order from Create()!) =cut -## Please see file perltidy.ERR sub Comment { my $self = shift; @@ -2201,49 +2252,27 @@ sub Comment { MIMEObj => undef, Content => undef, TimeTaken => 0, + DryRun => 0, @_ ); unless ( ( $self->CurrentUserHasRight('CommentOnTicket') ) or ( $self->CurrentUserHasRight('ModifyTicket') ) ) { - return ( 0, $self->loc("Permission Denied") ); + return ( 0, $self->loc("Permission Denied"), undef ); } + $args{'NoteType'} = 'Comment'; - unless ( $args{'MIMEObj'} ) { - if ( $args{'Content'} ) { - use MIME::Entity; - $args{'MIMEObj'} = MIME::Entity->build( - Data => ( ref $args{'Content'} ? $args{'Content'} : [ $args{'Content'} ] ) - ); - } - else { - - return ( 0, $self->loc("No correspondence attached") ); - } + if ($args{'DryRun'}) { + $RT::Handle->BeginTransaction(); + $args{'CommitScrips'} = 0; } - RT::I18N::SetMIMEEntityToUTF8($args{'MIMEObj'}); # convert text parts into utf-8 - - # If we've been passed in CcMessageTo and BccMessageTo fields, - # add them to the mime object for passing on to the transaction handler - # The "NotifyOtherRecipients" scripAction will look for RT--Send-Cc: and - # RT-Send-Bcc: headers - - $args{'MIMEObj'}->head->add( 'RT-Send-Cc', $args{'CcMessageTo'} ) - if defined $args{'CcMessageTo'}; - $args{'MIMEObj'}->head->add( 'RT-Send-Bcc', $args{'BccMessageTo'} ) - if defined $args{'BccMessageTo'}; - - #Record the correspondence (write the transaction) - my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( - Type => 'Comment', - Data => ( $args{'MIMEObj'}->head->get('subject') || 'No Subject' ), - TimeTaken => $args{'TimeTaken'}, - MIMEObj => $args{'MIMEObj'} - ); + my @results = $self->_RecordNote(%args); + if ($args{'DryRun'}) { + $RT::Handle->Rollback(); + } - return ( $Trans, $self->loc("The comment has been recorded") ); + return(@results); } - # }}} # {{{ sub Correspond @@ -2254,10 +2283,16 @@ Correspond on this ticket. Takes a hashref with the following attributes: -MIMEObj, TimeTaken, CcMessageTo, BccMessageTo, Content +MIMEObj, TimeTaken, CcMessageTo, BccMessageTo, Content, DryRun if there's no MIMEObj, Content is used to build a MIME::Entity object +If DryRun is defined, this update WILL NOT BE RECORDED. Scrips will not be committed. +They will, however, be prepared and you'll be able to access them through the TransactionObj + +Returns: Transaction id, Error Message, Transaction Object +(note the different order from Create()!) + =cut @@ -2272,305 +2307,120 @@ sub Correspond { unless ( ( $self->CurrentUserHasRight('ReplyToTicket') ) or ( $self->CurrentUserHasRight('ModifyTicket') ) ) { - return ( 0, $self->loc("Permission Denied") ); + return ( 0, $self->loc("Permission Denied"), undef ); } - unless ( $args{'MIMEObj'} ) { - if ( $args{'Content'} ) { - use MIME::Entity; - $args{'MIMEObj'} = MIME::Entity->build( - Data => ( ref $args{'Content'} ? $args{'Content'} : [ $args{'Content'} ] ) - ); - - } - else { - - return ( 0, $self->loc("No correspondence attached") ); - } + $args{'NoteType'} = 'Correspond'; + if ($args{'DryRun'}) { + $RT::Handle->BeginTransaction(); + $args{'CommitScrips'} = 0; } - RT::I18N::SetMIMEEntityToUTF8($args{'MIMEObj'}); # convert text parts into utf-8 - - # If we've been passed in CcMessageTo and BccMessageTo fields, - # add them to the mime object for passing on to the transaction handler - # The "NotifyOtherRecipients" scripAction will look for RT-Send-Cc: and RT-Send-Bcc: - # headers - - $args{'MIMEObj'}->head->add( 'RT-Send-Cc', $args{'CcMessageTo'} ) - if defined $args{'CcMessageTo'}; - $args{'MIMEObj'}->head->add( 'RT-Send-Bcc', $args{'BccMessageTo'} ) - if defined $args{'BccMessageTo'}; - - #Record the correspondence (write the transaction) - my ( $Trans, $msg, $TransObj ) = $self->_NewTransaction( - Type => 'Correspond', - Data => ( $args{'MIMEObj'}->head->get('subject') || 'No Subject' ), - TimeTaken => $args{'TimeTaken'}, - MIMEObj => $args{'MIMEObj'} ); - - unless ($Trans) { - $RT::Logger->err( "$self couldn't init a transaction $msg"); - return ( $Trans, $self->loc("correspondence (probably) not sent"), $args{'MIMEObj'} ); - } + my @results = $self->_RecordNote(%args); #Set the last told date to now if this isn't mail from the requestor. #TODO: Note that this will wrongly ack mail from any non-requestor as a "told" + $self->_SetTold unless ( $self->IsRequestor($self->CurrentUser->id)); - unless ( $TransObj->IsInbound ) { - $self->_SetTold; + if ($args{'DryRun'}) { + $RT::Handle->Rollback(); } - return ( $Trans, $self->loc("correspondence sent") ); -} - -# }}} - -# }}} - -# {{{ Routines dealing with Links and Relations between tickets - -# {{{ Link Collections + return (@results); -# {{{ sub Members - -=head2 Members - - This returns an RT::Links object which references all the tickets -which are 'MembersOf' this ticket - -=cut - -sub Members { - my $self = shift; - return ( $self->_Links( 'Target', 'MemberOf' ) ); } # }}} -# {{{ sub MemberOf - -=head2 MemberOf - - This returns an RT::Links object which references all the tickets that this -ticket is a 'MemberOf' - -=cut - -sub MemberOf { - my $self = shift; - return ( $self->_Links( 'Base', 'MemberOf' ) ); -} - -# }}} - -# {{{ RefersTo - -=head2 RefersTo - - This returns an RT::Links object which shows all references for which this ticket is a base - -=cut - -sub RefersTo { - my $self = shift; - return ( $self->_Links( 'Base', 'RefersTo' ) ); -} - -# }}} - -# {{{ ReferredToBy - -=head2 ReferredToBy - - This returns an RT::Links object which shows all references for which this ticket is a target - -=cut - -sub ReferredToBy { - my $self = shift; - return ( $self->_Links( 'Target', 'RefersTo' ) ); -} - -# }}} +# {{{ sub _RecordNote -# {{{ DependedOnBy +=head2 _RecordNote -=head2 DependedOnBy +the meat of both comment and correspond. - This returns an RT::Links object which references all the tickets that depend on this one +Performs no access control checks. hence, dangerous. =cut -sub DependedOnBy { - my $self = shift; - return ( $self->_Links( 'Target', 'DependsOn' ) ); -} - -# }}} - - +sub _RecordNote { -=head2 HasUnresolvedDependencies - - Takes a paramhash of Type (default to '__any'). Returns true if -$self->UnresolvedDependencies returns an object with one or more members -of that type. Returns false otherwise - - -=begin testing - -my $t1 = RT::Ticket->new($RT::SystemUser); -my ($id, $trans, $msg) = $t1->Create(Subject => 'DepTest1', Queue => 'general'); -ok($id, "Created dep test 1 - $msg"); - -my $t2 = RT::Ticket->new($RT::SystemUser); -my ($id2, $trans, $msg2) = $t2->Create(Subject => 'DepTest2', Queue => 'general'); -ok($id2, "Created dep test 2 - $msg2"); -my $t3 = RT::Ticket->new($RT::SystemUser); -my ($id3, $trans, $msg3) = $t3->Create(Subject => 'DepTest3', Queue => 'general', Type => 'approval'); -ok($id3, "Created dep test 3 - $msg3"); - -ok ($t1->AddLink( Type => 'DependsOn', Target => $t2->id)); -ok ($t1->AddLink( Type => 'DependsOn', Target => $t3->id)); - -ok ($t1->HasUnresolvedDependencies, "Ticket ".$t1->Id." has unresolved deps"); -ok (!$t1->HasUnresolvedDependencies( Type => 'blah' ), "Ticket ".$t1->Id." has no unresolved blahs"); -ok ($t1->HasUnresolvedDependencies( Type => 'approval' ), "Ticket ".$t1->Id." has unresolved approvals"); -ok (!$t2->HasUnresolvedDependencies, "Ticket ".$t2->Id." has no unresolved deps"); -my ($rid, $rmsg)= $t1->Resolve(); -ok(!$rid, $rmsg); -ok($t2->Resolve); -($rid, $rmsg)= $t1->Resolve(); -ok(!$rid, $rmsg); -ok($t3->Resolve); -($rid, $rmsg)= $t1->Resolve(); -ok($rid, $rmsg); - - -=end testing - -=cut - -sub HasUnresolvedDependencies { my $self = shift; - my %args = ( - Type => undef, - @_ - ); - - my $deps = $self->UnresolvedDependencies; - - if ($args{Type}) { - $deps->Limit( FIELD => 'Type', - OPERATOR => '=', - VALUE => $args{Type}); - } - else { - $deps->IgnoreType; - } + my %args = ( CcMessageTo => undef, + BccMessageTo => undef, + MIMEObj => undef, + Content => undef, + TimeTaken => 0, + CommitScrips => 1, + @_ ); - if ($deps->Count > 0) { - return 1; + unless ( $args{'MIMEObj'} || $args{'Content'} ) { + return ( 0, $self->loc("No message attached"), undef ); } - else { - return (undef); - } -} - - -# {{{ UnresolvedDependencies - -=head2 UnresolvedDependencies - -Returns an RT::Tickets object of tickets which this ticket depends on -and which have a status of new, open or stalled. (That list comes from -RT::Queue->ActiveStatusArray - -=cut - - -sub UnresolvedDependencies { - my $self = shift; - my $deps = RT::Tickets->new($self->CurrentUser); + unless ( $args{'MIMEObj'} ) { + $args{'MIMEObj'} = MIME::Entity->build( Data => ( + ref $args{'Content'} + ? $args{'Content'} + : [ $args{'Content'} ] + ) ); + } - my @live_statuses = RT::Queue->ActiveStatusArray(); - foreach my $status (@live_statuses) { - $deps->LimitStatus(VALUE => $status); + # convert text parts into utf-8 + RT::I18N::SetMIMEEntityToUTF8( $args{'MIMEObj'} ); + +# If we've been passed in CcMessageTo and BccMessageTo fields, +# add them to the mime object for passing on to the transaction handler +# The "NotifyOtherRecipients" scripAction will look for RT-Send-Cc: and RT-Send-Bcc: +# headers + + $args{'MIMEObj'}->head->add( 'RT-Send-Cc', RT::User::CanonicalizeEmailAddress( + undef, $args{'CcMessageTo'} + ) ) + if defined $args{'CcMessageTo'}; + $args{'MIMEObj'}->head->add( 'RT-Send-Bcc', + RT::User::CanonicalizeEmailAddress( + undef, $args{'BccMessageTo'} + ) ) + if defined $args{'BccMessageTo'}; + + # If this is from an external source, we need to come up with its + # internal Message-ID now, so all emails sent because of this + # message have a common Message-ID + unless ($args{'MIMEObj'}->head->get('Message-ID') + =~ /<(rt-.*?-\d+-\d+)\.(\d+-0-0)\@$RT::Organization>/) { + $args{'MIMEObj'}->head->set( 'RT-Message-ID', + "<rt-" + . $RT::VERSION . "-" + . $$ . "-" + . CORE::time() . "-" + . int(rand(2000)) . '.' + . $self->id . "-" + . "0" . "-" # Scrip + . "0" . "@" # Email sent + . $RT::Organization + . ">" ); } - $deps->LimitDependedOnBy($self->Id); - - return($deps); - -} - -# }}} - -# {{{ AllDependedOnBy - -=head2 AllDependedOnBy - -Returns an array of RT::Ticket objects which (directly or indirectly) -depends on this ticket; takes an optional 'Type' argument in the param -hash, which will limit returned tickets to that type, as well as cause -tickets with that type to serve as 'leaf' nodes that stops the recursive -dependency search. -=cut - -sub AllDependedOnBy { - my $self = shift; - my $dep = $self->DependedOnBy; - my %args = ( - Type => undef, - _found => {}, - _top => 1, - @_ + #Record the correspondence (write the transaction) + my ( $Trans, $msg, $TransObj ) = $self->_NewTransaction( + Type => $args{'NoteType'}, + Data => ( $args{'MIMEObj'}->head->get('subject') || 'No Subject' ), + TimeTaken => $args{'TimeTaken'}, + MIMEObj => $args{'MIMEObj'}, + CommitScrips => $args{'CommitScrips'}, ); - while (my $link = $dep->Next()) { - next unless ($link->BaseURI->IsLocal()); - next if $args{_found}{$link->BaseObj->Id}; - - if (!$args{Type}) { - $args{_found}{$link->BaseObj->Id} = $link->BaseObj; - $link->BaseObj->AllDependedOnBy( %args, _top => 0 ); - } - elsif ($link->BaseObj->Type eq $args{Type}) { - $args{_found}{$link->BaseObj->Id} = $link->BaseObj; - } - else { - $link->BaseObj->AllDependedOnBy( %args, _top => 0 ); - } + unless ($Trans) { + $RT::Logger->err("$self couldn't init a transaction $msg"); + return ( $Trans, $self->loc("Message could not be recorded"), undef ); } - if ($args{_top}) { - return map { $args{_found}{$_} } sort keys %{$args{_found}}; - } - else { - return 1; - } + return ( $Trans, $self->loc("Message recorded"), $TransObj ); } # }}} -# {{{ DependsOn - -=head2 DependsOn - - This returns an RT::Links object which references all the tickets that this ticket depends on - -=cut - -sub DependsOn { - my $self = shift; - return ( $self->_Links( 'Base', 'DependsOn' ) ); -} - # }}} - - - # {{{ sub _Links sub _Links { @@ -2607,8 +2457,6 @@ sub _Links { # }}} -# }}} - # {{{ sub DeleteLink =head2 DeleteLink @@ -2635,43 +2483,25 @@ sub DeleteLink { } - #we want one of base and target. we don't care which - #but we only want _one_ - - my $direction; - my $remote_link; + my ($val, $Msg) = $self->SUPER::_DeleteLink(%args); - if ( $args{'Base'} and $args{'Target'} ) { - $RT::Logger->debug("$self ->_DeleteLink. got both Base and Target\n"); - return ( 0, $self->loc("Can't specifiy both base and target") ); + if ( !$val ) { + $RT::Logger->debug("Couldn't find that link\n"); + return ( 0, $Msg ); } - elsif ( $args{'Base'} ) { - $args{'Target'} = $self->URI(); + + my ($direction, $remote_link); + + if ( $args{'Base'} ) { $remote_link = $args{'Base'}; $direction = 'Target'; } elsif ( $args{'Target'} ) { - $args{'Base'} = $self->URI(); $remote_link = $args{'Target'}; $direction='Base'; } - else { - $RT::Logger->debug("$self: Base or Target must be specified\n"); - return ( 0, $self->loc('Either base or target must be specified') ); - } - - my $link = new RT::Link( $self->CurrentUser ); - $RT::Logger->debug( "Trying to load link: " . $args{'Base'} . " " . $args{'Type'} . " " . $args{'Target'} . "\n" ); - - - $link->LoadByParams( Base=> $args{'Base'}, Type=> $args{'Type'}, Target=> $args{'Target'} ); - #it's a real link. - if ( $link->id ) { - - my $linkid = $link->id; - $link->Delete(); - my $TransString = "Ticket $args{'Base'} no longer $args{Type} ticket $args{'Target'}."; + if ( $val ) { my $remote_uri = RT::URI->new( $RT::SystemUser ); $remote_uri->FromURI( $remote_link ); @@ -2682,13 +2512,7 @@ sub DeleteLink { TimeTaken => 0 ); - return ( $Trans, $self->loc("Link deleted ([_1])", $TransString)); - } - - #if it's not a link we can find - else { - $RT::Logger->debug("Couldn't find that link\n"); - return ( 0, $self->loc("Link not found") ); + return ( $Trans, $Msg ); } } @@ -2700,6 +2524,51 @@ sub DeleteLink { Takes a paramhash of Type and one of Base or Target. Adds that link to this ticket. +=begin testing + +my $q1 = RT::Queue->new($RT::SystemUser); +my ($id,$msg) = $q1->Create(Name => 'LinkTest1'); +ok ($id,$msg); +my $q2 = RT::Queue->new($RT::SystemUser); +($id,$msg) = $q2->Create(Name => 'LinkTest2'); +ok ($id,$msg); + +my $u1 = RT::User->new($RT::SystemUser); +($id,$msg) =$u1->Create(Name => 'LinkTestUser'); + +ok ($id,$msg); + +($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'CreateTicket'); +ok ($id,$msg); +($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q1, Right => 'ModifyTicket'); +ok ($id,$msg); + +my $tid; + +my $creator = RT::CurrentUser->new($u1->id); + +my $ticket = RT::Ticket->new( $creator); +ok($ticket->isa('RT::Ticket')); +($id,$tid, $msg) = $ticket->Create(Subject => 'Link test 1', Queue => $q1->id); +ok ($id,$msg); + + +my $ticket2 = RT::Ticket->new($RT::SystemUser); +($id, $tid, $msg) = $ticket2->Create(Subject => 'Link test 2', Queue => $q2->id); +ok ($id, $msg); + +($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id); +ok(!$id,$msg); +($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q2, Right => 'CreateTicket'); +ok ($id,$msg); +($id,$msg) = $u1->PrincipalObj->GrantRight ( Object => $q2, Right => 'ModifyTicket'); +ok ($id,$msg); +($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => $ticket2->id); +ok($id,$msg); +($id,$msg) =$ticket->AddLink(Type => 'RefersTo', Target => -1); +ok(!$id,$msg); + +=end testing =cut @@ -2711,160 +2580,176 @@ sub AddLink { Silent => undef, @_ ); + unless ( $self->CurrentUserHasRight('ModifyTicket') ) { return ( 0, $self->loc("Permission Denied") ); } - # Remote_link is the URI of the object that is not this ticket - my $remote_link; - my $direction; - if ( $args{'Base'} and $args{'Target'} ) { - $RT::Logger->debug( -"$self tried to delete a link. both base and target were specified\n" ); - return ( 0, $self->loc("Can't specifiy both base and target") ); + $self->_AddLink(%args); +} + +=head2 _AddLink + +Private non-acled variant of AddLink so that links can be added during create. + +=cut + +sub _AddLink { + my $self = shift; + my %args = ( Target => '', + Base => '', + Type => '', + Silent => undef, + @_ ); + + # {{{ If the other URI is an RT::Ticket, we want to make sure the user + # can modify it too... + my $other_ticket_uri = RT::URI->new($self->CurrentUser); + + if ( $args{'Target'} ) { + $other_ticket_uri->FromURI( $args{'Target'} ); + } elsif ( $args{'Base'} ) { - $args{'Target'} = $self->URI(); - $remote_link = $args{'Base'}; - $direction = 'Target'; - } - elsif ( $args{'Target'} ) { - $args{'Base'} = $self->URI(); - $remote_link = $args{'Target'}; - $direction='Base'; + $other_ticket_uri->FromURI( $args{'Base'} ); } - else { - return ( 0, $self->loc('Either base or target must be specified') ); + + unless ( $other_ticket_uri->Resolver && $other_ticket_uri->Scheme ) { + my $msg = $args{'Target'} ? $self->loc("Couldn't resolve target '[_1]' into a URI.", $args{'Target'}) + : $self->loc("Couldn't resolve base '[_1]' into a URI.", $args{'Base'}); + $RT::Logger->warning( "$self $msg\n" ); + + return( 0, $msg ); } - # If the base isn't a URI, make it a URI. - # If the target isn't a URI, make it a URI. + if ( $other_ticket_uri->Resolver->Scheme eq 'fsck.com-rt') { + my $object = $other_ticket_uri->Resolver->Object; + + if ( UNIVERSAL::isa( $object, 'RT::Ticket' ) + && $object->id + && !$object->CurrentUserHasRight('ModifyTicket') ) + { + return ( 0, $self->loc("Permission Denied") ); + } - # {{{ Check if the link already exists - we don't want duplicates - use RT::Link; - my $old_link = RT::Link->new( $self->CurrentUser ); - $old_link->LoadByParams( Base => $args{'Base'}, - Type => $args{'Type'}, - Target => $args{'Target'} ); - if ( $old_link->Id ) { - $RT::Logger->debug("$self Somebody tried to duplicate a link"); - return ( $old_link->id, $self->loc("Link already exists"), 0 ); } # }}} - # Storing the link in the DB. - my $link = RT::Link->new( $self->CurrentUser ); - my ($linkid) = $link->Create( Target => $args{Target}, - Base => $args{Base}, - Type => $args{Type} ); + my ($val, $Msg) = $self->SUPER::_AddLink(%args); - unless ($linkid) { - return ( 0, $self->loc("Link could not be created") ); + if (!$val) { + return ($val, $Msg); } - my $TransString = - "Ticket $args{'Base'} $args{Type} ticket $args{'Target'}."; + my ($direction, $remote_link); + if ( $args{'Target'} ) { + $remote_link = $args{'Target'}; + $direction = 'Base'; + } elsif ( $args{'Base'} ) { + $remote_link = $args{'Base'}; + $direction = 'Target'; + } # Don't write the transaction if we're doing this on create if ( $args{'Silent'} ) { - return ( 1, $self->loc( "Link created ([_1])", $TransString ) ); + return ( $val, $Msg ); } else { my $remote_uri = RT::URI->new( $RT::SystemUser ); $remote_uri->FromURI( $remote_link ); #Write the transaction - my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( - Type => 'AddLink', - Field => $LINKDIRMAP{$args{'Type'}}->{$direction}, - NewValue => $remote_uri->URI || $remote_link, - TimeTaken => 0 ); - return ( $Trans, $self->loc( "Link created ([_1])", $TransString ) ); + my ( $Trans, $Msg, $TransObj ) = + $self->_NewTransaction(Type => 'AddLink', + Field => $LINKDIRMAP{$args{'Type'}}->{$direction}, + NewValue => $remote_uri->URI || $remote_link, + TimeTaken => 0 ); + return ( $val, $Msg ); } } # }}} -# {{{ sub URI -=head2 URI +# {{{ sub MergeInto -Returns this ticket's URI +=head2 MergeInto -=cut +MergeInto take the id of the ticket to merge this ticket into. -sub URI { - my $self = shift; - my $uri = RT::URI::fsck_com_rt->new($self->CurrentUser); - return($uri->URIForObject($self)); -} -# }}} +=begin testing -# {{{ sub MergeInto +my $t1 = RT::Ticket->new($RT::SystemUser); +$t1->Create ( Subject => 'Merge test 1', Queue => 'general', Requestor => 'merge1@example.com'); +my $t1id = $t1->id; +my $t2 = RT::Ticket->new($RT::SystemUser); +$t2->Create ( Subject => 'Merge test 2', Queue => 'general', Requestor => 'merge2@example.com'); +my $t2id = $t2->id; +my ($msg, $val) = $t1->MergeInto($t2->id); +ok ($msg,$val); +$t1 = RT::Ticket->new($RT::SystemUser); +is ($t1->id, undef, "ok. we've got a blank ticket1"); +$t1->Load($t1id); -=head2 MergeInto -MergeInto take the id of the ticket to merge this ticket into. +is ($t1->id, $t2->id); + +is ($t1->Requestors->MembersObj->Count, 2); + + +=end testing =cut sub MergeInto { my $self = shift; - my $MergeInto = shift; + my $ticket_id = shift; unless ( $self->CurrentUserHasRight('ModifyTicket') ) { return ( 0, $self->loc("Permission Denied") ); } # Load up the new ticket. - my $NewTicket = RT::Ticket->new($RT::SystemUser); - $NewTicket->Load($MergeInto); + my $MergeInto = RT::Ticket->new($RT::SystemUser); + $MergeInto->Load($ticket_id); # make sure it exists. - unless ( defined $NewTicket->Id ) { + unless ( $MergeInto->Id ) { return ( 0, $self->loc("New ticket doesn't exist") ); } # Make sure the current user can modify the new ticket. - unless ( $NewTicket->CurrentUserHasRight('ModifyTicket') ) { - $RT::Logger->debug("failed..."); + unless ( $MergeInto->CurrentUserHasRight('ModifyTicket') ) { return ( 0, $self->loc("Permission Denied") ); } - $RT::Logger->debug( - "checking if the new ticket has the same id and effective id..."); - unless ( $NewTicket->id == $NewTicket->EffectiveId ) { - $RT::Logger->err( "$self trying to merge into " - . $NewTicket->Id - . " which is itself merged.\n" ); - return ( 0, - $self->loc("Can't merge into a merged ticket. You should never get this error") ); - } + $RT::Handle->BeginTransaction(); # We use EffectiveId here even though it duplicates information from # the links table becasue of the massive performance hit we'd take - # by trying to do a seperate database query for merge info everytime + # by trying to do a separate database query for merge info everytime # loaded a ticket. #update this ticket's effective id to the new ticket's id. my ( $id_val, $id_msg ) = $self->__Set( Field => 'EffectiveId', - Value => $NewTicket->Id() + Value => $MergeInto->Id() ); unless ($id_val) { - $RT::Logger->error( - "Couldn't set effective ID for " . $self->Id . ": $id_msg" ); + $RT::Handle->Rollback(); return ( 0, $self->loc("Merge failed. Couldn't set EffectiveId") ); } my ( $status_val, $status_msg ) = $self->__Set( Field => 'Status', Value => 'resolved'); unless ($status_val) { + $RT::Handle->Rollback(); $RT::Logger->error( $self->loc("[_1] couldn't set status to resolved. RT's Database may be inconsistent.", $self) ); + return ( 0, $self->loc("Merge failed. Couldn't set Status") ); } @@ -2872,11 +2757,24 @@ sub MergeInto { my $old_links_to = RT::Links->new($self->CurrentUser); $old_links_to->Limit(FIELD => 'Target', VALUE => $self->URI); + my %old_seen; while (my $link = $old_links_to->Next) { - if ($link->Base eq $NewTicket->URI) { + if (exists $old_seen{$link->Base."-".$link->Type}) { + $link->Delete; + } + elsif ($link->Base eq $MergeInto->URI) { $link->Delete; } else { - $link->SetTarget($NewTicket->URI); + # First, make sure the link doesn't already exist. then move it over. + my $tmp = RT::Link->new($RT::SystemUser); + $tmp->LoadByCols(Base => $link->Base, Type => $link->Type, LocalTarget => $MergeInto->id); + if ($tmp->id) { + $link->Delete; + } else { + $link->SetTarget($MergeInto->URI); + $link->SetLocalTarget($MergeInto->id); + } + $old_seen{$link->Base."-".$link->Type} =1; } } @@ -2885,40 +2783,54 @@ sub MergeInto { $old_links_from->Limit(FIELD => 'Base', VALUE => $self->URI); while (my $link = $old_links_from->Next) { - if ($link->Target eq $NewTicket->URI) { + if (exists $old_seen{$link->Type."-".$link->Target}) { + $link->Delete; + } + if ($link->Target eq $MergeInto->URI) { $link->Delete; } else { - $link->SetBase($NewTicket->URI); + # First, make sure the link doesn't already exist. then move it over. + my $tmp = RT::Link->new($RT::SystemUser); + $tmp->LoadByCols(Target => $link->Target, Type => $link->Type, LocalBase => $MergeInto->id); + if ($tmp->id) { + $link->Delete; + } else { + $link->SetBase($MergeInto->URI); + $link->SetLocalBase($MergeInto->id); + $old_seen{$link->Type."-".$link->Target} =1; + } } } + # Update time fields + foreach my $type qw(TimeEstimated TimeWorked TimeLeft) { - #make a new link: this ticket is merged into that other ticket. - $self->AddLink( Type => 'MergedInto', Target => $NewTicket->Id()); + my $mutator = "Set$type"; + $MergeInto->$mutator( + ( $MergeInto->$type() || 0 ) + ( $self->$type() || 0 ) ); - #add all of this ticket's watchers to that ticket. - my $requestors = $self->Requestors->MembersObj; - while (my $watcher = $requestors->Next) { - $NewTicket->_AddWatcher( Type => 'Requestor', - Silent => 1, - PrincipalId => $watcher->MemberId); } +#add all of this ticket's watchers to that ticket. + foreach my $watcher_type qw(Requestors Cc AdminCc) { - my $Ccs = $self->Cc->MembersObj; - while (my $watcher = $Ccs->Next) { - $NewTicket->_AddWatcher( Type => 'Cc', - Silent => 1, - PrincipalId => $watcher->MemberId); - } + my $people = $self->$watcher_type->MembersObj; + my $addwatcher_type = $watcher_type; + $addwatcher_type =~ s/s$//; - my $AdminCcs = $self->AdminCc->MembersObj; - while (my $watcher = $AdminCcs->Next) { - $NewTicket->_AddWatcher( Type => 'AdminCc', - Silent => 1, - PrincipalId => $watcher->MemberId); + while ( my $watcher = $people->Next ) { + + my ($val, $msg) = $MergeInto->_AddWatcher( + Type => $addwatcher_type, + Silent => 1, + PrincipalId => $watcher->MemberId + ); + unless ($val) { + $RT::Logger->warning($msg); + } } + } #find all of the tickets that were merged into this ticket. my $old_mergees = new RT::Tickets( $self->CurrentUser ); @@ -2932,12 +2844,16 @@ sub MergeInto { while ( my $ticket = $old_mergees->Next() ) { my ( $val, $msg ) = $ticket->__Set( Field => 'EffectiveId', - Value => $NewTicket->Id() + Value => $MergeInto->Id() ); } - $NewTicket->_SetLastUpdated; + #make a new link: this ticket is merged into that other ticket. + $self->AddLink( Type => 'MergedInto', Target => $MergeInto->Id()); + + $MergeInto->_SetLastUpdated; + $RT::Handle->Commit(); return ( 1, $self->loc("Merge Successful") ); } @@ -3005,12 +2921,13 @@ ok ($root->Id, "Loaded the root user"); my $t = RT::Ticket->new($RT::SystemUser); $t->Load(1); $t->SetOwner('root'); -ok ($t->OwnerObj->Name eq 'root' , "Root owns the ticket"); +is ($t->OwnerObj->Name, 'root' , "Root owns the ticket"); $t->Steal(); -ok ($t->OwnerObj->id eq $RT::SystemUser->id , "SystemUser owns the ticket"); +is ($t->OwnerObj->id, $RT::SystemUser->id , "SystemUser owns the ticket"); my $txns = RT::Transactions->new($RT::SystemUser); $txns->OrderBy(FIELD => 'id', ORDER => 'DESC'); -$txns->Limit(FIELD => 'Ticket', VALUE => '1'); +$txns->Limit(FIELD => 'ObjectId', VALUE => '1'); +$txns->Limit(FIELD => 'ObjectType', VALUE => 'RT::Ticket'); my $steal = $txns->First; ok($steal->OldValue == $root->Id , "Stolen from root"); ok($steal->NewValue == $RT::SystemUser->Id , "Stolen by the systemuser"); @@ -3237,14 +3154,14 @@ my $tt = RT::Ticket->new($RT::SystemUser); my ($id, $tid, $msg)= $tt->Create(Queue => 'general', Subject => 'test'); ok($id, $msg); -ok($tt->Status eq 'new', "New ticket is created as new"); +is($tt->Status, 'new', "New ticket is created as new"); ($id, $msg) = $tt->SetStatus('open'); ok($id, $msg); -ok ($msg =~ /open/i, "Status message is correct"); +like($msg, qr/open/i, "Status message is correct"); ($id, $msg) = $tt->SetStatus('resolved'); ok($id, $msg); -ok ($msg =~ /resolved/i, "Status message is correct"); +like($msg, qr/resolved/i, "Status message is correct"); ($id, $msg) = $tt->SetStatus('resolved'); ok(!$id,$msg); @@ -3266,8 +3183,14 @@ sub SetStatus { } #Check ACL - unless ( $self->CurrentUserHasRight('ModifyTicket') ) { - return ( 0, $self->loc('Permission Denied') ); + if ( $args{Status} eq 'deleted') { + unless ($self->CurrentUserHasRight('DeleteTicket')) { + return ( 0, $self->loc('Permission Denied') ); + } + } else { + unless ($self->CurrentUserHasRight('ModifyTicket')) { + return ( 0, $self->loc('Permission Denied') ); + } } if (!$args{Force} && ($args{'Status'} eq 'resolved') && $self->HasUnresolvedDependencies) { @@ -3286,9 +3209,9 @@ sub SetStatus { RecordTransaction => 0 ); } - if ( $args{Status} =~ /^(resolved|rejected|dead)$/ ) { - - #When we resolve a ticket, set the 'Resolved' attribute to now. + #When we close a ticket, set the 'Resolved' attribute to now. + # It's misnamed, but that's just historical. + if ( $self->QueueObj->IsInactiveStatus($args{Status}) ) { $self->_Set( Field => 'Resolved', Value => $now->ISO, RecordTransaction => 0 ); @@ -3298,6 +3221,7 @@ sub SetStatus { my ($val, $msg)= $self->_Set( Field => 'Status', Value => $args{Status}, TimeTaken => 0, + CheckACL => 0, TransactionType => 'Status' ); return($val,$msg); @@ -3390,278 +3314,7 @@ sub Resolve { # }}} -# {{{ Routines dealing with custom fields - - -# {{{ FirstCustomFieldValue - -=item FirstCustomFieldValue FIELD - -Return the content of the first value of CustomField FIELD for this ticket -Takes a field id or name - -=cut - -sub FirstCustomFieldValue { - my $self = shift; - my $field = shift; - my $values = $self->CustomFieldValues($field); - if ($values->First) { - return $values->First->Content; - } else { - return undef; - } - -} - - - -# {{{ CustomFieldValues - -=item CustomFieldValues FIELD - -Return a TicketCustomFieldValues object of all values of CustomField FIELD for this ticket. -Takes a field id or name. - - -=cut - -sub CustomFieldValues { - my $self = shift; - my $field = shift; - - my $cf = RT::CustomField->new($self->CurrentUser); - - if ($field =~ /^\d+$/) { - $cf->LoadById($field); - } else { - $cf->LoadByNameAndQueue(Name => $field, Queue => $self->QueueObj->Id); - } - my $cf_values = RT::TicketCustomFieldValues->new( $self->CurrentUser ); - $cf_values->LimitToCustomField($cf->id); - $cf_values->LimitToTicket($self->Id()); - - # @values is a CustomFieldValues object; - return ($cf_values); -} - -# }}} - -# {{{ AddCustomFieldValue - -=item AddCustomFieldValue { Field => FIELD, Value => VALUE } - -VALUE can either be a CustomFieldValue object or a string. -FIELD can be a CustomField object OR a CustomField ID. - - -Adds VALUE as a value of CustomField FIELD. If this is a single-value custom field, -deletes the old value. -If VALUE isn't a valid value for the custom field, returns -(0, 'Error message' ) otherwise, returns (1, 'Success Message') - -=cut - -sub AddCustomFieldValue { - my $self = shift; - unless ( $self->CurrentUserHasRight('ModifyTicket') ) { - return ( 0, $self->loc("Permission Denied") ); - } - $self->_AddCustomFieldValue(@_); -} - -sub _AddCustomFieldValue { - my $self = shift; - my %args = ( - Field => undef, - Value => undef, - RecordTransaction => 1, - @_ - ); - - my $cf = RT::CustomField->new( $self->CurrentUser ); - if ( UNIVERSAL::isa( $args{'Field'}, "RT::CustomField" ) ) { - $cf->Load( $args{'Field'}->id ); - } - else { - $cf->Load( $args{'Field'} ); - } - - unless ( $cf->Id ) { - return ( 0, $self->loc("Custom field [_1] not found", $args{'Field'}) ); - } - - # Load up a TicketCustomFieldValues object for this custom field and this ticket - my $values = $cf->ValuesForTicket( $self->id ); - - unless ( $cf->ValidateValue( $args{'Value'} ) ) { - return ( 0, $self->loc("Invalid value for custom field") ); - } - - # If the custom field only accepts a single value, delete the existing - # value and record a "changed from foo to bar" transaction - if ( $cf->SingleValue ) { - - # We need to whack any old values here. In most cases, the custom field should - # only have one value to delete. In the pathalogical case, this custom field - # used to be a multiple and we have many values to whack.... - my $cf_values = $values->Count; - - if ( $cf_values > 1 ) { - my $i = 0; #We want to delete all but the last one, so we can then - # execute the same code to "change" the value from old to new - while ( my $value = $values->Next ) { - $i++; - if ( $i < $cf_values ) { - my $old_value = $value->Content; - my ($val, $msg) = $cf->DeleteValueForTicket(Ticket => $self->Id, Content => $value->Content); - unless ($val) { - return (0,$msg); - } - my ( $TransactionId, $Msg, $TransactionObj ) = - $self->_NewTransaction( - Type => 'CustomField', - Field => $cf->Id, - OldValue => $old_value - ); - } - } - } - - my $old_value; - if (my $value = $cf->ValuesForTicket( $self->Id )->First) { - $old_value = $value->Content(); - return (1) if $old_value eq $args{'Value'}; - } - - my ( $new_value_id, $value_msg ) = $cf->AddValueForTicket( - Ticket => $self->Id, - Content => $args{'Value'} - ); - - unless ($new_value_id) { - return ( 0, - $self->loc("Could not add new custom field value for ticket. [_1] ", - ,$value_msg) ); - } - - my $new_value = RT::TicketCustomFieldValue->new( $self->CurrentUser ); - $new_value->Load($new_value_id); - - # now that adding the new value was successful, delete the old one - if ($old_value) { - my ($val, $msg) = $cf->DeleteValueForTicket(Ticket => $self->Id, Content => $old_value); - unless ($val) { - return (0,$msg); - } - } - - if ($args{'RecordTransaction'}) { - my ( $TransactionId, $Msg, $TransactionObj ) = $self->_NewTransaction( - Type => 'CustomField', - Field => $cf->Id, - OldValue => $old_value, - NewValue => $new_value->Content - ); - } - - if ( $old_value eq '' ) { - return ( 1, $self->loc("[_1] [_2] added", $cf->Name, $new_value->Content) ); - } - elsif ( $new_value->Content eq '' ) { - return ( 1, $self->loc("[_1] [_2] deleted", $cf->Name, $old_value) ); - } - else { - return ( 1, $self->loc("[_1] [_2] changed to [_3]", $cf->Name, $old_value, $new_value->Content ) ); - } - - } - - # otherwise, just add a new value and record "new value added" - else { - my ( $new_value_id ) = $cf->AddValueForTicket( - Ticket => $self->Id, - Content => $args{'Value'} - ); - - unless ($new_value_id) { - return ( 0, - $self->loc("Could not add new custom field value for ticket. ")); - } - if ( $args{'RecordTransaction'} ) { - my ( $TransactionId, $Msg, $TransactionObj ) = $self->_NewTransaction( - Type => 'CustomField', - Field => $cf->Id, - NewValue => $args{'Value'} - ); - unless ($TransactionId) { - return ( 0, - $self->loc( "Couldn't create a transaction: [_1]", $Msg ) ); - } - } - return ( 1, $self->loc("[_1] added as a value for [_2]",$args{'Value'}, $cf->Name)); - } - -} - -# }}} - -# {{{ DeleteCustomFieldValue - -=item DeleteCustomFieldValue { Field => FIELD, Value => VALUE } - -Deletes VALUE as a value of CustomField FIELD. - -VALUE can be a string, a CustomFieldValue or a TicketCustomFieldValue. - -If VALUE isn't a valid value for the custom field, returns -(0, 'Error message' ) otherwise, returns (1, 'Success Message') - -=cut - -sub DeleteCustomFieldValue { - my $self = shift; - my %args = ( - Field => undef, - Value => undef, - @_); - - unless ( $self->CurrentUserHasRight('ModifyTicket') ) { - return ( 0, $self->loc("Permission Denied") ); - } - my $cf = RT::CustomField->new( $self->CurrentUser ); - if ( UNIVERSAL::isa( $args{'Field'}, "RT::CustomField" ) ) { - $cf->LoadById( $args{'Field'}->id ); - } - else { - $cf->LoadById( $args{'Field'} ); - } - - unless ( $cf->Id ) { - return ( 0, $self->loc("Custom field not found") ); - } - - - my ($val, $msg) = $cf->DeleteValueForTicket(Ticket => $self->Id, Content => $args{'Value'}); - unless ($val) { - return (0,$msg); - } - my ( $TransactionId, $Msg, $TransactionObj ) = $self->_NewTransaction( - Type => 'CustomField', - Field => $cf->Id, - OldValue => $args{'Value'} - ); - unless($TransactionId) { - return(0, $self->loc("Couldn't create a transaction: [_1]", $Msg)); - } - - return($TransactionId, $self->loc("[_1] is no longer a value for custom field [_2]", $args{'Value'}, $cf->Name)); -} - -# }}} - -# }}} - + # {{{ Actions + Routines dealing with transactions # {{{ sub SetTold and _SetTold @@ -3716,100 +3369,50 @@ sub _SetTold { # }}} -# {{{ sub Transactions +=head2 TransactionBatch -=head2 Transactions + Returns an array reference of all transactions created on this ticket during + this ticket object's lifetime, or undef if there were none. - Returns an RT::Transactions object of all transactions on this ticket + Only works when the $RT::UseTransactionBatch config variable is set to true. =cut -sub Transactions { +sub TransactionBatch { my $self = shift; - - use RT::Transactions; - my $transactions = RT::Transactions->new( $self->CurrentUser ); - - #If the user has no rights, return an empty object - if ( $self->CurrentUserHasRight('ShowTicket') ) { - my $tickets = $transactions->NewAlias('Tickets'); - $transactions->Join( - ALIAS1 => 'main', - FIELD1 => 'Ticket', - ALIAS2 => $tickets, - FIELD2 => 'id' - ); - $transactions->Limit( - ALIAS => $tickets, - FIELD => 'EffectiveId', - VALUE => $self->id() - ); - - # if the user may not see comments do not return them - unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { - $transactions->Limit( - FIELD => 'Type', - OPERATOR => '!=', - VALUE => "Comment" - ); - } - } - - return ($transactions); + return $self->{_TransactionBatch}; } -# }}} - -# {{{ sub _NewTransaction - -sub _NewTransaction { +sub DESTROY { my $self = shift; - my %args = ( - TimeTaken => 0, - Type => undef, - OldValue => undef, - NewValue => undef, - Data => undef, - Field => undef, - MIMEObj => undef, - @_ - ); - - require RT::Transaction; - my $trans = new RT::Transaction( $self->CurrentUser ); - my ( $transaction, $msg ) = $trans->Create( - Ticket => $self->Id, - TimeTaken => $args{'TimeTaken'}, - Type => $args{'Type'}, - Data => $args{'Data'}, - Field => $args{'Field'}, - NewValue => $args{'NewValue'}, - OldValue => $args{'OldValue'}, - MIMEObj => $args{'MIMEObj'} - ); - - $self->Load($self->Id); + # DESTROY methods need to localize $@, or it may unset it. This + # causes $m->abort to not bubble all of the way up. See perlbug + # http://rt.perl.org/rt3/Ticket/Display.html?id=17650 + local $@; - $RT::Logger->warning($msg) unless $transaction; + # The following line eliminates reentrancy. + # It protects against the fact that perl doesn't deal gracefully + # when an object's refcount is changed in its destructor. + return if $self->{_Destroyed}++; - $self->_SetLastUpdated; - - if ( defined $args{'TimeTaken'} ) { - $self->_UpdateTimeTaken( $args{'TimeTaken'} ); - } - return ( $transaction, $msg, $trans ); + my $batch = $self->TransactionBatch or return; + require RT::Scrips; + RT::Scrips->new($RT::SystemUser)->Apply( + Stage => 'TransactionBatch', + TicketObj => $self, + TransactionObj => $batch->[0], + Type => join(',', (map { $_->Type } @{$batch}) ) + ); } # }}} -# }}} - # {{{ PRIVATE UTILITY METHODS. Mostly needed so Ticket can be a DBIx::Record -# {{{ sub _ClassAccessible +# {{{ sub _OverlayAccessible -sub _ClassAccessible { +sub _OverlayAccessible { { EffectiveId => { 'read' => 1, 'write' => 1, 'public' => 1 }, Queue => { 'read' => 1, 'write' => 1 }, @@ -3823,8 +3426,6 @@ sub _ClassAccessible { TimeEstimated => { 'read' => 1, 'write' => 1 }, TimeWorked => { 'read' => 1, 'write' => 1 }, TimeLeft => { 'read' => 1, 'write' => 1 }, - Created => { 'read' => 1, 'auto' => 1 }, - Creator => { 'read' => 1, 'auto' => 1 }, Told => { 'read' => 1, 'write' => 1 }, Resolved => { 'read' => 1 }, Type => { 'read' => 1 }, @@ -3893,7 +3494,7 @@ sub _Set { OldValue => $Old, TimeTaken => $args{'TimeTaken'}, ); - return ( $Trans, scalar $TransObj->Description ); + return ( $Trans, scalar $TransObj->BriefDescription ); } else { return ( $ret, $msg ); @@ -4011,7 +3612,9 @@ sub HasRight { unless ( ( defined $args{'Principal'} ) and ( ref( $args{'Principal'} ) ) ) { - $RT::Logger->warning("Principal attrib undefined for Ticket::HasRight"); + Carp::cluck; + $RT::Logger->crit("Principal attrib undefined for Ticket::HasRight"); + return(undef); } return ( @@ -4026,6 +3629,103 @@ sub HasRight { # }}} +# {{{ sub Transactions + +=head2 Transactions + + Returns an RT::Transactions object of all transactions on this ticket + +=cut + +sub Transactions { + my $self = shift; + + my $transactions = RT::Transactions->new( $self->CurrentUser ); + + #If the user has no rights, return an empty object + if ( $self->CurrentUserHasRight('ShowTicket') ) { + $transactions->LimitToTicket($self->id); + + # if the user may not see comments do not return them + unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { + $transactions->Limit( + FIELD => 'Type', + OPERATOR => '!=', + VALUE => "Comment" + ); + $transactions->Limit( + FIELD => 'Type', + OPERATOR => '!=', + VALUE => "CommentEmailRecord", + ENTRYAGGREGATOR => 'AND' + ); + + } + } + + return ($transactions); +} + +# }}} + + +# {{{ TransactionCustomFields + +=head2 TransactionCustomFields + + Returns the custom fields that transactions on tickets will ahve. + +=cut + +sub TransactionCustomFields { + my $self = shift; + return $self->QueueObj->TicketTransactionCustomFields; +} + +# }}} + +# {{{ sub CustomFieldValues + +=head2 CustomFieldValues + +# Do name => id mapping (if needed) before falling back to +# RT::Record's CustomFieldValues + +See L<RT::Record> + +=cut + +sub CustomFieldValues { + my $self = shift; + my $field = shift; + unless ( $field =~ /^\d+$/ ) { + my $cf = RT::CustomField->new( $self->CurrentUser ); + $cf->LoadByNameAndQueue( Name => $field, Queue => $self->QueueObj->Id ); + unless ( $cf->id ) { + $cf->LoadByNameAndQueue( Name => $field, Queue => '0' ); + } + $field = $cf->id; + } + return $self->SUPER::CustomFieldValues($field); +} + +# }}} + +# {{{ sub CustomFieldLookupType + +=head2 CustomFieldLookupType + +Returns the RT::Ticket lookup type, which can be passed to +RT::CustomField->Create() via the 'LookupType' hash key. + +=cut + +# }}} + +sub CustomFieldLookupType { + "RT::Queue-RT::Ticket"; +} + 1; =head1 AUTHOR diff --git a/rt/lib/RT/Tickets.pm b/rt/lib/RT/Tickets.pm index b6b349144..0f880e11f 100755 --- a/rt/lib/RT/Tickets.pm +++ b/rt/lib/RT/Tickets.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Ticket item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Tickets_Overlay.pm b/rt/lib/RT/Tickets_Overlay.pm index d8a1ac803..0e6585c07 100644 --- a/rt/lib/RT/Tickets_Overlay.pm +++ b/rt/lib/RT/Tickets_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Major Changes: # - Decimated ProcessRestrictions and broke it into multiple @@ -51,42 +73,51 @@ =begin testing ok (require RT::Tickets); +ok( my $testtickets = RT::Tickets->new( $RT::SystemUser ) ); +ok( $testtickets->LimitStatus( VALUE => 'deleted' ) ); +# Should be zero until 'allow_deleted_search' +ok( $testtickets->Count == 0 ); =end testing =cut + +package RT::Tickets; + use strict; + +package RT::Tickets; + no warnings qw(redefine); use vars qw(@SORTFIELDS); - +use RT::CustomFields; # Configuration Tables: # FIELDS is a mapping of searchable Field name, to Type, and other # metadata. -my %FIELDS = - ( Status => ['ENUM'], - Queue => ['ENUM' => 'Queue',], - Type => ['ENUM',], - Creator => ['ENUM' => 'User',], - LastUpdatedBy => ['ENUM' => 'User',], - Owner => ['ENUM' => 'User',], - EffectiveId => ['INT',], - id => ['INT',], - InitialPriority => ['INT',], - FinalPriority => ['INT',], - Priority => ['INT',], - TimeLeft => ['INT',], - TimeWorked => ['INT',], - MemberOf => ['LINK' => To => 'MemberOf', ], - DependsOn => ['LINK' => To => 'DependsOn',], - RefersTo => ['LINK' => To => 'RefersTo',], - HasMember => ['LINK' => From => 'MemberOf',], - DependentOn => ['LINK' => From => 'DependsOn',], - ReferredTo => ['LINK' => From => 'RefersTo',], -# HasDepender => ['LINK',], -# RelatedTo => ['LINK',], +my %FIELDS = ( + Status => ['ENUM'], + Queue => [ 'ENUM' => 'Queue', ], + Type => [ 'ENUM', ], + Creator => [ 'ENUM' => 'User', ], + LastUpdatedBy => [ 'ENUM' => 'User', ], + Owner => [ 'ENUM' => 'User', ], + EffectiveId => [ 'INT', ], + id => [ 'INT', ], + InitialPriority => [ 'INT', ], + FinalPriority => [ 'INT', ], + Priority => [ 'INT', ], + TimeLeft => [ 'INT', ], + TimeWorked => [ 'INT', ], + MemberOf => [ 'LINK' => To => 'MemberOf', ], + DependsOn => [ 'LINK' => To => 'DependsOn', ], + RefersTo => [ 'LINK' => To => 'RefersTo', ], + HasMember => [ 'LINK' => From => 'MemberOf', ], + DependentOn => [ 'LINK' => From => 'DependsOn', ], + DependedOnBy => [ 'LINK' => From => 'DependsOn', ], + ReferredToBy => [ 'LINK' => From => 'RefersTo', ], Told => ['DATE' => 'Told',], Starts => ['DATE' => 'Starts',], Started => ['DATE' => 'Started',], @@ -95,65 +126,83 @@ my %FIELDS = LastUpdated => ['DATE' => 'LastUpdated',], Created => ['DATE' => 'Created',], Subject => ['STRING',], - Type => ['STRING',], Content => ['TRANSFIELD',], ContentType => ['TRANSFIELD',], Filename => ['TRANSFIELD',], TransactionDate => ['TRANSDATE',], Requestor => ['WATCHERFIELD' => 'Requestor',], - CC => ['WATCHERFIELD' => 'Cc',], - AdminCC => ['WATCHERFIELD' => 'AdminCC',], + Requestors => ['WATCHERFIELD' => 'Requestor',], + Cc => ['WATCHERFIELD' => 'Cc',], + AdminCc => ['WATCHERFIELD' => 'AdminCc',], Watcher => ['WATCHERFIELD'], LinkedTo => ['LINKFIELD',], CustomFieldValue =>['CUSTOMFIELD',], CF => ['CUSTOMFIELD',], - ); + Updated => [ 'TRANSDATE', ], + RequestorGroup => [ 'MEMBERSHIPFIELD' => 'Requestor', ], + CCGroup => [ 'MEMBERSHIPFIELD' => 'Cc', ], + AdminCCGroup => [ 'MEMBERSHIPFIELD' => 'AdminCc', ], + WatcherGroup => [ 'MEMBERSHIPFIELD', ], +); # Mapping of Field Type to Function -my %dispatch = - ( ENUM => \&_EnumLimit, - INT => \&_IntLimit, - LINK => \&_LinkLimit, - DATE => \&_DateLimit, - STRING => \&_StringLimit, - TRANSFIELD => \&_TransLimit, - TRANSDATE => \&_TransDateLimit, +my %dispatch = ( + ENUM => \&_EnumLimit, + INT => \&_IntLimit, + LINK => \&_LinkLimit, + DATE => \&_DateLimit, + STRING => \&_StringLimit, + TRANSFIELD => \&_TransLimit, + TRANSDATE => \&_TransDateLimit, WATCHERFIELD => \&_WatcherLimit, - LINKFIELD => \&_LinkFieldLimit, - CUSTOMFIELD => \&_CustomFieldLimit, - ); + MEMBERSHIPFIELD => \&_WatcherMembershipLimit, + LINKFIELD => \&_LinkFieldLimit, + CUSTOMFIELD => \&_CustomFieldLimit, +); +my %can_bundle = ( WATCHERFIELD => "yeps", ); # Default EntryAggregator per type +# if you specify OP, you must specify all valid OPs my %DefaultEA = ( - INT => 'AND', - ENUM => { '=' => 'OR', - '!='=> 'AND' - }, - DATE => 'AND', - STRING => { '=' => 'OR', - '!='=> 'AND', - 'LIKE'=> 'AND', - 'NOT LIKE' => 'AND' - }, - TRANSFIELD => 'AND', - TRANSDATE => 'AND', - LINKFIELD => 'AND', - TARGET => 'AND', - BASE => 'AND', - WATCHERFIELD => { '=' => 'OR', - '!='=> 'AND', - 'LIKE'=> 'OR', - 'NOT LIKE' => 'AND' - }, - - CUSTOMFIELD => 'OR', - ); - + INT => 'AND', + ENUM => { + '=' => 'OR', + '!=' => 'AND' + }, + DATE => { + '=' => 'OR', + '>=' => 'AND', + '<=' => 'AND', + '>' => 'AND', + '<' => 'AND' + }, + STRING => { + '=' => 'OR', + '!=' => 'AND', + 'LIKE' => 'AND', + 'NOT LIKE' => 'AND' + }, + TRANSFIELD => 'AND', + TRANSDATE => 'AND', + LINK => 'OR', + LINKFIELD => 'AND', + TARGET => 'AND', + BASE => 'AND', + WATCHERFIELD => { + '=' => 'OR', + '!=' => 'AND', + 'LIKE' => 'OR', + 'NOT LIKE' => 'AND' + }, + + CUSTOMFIELD => 'OR', +); # Helper functions for passing the above lexically scoped tables above # into Tickets_Overlay_SQL. -sub FIELDS { return \%FIELDS } -sub dispatch { return \%dispatch } +sub FIELDS { return \%FIELDS } +sub dispatch { return \%dispatch } +sub can_bundle { return \%can_bundle } # Bring in the clowns. require RT::Tickets_Overlay_SQL; @@ -161,10 +210,10 @@ require RT::Tickets_Overlay_SQL; # {{{ sub SortFields @SORTFIELDS = qw(id Status - Queue Subject - Owner Created Due Starts Started - Told - Resolved LastUpdated Priority TimeWorked TimeLeft); + Queue Subject + Owner Created Due Starts Started + Told + Resolved LastUpdated Priority TimeWorked TimeLeft); =head2 SortFields @@ -173,14 +222,12 @@ Returns the list of fields that lists of tickets can easily be sorted by =cut sub SortFields { - my $self = shift; - return(@SORTFIELDS); + my $self = shift; + return (@SORTFIELDS); } - # }}} - # BEGIN SQL STUFF ********************************* =head1 Limit Helper Routines @@ -215,26 +262,27 @@ Meta Data: =cut sub _EnumLimit { - my ($sb,$field,$op,$value,@rest) = @_; + my ( $sb, $field, $op, $value, @rest ) = @_; - # SQL::Statement changes != to <>. (Can we remove this now?) - $op = "!=" if $op eq "<>"; + # SQL::Statement changes != to <>. (Can we remove this now?) + $op = "!=" if $op eq "<>"; - die "Invalid Operation: $op for $field" - unless $op eq "=" or $op eq "!="; + die "Invalid Operation: $op for $field" + unless $op eq "=" or $op eq "!="; - my $meta = $FIELDS{$field}; - if (defined $meta->[1]) { - my $class = "RT::" . $meta->[1]; - my $o = $class->new($sb->CurrentUser); - $o->Load( $value ); - $value = $o->Id; - } - $sb->_SQLLimit( FIELD => $field,, - VALUE => $value, - OPERATOR => $op, - @rest, - ); + my $meta = $FIELDS{$field}; + if ( defined $meta->[1] ) { + my $class = "RT::" . $meta->[1]; + my $o = $class->new( $sb->CurrentUser ); + $o->Load($value); + $value = $o->Id; + } + $sb->_SQLLimit( + FIELD => $field, + VALUE => $value, + OPERATOR => $op, + @rest, + ); } =head2 _IntLimit @@ -248,88 +296,138 @@ Meta Data: =cut sub _IntLimit { - my ($sb,$field,$op,$value,@rest) = @_; + my ( $sb, $field, $op, $value, @rest ) = @_; - die "Invalid Operator $op for $field" - unless $op =~ /^(=|!=|>|<|>=|<=)$/; + die "Invalid Operator $op for $field" + unless $op =~ /^(=|!=|>|<|>=|<=)$/; - $sb->_SQLLimit( - FIELD => $field, - VALUE => $value, - OPERATOR => $op, - @rest, - ); + $sb->_SQLLimit( + FIELD => $field, + VALUE => $value, + OPERATOR => $op, + @rest, + ); } - =head2 _LinkLimit Handle fields which deal with links between tickets. (MemberOf, DependsOn) Meta Data: 1: Direction (From,To) - 2: Relationship Type (MemberOf, DependsOn,RefersTo) + 2: Link Type (MemberOf, DependsOn,RefersTo) =cut sub _LinkLimit { - my ($sb,$field,$op,$value,@rest) = @_; + my ( $sb, $field, $op, $value, @rest ) = @_; - die "Op must be =" - unless $op eq "="; + my $meta = $FIELDS{$field}; + die "Invalid Operator $op for $field" unless $op =~ /^(=|!=|IS)/io; - my $meta = $FIELDS{$field}; - die "Incorrect Meta Data for $field" - unless (defined $meta->[1] and defined $meta->[2]); + die "Incorrect Metadata for $field" + unless ( defined $meta->[1] and defined $meta->[2] ); - my $LinkAlias = $sb->NewAlias ('Links'); + my $direction = $meta->[1]; - $sb->_OpenParen(); + my $matchfield; + my $linkfield; + my $is_local = 1; + my $is_null = 0; + if ( $direction eq 'To' ) { + $matchfield = "Target"; + $linkfield = "Base"; - $sb->_SQLLimit( - ALIAS => $LinkAlias, - FIELD => 'Type', - OPERATOR => '=', - VALUE => $meta->[2], - @rest, - ); - - if ($meta->[1] eq "To") { - my $matchfield = ( $value =~ /^(\d+)$/ ? "LocalTarget" : "Target" ); - - $sb->_SQLLimit( - ALIAS => $LinkAlias, - ENTRYAGGREGATOR => 'AND', - FIELD => $matchfield, - OPERATOR => '=', - VALUE => $value , - ); - - #If we're searching on target, join the base to ticket.id - $sb->Join( ALIAS1 => 'main', FIELD1 => $sb->{'primary_key'}, - ALIAS2 => $LinkAlias, FIELD2 => 'LocalBase'); - - } elsif ( $meta->[1] eq "From" ) { - my $matchfield = ( $value =~ /^(\d+)$/ ? "LocalBase" : "Base" ); + } + elsif ( $direction eq 'From' ) { + $linkfield = "Target"; + $matchfield = "Base"; - $sb->_SQLLimit( - ALIAS => $LinkAlias, - ENTRYAGGREGATOR => 'AND', - FIELD => $matchfield, - OPERATOR => '=', - VALUE => $value , - ); + } + else { + die "Invalid link direction '$meta->[1]' for $field\n"; + } - #If we're searching on base, join the target to ticket.id - $sb->Join( ALIAS1 => 'main', FIELD1 => $sb->{'primary_key'}, - ALIAS2 => $LinkAlias, FIELD2 => 'LocalTarget'); + if ( $op eq '=' || $op =~ /^is/oi ) { + if ( $value eq '' || $value =~ /^null$/io ) { + $is_null = 1; + } + elsif ( $value =~ /\D/o ) { + $is_local = 0; + } + else { + $is_local = 1; + } + } - } else { - die "Invalid link direction '$meta->[1]' for $field\n"; - } +#For doing a left join to find "unlinked tickets" we want to generate a query that looks like this +# SELECT main.* FROM Tickets main +# LEFT JOIN Links Links_1 ON ( (Links_1.Type = 'MemberOf') +# AND(main.id = Links_1.LocalTarget)) +# WHERE ((main.EffectiveId = main.id)) +# AND ((main.Status != 'deleted')) +# AND (Links_1.LocalBase IS NULL); + + if ($is_null) { + my $linkalias = $sb->Join( + TYPE => 'left', + ALIAS1 => 'main', + FIELD1 => 'id', + TABLE2 => 'Links', + FIELD2 => 'Local' . $linkfield + ); + + $sb->SUPER::Limit( + LEFTJOIN => $linkalias, + FIELD => 'Type', + OPERATOR => '=', + VALUE => $meta->[2], + @rest, + ); + + $sb->_SQLLimit( + ALIAS => $linkalias, + ENTRYAGGREGATOR => 'AND', + FIELD => ( $is_local ? "Local$matchfield" : $matchfield ), + OPERATOR => 'IS', + VALUE => 'NULL', + QUOTEVALUE => '0', + ); - $sb->_CloseParen(); + } + else { + $sb->{_sql_linkalias} = $sb->NewAlias('Links') + unless defined $sb->{_sql_linkalias}; + + $sb->_OpenParen(); + + $sb->_SQLLimit( + ALIAS => $sb->{_sql_linkalias}, + FIELD => 'Type', + OPERATOR => '=', + VALUE => $meta->[2], + @rest, + ); + + $sb->_SQLLimit( + ALIAS => $sb->{_sql_linkalias}, + ENTRYAGGREGATOR => 'AND', + FIELD => ( $is_local ? "Local$matchfield" : $matchfield ), + OPERATOR => '=', + VALUE => $value, + ); + + #If we're searching on target, join the base to ticket.id + $sb->_SQLJoin( + ALIAS1 => 'main', + FIELD1 => $sb->{'primary_key'}, + ALIAS2 => $sb->{_sql_linkalias}, + FIELD2 => 'Local' . $linkfield + ); + + $sb->_CloseParen(); + } } =head2 _DateLimit @@ -337,35 +435,66 @@ sub _LinkLimit { Handle date fields. (Created, LastTold..) Meta Data: - 1: type of relationship. (Probably not necessary.) + 1: type of link. (Probably not necessary.) =cut sub _DateLimit { - my ($sb,$field,$op,$value,@rest) = @_; + my ( $sb, $field, $op, $value, @rest ) = @_; - die "Invalid Date Op: $op" - unless $op =~ /^(=|!=|>|<|>=|<=)$/; + die "Invalid Date Op: $op" + unless $op =~ /^(=|>|<|>=|<=)$/; - my $meta = $FIELDS{$field}; - die "Incorrect Meta Data for $field" - unless (defined $meta->[1]); + my $meta = $FIELDS{$field}; + die "Incorrect Meta Data for $field" + unless ( defined $meta->[1] ); - require Time::ParseDate; - use POSIX 'strftime'; + use POSIX 'strftime'; + + my $date = RT::Date->new($sb->CurrentUser); + $date->Set(Format => 'unknown', Value => $value); + my $time = $date->Unix; + + if ( $op eq "=" ) { + + # if we're specifying =, that means we want everything on a + # particular single day. in the database, we need to check for > + # and < the edges of that day. + + my $daystart = + strftime( "%Y-%m-%d %H:%M", gmtime( $time - ( $time % 86400 ) ) ); + my $dayend = strftime( "%Y-%m-%d %H:%M", + gmtime( $time + ( 86399 - $time % 86400 ) ) ); + + $sb->_OpenParen; - my $time = Time::ParseDate::parsedate( $value, - UK => $RT::DateDayBeforeMonth, - PREFER_PAST => $RT::AmbiguousDayInPast, - PREFER_FUTURE => !($RT::AmbiguousDayInPast)); - $value = strftime("%Y-%m-%d %H:%M",localtime($time)); + $sb->_SQLLimit( + FIELD => $meta->[1], + OPERATOR => ">=", + VALUE => $daystart, + @rest, + ); - $sb->_SQLLimit( - FIELD => $meta->[1], - OPERATOR => $op, - VALUE => $value, - @rest, - ); + $sb->_SQLLimit( + FIELD => $meta->[1], + OPERATOR => "<=", + VALUE => $dayend, + @rest, + ENTRYAGGREGATOR => 'AND', + ); + + $sb->_CloseParen; + + } + else { + $value = strftime( "%Y-%m-%d %H:%M", gmtime($time) ); + $sb->_SQLLimit( + FIELD => $meta->[1], + OPERATOR => $op, + VALUE => $value, + @rest, + ); + } } =head2 _StringLimit @@ -378,19 +507,19 @@ Meta Data: =cut sub _StringLimit { - my ($sb,$field,$op,$value,@rest) = @_; + my ( $sb, $field, $op, $value, @rest ) = @_; - # FIXME: - # Valid Operators: - # =, !=, LIKE, NOT LIKE + # FIXME: + # Valid Operators: + # =, !=, LIKE, NOT LIKE - $sb->_SQLLimit( - FIELD => $field, - OPERATOR => $op, - VALUE => $value, - CASESENSITIVE => 0, - @rest, - ); + $sb->_SQLLimit( + FIELD => $field, + OPERATOR => $op, + VALUE => $value, + CASESENSITIVE => 0, + @rest, + ); } =head2 _TransDateLimit @@ -404,40 +533,91 @@ Meta Data: =cut +# This routine should really be factored into translimit. sub _TransDateLimit { - my ($sb,$field,$op,$value,@rest) = @_; + my ( $sb, $field, $op, $value, @rest ) = @_; + + # See the comments for TransLimit, they apply here too + + $sb->{_sql_transalias} = $sb->NewAlias('Transactions') + unless defined $sb->{_sql_transalias}; + $sb->{_sql_trattachalias} = $sb->NewAlias('Attachments') + unless defined $sb->{_sql_trattachalias}; + + my $date = RT::Date->new( $sb->CurrentUser ); + $date->Set( Format => 'unknown', Value => $value ); + my $time = $date->Unix; + + $sb->_OpenParen; + if ( $op eq "=" ) { + + # if we're specifying =, that means we want everything on a + # particular single day. in the database, we need to check for > + # and < the edges of that day. + + my $daystart = strftime( "%Y-%m-%d %H:%M", + gmtime( $time - ( $time % 86400 ) ) ); + my $dayend = strftime( "%Y-%m-%d %H:%M", + gmtime( $time + ( 86399 - $time % 86400 ) ) ); + + $sb->_SQLLimit( + ALIAS => $sb->{_sql_transalias}, + FIELD => 'Created', + OPERATOR => ">=", + VALUE => $daystart, + CASESENSITIVE => 0, + @rest + ); + $sb->_SQLLimit( + ALIAS => $sb->{_sql_transalias}, + FIELD => 'Created', + OPERATOR => "<=", + VALUE => $dayend, + CASESENSITIVE => 0, + @rest, + ENTRYAGGREGATOR => 'AND', + ); - # See the comments for TransLimit, they apply here too + } - $sb->{_sql_transalias} = $sb->NewAlias ('Transactions') - unless defined $sb->{_sql_transalias}; - $sb->{_sql_trattachalias} = $sb->NewAlias ('Attachments') - unless defined $sb->{_sql_trattachalias}; + # not searching for a single day + else { - $sb->_OpenParen; + #Search for the right field + $sb->_SQLLimit( + ALIAS => $sb->{_sql_transalias}, + FIELD => 'Created', + OPERATOR => $op, + VALUE => $value, + CASESENSITIVE => 0, + @rest + ); + } - # Join Transactions To Attachments - $sb->Join( ALIAS1 => $sb->{_sql_trattachalias}, FIELD1 => 'TransactionId', - ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'id'); + # Join Transactions To Attachments - # Join Transactions to Tickets - $sb->Join( ALIAS1 => 'main', FIELD1 => $sb->{'primary_key'}, # UGH! - ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'Ticket'); + $sb->_SQLJoin( + ALIAS1 => $sb->{_sql_trattachalias}, + FIELD1 => 'TransactionId', + ALIAS2 => $sb->{_sql_transalias}, + FIELD2 => 'id', + ); - my $d = new RT::Date( $sb->CurrentUser ); - $d->Set($value); - $value = $d->ISO; + # Join Transactions to Tickets + $sb->_SQLJoin( + ALIAS1 => 'main', + FIELD1 => $sb->{'primary_key'}, # UGH! + ALIAS2 => $sb->{_sql_transalias}, + FIELD2 => 'ObjectId' + ); - #Search for the right field - $sb->_SQLLimit(ALIAS => $sb->{_sql_trattachalias}, - FIELD => 'Created', - OPERATOR => $op, - VALUE => $value, - CASESENSITIVE => 0, - @rest - ); + $sb->SUPER::Limit( + ALIAS => $sb->{_sql_transalias}, + FIELD => 'ObjectType', + VALUE => 'RT::Ticket' + ); - $sb->_CloseParen; + $sb->_CloseParen; } =head2 _TransLimit @@ -450,65 +630,81 @@ Meta Data: =cut sub _TransLimit { - # Content, ContentType, Filename - # If only this was this simple. We've got to do something - # complicated here: + # Content, ContentType, Filename - #Basically, we want to make sure that the limits apply to - #the same attachment, rather than just another attachment - #for the same ticket, no matter how many clauses we lump - #on. We put them in TicketAliases so that they get nuked - #when we redo the join. + # If only this was this simple. We've got to do something + # complicated here: - # In the SQL, we might have - # (( Content = foo ) or ( Content = bar AND Content = baz )) - # The AND group should share the same Alias. + #Basically, we want to make sure that the limits apply to + #the same attachment, rather than just another attachment + #for the same ticket, no matter how many clauses we lump + #on. We put them in TicketAliases so that they get nuked + #when we redo the join. - # Actually, maybe it doesn't matter. We use the same alias and it - # works itself out? (er.. different.) + # In the SQL, we might have + # (( Content = foo ) or ( Content = bar AND Content = baz )) + # The AND group should share the same Alias. - # Steal more from _ProcessRestrictions + # Actually, maybe it doesn't matter. We use the same alias and it + # works itself out? (er.. different.) - # FIXME: Maybe look at the previous FooLimit call, and if it was a - # TransLimit and EntryAggregator == AND, reuse the Aliases? + # Steal more from _ProcessRestrictions - # Or better - store the aliases on a per subclause basis - since - # those are going to be the things we want to relate to each other, - # anyway. + # FIXME: Maybe look at the previous FooLimit call, and if it was a + # TransLimit and EntryAggregator == AND, reuse the Aliases? - # maybe we should not allow certain kinds of aggregation of these - # clauses and do a psuedo regex instead? - the problem is getting - # them all into the same subclause when you have (A op B op C) - the - # way they get parsed in the tree they're in different subclauses. + # Or better - store the aliases on a per subclause basis - since + # those are going to be the things we want to relate to each other, + # anyway. - my ($sb,$field,$op,$value,@rest) = @_; + # maybe we should not allow certain kinds of aggregation of these + # clauses and do a psuedo regex instead? - the problem is getting + # them all into the same subclause when you have (A op B op C) - the + # way they get parsed in the tree they're in different subclauses. - $sb->{_sql_transalias} = $sb->NewAlias ('Transactions') - unless defined $sb->{_sql_transalias}; - $sb->{_sql_trattachalias} = $sb->NewAlias ('Attachments') - unless defined $sb->{_sql_trattachalias}; + my ( $self, $field, $op, $value, @rest ) = @_; - $sb->_OpenParen; + $self->{_sql_transalias} = $self->NewAlias('Transactions') + unless defined $self->{_sql_transalias}; + $self->{_sql_trattachalias} = $self->NewAlias('Attachments') + unless defined $self->{_sql_trattachalias}; - # Join Transactions To Attachments - $sb->Join( ALIAS1 => $sb->{_sql_trattachalias}, FIELD1 => 'TransactionId', - ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'id'); + $self->_OpenParen; - # Join Transactions to Tickets - $sb->Join( ALIAS1 => 'main', FIELD1 => $sb->{'primary_key'}, # UGH! - ALIAS2 => $sb->{_sql_transalias}, FIELD2 => 'Ticket'); + #Search for the right field + $self->_SQLLimit( + ALIAS => $self->{_sql_trattachalias}, + FIELD => $field, + OPERATOR => $op, + VALUE => $value, + CASESENSITIVE => 0, + @rest + ); - #Search for the right field - $sb->_SQLLimit(ALIAS => $sb->{_sql_trattachalias}, - FIELD => $field, - OPERATOR => $op, - VALUE => $value, - CASESENSITIVE => 0, - @rest - ); + $self->_SQLJoin( + ALIAS1 => $self->{_sql_trattachalias}, + FIELD1 => 'TransactionId', + ALIAS2 => $self->{_sql_transalias}, + FIELD2 => 'id' + ); - $sb->_CloseParen; + # Join Transactions to Tickets + $self->_SQLJoin( + ALIAS1 => 'main', + FIELD1 => $self->{'primary_key'}, # Why not use "id" here? + ALIAS2 => $self->{_sql_transalias}, + FIELD2 => 'ObjectId' + ); + + $self->SUPER::Limit( + ALIAS => $self->{_sql_transalias}, + FIELD => 'ObjectType', + VALUE => 'RT::Ticket', + ENTRYAGGREGATOR => 'AND' + ); + + $self->_CloseParen; } @@ -519,134 +715,376 @@ Handle watcher limits. (Requestor, CC, etc..) Meta Data: 1: Field to query on + +=begin testing + +# Test to make sure that you can search for tickets by requestor address and +# by requestor name. + +my ($id,$msg); +my $u1 = RT::User->new($RT::SystemUser); +($id, $msg) = $u1->Create( Name => 'RequestorTestOne', EmailAddress => 'rqtest1@example.com'); +ok ($id,$msg); +my $u2 = RT::User->new($RT::SystemUser); +($id, $msg) = $u2->Create( Name => 'RequestorTestTwo', EmailAddress => 'rqtest2@example.com'); +ok ($id,$msg); + +my $t1 = RT::Ticket->new($RT::SystemUser); +my ($trans); +($id,$trans,$msg) =$t1->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u1->EmailAddress]); +ok ($id, $msg); + +my $t2 = RT::Ticket->new($RT::SystemUser); +($id,$trans,$msg) =$t2->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u2->EmailAddress]); +ok ($id, $msg); + + +my $t3 = RT::Ticket->new($RT::SystemUser); +($id,$trans,$msg) =$t3->Create (Queue => 'general', Subject => 'Requestor test one', Requestor => [$u2->EmailAddress, $u1->EmailAddress]); +ok ($id, $msg); + + +my $tix1 = RT::Tickets->new($RT::SystemUser); +$tix1->FromSQL('Requestor.EmailAddress LIKE "rqtest1" OR Requestor.EmailAddress LIKE "rqtest2"'); + +is ($tix1->Count, 3); + +my $tix2 = RT::Tickets->new($RT::SystemUser); +$tix2->FromSQL('Requestor.Name LIKE "TestOne" OR Requestor.Name LIKE "TestTwo"'); + +is ($tix2->Count, 3); + + +my $tix3 = RT::Tickets->new($RT::SystemUser); +$tix3->FromSQL('Requestor.EmailAddress LIKE "rqtest1"'); + +is ($tix3->Count, 2); + +my $tix4 = RT::Tickets->new($RT::SystemUser); +$tix4->FromSQL('Requestor.Name LIKE "TestOne" '); + +is ($tix4->Count, 2); + +# Searching for tickets that have two requestors isn't supported +# There's no way to differentiate "one requestor name that matches foo and bar" +# and "two requestors, one matching foo and one matching bar" + +# my $tix5 = RT::Tickets->new($RT::SystemUser); +# $tix5->FromSQL('Requestor.Name LIKE "TestOne" AND Requestor.Name LIKE "TestTwo"'); +# +# is ($tix5->Count, 1); +# +# my $tix6 = RT::Tickets->new($RT::SystemUser); +# $tix6->FromSQL('Requestor.EmailAddress LIKE "rqtest1" AND Requestor.EmailAddress LIKE "rqtest2"'); +# +# is ($tix6->Count, 1); + + +=end testing + =cut sub _WatcherLimit { - my ($self,$field,$op,$value,@rest) = @_; - my %rest = @rest; + my $self = shift; + my $field = shift; + my $op = shift; + my $value = shift; + my %rest = (@_); - $self->_OpenParen; + $self->_OpenParen; - my $groups = $self->NewAlias('Groups'); - my $group_princs = $self->NewAlias('Principals'); - my $groupmembers = $self->NewAlias('CachedGroupMembers'); - my $member_princs = $self->NewAlias('Principals'); - my $users = $self->NewAlias('Users'); + # Find out what sort of watcher we're looking for + my $fieldname; + if ( ref $field ) { + $fieldname = $field->[0]->[0]; + } + else { + $fieldname = $field; + } + my $meta = $FIELDS{$fieldname}; + my $type = ( defined $meta->[1] ? $meta->[1] : undef ); + +# We only want _one_ clause for all of requestors, cc, admincc +# It's less flexible than what we used to do, but now it sort of actually works. (no huge cartesian products that hose the db) + my $groups = $self->{ 'watcherlimit_' . ('global') . "_groups" } ||= + $self->NewAlias('Groups'); + my $groupmembers = + $self->{ 'watcherlimit_' . ('global') . "_groupmembers" } ||= + $self->NewAlias('CachedGroupMembers'); + my $users = $self->{ 'watcherlimit_' . ('global') . "_users" } ||= + $self->NewAlias('Users'); + +# Use regular joins instead of SQL joins since we don't want the joins inside ticketsql or we get a huge cartesian product + $self->SUPER::Limit( + ALIAS => $groups, + FIELD => 'Domain', + VALUE => 'RT::Ticket-Role', + ENTRYAGGREGATOR => 'AND' + ); + $self->Join( + ALIAS1 => $groups, + FIELD1 => 'Instance', + ALIAS2 => 'main', + FIELD2 => 'id' + ); + $self->Join( + ALIAS1 => $groups, + FIELD1 => 'id', + ALIAS2 => $groupmembers, + FIELD2 => 'GroupId' + ); + $self->Join( + ALIAS1 => $groupmembers, + FIELD1 => 'MemberId', + ALIAS2 => $users, + FIELD2 => 'id' + ); + + # If we're looking for multiple watchers of a given type, + # TicketSQL will be handing it to us as an array of clauses in + # $field + if ( ref $field ) { # gross hack + $self->_OpenParen; + for my $chunk (@$field) { + ( $field, $op, $value, %rest ) = @$chunk; + $self->_SQLLimit( + ALIAS => $users, + FIELD => $rest{SUBKEY} || 'EmailAddress', + VALUE => $value, + OPERATOR => $op, + CASESENSITIVE => 0, + %rest + ); + } + $self->_CloseParen; + } + else { + $self->_SQLLimit( + ALIAS => $users, + FIELD => $rest{SUBKEY} || 'EmailAddress', + VALUE => $value, + OPERATOR => $op, + CASESENSITIVE => 0, + %rest + ); + } + $self->_SQLLimit( + ALIAS => $groups, + FIELD => 'Type', + VALUE => $type, + ENTRYAGGREGATOR => 'AND' + ) + if ($type); - #Find user watchers -# my $subclause = undef; -# my $aggregator = 'OR'; -# if ($restriction->{'OPERATOR'} =~ /!|NOT/i ){ -# $subclause = 'AndEmailIsNot'; -# $aggregator = 'AND'; -# } + $self->_CloseParen; +} +=head2 _WatcherMembershipLimit - $self->_SQLLimit(ALIAS => $users, - FIELD => $rest{SUBKEY} || 'EmailAddress', - VALUE => $value, - OPERATOR => $op, - CASESENSITIVE => 0, - @rest, - ); +Handle watcher membership limits, i.e. whether the watcher belongs to a +specific group or not. - # {{{ Tie to groups for tickets we care about - $self->_SQLLimit(ALIAS => $groups, - FIELD => 'Domain', - VALUE => 'RT::Ticket-Role', - ENTRYAGGREGATOR => 'AND'); +Meta Data: + 1: Field to query on - $self->Join(ALIAS1 => $groups, FIELD1 => 'Instance', - ALIAS2 => 'main', FIELD2 => 'id'); - # }}} +SELECT DISTINCT main.* +FROM + Tickets main, + Groups Groups_1, + CachedGroupMembers CachedGroupMembers_2, + Users Users_3 +WHERE ( + (main.EffectiveId = main.id) +) AND ( + (main.Status != 'deleted') +) AND ( + (main.Type = 'ticket') +) AND ( + ( + (Users_3.EmailAddress = '22') + AND + (Groups_1.Domain = 'RT::Ticket-Role') + AND + (Groups_1.Type = 'RequestorGroup') + ) +) AND + Groups_1.Instance = main.id +AND + Groups_1.id = CachedGroupMembers_2.GroupId +AND + CachedGroupMembers_2.MemberId = Users_3.id +ORDER BY main.id ASC +LIMIT 25 - # If we care about which sort of watcher - my $meta = $FIELDS{$field}; - my $type = ( defined $meta->[1] ? $meta->[1] : undef ); +=cut - if ( $type ) { - $self->_SQLLimit(ALIAS => $groups, - FIELD => 'Type', - VALUE => $type, - ENTRYAGGREGATOR => 'AND'); - } +sub _WatcherMembershipLimit { + my ( $self, $field, $op, $value, @rest ) = @_; + my %rest = @rest; + + $self->_OpenParen; + + my $groups = $self->NewAlias('Groups'); + my $groupmembers = $self->NewAlias('CachedGroupMembers'); + my $users = $self->NewAlias('Users'); + my $memberships = $self->NewAlias('CachedGroupMembers'); + + if ( ref $field ) { # gross hack + my @bundle = @$field; + $self->_OpenParen; + for my $chunk (@bundle) { + ( $field, $op, $value, @rest ) = @$chunk; + $self->_SQLLimit( + ALIAS => $memberships, + FIELD => 'GroupId', + VALUE => $value, + OPERATOR => $op, + @rest, + ); + } + $self->_CloseParen; + } + else { + $self->_SQLLimit( + ALIAS => $memberships, + FIELD => 'GroupId', + VALUE => $value, + OPERATOR => $op, + @rest, + ); + } - $self->Join (ALIAS1 => $groups, FIELD1 => 'id', - ALIAS2 => $group_princs, FIELD2 => 'ObjectId'); - $self->_SQLLimit(ALIAS => $group_princs, - FIELD => 'PrincipalType', - VALUE => 'Group', - ENTRYAGGREGATOR => 'AND'); - $self->Join( ALIAS1 => $group_princs, FIELD1 => 'id', - ALIAS2 => $groupmembers, FIELD2 => 'GroupId'); + # {{{ Tie to groups for tickets we care about + $self->_SQLLimit( + ALIAS => $groups, + FIELD => 'Domain', + VALUE => 'RT::Ticket-Role', + ENTRYAGGREGATOR => 'AND' + ); + + $self->Join( + ALIAS1 => $groups, + FIELD1 => 'Instance', + ALIAS2 => 'main', + FIELD2 => 'id' + ); + + # }}} + + # If we care about which sort of watcher + my $meta = $FIELDS{$field}; + my $type = ( defined $meta->[1] ? $meta->[1] : undef ); + + if ($type) { + $self->_SQLLimit( + ALIAS => $groups, + FIELD => 'Type', + VALUE => $type, + ENTRYAGGREGATOR => 'AND' + ); + } - $self->Join( ALIAS1 => $groupmembers, FIELD1 => 'MemberId', - ALIAS2 => $member_princs, FIELD2 => 'id'); - $self->Join (ALIAS1 => $member_princs, FIELD1 => 'ObjectId', - ALIAS2 => $users, FIELD2 => 'id'); + $self->Join( + ALIAS1 => $groups, + FIELD1 => 'id', + ALIAS2 => $groupmembers, + FIELD2 => 'GroupId' + ); - $self->_CloseParen; + $self->Join( + ALIAS1 => $groupmembers, + FIELD1 => 'MemberId', + ALIAS2 => $users, + FIELD2 => 'id' + ); + + $self->Join( + ALIAS1 => $memberships, + FIELD1 => 'MemberId', + ALIAS2 => $users, + FIELD2 => 'id' + ); + + $self->_CloseParen; } sub _LinkFieldLimit { - my $restriction; - my $self; - my $LinkAlias; - my %args; - if ($restriction->{'TYPE'}) { - $self->SUPER::Limit(ALIAS => $LinkAlias, - ENTRYAGGREGATOR => 'AND', - FIELD => 'Type', - OPERATOR => '=', - VALUE => $restriction->{'TYPE'} ); - } - - #If we're trying to limit it to things that are target of - if ($restriction->{'TARGET'}) { - # If the TARGET is an integer that means that we want to look at - # the LocalTarget field. otherwise, we want to look at the - # "Target" field - my ($matchfield); - if ($restriction->{'TARGET'} =~/^(\d+)$/) { - $matchfield = "LocalTarget"; - } else { - $matchfield = "Target"; + my $restriction; + my $self; + my $LinkAlias; + my %args; + if ( $restriction->{'TYPE'} ) { + $self->SUPER::Limit( + ALIAS => $LinkAlias, + ENTRYAGGREGATOR => 'AND', + FIELD => 'Type', + OPERATOR => '=', + VALUE => $restriction->{'TYPE'} + ); } - $self->SUPER::Limit(ALIAS => $LinkAlias, - ENTRYAGGREGATOR => 'AND', - FIELD => $matchfield, - OPERATOR => '=', - VALUE => $restriction->{'TARGET'} ); - #If we're searching on target, join the base to ticket.id - $self->Join( ALIAS1 => 'main', FIELD1 => $self->{'primary_key'}, - ALIAS2 => $LinkAlias, - FIELD2 => 'LocalBase'); - } - #If we're trying to limit it to things that are base of - elsif ($restriction->{'BASE'}) { - # If we're trying to match a numeric link, we want to look at - # LocalBase, otherwise we want to look at "Base" - my ($matchfield); - if ($restriction->{'BASE'} =~/^(\d+)$/) { - $matchfield = "LocalBase"; - } else { - $matchfield = "Base"; + + #If we're trying to limit it to things that are target of + if ( $restriction->{'TARGET'} ) { + + # If the TARGET is an integer that means that we want to look at + # the LocalTarget field. otherwise, we want to look at the + # "Target" field + my ($matchfield); + if ( $restriction->{'TARGET'} =~ /^(\d+)$/ ) { + $matchfield = "LocalTarget"; + } + else { + $matchfield = "Target"; + } + $self->SUPER::Limit( + ALIAS => $LinkAlias, + ENTRYAGGREGATOR => 'AND', + FIELD => $matchfield, + OPERATOR => '=', + VALUE => $restriction->{'TARGET'} + ); + + #If we're searching on target, join the base to ticket.id + $self->_SQLJoin( + ALIAS1 => 'main', + FIELD1 => $self->{'primary_key'}, + ALIAS2 => $LinkAlias, + FIELD2 => 'LocalBase' + ); } - $self->SUPER::Limit(ALIAS => $LinkAlias, - ENTRYAGGREGATOR => 'AND', - FIELD => $matchfield, - OPERATOR => '=', - VALUE => $restriction->{'BASE'} ); - #If we're searching on base, join the target to ticket.id - $self->Join( ALIAS1 => 'main', FIELD1 => $self->{'primary_key'}, - ALIAS2 => $LinkAlias, - FIELD2 => 'LocalTarget') - } -} + #If we're trying to limit it to things that are base of + elsif ( $restriction->{'BASE'} ) { + # If we're trying to match a numeric link, we want to look at + # LocalBase, otherwise we want to look at "Base" + my ($matchfield); + if ( $restriction->{'BASE'} =~ /^(\d+)$/ ) { + $matchfield = "LocalBase"; + } + else { + $matchfield = "Base"; + } + + $self->SUPER::Limit( + ALIAS => $LinkAlias, + ENTRYAGGREGATOR => 'AND', + FIELD => $matchfield, + OPERATOR => '=', + VALUE => $restriction->{'BASE'} + ); + + #If we're searching on base, join the target to ticket.id + $self->_SQLJoin( + ALIAS1 => 'main', + FIELD1 => $self->{'primary_key'}, + ALIAS2 => $LinkAlias, + FIELD2 => 'LocalTarget' + ); + } +} =head2 KeywordLimit @@ -658,91 +1096,136 @@ Meta Data: =cut sub _CustomFieldLimit { - my ($self,$_field,$op,$value,@rest) = @_; - - my %rest = @rest; - my $field = $rest{SUBKEY} || die "No field specified"; - - # For our sanity, we can only limit on one queue at a time - my $queue = undef; - # Ugh. This will not do well for things with underscores in them - - use RT::CustomFields; - my $CF = RT::CustomFields->new( $self->CurrentUser ); - #$CF->Load( $cfid} ); - - my $q; - if ($field =~ /^(.+?)\.{(.+)}$/) { - my $q = RT::Queue->new($self->CurrentUser); - $q->Load($1); - $field = $2; - $CF->LimitToQueue( $q->Id ); - $queue = $q->Id; - } else { - $CF->LimitToGlobal; - } - $CF->FindAllRows; - - my $cfid = 0; - - while ( my $CustomField = $CF->Next ) { - if ($CustomField->Name eq $field) { - $cfid = $CustomField->Id; - last; + my ( $self, $_field, $op, $value, @rest ) = @_; + + my %rest = @rest; + my $field = $rest{SUBKEY} || die "No field specified"; + + # For our sanity, we can only limit on one queue at a time + my $queue = 0; + + if ( $field =~ /^(.+?)\.{(.+)}$/ ) { + $queue = $1; + $field = $2; } - } - die "No custom field named $field found\n" - unless $cfid; + $field = $1 if $field =~ /^{(.+)}$/; # trim { } -# use RT::CustomFields; -# my $CF = RT::CustomField->new( $self->CurrentUser ); -# $CF->Load( $cfid ); +# If we're trying to find custom fields that don't match something, we +# want tickets where the custom field has no value at all. Note that +# we explicitly don't include the "IS NULL" case, since we would +# otherwise end up with a redundant clause. - my $null_columns_ok; - my $TicketCFs = $self->Join( TYPE => 'left', - ALIAS1 => 'main', - FIELD1 => 'id', - TABLE2 => 'TicketCustomFieldValues', - FIELD2 => 'Ticket' ); + my $null_columns_ok; + if ( ( $op =~ /^NOT LIKE$/i ) or ( $op eq '!=' ) ) { + $null_columns_ok = 1; + } - $self->_OpenParen; + my $cfid = 0; + if ($queue) { - $self->_SQLLimit( ALIAS => $TicketCFs, - FIELD => 'Content', - OPERATOR => $op, - VALUE => $value, - QUOTEVALUE => 1, - @rest ); + my $q = RT::Queue->new( $self->CurrentUser ); + $q->Load($queue) if ($queue); - if ( $op =~ /^IS$/i - or ( $op eq '!=' ) ) { - $null_columns_ok = 1; - } + my $cf; + if ( $q->id ) { + $cf = $q->CustomField($field); + } + else { + $cf = RT::CustomField->new( $self->CurrentUser ); + $cf->LoadByNameAndQueue( Queue => '0', Name => $field ); + } - #If we're trying to find tickets where the keyword isn't somethng, - #also check ones where it _IS_ null + $cfid = $cf->id; - if ( $op eq '!=' ) { - $self->_SQLLimit( ALIAS => $TicketCFs, - FIELD => 'Content', - OPERATOR => 'IS', - VALUE => 'NULL', - QUOTEVALUE => 0, - ENTRYAGGREGATOR => 'OR', ); - } + } - $self->_SQLLimit( LEFTJOIN => $TicketCFs, - FIELD => 'CustomField', - VALUE => $cfid, - ENTRYAGGREGATOR => 'OR' ); + my $TicketCFs; + my $cfkey = $cfid ? $cfid : "$queue.$field"; + # Perform one Join per CustomField + if ( $self->{_sql_object_cf_alias}{$cfkey} ) { + $TicketCFs = $self->{_sql_object_cf_alias}{$cfkey}; + } + else { + if ($cfid) { + $TicketCFs = $self->{_sql_object_cf_alias}{$cfkey} = $self->Join( + TYPE => 'left', + ALIAS1 => 'main', + FIELD1 => 'id', + TABLE2 => 'ObjectCustomFieldValues', + FIELD2 => 'ObjectId', + ); + $self->SUPER::Limit( + LEFTJOIN => $TicketCFs, + FIELD => 'CustomField', + VALUE => $cfid, + ENTRYAGGREGATOR => 'AND' + ); + } else { + my $cfalias = $self->Join( + TYPE => 'left', + EXPRESSION => "'$field'", + TABLE2 => 'CustomFields', + FIELD2 => 'Name', + ); + + $TicketCFs = $self->{_sql_object_cf_alias}{$cfkey} = $self->Join( + TYPE => 'left', + ALIAS1 => $cfalias, + FIELD1 => 'id', + TABLE2 => 'ObjectCustomFieldValues', + FIELD2 => 'CustomField', + ); + $self->SUPER::Limit( + LEFTJOIN => $TicketCFs, + FIELD => 'ObjectId', + VALUE => 'main.id', + QUOTEVALUE => 0, + ENTRYAGGREGATOR => 'AND', + ); + } + $self->SUPER::Limit( + LEFTJOIN => $TicketCFs, + FIELD => 'ObjectType', + VALUE => ref( $self->NewItem ) + , # we want a single item, not a collection + ENTRYAGGREGATOR => 'AND' + ); + $self->SUPER::Limit( + LEFTJOIN => $TicketCFs, + FIELD => 'Disabled', + OPERATOR => '=', + VALUE => '0', + ENTRYAGGREGATOR => 'AND'); + } + $self->_OpenParen if ($null_columns_ok); + + $self->_SQLLimit( + ALIAS => $TicketCFs, + FIELD => 'Content', + OPERATOR => $op, + VALUE => $value, + QUOTEVALUE => 1, + @rest + ); + + if ($null_columns_ok) { + $self->_SQLLimit( + ALIAS => $TicketCFs, + FIELD => 'Content', + OPERATOR => 'IS', + VALUE => 'NULL', + QUOTEVALUE => 0, + ENTRYAGGREGATOR => 'OR', + ); + } + $self->_CloseParen if ($null_columns_ok); - $self->_CloseParen; -} +} # End Helper Functions @@ -758,33 +1241,35 @@ Takes a paramhash with the fields FIELD, OPERATOR, VALUE and DESCRIPTION Generally best called from LimitFoo methods =cut + sub Limit { my $self = shift; - my %args = ( FIELD => undef, - OPERATOR => '=', - VALUE => undef, - DESCRIPTION => undef, - @_ - ); - $args{'DESCRIPTION'} = $self->loc( - "[_1] [_2] [_3]", $args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'} - ) if (!defined $args{'DESCRIPTION'}) ; + my %args = ( + FIELD => undef, + OPERATOR => '=', + VALUE => undef, + DESCRIPTION => undef, + @_ + ); + $args{'DESCRIPTION'} = $self->loc( "[_1] [_2] [_3]", + $args{'FIELD'}, $args{'OPERATOR'}, $args{'VALUE'} ) + if ( !defined $args{'DESCRIPTION'} ); my $index = $self->_NextIndex; - #make the TicketRestrictions hash the equivalent of whatever we just passed in; + #make the TicketRestrictions hash the equivalent of whatever we just passed in; - %{$self->{'TicketRestrictions'}{$index}} = %args; + %{ $self->{'TicketRestrictions'}{$index} } = %args; $self->{'RecalcTicketLimits'} = 1; - # If we're looking at the effective id, we don't want to append the other clause - # which limits us to tickets where id = effective id - if ($args{'FIELD'} eq 'EffectiveId') { +# If we're looking at the effective id, we don't want to append the other clause +# which limits us to tickets where id = effective id + if ( $args{'FIELD'} eq 'EffectiveId' ) { $self->{'looking_at_effective_id'} = 1; } - if ($args{'FIELD'} eq 'Type') { + if ( $args{'FIELD'} eq 'Type' ) { $self->{'looking_at_type'} = 1; } @@ -793,22 +1278,25 @@ sub Limit { # }}} - - - =head2 FreezeLimits Returns a frozen string suitable for handing back to ThawLimits. =cut + +sub _FreezeThawKeys { + 'TicketRestrictions', 'restriction_index', 'looking_at_effective_id', + 'looking_at_type'; +} + # {{{ sub FreezeLimits sub FreezeLimits { - my $self = shift; - require FreezeThaw; - return (FreezeThaw::freeze($self->{'TicketRestrictions'}, - $self->{'restriction_index'} - )); + my $self = shift; + require Storable; + require MIME::Base64; + MIME::Base64::base64_encode( + Storable::freeze( \@{$self}{ $self->_FreezeThawKeys } ) ); } # }}} @@ -819,26 +1307,26 @@ Take a frozen Limits string generated by FreezeLimits and make this tickets object have that set of limits. =cut + # {{{ sub ThawLimits sub ThawLimits { - my $self = shift; - my $in = shift; - - #if we don't have $in, get outta here. - return undef unless ($in); + my $self = shift; + my $in = shift; + + #if we don't have $in, get outta here. + return undef unless ($in); - $self->{'RecalcTicketLimits'} = 1; + $self->{'RecalcTicketLimits'} = 1; + + require Storable; + require MIME::Base64; - require FreezeThaw; - - #We don't need to die if the thaw fails. - - eval { - ($self->{'TicketRestrictions'}, - $self->{'restriction_index'} - ) = FreezeThaw::thaw($in); - } + #We don't need to die if the thaw fails. + @{$self}{ $self->_FreezeThawKeys } = + eval { @{ Storable::thaw( MIME::Base64::base64_decode($in) ) }; }; + + $RT::Logger->error($@) if $@; } @@ -859,16 +1347,18 @@ VALUE is a queue id or Name. sub LimitQueue { my $self = shift; - my %args = (VALUE => undef, - OPERATOR => '=', - @_); + my %args = ( + VALUE => undef, + OPERATOR => '=', + @_ + ); #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+$/) { - my $queue = new RT::Queue($self->CurrentUser); - $queue->Load($args{'VALUE'}); - $args{VALUE} = $queue->Name; + if ( $args{VALUE} =~ /^\d+$/ ) { + my $queue = new RT::Queue( $self->CurrentUser ); + $queue->Load( $args{'VALUE'} ); + $args{VALUE} = $queue->Name; } # What if they pass in an Id? Check for isNum() and convert to @@ -876,15 +1366,16 @@ sub LimitQueue { #TODO check for a valid queue here - $self->Limit (FIELD => 'Queue', - VALUE => $args{VALUE}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{VALUE}, - ), - ); + $self->Limit( + FIELD => 'Queue', + VALUE => $args{VALUE}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => + join( ' ', $self->loc('Queue'), $args{'OPERATOR'}, $args{VALUE}, ), + ); } + # }}} # {{{ sub LimitStatus @@ -895,19 +1386,27 @@ Takes a paramhash with the fields OPERATOR and VALUE. OPERATOR is one of = or !=. VALUE is a status. +RT adds Status != 'deleted' until object has +allow_deleted_search internal property set. +$tickets->{'allow_deleted_search'} = 1; +$tickets->LimitStatus( VALUE => 'deleted' ); + =cut sub LimitStatus { my $self = shift; - my %args = ( OPERATOR => '=', - @_); - $self->Limit (FIELD => 'Status', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Status'), $args{'OPERATOR'}, $self->loc($args{'VALUE'}) - ), - ); + my %args = ( + OPERATOR => '=', + @_ + ); + $self->Limit( + FIELD => 'Status', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Status'), $args{'OPERATOR'}, + $self->loc( $args{'VALUE'} ) ), + ); } # }}} @@ -949,16 +1448,18 @@ VALUE is a string to search for in the type of the ticket. sub LimitType { my $self = shift; - my %args = (OPERATOR => '=', - VALUE => undef, - @_); - $self->Limit (FIELD => 'Type', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Type'), $args{'OPERATOR'}, $args{'Limit'}, - ), - ); + my %args = ( + OPERATOR => '=', + VALUE => undef, + @_ + ); + $self->Limit( + FIELD => 'Type', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => + join( ' ', $self->loc('Type'), $args{'OPERATOR'}, $args{'Limit'}, ), + ); } # }}} @@ -980,13 +1481,14 @@ VALUE is a string to search for in the subject of the ticket. sub LimitSubject { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'Subject', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Subject'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'Subject', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( + ' ', $self->loc('Subject'), $args{'OPERATOR'}, $args{'VALUE'}, + ), + ); } # }}} @@ -1008,16 +1510,18 @@ VALUE is a ticket Id to search for sub LimitId { my $self = shift; - my %args = (OPERATOR => '=', - @_); + my %args = ( + OPERATOR => '=', + @_ + ); - $self->Limit (FIELD => 'id', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Id'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'id', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => + join( ' ', $self->loc('Id'), $args{'OPERATOR'}, $args{'VALUE'}, ), + ); } # }}} @@ -1035,13 +1539,14 @@ VALUE is a value to match the ticket\'s priority against sub LimitPriority { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'Priority', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Priority'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'Priority', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Priority'), + $args{'OPERATOR'}, $args{'VALUE'}, ), + ); } # }}} @@ -1060,13 +1565,14 @@ VALUE is a value to match the ticket\'s initial priority against sub LimitInitialPriority { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'InitialPriority', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Initial Priority'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'InitialPriority', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Initial Priority'), $args{'OPERATOR'}, + $args{'VALUE'}, ), + ); } # }}} @@ -1084,13 +1590,14 @@ VALUE is a value to match the ticket\'s final priority against sub LimitFinalPriority { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'FinalPriority', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Final Priority'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'FinalPriority', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Final Priority'), + $args{'OPERATOR'}, $args{'VALUE'}, ), + ); } # }}} @@ -1108,13 +1615,14 @@ VALUE is a value to match the ticket's TimeWorked attribute sub LimitTimeWorked { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'TimeWorked', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Time worked'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'TimeWorked', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Time worked'), + $args{'OPERATOR'}, $args{'VALUE'}, ), + ); } # }}} @@ -1132,13 +1640,14 @@ VALUE is a value to match the ticket's TimeLeft attribute sub LimitTimeLeft { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'TimeLeft', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Time left'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'TimeLeft', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Time left'), + $args{'OPERATOR'}, $args{'VALUE'}, ), + ); } # }}} @@ -1156,16 +1665,18 @@ OPERATOR is one of =, LIKE, NOT LIKE or !=. VALUE is a string to search for in the body of the ticket =cut + sub LimitContent { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'Content', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Ticket content'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'Content', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Ticket content'), + $args{'OPERATOR'}, $args{'VALUE'}, ), + ); } # }}} @@ -1179,16 +1690,18 @@ OPERATOR is one of =, LIKE, NOT LIKE or !=. VALUE is a string to search for in the body of the ticket =cut + sub LimitFilename { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'Filename', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Attachment filename'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'Filename', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Attachment filename'), $args{'OPERATOR'}, + $args{'VALUE'}, ), + ); } # }}} @@ -1205,14 +1718,16 @@ VALUE is a content type to search ticket attachments for sub LimitContentType { my $self = shift; my %args = (@_); - $self->Limit (FIELD => 'ContentType', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Ticket content type'), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => 'ContentType', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => join( ' ', + $self->loc('Ticket content type'), $args{'OPERATOR'}, + $args{'VALUE'}, ), + ); } + # }}} # }}} @@ -1231,19 +1746,22 @@ VALUE is a user id. sub LimitOwner { my $self = shift; - my %args = ( OPERATOR => '=', - @_); + my %args = ( + OPERATOR => '=', + @_ + ); + + my $owner = new RT::User( $self->CurrentUser ); + $owner->Load( $args{'VALUE'} ); - my $owner = new RT::User($self->CurrentUser); - $owner->Load($args{'VALUE'}); # FIXME: check for a valid $owner - $self->Limit (FIELD => 'Owner', - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - DESCRIPTION => join( - ' ', $self->loc('Owner'), $args{'OPERATOR'}, $owner->Name(), - ), - ); + $self->Limit( + FIELD => 'Owner', + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + DESCRIPTION => + join( ' ', $self->loc('Owner'), $args{'OPERATOR'}, $owner->Name(), ), + ); } @@ -1253,7 +1771,6 @@ sub LimitOwner { # {{{ sub LimitWatcher - =head2 LimitWatcher Takes a paramhash with the fields OPERATOR, TYPE and VALUE. @@ -1272,44 +1789,46 @@ $t1->Create(Queue => 'general', Subject => "LimitWatchers test", Requestors => \ sub LimitWatcher { my $self = shift; - my %args = ( OPERATOR => '=', - VALUE => undef, - TYPE => undef, - @_); - + my %args = ( + OPERATOR => '=', + VALUE => undef, + TYPE => undef, + @_ + ); #build us up a description - my ($watcher_type, $desc); - if ($args{'TYPE'}) { - $watcher_type = $args{'TYPE'}; + my ( $watcher_type, $desc ); + if ( $args{'TYPE'} ) { + $watcher_type = $args{'TYPE'}; } else { - $watcher_type = "Watcher"; + $watcher_type = "Watcher"; } - $self->Limit (FIELD => $watcher_type, - VALUE => $args{'VALUE'}, - OPERATOR => $args{'OPERATOR'}, - TYPE => $args{'TYPE'}, - DESCRIPTION => join( - ' ', $self->loc($watcher_type), $args{'OPERATOR'}, $args{'VALUE'}, - ), - ); + $self->Limit( + FIELD => $watcher_type, + VALUE => $args{'VALUE'}, + OPERATOR => $args{'OPERATOR'}, + TYPE => $args{'TYPE'}, + DESCRIPTION => join( ' ', + $self->loc($watcher_type), + $args{'OPERATOR'}, $args{'VALUE'}, ), + ); } - sub LimitRequestor { my $self = shift; my %args = (@_); - my ($package, $filename, $line) = caller; - $RT::Logger->error("Tickets->LimitRequestor is deprecated. please rewrite call at $package - $filename: $line"); - $self->LimitWatcher(TYPE => 'Requestor', @_); + my ( $package, $filename, $line ) = caller; + $RT::Logger->error( +"Tickets->LimitRequestor is deprecated. please rewrite call at $package - $filename: $line" + ); + $self->LimitWatcher( TYPE => 'Requestor', @_ ); } # }}} - # }}} # }}} @@ -1321,7 +1840,7 @@ sub LimitRequestor { =head2 LimitLinkedTo LimitLinkedTo takes a paramhash with two fields: TYPE and TARGET -TYPE limits the sort of relationship we want to search on +TYPE limits the sort of link we want to search on TYPE = { RefersTo, MemberOf, DependsOn } @@ -1333,23 +1852,25 @@ TARGET is the id or URI of the TARGET of the link sub LimitLinkedTo { my $self = shift; my %args = ( - TICKET => undef, - TARGET => undef, - TYPE => undef, - @_); + TICKET => undef, + TARGET => undef, + TYPE => undef, + @_ + ); $self->Limit( - FIELD => 'LinkedTo', - BASE => undef, - TARGET => ($args{'TARGET'} || $args{'TICKET'}), - TYPE => $args{'TYPE'}, - DESCRIPTION => $self->loc( - "Tickets [_1] by [_2]", $self->loc($args{'TYPE'}), ($args{'TARGET'} || $args{'TICKET'}) - ), - ); + FIELD => 'LinkedTo', + BASE => undef, + TARGET => ( $args{'TARGET'} || $args{'TICKET'} ), + TYPE => $args{'TYPE'}, + DESCRIPTION => $self->loc( + "Tickets [_1] by [_2]", + $self->loc( $args{'TYPE'} ), + ( $args{'TARGET'} || $args{'TICKET'} ) + ), + ); } - # }}} # {{{ LimitLinkedFrom @@ -1357,7 +1878,7 @@ sub LimitLinkedTo { =head2 LimitLinkedFrom LimitLinkedFrom takes a paramhash with two fields: TYPE and BASE -TYPE limits the sort of relationship we want to search on +TYPE limits the sort of link we want to search on BASE is the id or URI of the BASE of the link @@ -1368,55 +1889,71 @@ BASE is the id or URI of the BASE of the link sub LimitLinkedFrom { my $self = shift; - my %args = ( BASE => undef, - TICKET => undef, - TYPE => undef, - @_); + my %args = ( + BASE => undef, + TICKET => undef, + TYPE => undef, + @_ + ); + # translate RT2 From/To naming to RT3 TicketSQL naming + my %fromToMap = qw(DependsOn DependentOn + MemberOf HasMember + RefersTo ReferredToBy); - $self->Limit( FIELD => 'LinkedTo', - TARGET => undef, - BASE => ($args{'BASE'} || $args{'TICKET'}), - TYPE => $args{'TYPE'}, - DESCRIPTION => $self->loc( - "Tickets [_1] [_2]", $self->loc($args{'TYPE'}), ($args{'BASE'} || $args{'TICKET'}) - ), - ); -} + my $type = $args{'TYPE'}; + $type = $fromToMap{$type} if exists( $fromToMap{$type} ); + $self->Limit( + FIELD => 'LinkedTo', + TARGET => undef, + BASE => ( $args{'BASE'} || $args{'TICKET'} ), + TYPE => $type, + DESCRIPTION => $self->loc( + "Tickets [_1] [_2]", + $self->loc( $args{'TYPE'} ), + ( $args{'BASE'} || $args{'TICKET'} ) + ), + ); +} # }}} # {{{ LimitMemberOf sub LimitMemberOf { - my $self = shift; + my $self = shift; my $ticket_id = shift; - $self->LimitLinkedTo ( TARGET=> "$ticket_id", - TYPE => 'MemberOf', - ); + $self->LimitLinkedTo( + TARGET => "$ticket_id", + TYPE => 'MemberOf', + ); } + # }}} # {{{ LimitHasMember sub LimitHasMember { - my $self = shift; - my $ticket_id =shift; - $self->LimitLinkedFrom ( BASE => "$ticket_id", - TYPE => 'HasMember', - ); + my $self = shift; + my $ticket_id = shift; + $self->LimitLinkedFrom( + BASE => "$ticket_id", + TYPE => 'HasMember', + ); } + # }}} # {{{ LimitDependsOn sub LimitDependsOn { - my $self = shift; + my $self = shift; my $ticket_id = shift; - $self->LimitLinkedTo ( TARGET => "$ticket_id", - TYPE => 'DependsOn', - ); + $self->LimitLinkedTo( + TARGET => "$ticket_id", + TYPE => 'DependsOn', + ); } @@ -1425,25 +1962,26 @@ sub LimitDependsOn { # {{{ LimitDependedOnBy sub LimitDependedOnBy { - my $self = shift; + my $self = shift; my $ticket_id = shift; - $self->LimitLinkedFrom ( BASE => "$ticket_id", - TYPE => 'DependentOn', - ); + $self->LimitLinkedFrom( + BASE => "$ticket_id", + TYPE => 'DependentOn', + ); } # }}} - # {{{ LimitRefersTo sub LimitRefersTo { - my $self = shift; + my $self = shift; my $ticket_id = shift; - $self->LimitLinkedTo ( TARGET => "$ticket_id", - TYPE => 'RefersTo', - ); + $self->LimitLinkedTo( + TARGET => "$ticket_id", + TYPE => 'RefersTo', + ); } @@ -1452,11 +1990,12 @@ sub LimitRefersTo { # {{{ LimitReferredToBy sub LimitReferredToBy { - my $self = shift; + my $self = shift; my $ticket_id = shift; - $self->LimitLinkedFrom ( BASE=> "$ticket_id", - TYPE => 'ReferredTo', - ); + $self->LimitLinkedFrom( + BASE => "$ticket_id", + TYPE => 'ReferredToBy', + ); } @@ -1484,56 +2023,64 @@ the need to pass in a FIELD argument. sub LimitDate { my $self = shift; my %args = ( - FIELD => undef, - VALUE => undef, - OPERATOR => undef, + FIELD => undef, + VALUE => undef, + OPERATOR => undef, - @_); + @_ + ); #Set the description if we didn't get handed it above - unless ($args{'DESCRIPTION'} ) { - $args{'DESCRIPTION'} = $args{'FIELD'} . " " .$args{'OPERATOR'}. " ". $args{'VALUE'} . " GMT" + unless ( $args{'DESCRIPTION'} ) { + $args{'DESCRIPTION'} = + $args{'FIELD'} . " " + . $args{'OPERATOR'} . " " + . $args{'VALUE'} . " GMT"; } - $self->Limit (%args); + $self->Limit(%args); } # }}} - - - sub LimitCreated { my $self = shift; - $self->LimitDate( FIELD => 'Created', @_); + $self->LimitDate( FIELD => 'Created', @_ ); } + sub LimitDue { my $self = shift; - $self->LimitDate( FIELD => 'Due', @_); + $self->LimitDate( FIELD => 'Due', @_ ); } + sub LimitStarts { my $self = shift; - $self->LimitDate( FIELD => 'Starts', @_); + $self->LimitDate( FIELD => 'Starts', @_ ); } + sub LimitStarted { my $self = shift; - $self->LimitDate( FIELD => 'Started', @_); + $self->LimitDate( FIELD => 'Started', @_ ); } + sub LimitResolved { my $self = shift; - $self->LimitDate( FIELD => 'Resolved', @_); + $self->LimitDate( FIELD => 'Resolved', @_ ); } + sub LimitTold { my $self = shift; - $self->LimitDate( FIELD => 'Told', @_); + $self->LimitDate( FIELD => 'Told', @_ ); } + sub LimitLastUpdated { my $self = shift; - $self->LimitDate( FIELD => 'LastUpdated', @_); + $self->LimitDate( FIELD => 'LastUpdated', @_ ); } + # # {{{ sub LimitTransactionDate @@ -1550,21 +2097,25 @@ VALUE is a date and time in ISO format in GMT sub LimitTransactionDate { my $self = shift; my %args = ( - FIELD => 'TransactionDate', - VALUE => undef, - OPERATOR => undef, + FIELD => 'TransactionDate', + VALUE => undef, + OPERATOR => undef, - @_); + @_ + ); # <20021217042756.GK28744@pallas.fsck.com> # "Kill It" - Jesse. #Set the description if we didn't get handed it above - unless ($args{'DESCRIPTION'} ) { - $args{'DESCRIPTION'} = $args{'FIELD'} . " " .$args{'OPERATOR'}. " ". $args{'VALUE'} . " GMT" + unless ( $args{'DESCRIPTION'} ) { + $args{'DESCRIPTION'} = + $args{'FIELD'} . " " + . $args{'OPERATOR'} . " " + . $args{'VALUE'} . " GMT"; } - $self->Limit (%args); + $self->Limit(%args); } @@ -1581,11 +2132,11 @@ Takes a paramhash of key/value pairs with the following keys: =over 4 -=item KEYWORDSELECT - KeywordSelect id +=item CUSTOMFIELD - CustomField name or id. If a name is passed, an additional parameter QUEUE may also be passed to distinguish the custom field. -=item OPERATOR - (for KEYWORD only - KEYWORDSELECT operator is always `=') +=item OPERATOR - The usual Limit operators -=item KEYWORD - Keyword id +=item VALUE - The value to compare against =back @@ -1593,60 +2144,74 @@ Takes a paramhash of key/value pairs with the following keys: sub LimitCustomField { my $self = shift; - my %args = ( VALUE => undef, - CUSTOMFIELD => undef, - OPERATOR => '=', - DESCRIPTION => undef, - FIELD => 'CustomFieldValue', - QUOTEVALUE => 1, - @_ ); - - use RT::CustomFields; + my %args = ( + VALUE => undef, + CUSTOMFIELD => undef, + OPERATOR => '=', + DESCRIPTION => undef, + FIELD => 'CustomFieldValue', + QUOTEVALUE => 1, + @_ + ); + my $CF = RT::CustomField->new( $self->CurrentUser ); - $CF->Load( $args{CUSTOMFIELD} ); + if ( $args{CUSTOMFIELD} =~ /^\d+$/ ) { + $CF->Load( $args{CUSTOMFIELD} ); + } + else { + $CF->LoadByNameAndQueue( + Name => $args{CUSTOMFIELD}, + Queue => $args{QUEUE} + ); + $args{CUSTOMFIELD} = $CF->Id; + } #If we are looking to compare with a null value. if ( $args{'OPERATOR'} =~ /^is$/i ) { - $args{'DESCRIPTION'} ||= $self->loc("Custom field [_1] has no value.", $CF->Name); + $args{'DESCRIPTION'} ||= + $self->loc( "Custom field [_1] has no value.", $CF->Name ); } elsif ( $args{'OPERATOR'} =~ /^is not$/i ) { - $args{'DESCRIPTION'} ||= $self->loc("Custom field [_1] has a value.", $CF->Name); + $args{'DESCRIPTION'} ||= + $self->loc( "Custom field [_1] has a value.", $CF->Name ); } # if we're not looking to compare with a null value else { - $args{'DESCRIPTION'} ||= $self->loc("Custom field [_1] [_2] [_3]", $CF->Name , $args{OPERATOR} , $args{VALUE}); + $args{'DESCRIPTION'} ||= $self->loc( "Custom field [_1] [_2] [_3]", + $CF->Name, $args{OPERATOR}, $args{VALUE} ); } -# my $index = $self->_NextIndex; -# %{ $self->{'TicketRestrictions'}{$index} } = %args; - - my $q = ""; - if ($CF->Queue) { - my $qo = new RT::Queue( $self->CurrentUser ); - $qo->load( $CF->Queue ); - $q = $qo->Name; + if ( $CF->Queue ) { + my $qo = new RT::Queue( $self->CurrentUser ); + $qo->load( $CF->Queue ); + $q = $qo->Name; } - $self->Limit( VALUE => $args{VALUE}, - FIELD => "CF.".( $q - ? $q . ".{" . $CF->Name . "}" - : $CF->Name - ), - OPERATOR => $args{OPERATOR}, - CUSTOMFIELD => 1, - ); + my @rest; + @rest = ( ENTRYAGGREGATOR => 'AND' ) + if ( $CF->Type eq 'SelectMultiple' ); + $self->Limit( + VALUE => $args{VALUE}, + FIELD => "CF." + . ( + $q + ? $q . ".{" . $CF->Name . "}" + : $CF->Name + ), + OPERATOR => $args{OPERATOR}, + CUSTOMFIELD => 1, + @rest, + ); $self->{'RecalcTicketLimits'} = 1; - # return ($index); } # }}} # }}} - # {{{ sub _NextIndex =head2 _NextIndex @@ -1657,8 +2222,9 @@ Keep track of the counter for the array of restrictions sub _NextIndex { my $self = shift; - return ($self->{'restriction_index'}++); + return ( $self->{'restriction_index'}++ ); } + # }}} # }}} @@ -1666,39 +2232,42 @@ sub _NextIndex { # {{{ Core bits to make this a DBIx::SearchBuilder object # {{{ sub _Init -sub _Init { +sub _Init { my $self = shift; - $self->{'table'} = "Tickets"; - $self->{'RecalcTicketLimits'} = 1; + $self->{'table'} = "Tickets"; + $self->{'RecalcTicketLimits'} = 1; $self->{'looking_at_effective_id'} = 0; - $self->{'looking_at_type'} = 0; - $self->{'restriction_index'} =1; - $self->{'primary_key'} = "id"; + $self->{'looking_at_type'} = 0; + $self->{'restriction_index'} = 1; + $self->{'primary_key'} = "id"; delete $self->{'items_array'}; delete $self->{'item_map'}; + delete $self->{'columns_to_display'}; $self->SUPER::_Init(@_); $self->_InitSQL; } + # }}} # {{{ sub Count sub Count { - my $self = shift; - $self->_ProcessRestrictions() if ($self->{'RecalcTicketLimits'} == 1 ); - return($self->SUPER::Count()); + my $self = shift; + $self->_ProcessRestrictions() if ( $self->{'RecalcTicketLimits'} == 1 ); + return ( $self->SUPER::Count() ); } + # }}} # {{{ sub CountAll sub CountAll { - my $self = shift; - $self->_ProcessRestrictions() if ($self->{'RecalcTicketLimits'} == 1 ); - return($self->SUPER::CountAll()); + my $self = shift; + $self->_ProcessRestrictions() if ( $self->{'RecalcTicketLimits'} == 1 ); + return ( $self->SUPER::CountAll() ); } -# }}} +# }}} # {{{ sub ItemsArrayRef @@ -1717,28 +2286,27 @@ sub ItemsArrayRef { my $placeholder = $self->_ItemsCounter; $self->GotoFirstItem(); while ( my $item = $self->Next ) { - push ( @{ $self->{'items_array'} }, $item ); + push( @{ $self->{'items_array'} }, $item ); } $self->GotoItem($placeholder); + $self->{'items_array'} = $self->ItemsOrderBy( $self->{'items_array'} ); } return ( $self->{'items_array'} ); } + # }}} # {{{ sub Next sub Next { - my $self = shift; - - $self->_ProcessRestrictions() if ($self->{'RecalcTicketLimits'} == 1 ); + my $self = shift; - my $Ticket = $self->SUPER::Next(); - if ((defined($Ticket)) and (ref($Ticket))) { + $self->_ProcessRestrictions() if ( $self->{'RecalcTicketLimits'} == 1 ); - #Make sure we _never_ show deleted tickets - #TODO we should be doing this in the where clause. - #but you can't do multiple clauses on the same field just yet :/ + my $Ticket = $self->SUPER::Next(); + if ( ( defined($Ticket) ) and ( ref($Ticket) ) ) { - if ($Ticket->__Value('Status') eq 'deleted') { + if ( $Ticket->__Value('Status') eq 'deleted' && + !$self->{'allow_deleted_search'} ) { return($self->Next()); } # Since Ticket could be granted with more rights instead @@ -1750,17 +2318,33 @@ sub Next { return($Ticket); } - #If the user doesn't have the right to show this ticket - else { - return($self->Next()); - } - } - #if there never was any ticket - else { - return(undef); - } + if ( $Ticket->__Value('Status') eq 'deleted' ) { + return ( $self->Next() ); + } + + # Since Ticket could be granted with more rights instead + # of being revoked, it's ok if queue rights allow + # ShowTicket. It seems need another query, but we have + # rights cache in Principal::HasRight. + elsif ($Ticket->QueueObj->CurrentUserHasRight('ShowTicket') + || $Ticket->CurrentUserHasRight('ShowTicket') ) + { + return ($Ticket); + } + + #If the user doesn't have the right to show this ticket + else { + return ( $self->Next() ); + } + } + + #if there never was any ticket + else { + return (undef); + } } + # }}} # }}} @@ -1789,16 +2373,17 @@ is a description of the purpose of that TicketRestriction =cut -sub DescribeRestrictions { +sub DescribeRestrictions { my $self = shift; - my ($row, %listing); + my ( $row, %listing ); - foreach $row (keys %{$self->{'TicketRestrictions'}}) { - $listing{$row} = $self->{'TicketRestrictions'}{$row}{'DESCRIPTION'}; + foreach $row ( keys %{ $self->{'TicketRestrictions'} } ) { + $listing{$row} = $self->{'TicketRestrictions'}{$row}{'DESCRIPTION'}; } return (%listing); } + # }}} # {{{ sub RestrictionValues @@ -1811,14 +2396,13 @@ to. =cut sub RestrictionValues { - my $self = shift; + my $self = shift; my $field = shift; - map $self->{'TicketRestrictions'}{$_}{'VALUE'}, - grep { - $self->{'TicketRestrictions'}{$_}{'FIELD'} eq $field - && $self->{'TicketRestrictions'}{$_}{'OPERATOR'} eq "=" - } - keys %{$self->{'TicketRestrictions'}}; + map $self->{'TicketRestrictions'}{$_}{'VALUE'}, grep { + $self->{'TicketRestrictions'}{$_}{'FIELD'} eq $field + && $self->{'TicketRestrictions'}{$_}{'OPERATOR'} eq "=" + } + keys %{ $self->{'TicketRestrictions'} }; } # }}} @@ -1835,8 +2419,8 @@ sub ClearRestrictions { my $self = shift; delete $self->{'TicketRestrictions'}; $self->{'looking_at_effective_id'} = 0; - $self->{'looking_at_type'} = 0; - $self->{'RecalcTicketLimits'} =1; + $self->{'looking_at_type'} = 0; + $self->{'RecalcTicketLimits'} = 1; } # }}} @@ -1850,13 +2434,13 @@ Removes that restriction from the session's limits. =cut - sub DeleteRestriction { my $self = shift; - my $row = shift; + my $row = shift; delete $self->{'TicketRestrictions'}{$row}; $self->{'RecalcTicketLimits'} = 1; + #make the underlying easysearch object forget all its preconceptions } @@ -1867,82 +2451,93 @@ sub DeleteRestriction { # Convert a set of oldstyle SB Restrictions to Clauses for RQL sub _RestrictionsToClauses { - my $self = shift; - - my $row; - my %clause; - foreach $row (keys %{$self->{'TicketRestrictions'}}) { - my $restriction = $self->{'TicketRestrictions'}{$row}; - #use Data::Dumper; - #print Dumper($restriction),"\n"; - - # We need to reimplement the subclause aggregation that SearchBuilder does. - # Default Subclause is ALIAS.FIELD, and default ALIAS is 'main', - # Then SB AND's the different Subclauses together. - - # So, we want to group things into Subclauses, convert them to - # SQL, and then join them with the appropriate DefaultEA. - # Then join each subclause group with AND. - - my $field = $restriction->{'FIELD'}; - my $realfield = $field; # CustomFields fake up a fieldname, so - # we need to figure that out - - # One special case - # Rewrite LinkedTo meta field to the real field - if ($field =~ /LinkedTo/) { - $realfield = $field = $restriction->{'TYPE'}; - } + my $self = shift; - # Two special case - # CustomFields have a different real field - if ($field =~ /^CF\./) { - $realfield = "CF" - } + my $row; + my %clause; + foreach $row ( keys %{ $self->{'TicketRestrictions'} } ) { + my $restriction = $self->{'TicketRestrictions'}{$row}; - die "I don't know about $field yet" - unless (exists $FIELDS{$realfield} or $restriction->{CUSTOMFIELD}); - - my $type = $FIELDS{$realfield}->[0]; - my $op = $restriction->{'OPERATOR'}; - - my $value = ( grep { defined } - map { $restriction->{$_} } qw(VALUE TICKET BASE TARGET))[0]; - - # this performs the moral equivalent of defined or/dor/C<//>, - # without the short circuiting.You need to use a 'defined or' - # type thing instead of just checking for truth values, because - # VALUE could be 0.(i.e. "false") - - # You could also use this, but I find it less aesthetic: - # (although it does short circuit) - #( defined $restriction->{'VALUE'}? $restriction->{VALUE} : - # defined $restriction->{'TICKET'} ? - # $restriction->{TICKET} : - # defined $restriction->{'BASE'} ? - # $restriction->{BASE} : - # defined $restriction->{'TARGET'} ? - # $restriction->{TARGET} ) - - my $ea = $DefaultEA{$type}; - if ( ref $ea ) { - die "Invalid operator $op for $field ($type)" - unless exists $ea->{$op}; - $ea = $ea->{$op}; - } - exists $clause{$realfield} or $clause{$realfield} = []; - # Escape Quotes - $field =~ s!(['"])!\\$1!g; - $value =~ s!(['"])!\\$1!g; - my $data = [ $ea, $type, $field, $op, $value ]; + #use Data::Dumper; + #print Dumper($restriction),"\n"; + + # We need to reimplement the subclause aggregation that SearchBuilder does. + # Default Subclause is ALIAS.FIELD, and default ALIAS is 'main', + # Then SB AND's the different Subclauses together. - # here is where we store extra data, say if it's a keyword or - # something. (I.e. "TYPE SPECIFIC STUFF") + # So, we want to group things into Subclauses, convert them to + # SQL, and then join them with the appropriate DefaultEA. + # Then join each subclause group with AND. - #print Dumper($data); - push @{$clause{$realfield}}, $data; - } - return \%clause; + my $field = $restriction->{'FIELD'}; + my $realfield = $field; # CustomFields fake up a fieldname, so + # we need to figure that out + + # One special case + # Rewrite LinkedTo meta field to the real field + if ( $field =~ /LinkedTo/ ) { + $realfield = $field = $restriction->{'TYPE'}; + } + + # Two special case + # Handle subkey fields with a different real field + if ( $field =~ /^(\w+)\./ ) { + $realfield = $1; + } + + die "I don't know about $field yet" + unless ( exists $FIELDS{$realfield} or $restriction->{CUSTOMFIELD} ); + + my $type = $FIELDS{$realfield}->[0]; + my $op = $restriction->{'OPERATOR'}; + + my $value = ( + grep { defined } + map { $restriction->{$_} } qw(VALUE TICKET BASE TARGET) + )[0]; + + # this performs the moral equivalent of defined or/dor/C<//>, + # without the short circuiting.You need to use a 'defined or' + # type thing instead of just checking for truth values, because + # VALUE could be 0.(i.e. "false") + + # You could also use this, but I find it less aesthetic: + # (although it does short circuit) + #( defined $restriction->{'VALUE'}? $restriction->{VALUE} : + # defined $restriction->{'TICKET'} ? + # $restriction->{TICKET} : + # defined $restriction->{'BASE'} ? + # $restriction->{BASE} : + # defined $restriction->{'TARGET'} ? + # $restriction->{TARGET} ) + + my $ea = $restriction->{ENTRYAGGREGATOR} || $DefaultEA{$type} || "AND"; + if ( ref $ea ) { + die "Invalid operator $op for $field ($type)" + unless exists $ea->{$op}; + $ea = $ea->{$op}; + } + + # Each CustomField should be put into a different Clause so they + # are ANDed together. + if ( $restriction->{CUSTOMFIELD} ) { + $realfield = $field; + } + + exists $clause{$realfield} or $clause{$realfield} = []; + + # Escape Quotes + $field =~ s!(['"])!\\$1!g; + $value =~ s!(['"])!\\$1!g; + my $data = [ $ea, $type, $field, $op, $value ]; + + # here is where we store extra data, say if it's a keyword or + # something. (I.e. "TYPE SPECIFIC STUFF") + + #print Dumper($data); + push @{ $clause{$realfield} }, $data; + } + return \%clause; } # }}} @@ -1958,25 +2553,31 @@ sub _RestrictionsToClauses { sub _ProcessRestrictions { my $self = shift; - + #Blow away ticket aliases since we'll need to regenerate them for #a new search delete $self->{'TicketAliases'}; - delete $self->{'items_array'}; - my $sql = $self->{_sql_query}; # Violating the _SQL namespace - if (!$sql||$self->{'RecalcTicketLimits'}) { - # "Restrictions to Clauses Branch\n"; - my $clauseRef = eval { $self->_RestrictionsToClauses; }; - if ($@) { - $RT::Logger->error( "RestrictionsToClauses: " . $@ ); - $self->FromSQL(""); - } else { - $sql = $self->ClausesToSQL($clauseRef); - $self->FromSQL($sql); - } + delete $self->{'items_array'}; + delete $self->{'item_map'}; + delete $self->{'raw_rows'}; + delete $self->{'rows'}; + delete $self->{'count_all'}; + + my $sql = $self->Query; # Violating the _SQL namespace + if ( !$sql || $self->{'RecalcTicketLimits'} ) { + + # "Restrictions to Clauses Branch\n"; + my $clauseRef = eval { $self->_RestrictionsToClauses; }; + if ($@) { + $RT::Logger->error( "RestrictionsToClauses: " . $@ ); + $self->FromSQL(""); + } + else { + $sql = $self->ClausesToSQL($clauseRef); + $self->FromSQL($sql); + } } - $self->{'RecalcTicketLimits'} = 0; } @@ -1991,22 +2592,22 @@ sub _BuildItemMap { my $self = shift; my $items = $self->ItemsArrayRef; - my $prev = 0 ; + my $prev = 0; delete $self->{'item_map'}; - if ($items->[0]) { - $self->{'item_map'}->{'first'} = $items->[0]->Id; - while (my $item = shift @$items ) { - my $id = $item->Id; - $self->{'item_map'}->{$id}->{'defined'} = 1; - $self->{'item_map'}->{$id}->{prev} = $prev; - $self->{'item_map'}->{$id}->{next} = $items->[0]->Id if ($items->[0]); - $prev = $id; - } - $self->{'item_map'}->{'last'} = $prev; + if ( $items->[0] ) { + $self->{'item_map'}->{'first'} = $items->[0]->EffectiveId; + while ( my $item = shift @$items ) { + my $id = $item->EffectiveId; + $self->{'item_map'}->{$id}->{'defined'} = 1; + $self->{'item_map'}->{$id}->{prev} = $prev; + $self->{'item_map'}->{$id}->{next} = $items->[0]->EffectiveId + if ( $items->[0] ); + $prev = $id; + } + $self->{'item_map'}->{'last'} = $prev; } -} - +} =head2 ItemMap @@ -2014,22 +2615,21 @@ Returns an a map of all items found by this search. The map is of the form $ItemMap->{'first'} = first ticketid found $ItemMap->{'last'} = last ticketid found -$ItemMap->{$id}->{prev} = the tikcet id found before $id -$ItemMap->{$id}->{next} = the tikcet id found after $id +$ItemMap->{$id}->{prev} = the ticket id found before $id +$ItemMap->{$id}->{next} = the ticket id found after $id =cut sub ItemMap { my $self = shift; - $self->_BuildItemMap() unless ($self->{'item_map'}); - return ($self->{'item_map'}); + $self->_BuildItemMap() + unless ( $self->{'items_array'} and $self->{'item_map'} ); + return ( $self->{'item_map'} ); } - - - =cut + } @@ -2044,12 +2644,30 @@ You don't want to serialize a big tickets object, as the {items} hash will be in =cut - sub PrepForSerialization { my $self = shift; delete $self->{'items'}; $self->RedoSearch(); } + +=head1 FLAGS + +RT::Tickets supports several flags which alter search behavior: + + +allow_deleted_search (Otherwise never show deleted tickets in search results) +looking_at_type (otherwise limit to type=ticket) + +These flags are set by calling + +$tickets->{'flagname'} = 1; + +BUG: There should be an API for this + +=cut + 1; + + diff --git a/rt/lib/RT/Tickets_Overlay_SQL.pm b/rt/lib/RT/Tickets_Overlay_SQL.pm index d78a56db3..677391702 100644 --- a/rt/lib/RT/Tickets_Overlay_SQL.pm +++ b/rt/lib/RT/Tickets_Overlay_SQL.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,31 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +package RT::Tickets; + use strict; use warnings; @@ -29,6 +53,10 @@ use warnings; my %FIELDS = %{FIELDS()}; my %dispatch = %{dispatch()}; +my %can_bundle = %{can_bundle()}; + +# Lower Case version of FIELDS, for case insensitivity +my %lcfields = map { ( lc($_) => $_ ) } (keys %FIELDS); sub _InitSQL { my $self = shift; @@ -42,24 +70,44 @@ sub _InitSQL { $self->{'_sql_subclause'} = "a"; $self->{'_sql_first'} = 0; $self->{'_sql_opstack'} = ['']; + $self->{'_sql_linkalias'} = undef; $self->{'_sql_transalias'} = undef; $self->{'_sql_trattachalias'} = undef; - $self->{'_sql_keywordalias'} = undef; + $self->{'_sql_object_cf_alias'} = undef; $self->{'_sql_depth'} = 0; $self->{'_sql_localdepth'} = 0; $self->{'_sql_query'} = ''; $self->{'_sql_looking_at'} = {}; + $self->{'_sql_columns_to_display'} = []; } sub _SQLLimit { + my $self = shift; + my %args = (@_); + if ($args{'FIELD'} eq 'EffectiveId') { + $self->{'looking_at_effective_id'} = 1; + } + + if ($args{'FIELD'} eq 'Type') { + $self->{'looking_at_type'} = 1; + } + # All SQL stuff goes into one SB subclause so we can deal with all # the aggregation - my $this = shift; - $this->SUPER::Limit(@_, + $self->SUPER::Limit(%args, SUBCLAUSE => 'ticketsql'); } +sub _SQLJoin { + # All SQL stuff goes into one SB subclause so we can deal with all + # the aggregation + my $this = shift; + + $this->SUPER::Join(@_, + SUBCLAUSE => 'ticketsql'); +} + # Helpers sub _OpenParen { $_[0]->SUPER::_OpenParen( 'ticketsql' ); @@ -72,14 +120,6 @@ sub _CloseParen { =cut -sub _match { - # Case insensitive equality - my ($y,$x) = @_; - return 1 if $x =~ /^$y$/i; - # return 1 if ((lc $x) eq (lc $y)); # Why isnt this equiv? - return 0; -} - =head2 Robert's Simple SQL Parser Documentation In Progress @@ -109,41 +149,88 @@ use Regexp::Common qw /delimited/; use constant VALUE => 1; use constant AGGREG => 2; use constant OP => 4; -use constant PAREN => 8; -use constant KEYWORD => 16; -my @tokens = qw[VALUE AGGREG OP PAREN KEYWORD]; +use constant OPEN_PAREN => 8; +use constant CLOSE_PAREN => 16; +use constant KEYWORD => 32; +my @tokens = qw[VALUE AGGREG OP OPEN_PAREN CLOSE_PAREN KEYWORD]; my $re_aggreg = qr[(?i:AND|OR)]; -my $re_value = qr[$RE{delimited}{-delim=>qq{\'\"}}|\d+]; -my $re_keyword = qr[$RE{delimited}{-delim=>qq{\'\"}}|(?:\{|\}|\w|\.)+]; +my $re_delim = qr[$RE{delimited}{-delim=>qq{\'\"}}]; +my $re_value = qr[$re_delim|\d+|NULL]; +my $re_keyword = qr[$re_delim|(?:\{|\}|\w|\.)+]; my $re_op = qr[=|!=|>=|<=|>|<|(?i:IS NOT)|(?i:IS)|(?i:NOT LIKE)|(?i:LIKE)]; # long to short -my $re_paren = qr'\(|\)'; +my $re_open_paren = qr'\('; +my $re_close_paren = qr'\)'; + +sub _close_bundle +{ + my ($self, @bundle) = @_; + return unless @bundle; + if (@bundle == 1) { + $bundle[0]->{dispatch}->( + $self, + $bundle[0]->{key}, + $bundle[0]->{op}, + $bundle[0]->{val}, + SUBCLAUSE => "", + ENTRYAGGREGATOR => $bundle[0]->{ea}, + SUBKEY => $bundle[0]->{subkey}, + ); + } else { + my @args; + for my $chunk (@bundle) { + push @args, [ + $chunk->{key}, + $chunk->{op}, + $chunk->{val}, + SUBCLAUSE => "", + ENTRYAGGREGATOR => $chunk->{ea}, + SUBKEY => $chunk->{subkey}, + ]; + } + $bundle[0]->{dispatch}->( + $self, \@args, + ); + } +} sub _parser { my ($self,$string) = @_; - my $want = KEYWORD | PAREN; + my $want = KEYWORD | OPEN_PAREN; my $last = undef; my $depth = 0; + my @bundle; my ($ea,$key,$op,$value) = ("","","",""); + # order of matches in the RE is important.. op should come early, + # because it has spaces in it. otherwise "NOT LIKE" might be parsed + # as a keyword or value. + + + + + while ($string =~ /( $re_aggreg + |$re_op |$re_keyword |$re_value - |$re_op - |$re_paren - )/igx ) { + |$re_open_paren + |$re_close_paren + )/iogx ) { my $val = $1; my $current = 0; # Highest priority is last - $current = OP if _match($re_op,$val); - $current = VALUE if _match($re_value,$val); - $current = KEYWORD if _match($re_keyword,$val) && ($want & KEYWORD); - $current = AGGREG if _match($re_aggreg,$val); - $current = PAREN if _match($re_paren,$val); + $current = OP if ($want & OP) && $val =~ /^$re_op$/io; + $current = VALUE if ($want & VALUE) && $val =~ /^$re_value$/io; + $current = KEYWORD if ($want & KEYWORD) && $val =~ /^$re_keyword$/io; + $current = AGGREG if ($want & AGGREG) && $val =~ /^$re_aggreg$/io; + $current = OPEN_PAREN if ($want & OPEN_PAREN) && $val =~ /^$re_open_paren$/io; + $current = CLOSE_PAREN if ($want & CLOSE_PAREN) && $val =~ /^$re_close_paren$/io; + unless ($current && $want & $current) { # Error @@ -153,22 +240,26 @@ sub _parser { # State Machine: + #$RT::Logger->debug("We've just found a '$current' called '$val'"); + # Parens are highest priority - if ($current & PAREN) { - if ($val eq "(") { - $depth++; - $self->_OpenParen; + if ($current & OPEN_PAREN) { + $self->_close_bundle(@bundle); @bundle = (); + $depth++; + $self->_OpenParen; - } else { - $depth--; - $self->_CloseParen; - } + $want = KEYWORD | OPEN_PAREN; + } + elsif ( $current & CLOSE_PAREN ) { + $self->_close_bundle(@bundle); @bundle = (); + $depth--; + $self->_CloseParen; - $want = KEYWORD | PAREN | AGGREG; + $want = CLOSE_PAREN | AGGREG; } elsif ( $current & AGGREG ) { $ea = $val; - $want = KEYWORD | PAREN; + $want = KEYWORD | OPEN_PAREN; } elsif ( $current & KEYWORD ) { $key = $val; @@ -183,17 +274,17 @@ sub _parser { # Remove surrounding quotes from $key, $val # (in future, simplify as for($key,$val) { action on $_ }) - if ($key =~ /$RE{delimited}{-delim=>qq{\'\"}}/) { + if ($key =~ /$re_delim/o) { substr($key,0,1) = ""; substr($key,-1,1) = ""; } - if ($val =~ /$RE{delimited}{-delim=>qq{\'\"}}/) { + if ($val =~ /$re_delim/o) { substr($val,0,1) = ""; substr($val,-1,1) = ""; } - # Unescape escaped characters - $key =~ s!\\(.)!$1!g; - $val =~ s!\\(.)!$1!g; + # Unescape escaped characters + $key =~ s!\\(.)!$1!g; + $val =~ s!\\(.)!$1!g; # print "$ea Key=[$key] op=[$op] val=[$val]\n"; @@ -204,10 +295,9 @@ sub _parser { } my $class; - my ($stdkey) = grep { /^$key$/i } (keys %FIELDS); - if ($stdkey && exists $FIELDS{$stdkey}) { + if (exists $lcfields{lc $key}) { + $key = $lcfields{lc $key}; $class = $FIELDS{$key}->[0]; - $key = $stdkey; } # no longer have a default, since CF's are now a real class, not fallthrough # fixme: "default class" is not Generic. @@ -219,21 +309,38 @@ sub _parser { die "No such dispatch method: $class" unless exists $dispatch{$class}; my $sub = $dispatch{$class} || die;; - $sub->( - $self, - $key, - $op, - $val, - SUBCLAUSE => "", # don't need anymore - ENTRYAGGREGATOR => $ea || "", - SUBKEY => $subkey, - ); + if ($can_bundle{$class} && + (!@bundle || + ($bundle[-1]->{dispatch} == $sub && + $bundle[-1]->{key} eq $key && + $bundle[-1]->{subkey} eq $subkey))) + { + push @bundle, { + dispatch => $sub, + key => $key, + op => $op, + val => $val, + ea => $ea || "", + subkey => $subkey, + }; + } else { + $self->_close_bundle(@bundle); @bundle = (); + $sub->( + $self, + $key, + $op, + $val, + SUBCLAUSE => "", # don't need anymore + ENTRYAGGREGATOR => $ea || "", + SUBKEY => $subkey, + ); + } $self->{_sql_looking_at}{lc $key} = 1; - + ($ea,$key,$op,$value) = ("","","",""); - - $want = PAREN | AGGREG; + + $want = CLOSE_PAREN | AGGREG; } else { die "I'm lost"; } @@ -241,11 +348,13 @@ sub _parser { $last = $current; } # while + $self->_close_bundle(@bundle); @bundle = (); + die "Incomplete query" - unless (($want | PAREN) || ($want | KEYWORD)); + unless (($want | CLOSE_PAREN) || ($want | KEYWORD)); die "Incomplete Query" - unless ($last && ($last | PAREN) || ($last || VALUE)); + unless ($last && ($last | CLOSE_PAREN) || ($last || VALUE)); # This will never happen, because the parser will complain die "Mismatched parentheses" @@ -288,20 +397,91 @@ Convert a RT-SQL string into a set of SearchBuilder restrictions. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. + +=begin testing + +use RT::Tickets; + + + +my $tix = RT::Tickets->new($RT::SystemUser); + +my $query = "Status = 'open'"; +my ($id, $msg) = $tix->FromSQL($query); + +ok ($id, $msg); + + +my (@ids, @expectedids); + +my $t = RT::Ticket->new($RT::SystemUser); + +my $string = 'subject/content SQL test'; +ok( $t->Create(Queue => 'General', Subject => $string), "Ticket Created"); + +push @ids, $t->Id; + +my $Message = MIME::Entity->build( + Subject => 'this is my subject', + From => 'jesse@example.com', + Data => [ $string ], + ); + +ok( $t->Create(Queue => 'General', Subject => 'another ticket', MIMEObj => $Message, MemberOf => $ids[0]), "Ticket Created"); + +push @ids, $t->Id; + +$query = ("Subject LIKE '$string' OR Content LIKE '$string'"); + +my ($id, $msg) = $tix->FromSQL($query); + + +ok ($id, $msg); + +is ($tix->Count, scalar @ids, "number of returned tickets same as entered"); +while (my $tick = $tix->Next) { + push @expectedids, $tick->Id; +} +ok (eq_array(\@ids, \@expectedids), "returned expected tickets"); + +$query = ("id = $ids[0] OR MemberOf = $ids[0]"); + +my ($id, $msg) = $tix->FromSQL($query); + +ok ($id, $msg); + +is ($tix->Count, scalar @ids, "number of returned tickets same as entered"); + +@expectedids = (); +while (my $tick = $tix->Next) { + push @expectedids, $tick->Id; +} + +ok (eq_array(\@ids, \@expectedids), "returned expected tickets"); + +=end testing + + =cut sub FromSQL { my ($self,$query) = @_; - $self->CleanSlate; + { + # preserve first_row and show_rows across the CleanSlate + local($self->{'first_row'}, $self->{'show_rows'}); + $self->CleanSlate; + } $self->_InitSQL(); - return (1,"No Query") unless $query; + + return (1,$self->loc("No Query")) unless $query; $self->{_sql_query} = $query; eval { $self->_parser( $query ); }; - $RT::Logger->error( $@ ) if $@; - return(0,$@) if $@; - + if ($@) { + $RT::Logger->error( "Query error in <<$query>>:\n$@" ); + return(0,$@); + } # We only want to look at EffectiveId's (mostly) for these searches. unless (exists $self->{_sql_looking_at}{'effectiveid'}) { $self->SUPER::Limit( FIELD => 'EffectiveId', @@ -325,20 +505,38 @@ sub FromSQL { # Unless we've explicitly asked to look at a specific Type, we need # to limit to it. unless ($self->{looking_at_type}) { - $self->SUPER::Limit( FIELD => 'Type', - OPERATOR => '=', - VALUE => 'ticket'); + $self->SUPER::Limit( FIELD => 'Type', OPERATOR => '=', VALUE => 'ticket'); } + # We don't want deleted tickets unless 'allow_deleted_search' is set + unless( $self->{'allow_deleted_search'} ) { + $self->SUPER::Limit(FIELD => 'Status', + OPERATOR => '!=', + VALUE => 'deleted'); + } + + # set SB's dirty flag $self->{'must_redo_search'} = 1; $self->{'RecalcTicketLimits'} = 0; - return (1,"Good Query"); + return (1,$self->loc("Valid Query")); + +} + +=head2 Query + +Returns the query that this object was initialized with +=cut + +sub Query { + my $self = shift; + return ($self->{_sql_query}); } + 1; =pod diff --git a/rt/lib/RT/Transaction.pm b/rt/lib/RT/Transaction.pm index ca491a6c7..cca2281bc 100755 --- a/rt/lib/RT/Transaction.pm +++ b/rt/lib/RT/Transaction.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -45,7 +67,6 @@ RT::Transaction package RT::Transaction; use RT::Record; -use RT::Ticket; use vars qw( @ISA ); @@ -62,18 +83,21 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: - int(11) 'EffectiveTicket'. - int(11) 'Ticket'. + varchar(64) 'ObjectType'. + int(11) 'ObjectId'. int(11) 'TimeTaken'. varchar(20) 'Type'. varchar(40) 'Field'. varchar(255) 'OldValue'. varchar(255) 'NewValue'. - varchar(100) 'Data'. + varchar(255) 'ReferenceType'. + int(11) 'OldReference'. + int(11) 'NewReference'. + varchar(255) 'Data'. =cut @@ -83,24 +107,30 @@ Create takes a hash of values and creates a row in the database: sub Create { my $self = shift; my %args = ( - EffectiveTicket => '0', - Ticket => '0', + ObjectType => '', + ObjectId => '0', TimeTaken => '0', Type => '', Field => '', OldValue => '', NewValue => '', + ReferenceType => '', + OldReference => '', + NewReference => '', Data => '', @_); $self->SUPER::Create( - EffectiveTicket => $args{'EffectiveTicket'}, - Ticket => $args{'Ticket'}, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, TimeTaken => $args{'TimeTaken'}, Type => $args{'Type'}, Field => $args{'Field'}, OldValue => $args{'OldValue'}, NewValue => $args{'NewValue'}, + ReferenceType => $args{'ReferenceType'}, + OldReference => $args{'OldReference'}, + NewReference => $args{'NewReference'}, Data => $args{'Data'}, ); @@ -108,7 +138,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -117,64 +147,50 @@ Returns the current value of id. =cut -=item EffectiveTicket +=head2 ObjectType -Returns the current value of EffectiveTicket. -(In the database, EffectiveTicket is stored as int(11).) +Returns the current value of ObjectType. +(In the database, ObjectType is stored as varchar(64).) -=item SetEffectiveTicket VALUE +=head2 SetObjectType VALUE -Set EffectiveTicket to VALUE. +Set ObjectType to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, EffectiveTicket will be stored as a int(11).) +(In the database, ObjectType will be stored as a varchar(64).) =cut -=item Ticket +=head2 ObjectId -Returns the current value of Ticket. -(In the database, Ticket is stored as int(11).) +Returns the current value of ObjectId. +(In the database, ObjectId is stored as int(11).) -=item SetTicket VALUE +=head2 SetObjectId VALUE -Set Ticket to VALUE. +Set ObjectId to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Ticket will be stored as a int(11).) - - -=cut - - -=item TicketObj - -Returns the Ticket Object which has the id returned by Ticket +(In the database, ObjectId will be stored as a int(11).) =cut -sub TicketObj { - my $self = shift; - my $Ticket = RT::Ticket->new($self->CurrentUser); - $Ticket->Load($self->__Value('Ticket')); - return($Ticket); -} -=item TimeTaken +=head2 TimeTaken Returns the current value of TimeTaken. (In the database, TimeTaken is stored as int(11).) -=item SetTimeTaken VALUE +=head2 SetTimeTaken VALUE Set TimeTaken to VALUE. @@ -185,14 +201,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Type +=head2 Type Returns the current value of Type. (In the database, Type is stored as varchar(20).) -=item SetType VALUE +=head2 SetType VALUE Set Type to VALUE. @@ -203,14 +219,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Field +=head2 Field Returns the current value of Field. (In the database, Field is stored as varchar(40).) -=item SetField VALUE +=head2 SetField VALUE Set Field to VALUE. @@ -221,14 +237,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item OldValue +=head2 OldValue Returns the current value of OldValue. (In the database, OldValue is stored as varchar(255).) -=item SetOldValue VALUE +=head2 SetOldValue VALUE Set OldValue to VALUE. @@ -239,14 +255,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item NewValue +=head2 NewValue Returns the current value of NewValue. (In the database, NewValue is stored as varchar(255).) -=item SetNewValue VALUE +=head2 SetNewValue VALUE Set NewValue to VALUE. @@ -257,25 +273,79 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Data +=head2 ReferenceType + +Returns the current value of ReferenceType. +(In the database, ReferenceType is stored as varchar(255).) + + + +=head2 SetReferenceType VALUE + + +Set ReferenceType to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, ReferenceType will be stored as a varchar(255).) + + +=cut + + +=head2 OldReference + +Returns the current value of OldReference. +(In the database, OldReference is stored as int(11).) + + + +=head2 SetOldReference VALUE + + +Set OldReference to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, OldReference will be stored as a int(11).) + + +=cut + + +=head2 NewReference + +Returns the current value of NewReference. +(In the database, NewReference is stored as int(11).) + + + +=head2 SetNewReference VALUE + + +Set NewReference to VALUE. +Returns (1, 'Status message') on success and (0, 'Error Message') on failure. +(In the database, NewReference will be stored as a int(11).) + + +=cut + + +=head2 Data Returns the current value of Data. -(In the database, Data is stored as varchar(100).) +(In the database, Data is stored as varchar(255).) -=item SetData VALUE +=head2 SetData VALUE Set Data to VALUE. Returns (1, 'Status message') on success and (0, 'Error Message') on failure. -(In the database, Data will be stored as a varchar(100).) +(In the database, Data will be stored as a varchar(255).) =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -284,7 +354,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -294,31 +364,37 @@ Returns the current value of Created. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, - EffectiveTicket => - {read => 1, write => 1, type => 'int(11)', default => '0'}, - Ticket => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, + ObjectType => + {read => 1, write => 1, sql_type => 12, length => 64, is_blob => 0, is_numeric => 0, type => 'varchar(64)', default => ''}, + ObjectId => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, TimeTaken => - {read => 1, write => 1, type => 'int(11)', default => '0'}, + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Type => - {read => 1, write => 1, type => 'varchar(20)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 20, is_blob => 0, is_numeric => 0, type => 'varchar(20)', default => ''}, Field => - {read => 1, write => 1, type => 'varchar(40)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 40, is_blob => 0, is_numeric => 0, type => 'varchar(40)', default => ''}, OldValue => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, NewValue => - {read => 1, write => 1, type => 'varchar(255)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, + ReferenceType => + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, + OldReference => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, + NewReference => + {read => 1, write => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Data => - {read => 1, write => 1, type => 'varchar(100)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 255, is_blob => 0, is_numeric => 0, type => 'varchar(255)', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -350,7 +426,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Transaction_Overlay.pm b/rt/lib/RT/Transaction_Overlay.pm index 54bb326a9..b179084c8 100644 --- a/rt/lib/RT/Transaction_Overlay.pm +++ b/rt/lib/RT/Transaction_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Transaction - RT\'s transaction object @@ -48,10 +71,16 @@ ok(require RT::Transaction); =cut + +package RT::Transaction; + use strict; no warnings qw(redefine); +use vars qw( %_BriefDescriptions ); + use RT::Attachments; +use RT::Scrips; # {{{ sub Create @@ -59,8 +88,9 @@ use RT::Attachments; Create a new transaction. -This routine should _never_ be called anything other Than RT::Ticket. It should not be called -from client code. Ever. Not ever. If you do this, we will hunt you down. and break your kneecaps. +This routine should _never_ be called by anything other than RT::Ticket. +It should not be called +from client code. Ever. Not ever. If you do this, we will hunt you down and break your kneecaps. Then the unpleasant stuff will start. TODO: Document what gets passed to this @@ -72,7 +102,6 @@ sub Create { my %args = ( id => undef, TimeTaken => 0, - Ticket => 0, Type => 'undefined', Data => '', Field => undef, @@ -80,24 +109,37 @@ sub Create { NewValue => undef, MIMEObj => undef, ActivateScrips => 1, + CommitScrips => 1, + ObjectType => 'RT::Ticket', + ObjectId => 0, + ReferenceType => undef, + OldReference => undef, + NewReference => undef, @_ ); + $args{ObjectId} ||= $args{Ticket}; + #if we didn't specify a ticket, we need to bail - unless ( $args{'Ticket'} ) { - return ( 0, $self->loc( "Transaction->Create couldn't, as you didn't specify a ticket id")); + unless ( $args{'ObjectId'} && $args{'ObjectType'}) { + return ( 0, $self->loc( "Transaction->Create couldn't, as you didn't specify an object type and id")); } #lets create our transaction - my %params = (Ticket => $args{'Ticket'}, + my %params = ( Type => $args{'Type'}, Data => $args{'Data'}, Field => $args{'Field'}, OldValue => $args{'OldValue'}, NewValue => $args{'NewValue'}, - Created => $args{'Created'} + Created => $args{'Created'}, + ObjectType => $args{'ObjectType'}, + ObjectId => $args{'ObjectId'}, + ReferenceType => $args{'ReferenceType'}, + OldReference => $args{'OldReference'}, + NewReference => $args{'NewReference'}, ); # Parameters passed in during an import that we probably don't want to touch, otherwise @@ -107,84 +149,79 @@ sub Create { my $id = $self->SUPER::Create(%params); $self->Load($id); - $self->_Attach( $args{'MIMEObj'} ) - if defined $args{'MIMEObj'}; + $self->_Attach( $args{'MIMEObj'} ) if defined $args{'MIMEObj'}; + #Provide a way to turn off scrips if we need to - if ( $args{'ActivateScrips'} ) { + $RT::Logger->debug('About to think about scrips for transaction #' .$self->Id); + if ( $args{'ActivateScrips'} and $args{'ObjectType'} eq 'RT::Ticket' ) { + $self->{'scrips'} = RT::Scrips->new($RT::SystemUser); + + $RT::Logger->debug('About to prepare scrips for transaction #' .$self->Id); - #We're really going to need a non-acled ticket for the scrips to work - my $TicketAsSystem = RT::Ticket->new($RT::SystemUser); - $TicketAsSystem->Load( $args{'Ticket'} ) - || $RT::Logger->err("$self couldn't load ticket $args{'Ticket'}\n"); + $self->{'scrips'}->Prepare( + Stage => 'TransactionCreate', + Type => $args{'Type'}, + Ticket => $args{'ObjectId'}, + Transaction => $self->id, + ); + if ($args{'CommitScrips'} ) { + $RT::Logger->debug('About to commit scrips for transaction #' .$self->Id); + $self->{'scrips'}->Commit(); + } + } - my $TransAsSystem = RT::Transaction->new($RT::SystemUser); - $TransAsSystem->Load( $self->id ) - || $RT::Logger->err( - "$self couldn't load a copy of itself as superuser\n"); - # {{{ Deal with Scrips + return ( $id, $self->loc("Transaction Created") ); +} - use RT::Scrips; - my $PossibleScrips = RT::Scrips->new($RT::SystemUser); +# }}} - $PossibleScrips->LimitToQueue( $TicketAsSystem->QueueObj->Id ) - ; #Limit it to $Ticket->QueueObj->Id - $PossibleScrips->LimitToGlobal() - unless $TicketAsSystem->QueueObj->Disabled; # or to "global" +=head2 Scrips +Returns the Scrips object for this transaction. +This routine is only useful on a freshly created transaction object. +Scrips do not get persisted to the database with transactions. - $PossibleScrips->Limit(FIELD => "Stage", VALUE => "TransactionCreate"); +=cut - my $ConditionsAlias = $PossibleScrips->NewAlias('ScripConditions'); - $PossibleScrips->Join( - ALIAS1 => 'main', - FIELD1 => 'ScripCondition', - ALIAS2 => $ConditionsAlias, - FIELD2 => 'id' - ); +sub Scrips { + my $self = shift; + return($self->{'scrips'}); +} - #We only want things where the scrip applies to this sort of transaction - $PossibleScrips->Limit( - ALIAS => $ConditionsAlias, - FIELD => 'ApplicableTransTypes', - OPERATOR => 'LIKE', - VALUE => $args{'Type'}, - ENTRYAGGREGATOR => 'OR', - ); - # Or where the scrip applies to any transaction - $PossibleScrips->Limit( - ALIAS => $ConditionsAlias, - FIELD => 'ApplicableTransTypes', - OPERATOR => 'LIKE', - VALUE => "Any", - ENTRYAGGREGATOR => 'OR', - ); +# {{{ sub Delete - #Iterate through each script and check it's applicability. +=head2 Delete - while ( my $Scrip = $PossibleScrips->Next() ) { - $Scrip->Apply (TicketObj => $TicketAsSystem, - TransactionObj => $TransAsSystem); - } +Delete this transaction. Currently DOES NOT CHECK ACLS - # }}} +=cut - } +sub Delete { + my $self = shift; - return ( $id, $self->loc("Transaction Created") ); -} -# }}} + $RT::Handle->BeginTransaction(); -# {{{ sub Delete + my $attachments = $self->Attachments; -sub Delete { - my $self = shift; - return ( 0, - $self->loc('Deleting this object could break referential integrity') ); + while (my $attachment = $attachments->Next) { + my ($id, $msg) = $attachment->Delete(); + unless ($id) { + $RT::Handle->Rollback(); + return($id, $self->loc("System Error: [_1]", $msg)); + } + } + my ($id,$msg) = $self->SUPER::Delete(); + unless ($id) { + $RT::Handle->Rollback(); + return($id, $self->loc("System Error: [_1]", $msg)); + } + $RT::Handle->Commit(); + return ($id,$msg); } # }}} @@ -254,7 +291,7 @@ sub Content { if ( $args{'Quote'} ) { # Remove quoted signature. - $content =~ s/\n-- \n(.*)$//s; + $content =~ s/\n-- \n(.*?)$//s; # What's the longest line like? my $max = 0; @@ -389,7 +426,7 @@ sub Attachments { } #if they ain't got rights to see, return an empty object - else { + elsif ($self->__Value('ObjectType') eq "RT::Ticket") { unless ( $self->CurrentUserHasRight('ShowTicket') ) { return ( $self->{'attachments'} ); } @@ -460,15 +497,17 @@ sub Description { my $self = shift; #Check those ACLs - #If it's a comment, we need to be extra special careful - if ( $self->__Value('Type') eq 'Comment' ) { + #If it's a comment or a comment email record, + # we need to be extra special careful + + if ( $self->__Value('Type') =~ /^Comment/ ) { unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { return ( $self->loc("Permission Denied") ); } } #if they ain't got rights to see, don't let em - else { + elsif ($self->__Value('ObjectType') eq "RT::Ticket") { unless ( $self->CurrentUserHasRight('ShowTicket') ) { return ($self->loc("Permission Denied") ); } @@ -494,57 +533,97 @@ Returns a text string which briefly describes this transaction sub BriefDescription { my $self = shift; - - #Check those ACLs - #If it's a comment, we need to be extra special careful - if ( $self->__Value('Type') eq 'Comment' ) { + #If it's a comment or a comment email record, + # we need to be extra special careful + if ( $self->__Value('Type') =~ /^Comment/ ) { unless ( $self->CurrentUserHasRight('ShowTicketComments') ) { return ( $self->loc("Permission Denied") ); } } #if they ain't got rights to see, don't let em - else { + elsif ( $self->__Value('ObjectType') eq "RT::Ticket" ) { unless ( $self->CurrentUserHasRight('ShowTicket') ) { return ( $self->loc("Permission Denied") ); } } - my $type = $self->Type; #cache this, rather than calling it 30 times + my $type = $self->Type; #cache this, rather than calling it 30 times - if ( !defined( $type ) ) { + if ( !defined($type) ) { return $self->loc("No transaction type specified"); } + my $obj_type = $self->FriendlyObjectType; + if ( $type eq 'Create' ) { - return ($self->loc("Ticket created")); + return ( $self->loc( "[_1] created", $obj_type ) ); } elsif ( $type =~ /Status/ ) { if ( $self->Field eq 'Status' ) { if ( $self->NewValue eq 'deleted' ) { - return ($self->loc("Ticket deleted")); + return ( $self->loc( "[_1] deleted", $obj_type ) ); } else { - return ( $self->loc("Status changed from [_1] to [_2]", $self->loc($self->OldValue), $self->loc($self->NewValue) )); + return ( + $self->loc( + "Status changed from [_1] to [_2]", + "'" . $self->loc( $self->OldValue ) . "'", + "'" . $self->loc( $self->NewValue ) . "'" + ) + ); } } # Generic: - my $no_value = $self->loc("(no value)"); - return ( $self->loc( "[_1] changed from [_2] to [_3]", $self->Field , ( $self->OldValue || $no_value ) , $self->NewValue )); - } - - if ( $type eq 'Correspond' ) { - return $self->loc("Correspondence added"); + my $no_value = $self->loc("(no value)"); + return ( + $self->loc( + "[_1] changed from [_2] to [_3]", + $self->Field, + ( $self->OldValue ? "'" . $self->OldValue . "'" : $no_value ), + "'" . $self->NewValue . "'" + ) + ); } - elsif ( $type eq 'Comment' ) { - return $self->loc("Comments added"); + if ( my $code = $_BriefDescriptions{$type} ) { + return $code->($self); } - elsif ( $type eq 'CustomField' ) { + return $self->loc( + "Default: [_1]/[_2] changed from [_3] to [_4]", + $type, + $self->Field, + ( + $self->OldValue + ? "'" . $self->OldValue . "'" + : $self->loc("(no value)") + ), + "'" . $self->NewValue . "'" + ); +} +%_BriefDescriptions = ( + CommentEmailRecord => sub { + my $self = shift; + return $self->loc("Outgoing email about a comment recorded"); + }, + EmailRecord => sub { + my $self = shift; + return $self->loc("Outgoing email recorded"); + }, + Correspond => sub { + my $self = shift; + return $self->loc("Correspondence added"); + }, + Comment => sub { + my $self = shift; + return $self->loc("Comments added"); + }, + CustomField => sub { + my $self = shift; my $field = $self->loc('CustomField'); if ( $self->Field ) { @@ -563,111 +642,134 @@ sub BriefDescription { else { return $self->loc("[_1] [_2] changed to [_3]", $field, $self->OldValue, $self->NewValue ); } - } - - elsif ( $type eq 'Untake' ) { + }, + Untake => sub { + my $self = shift; return $self->loc("Untaken"); - } - - elsif ( $type eq "Take" ) { + }, + Take => sub { + my $self = shift; return $self->loc("Taken"); - } - - elsif ( $type eq "Force" ) { + }, + Force => sub { + my $self = shift; my $Old = RT::User->new( $self->CurrentUser ); $Old->Load( $self->OldValue ); my $New = RT::User->new( $self->CurrentUser ); $New->Load( $self->NewValue ); return $self->loc("Owner forcibly changed from [_1] to [_2]" , $Old->Name , $New->Name); - } - elsif ( $type eq "Steal" ) { + }, + Steal => sub { + my $self = shift; my $Old = RT::User->new( $self->CurrentUser ); $Old->Load( $self->OldValue ); - return $self->loc("Stolen from [_1] ", $Old->Name); - } - - elsif ( $type eq "Give" ) { + return $self->loc("Stolen from [_1]", $Old->Name); + }, + Give => sub { + my $self = shift; my $New = RT::User->new( $self->CurrentUser ); $New->Load( $self->NewValue ); return $self->loc( "Given to [_1]", $New->Name ); - } - - elsif ( $type eq 'AddWatcher' ) { + }, + AddWatcher => sub { + my $self = shift; my $principal = RT::Principal->new($self->CurrentUser); $principal->Load($self->NewValue); return $self->loc( "[_1] [_2] added", $self->Field, $principal->Object->Name); - } - - elsif ( $type eq 'DelWatcher' ) { + }, + DelWatcher => sub { + my $self = shift; my $principal = RT::Principal->new($self->CurrentUser); $principal->Load($self->OldValue); return $self->loc( "[_1] [_2] deleted", $self->Field, $principal->Object->Name); - } - - elsif ( $type eq 'Subject' ) { + }, + Subject => sub { + my $self = shift; return $self->loc( "Subject changed to [_1]", $self->Data ); - } + }, + AddLink => sub { + my $self = shift; + my $value; + if ( $self->NewValue ) { + my $URI = RT::URI->new( $self->CurrentUser ); + $URI->FromURI( $self->NewValue ); + if ( $URI->Resolver ) { + $value = $URI->Resolver->AsString; + } + else { + $value = $self->NewValue; + } + if ( $self->Field eq 'DependsOn' ) { + return $self->loc( "Dependency on [_1] added", $value ); + } + elsif ( $self->Field eq 'DependedOnBy' ) { + return $self->loc( "Dependency by [_1] added", $value ); - elsif ( $type eq 'AddLink' ) { + } + elsif ( $self->Field eq 'RefersTo' ) { + return $self->loc( "Reference to [_1] added", $value ); + } + elsif ( $self->Field eq 'ReferredToBy' ) { + return $self->loc( "Reference by [_1] added", $value ); + } + elsif ( $self->Field eq 'MemberOf' ) { + return $self->loc( "Membership in [_1] added", $value ); + } + elsif ( $self->Field eq 'HasMember' ) { + return $self->loc( "Member [_1] added", $value ); + } + elsif ( $self->Field eq 'MergedInto' ) { + return $self->loc( "Merged into [_1]", $value ); + } + } + else { + return ( $self->Data ); + } + }, + DeleteLink => sub { + my $self = shift; my $value; - if ($self->NewValue) { - my $URI = RT::URI->new($self->CurrentUser); - $URI->FromURI($self->NewValue); - if ($URI->Resolver) { - $value = $URI->Resolver->AsString; - } else { - $value = $self->NewValue; - } - } - if ($self->Field eq 'DependsOn') { - return $self->loc("Dependency on [_1] added",$value); - } elsif ($self->Field eq 'DependedOnBy') { - return $self->loc("Dependency by [_1] added",$value); - - } elsif ($self->Field eq 'RefersTo') { - return $self->loc("Reference to [_1] added",$value); - } elsif ($self->Field eq 'ReferredToBy') { - return $self->loc("Reference by [_1] added",$value); - } elsif ($self->Field eq 'MemberOf') { - return $self->loc("Membership in [_1] added",$value); - } elsif ($self->Field eq 'HasMember') { - return $self->loc("Member [_1] added",$value); - } else { - return ( $self->Data ); - } - } - elsif ( $type eq 'DeleteLink' ) { - my $value; - if ($self->OldValue) { - my $URI = RT::URI->new($self->CurrentUser); - $URI->FromURI($self->OldValue); - if ($URI->Resolver) { - $value = $URI->Resolver->AsString; - } else { - $value = $self->OldValue; - } - } - - if ($self->Field eq 'DependsOn') { - return $self->loc("Dependency on [_1] deleted",$value); - } elsif ($self->Field eq 'DependedOnBy') { - return $self->loc("Dependency by [_1] deleted",$value); - - } elsif ($self->Field eq 'RefersTo') { - return $self->loc("Reference to [_1] deleted",$value); - } elsif ($self->Field eq 'ReferredToBy') { - return $self->loc("Reference by [_1] deleted",$value); - } elsif ($self->Field eq 'MemberOf') { - return $self->loc("Membership in [_1] deleted",$value); - } elsif ($self->Field eq 'HasMember') { - return $self->loc("Member [_1] deleted",$value); - } else { - return ( $self->Data ); - } - } - elsif ( $type eq 'Set' ) { - if ( $self->Field eq 'Queue' ) { + if ( $self->OldValue ) { + my $URI = RT::URI->new( $self->CurrentUser ); + $URI->FromURI( $self->OldValue ); + if ( $URI->Resolver ) { + $value = $URI->Resolver->AsString; + } + else { + $value = $self->OldValue; + } + + if ( $self->Field eq 'DependsOn' ) { + return $self->loc( "Dependency on [_1] deleted", $value ); + } + elsif ( $self->Field eq 'DependedOnBy' ) { + return $self->loc( "Dependency by [_1] deleted", $value ); + + } + elsif ( $self->Field eq 'RefersTo' ) { + return $self->loc( "Reference to [_1] deleted", $value ); + } + elsif ( $self->Field eq 'ReferredToBy' ) { + return $self->loc( "Reference by [_1] deleted", $value ); + } + elsif ( $self->Field eq 'MemberOf' ) { + return $self->loc( "Membership in [_1] deleted", $value ); + } + elsif ( $self->Field eq 'HasMember' ) { + return $self->loc( "Member [_1] deleted", $value ); + } + } + else { + return ( $self->Data ); + } + }, + Set => sub { + my $self = shift; + if ( $self->Field eq 'Password' ) { + return $self->loc('Password changed'); + } + elsif ( $self->Field eq 'Queue' ) { my $q1 = new RT::Queue( $self->CurrentUser ); $q1->Load( $self->OldValue ); my $q2 = new RT::Queue( $self->CurrentUser ); @@ -676,25 +778,22 @@ sub BriefDescription { } # Write the date/time change at local time: - elsif ($self->Field =~ /Due|Starts|Started|Told/) { - my $t1 = new RT::Date($self->CurrentUser); - $t1->Set(Format => 'ISO', Value => $self->NewValue); - my $t2 = new RT::Date($self->CurrentUser); - $t2->Set(Format => 'ISO', Value => $self->OldValue); - return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, $t2->AsString, $t1->AsString ); - } + elsif ($self->Field =~ /Due|Starts|Started|Told/) { + my $t1 = new RT::Date($self->CurrentUser); + $t1->Set(Format => 'ISO', Value => $self->NewValue); + my $t2 = new RT::Date($self->CurrentUser); + $t2->Set(Format => 'ISO', Value => $self->OldValue); + return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, $t2->AsString, $t1->AsString ); + } else { - return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, $self->OldValue, $self->NewValue ); + return $self->loc( "[_1] changed from [_2] to [_3]", $self->Field, ($self->OldValue? "'".$self->OldValue ."'" : $self->loc("(no value)")) , "'". $self->NewValue."'" ); } - } - elsif ( $type eq 'PurgeTransaction' ) { + }, + PurgeTransaction => sub { + my $self = shift; return $self->loc("Transaction [_1] purged", $self->Data); - } - else { - return $self->loc( "Default: [_1]/[_2] changed from [_3] to [_4]", $type, $self->Field, $self->OldValue, $self->NewValue ); - - } -} + }, +); # }}} @@ -711,6 +810,7 @@ Returns false otherwise sub IsInbound { my $self = shift; + $self->ObjectType eq 'RT::Ticket' or return undef; return ( $self->TicketObj->IsRequestor( $self->CreatorObj->PrincipalId ) ); } @@ -718,23 +818,11 @@ sub IsInbound { # }}} -sub _ClassAccessible { +sub _OverlayAccessible { { - id => { read => 1, type => 'int(11)', default => '' }, - EffectiveTicket => - { read => 1, write => 1, type => 'int(11)', default => '' }, - Ticket => - { read => 1, public => 1, type => 'int(11)', default => '' }, - TimeTaken => { read => 1, type => 'int(11)', default => '' }, - Type => { read => 1, type => 'varchar(20)', default => '' }, - Field => { read => 1, type => 'varchar(40)', default => '' }, - OldValue => { read => 1, type => 'varchar(255)', default => '' }, - NewValue => { read => 1, type => 'varchar(255)', default => '' }, - Data => { read => 1, type => 'varchar(100)', default => '' }, - Creator => { read => 1, auto => 1, type => 'int(11)', default => '' }, - Created => - { read => 1, auto => 1, type => 'datetime', default => '' }, + ObjectType => { public => 1}, + ObjectId => { public => 1}, } }; @@ -778,9 +866,29 @@ sub _Value { return (undef); } } + elsif ( $self->__Value('Type') eq 'CommentEmailRecord' ) { + unless ( $self->CurrentUserHasRight('ShowTicketComments') + && $self->CurrentUserHasRight('ShowOutgoingEmail') ) { + return (undef); + } + + } + elsif ( $self->__Value('Type') eq 'EmailRecord' ) { + unless ( $self->CurrentUserHasRight('ShowOutgoingEmail')) { + return (undef); + } + + } + # Make sure the user can see the custom field before showing that it changed + elsif ( ( $self->__Value('Type') eq 'CustomField' ) && $self->__Value('Field') ) { + my $cf = RT::CustomField->new( $self->CurrentUser ); + $cf->Load( $self->__Value('Field') ); + return (undef) unless ( $cf->CurrentUserHasRight('SeeCustomField') ); + } + #if they ain't got rights to see, don't let em - else { + elsif ($self->__Value('ObjectType') eq "RT::Ticket") { unless ( $self->CurrentUserHasRight('ShowTicket') ) { return (undef); } @@ -814,4 +922,156 @@ sub CurrentUserHasRight { # }}} +sub Ticket { + my $self = shift; + return $self->ObjectId; +} + +sub TicketObj { + my $self = shift; + return $self->Object; +} + +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; + } + else { + 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; + } + else { + return $self->__Value('NewValue'); + } +} + +sub Object { + my $self = shift; + my $Object = $self->__Value('ObjectType')->new($self->CurrentUser); + $Object->Load($self->__Value('ObjectId')); + return($Object); +} + +sub FriendlyObjectType { + my $self = shift; + my $type = $self->ObjectType or return undef; + $type =~ s/^RT:://; + return $self->loc($type); +} + +=head2 UpdateCustomFields + + Takes a hash of + + CustomField-<<Id>> => Value + or + + Object-RT::Transaction-CustomField-<<Id>> => Value parameters to update + this transaction's custom fields + +=cut + +sub UpdateCustomFields { + my $self = shift; + my %args = (@_); + + # This method used to have an API that took a hash of a single + # value "ARGSRef", which was a reference to a hash of arguments. + # This was insane. The next few lines of code preserve that API + # while giving us something saner. + + + # TODO: 3.6: DEPRECATE OLD API + + my $args; + + if ($args{'ARGSRef'}) { + $args = $args{ARGSRef}; + } else { + $args = \%args; + } + + foreach my $arg ( keys %$args ) { + next + unless ( $arg =~ + /^(?:Object-RT::Transaction--)?CustomField-(\d+)/ ); + next if $arg =~ /-Magic$/; + my $cfid = $1; + my $values = $args->{$arg}; + foreach + my $value ( UNIVERSAL::isa( $values, 'ARRAY' ) ? @$values : $values ) + { + next unless length($value); + $self->_AddCustomFieldValue( + Field => $cfid, + Value => $value, + RecordTransaction => 0, + ); + } + } +} + + + +=head2 CustomFieldValues + + Do name => id mapping (if needed) before falling back to RT::Record's CustomFieldValues + + See L<RT::Record> + +=cut + +sub CustomFieldValues { + my $self = shift; + my $field = shift; + + if ( UNIVERSAL::can( $self->Object, 'QueueObj' ) ) { + + unless ( $field =~ /^\d+$/o ) { + my $CFs = RT::CustomFields->new( $self->CurrentUser ); + $CFs->Limit( FIELD => 'Name', VALUE => $field); + $CFs->LimitToLookupType($self->CustomFieldLookupType); + $CFs->LimitToGlobalOrObjectId($self->Object->QueueObj->id); + $field = $CFs->First->id if $CFs->First; + } + } + return $self->SUPER::CustomFieldValues($field); +} + +# }}} + +# {{{ sub CustomFieldLookupType + +=head2 CustomFieldLookupType + +Returns the RT::Transaction lookup type, which can +be passed to RT::CustomField->Create() via the 'LookupType' hash key. + +=cut + +# }}} + +sub CustomFieldLookupType { + "RT::Queue-RT::Ticket-RT::Transaction"; +} + +# Transactions don't change. by adding this cache congif directiove, we don't lose pathalogically on long tickets. +sub _CacheConfig { + { + 'cache_p' => 1, + 'fast_update_p' => 1, + 'cache_for_sec' => 6000, + } +} 1; diff --git a/rt/lib/RT/Transactions.pm b/rt/lib/RT/Transactions.pm index 23a475ac6..351b14c4e 100755 --- a/rt/lib/RT/Transactions.pm +++ b/rt/lib/RT/Transactions.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::Transaction item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Transactions_Overlay.pm b/rt/lib/RT/Transactions_Overlay.pm index 3a7d4c14f..fe5157556 100644 --- a/rt/lib/RT/Transactions_Overlay.pm +++ b/rt/lib/RT/Transactions_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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.) # -# END LICENSE BLOCK +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Transactions - a collection of RT Transaction objects @@ -43,6 +66,9 @@ ok (require RT::Transactions); =cut + +package RT::Transactions; + use strict; no warnings qw(redefine); @@ -54,33 +80,107 @@ sub _Init { $self->{'primary_key'} = "id"; # By default, order by the date of the transaction, rather than ID. - $self->OrderBy( ALIAS => 'main', - FIELD => 'Created', - ORDER => 'ASC'); + $self->OrderByCols( { FIELD => 'Created', + ORDER => 'ASC' }, + { FIELD => 'id', + ORDER => 'ASC' } ); return ( $self->SUPER::_Init(@_)); } # }}} -=head2 example methods +=head2 Limit - Queue RT::Queue or Queue Id - Ticket RT::Ticket or Ticket Id +A wrapper around SUPER::Limit to catch migration issues +=cut + +sub Limit { + my $self = shift; + my %args = (@_); + + if ($args{'FIELD'} eq 'Ticket') { + Carp::cluck("Historical code calling RT::Transactions::Limit with a 'Ticket'. This deprecated API will be deleted in 3.6"); + $self->SUPER::Limit(FIELD => 'ObjectType', OPERATOR => '=', VALUE =>'RT::Ticket'); + $args{'FIELD'} = 'ObjectId'; + $self->SUPER::Limit(%args); + + } else { + + $self->SUPER::Limit(%args); + } + + +} + + + +=head2 LimitToTicket TICKETID + +Find only transactions for the ticket whose id is TICKETID. + +This includes tickets merged into TICKETID. + +Repeated calls to this method will intelligently limit down to that set of tickets, joined with an OR -LimitDate - -Type TRANSTYPE -Field STRING -OldValue OLDVAL -NewValue NEWVAL -Data DATA -TimeTaken -Actor USEROBJ/USERID -ContentMatches STRING =cut +sub LimitToTicket { + my $self = shift; + my $tid = shift; + + unless ( $self->{'tickets_table'} ) { + $self->{'tickets_table'} ||= $self->NewAlias('Tickets'); + $self->Join( + ALIAS1 => 'main', + FIELD1 => 'ObjectId', + ALIAS2 => $self->{'tickets_table'}, + FIELD2 => 'id' + ); + $self->Limit( + FIELD => 'ObjectType', + VALUE => 'RT::Ticket', + ); + } + $self->Limit( + ALIAS => $self->{tickets_table}, + FIELD => 'EffectiveId', + OPERATOR => '=', + ENTRYAGGREGATOR => 'OR', + VALUE => $tid, + ); + +} + + +# {{{ sub Next +sub Next { + my $self = shift; + + my $Transaction = $self->SUPER::Next(); + if ((defined($Transaction)) and (ref($Transaction))) { + # If the user can see the transaction's type, then they can + # see the transaction and we should hand it back. + if ($Transaction->Type) { + return($Transaction); + } + + #If the user doesn't have the right to show this ticket + else { + return($self->Next()); + } + } + + #if there never was any ticket + else { + return(undef); + } +} +# }}} + + + 1; diff --git a/rt/lib/RT/URI.pm b/rt/lib/RT/URI.pm index 7acc1dc98..fdbe63bea 100644 --- a/rt/lib/RT/URI.pm +++ b/rt/lib/RT/URI.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::URI;; use strict; @@ -91,8 +113,10 @@ sub FromObject { =head2 FromURI <URI> -Returns a local object id for this content. You are expected to know what sort of object this is the Id -of +Returns a local object id for this content. You are expected to know +what sort of object this is the Id of + +Returns true if everything is ok, otherwise false =cut @@ -102,12 +126,12 @@ sub FromURI { return undef unless ($uri); - my $scheme; - # Special case: integers passed in as URIs must be ticket ids - if ($uri =~ /^(\d+)$/) { - $scheme = "fsck.com-rt"; - } elsif ($uri =~ /^((?:\w|\.|-)+?):/) { - $scheme = $1; + my $scheme; + # Special case: integers passed in as URIs must be ticket ids + if ($uri =~ /^(\d+)$/) { + $scheme = "fsck.com-rt"; + } elsif ($uri =~ /^((?:\w|\.|-)+?):/) { + $scheme = $1; } else { $RT::Logger->warning("$self Could not determine a URI scheme for $uri"); @@ -119,9 +143,12 @@ sub FromURI { unless ($self->Resolver->ParseURI($uri)) { $RT::Logger->warning("Resolver ".ref($self->Resolver)." could not parse $uri"); + $self->{resolver} = undef; # clear resolver return (undef); } +return(1); + } # }}} diff --git a/rt/lib/RT/URI/base.pm b/rt/lib/RT/URI/base.pm index a599f3ad8..56bfef33a 100644 --- a/rt/lib/RT/URI/base.pm +++ b/rt/lib/RT/URI/base.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::URI::base; use strict; diff --git a/rt/lib/RT/URI/freeside.pm b/rt/lib/RT/URI/freeside.pm new file mode 100644 index 000000000..ff1d38d21 --- /dev/null +++ b/rt/lib/RT/URI/freeside.pm @@ -0,0 +1,285 @@ +# BEGIN LICENSE BLOCK +# +# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com> +# Based on the original RT::URI::base and RT::URI::fsck_com_rt. +# +# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# +# (Except where explictly superceded by other copyright notices) +# +# 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. +# +# Unless otherwise specified, all modifications, corrections or +# extensions to this work which alter its source code become the +# property of Best Practical Solutions, LLC when submitted for +# inclusion in the work. +# +# +# END LICENSE BLOCK +package RT::URI::freeside; + +use RT::URI::base; +use strict; +use vars qw(@ISA $IntegrationType $URL); +@ISA = qw/RT::URI::base/; + + +=head1 NAME + +RT::URI::freeside + +=head1 DESCRIPTION + +URI handler for freeside URIs. See http://www.sisd.com/freeside/ for +more information on freeside. + + +=head1 Public subroutines + +=over 4 + +=item FreesideGetConfig CONFKEY + +Subroutine that returns the freeside's configuration value(s) for CONFKEY +as a scalar or list. + +=cut + +sub FreesideGetConfig { return undef; } + + +=item FreesideURL + +Returns the URL for freeside's web interface. + +=cut + +sub FreesideURL { return $URL; } + + +=item FreesideVersion + +Returns a string describing the freeside version being used. + +=cut + +sub FreesideVersion { return undef; } + + +=item smart_search + +A wrapper for the FS::cust_main::smart_search subroutine. + +=cut + +sub smart_search { return undef; } + + +=item small_custview + +A wrapper for the FS::CGI::small_custview subroutine. + +=cut + +sub small_custview { return 'Freeside integration error!</A>'; } + + +=back + +=head1 Private methods + +=over 4 + +=item _FreesideGetRecord + +Method returns a hashref of the freeside record referenced in the URI. +Must be called after ParseURI. + +=cut + +sub _FreesideGetRecord { return undef; } + + +=item _FreesideURIPrefix + +Method that returns the URI prefix for freeside URIs. + +=cut + +sub _FreesideURIPrefix { + + my $self = shift; + return($self->Scheme . '://freeside'); + +} + +=item _FreesideURILabel + +Method that returns a short string describing the customer referenced +in the URI. + +=cut + +sub _FreesideURILabel { + + my $self = shift; + + $RT::Logger->debug("Called _FreesideURILabel()"); + + return unless (exists($self->{'fstable'}) and + exists($self->{'fspkey'})); + + my $label; + my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); + + if ($table ne 'cust_main') { + warn "FS::${table} not currently supported"; + return; + } + + my $rec = $self->_FreesideGetRecord(); + + if (ref($rec) eq 'HASH' and $table eq 'cust_main') { + my $name = $rec->{'last'} . ', ' . $rec->{'first'}; + $name = $rec->{'company'} . " ($name)" if $rec->{'company'}; + $label = "$pkey: $name"; + } else { + $label = "$pkey: $table"; + } + + if ($label and !$@) { + return($label); + } else { + return; + } + +} + +=item _FreesideURILabelLong + +Method that returns a longer string describing the customer referenced +in the URI. + +=cut + +sub _FreesideURILabelLong { + + my $self = shift; + + return $self->_FreesideURILabel(); + +} + +=back + +=head1 Public methods + +=over 4 + +=cut + +sub ParseURI { + my $self = shift; + my $uri = shift; + my ($table, $pkey); + + my $uriprefix = $self->_FreesideURIPrefix; + if ($uri =~ /^$uriprefix\/(\w+)\/(\d+)$/) { + $table = $1; + $pkey = $2; + $self->{'scheme'} = $self->Scheme; + } else { + return(undef); + } + + $self->{'uri'} = "${uriprefix}/${table}/${pkey}"; + $self->{'fstable'} = $table; + $self->{'fspkey'} = $pkey; + + + my $url = $self->FreesideURL(); + + if ($url ne '') { + $self->{'href'} = "${url}/view/${table}.cgi?${pkey}"; + } else { + $self->{'href'} = $self->{'uri'}; + } + + $self->{'uri'}; + +} + +sub Scheme { + my $self = shift; + return('freeside'); + +} + +sub HREF { + my $self = shift; + return($self->{'href'} || $self->{'uri'}); +} + +sub IsLocal { + my $self = shift; + return undef; +} + +=item AsString + +Return a "pretty" string representing the URI object. + +This is meant to be used like this: + + % $re = $uri->Resolver; + <A HREF="<% $re->HREF %>"><% $re->AsString %></A> + +=cut + +sub AsString { + my $self = shift; + my $prettystring; + if ($prettystring = $self->_FreesideURILabel) { + return $prettystring; + } else { + return $self->URI; + } +} + +=item AsStringLong + +Return a longer (HTML) string representing the URI object. + +=cut + +sub AsStringLong { + my $self = shift; + my $prettystring; + if ($prettystring = $self->_FreesideURILabelLong || $self->_FreesideURILabel){ + return $prettystring; + } else { + return $self->URI; + } +} + +$IntegrationType ||= 'Internal'; +eval "require RT::URI::freeside::${RT::URI::freeside::IntegrationType}"; +warn $@ if $@; +if ($@ && + $@ !~ qr(^Can't locate RT/URI/freeside/${RT::URI::freeside::IntegrationType}.pm)) { + die $@; +}; + +=back + +=cut + +1; diff --git a/rt/lib/RT/URI/freeside/Internal.pm b/rt/lib/RT/URI/freeside/Internal.pm new file mode 100644 index 000000000..9ca06306d --- /dev/null +++ b/rt/lib/RT/URI/freeside/Internal.pm @@ -0,0 +1,138 @@ +# BEGIN LICENSE BLOCK +# +# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com> +# Based on the original RT::URI::base and RT::URI::fsck_com_rt. +# +# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# +# (Except where explictly superceded by other copyright notices) +# +# 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. +# +# Unless otherwise specified, all modifications, corrections or +# extensions to this work which alter its source code become the +# property of Best Practical Solutions, LLC when submitted for +# inclusion in the work. +# +# +# END LICENSE BLOCK +# +use strict; +no warnings qw(redefine); + +#use vars qw($conf); + +use FS; +use FS::UID qw(dbh); +use FS::CGI qw(popurl small_custview); +use FS::Conf; +use FS::Record qw(qsearchs qsearch dbdef); +use FS::cust_main; +use FS::cust_svc; + +=head1 NAME + +RT::URI::freeside::Internal + +=head1 DESCRIPTION + +Overlay for the RT::URI::freeside URI handler implementing the Internal integration type. + +See L<RT::URI::freeside> for public/private interface documentation. + +=cut + + + +sub _FreesideGetRecord { + + my $self = shift; + my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); + + $RT::Logger->debug("Called _FreesideGetRecord()"); + + #eval "use FS::$table;"; + + my $dbdef = dbdef; + unless ($dbdef) { + $RT::Logger->error("Using Internal freeside integration type, ". + "but it doesn't look like we're running under ". + "freeside's Mason handler."); + return; + } + + my $pkeyfield = $dbdef->table($table)->primary_key; + unless ($pkeyfield) { + $RT::Logger->error("No primary key for freeside table '$table'"); + return; + } + + my $fsrec = qsearchs($table, { $pkeyfield => $pkey }); + unless ($fsrec) { + $RT::Logger->error("Record with '$pkeyfield' == '$pkey' does " . + "not exist in table $table"); + return; + } + + return { $fsrec->hash, '_object' => $fsrec }; + +} + +sub FreesideVersion { + + return $FS::VERSION; + +} + +sub FreesideGetConfig { + + #$conf = new FS::Conf unless ref($conf); + my $conf = new FS::Conf; + + return scalar($conf->config(@_)); + +} + +sub smart_search { #Subroutine + + return map { { $_->hash } } &FS::cust_main::smart_search(@_); + +} + +sub small_custview { + + return &FS::CGI::small_custview(@_); + +} + +sub _FreesideURILabelLong { + + my $self = shift; + + my $table = $self->{'fstable'}; + + if ( $table eq 'cust_main' ) { + + my $rec = $self->_FreesideGetRecord(); + return small_custview( $rec->{'_object'}, + scalar(FS::Conf->new->config('countrydefault')), + 1 #nobalance + ); + + } else { + + return $self->_FreesideURILabel(); + + } + +} + +1; diff --git a/rt/lib/RT/URI/freeside/XMLRPC.pm b/rt/lib/RT/URI/freeside/XMLRPC.pm new file mode 100644 index 000000000..a8a731fcd --- /dev/null +++ b/rt/lib/RT/URI/freeside/XMLRPC.pm @@ -0,0 +1,122 @@ +# BEGIN LICENSE BLOCK +# +# Copyright (c) 2004 Kristian Hoffmann <khoff@fire2wire.com> +# Based on the original RT::URI::base and RT::URI::fsck_com_rt. +# +# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# +# (Except where explictly superceded by other copyright notices) +# +# 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. +# +# Unless otherwise specified, all modifications, corrections or +# extensions to this work which alter its source code become the +# property of Best Practical Solutions, LLC when submitted for +# inclusion in the work. +# +# +# END LICENSE BLOCK + +use strict; +no warnings qw(redefine); + +use vars qw($XMLRPC_URL $_FS_VERSION); + +use Frontier::Client; + +=head1 NAME + +RT::URI::freeside::XMLRPC + +=head1 DESCRIPTION + +Overlay for the RT::URI::freeside URI handler implementing the XMLRPC integration type. + +See L<RT::URI::freeside> for public/private interface documentation. + +=cut + + +sub _XMLRPCRequest { #Subroutine + + my $method = shift; + my @args = @_; + + my $result; + eval { + my $server = new Frontier::Client ( url => $XMLRPC_URL ); + $result = $server->call($method, @args); + }; + + if (not $@ and ref($result) eq 'ARRAY') { + return (scalar(@$result) == 1) ? @$result[0] : @$result; + } else { + $RT::Logger->debug("Freeside XMLRPC: " . $result || $@); + return (); + } + +} + +sub _FreesideGetRecord { + + my $self = shift; + my ($table, $pkey) = ($self->{'fstable'}, $self->{'fspkey'}); + my $record; + + $RT::Logger->debug("Called XMLRPC::_FreesideGetRecord()"); + + #FIXME: Need a better way to get primary keys. + # Maybe create a method for it and cache them like version? + my %table_pkeys = ( + cust_main => 'custnum', + ); + + my $method = 'Record.qsearchs'; + my @args = ($table, { $table_pkeys{$table} => $pkey }); + my ($record) = &_XMLRPCRequest($method, @args); + + return $record; + +} + + +sub FreesideGetConfig { + + return _XMLRPCRequest('Conf.config', @_); + +} + + +sub FreesideVersion { + + return $_FS_VERSION if ($_FS_VERSION =~ /^\d+\.\d+\.\d+/); + + $RT::Logger->debug("Requesting freeside version..."); + ($_FS_VERSION) = &_XMLRPCRequest('version'); + $RT::Logger->debug("Cached freeside version: ${_FS_VERSION}"); + + return $_FS_VERSION; + +} + +sub smart_search { #Subroutine + + return _XMLRPCRequest('cust_main.smart_search', @_); + +} + +sub small_custview { + + return _XMLRPCRequest('CGI.small_custview', @_); + +} + +1; diff --git a/rt/lib/RT/URI/fsck_com_rt.pm b/rt/lib/RT/URI/fsck_com_rt.pm index 36e8f82fd..ba98b1df4 100644 --- a/rt/lib/RT/URI/fsck_com_rt.pm +++ b/rt/lib/RT/URI/fsck_com_rt.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} package RT::URI::fsck_com_rt; use RT::Ticket; @@ -34,9 +56,9 @@ use vars qw(@ISA); -=head2 LocalURIPrefix +=head2 LocalURIPrefix -Returns the prefix for a local ticket URI +Returns the prefix for a local URI. =begin testing @@ -53,7 +75,7 @@ ok (UNIVERSAL::isa($uri,RT::URI::fsck_com_rt), "It's an RT::URI::fsck_com_rt"); ok ($uri->isa('RT::URI::base'), "It's an RT::URI::base"); ok ($uri->isa('RT::Base'), "It's an RT::Base"); -is ($uri->LocalURIPrefix , 'fsck.com-rt://example.com/ticket/'); +is ($uri->LocalURIPrefix , 'fsck.com-rt://'.$RT::Organization); =end testing @@ -63,99 +85,100 @@ is ($uri->LocalURIPrefix , 'fsck.com-rt://example.com/ticket/'); sub LocalURIPrefix { my $self = shift; - my $prefix = $self->Scheme. "://$RT::Organization/ticket/"; + + my $prefix = $self->Scheme. "://$RT::Organization"; + return ($prefix); } +=head2 ObjectType + +=cut + +sub ObjectType { + my $self = shift; + my $object = shift || $self->Object; + my $type = 'ticket'; + if (ref($object) && (ref($object) ne 'RT::Ticket')) { + $type = ref($object); + } + + return ($type); +} -=head2 URIForObject RT::Ticket -Returns the RT URI for a local RT::Ticket object +=head2 URIForObject RT::Record + +Returns the RT URI for a local RT::Record object =begin testing my $ticket = RT::Ticket->new($RT::SystemUser); $ticket->Load(1); my $uri = RT::URI::fsck_com_rt->new($ticket->CurrentUser); -is($uri->LocalURIPrefix . "1" , $uri->URIForObject($ticket)); +is($uri->LocalURIPrefix. "/ticket/1" , $uri->URIForObject($ticket)); =end testing =cut sub URIForObject { - my $self = shift; - my $obj = shift; - return ($self->LocalURIPrefix. $obj->Id); + return ($self->LocalURIPrefix."/".$self->ObjectType($obj)."/". $obj->Id); } -=head2 ParseObject $TicketObj - -When handed an RT::Ticekt object, figure out its URI +=head2 ParseURI URI +When handed an fsck.com-rt: URI, figures out things like whether its a local record and what its ID is =cut +sub ParseURI { + my $self = shift; + my $uri = shift; + + if ( $uri =~ /^(\d+)$/ ) { + my $ticket = RT::Ticket->new( $self->CurrentUser ); + $ticket->Load($uri); + $self->{'uri'} = $ticket->URI; + $self->{'object'} = $ticket; + return($ticket->id); + } + else { + $self->{'uri'} = $uri; + } -=head2 ParseURI URI + #If it's a local URI, load the ticket object and return its URI + if ( $self->IsLocal ) { -When handed an fsck.com-rt: URI, figures out things like whether its a local ticket -and what its ID is + my $local_uri_prefix = $self->LocalURIPrefix; + if ( $self->{'uri'} =~ /^$local_uri_prefix\/(.*?)\/(\d+)$/i ) { + my $type = $1; + my $id = $2; -=cut + if ( $type eq 'ticket' ) { $type = 'RT::Ticket' } + # We can instantiate any RT::Record subtype. but not anything else -sub ParseURI { - my $self = shift; - my $uri = shift; - - my $ticket; - - if ($uri =~ /^(\d+)$/) { - $ticket = RT::Ticket->new($self->CurrentUser); - $ticket->Load($uri); - $self->{'uri'} = $ticket->URI; - } - else { - $self->{'uri'} = $uri; - } - - - - #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+)$/) { - my $id = $1; - - - $ticket = RT::Ticket->new( $self->CurrentUser ); - $ticket->Load($id); - - #If we couldn't find a ticket, return undef. - unless ( defined $ticket->Id ) { - return undef; - } - } else { - return undef; - } - } - - $self->{'object'} = $ticket; - if ( UNIVERSAL::can( $ticket, 'Id' ) ) { - return ( $ticket->Id ); - } - else { - return undef; + if ( UNIVERSAL::isa( $type, 'RT::Record' ) ) { + my $record = $type->new( $self->CurrentUser ); + $record->Load($id); + + if ( $record->Id ) { + $self->{'object'} = $record; + return ( $record->Id ); + } + } + + } } + return undef; } =head2 IsLocal @@ -170,7 +193,7 @@ Returns undef otherwise. sub IsLocal { my $self = shift; my $local_uri_prefix = $self->LocalURIPrefix; - if ($self->{'uri'} =~ /^$local_uri_prefix/) { + if ($self->{'uri'} =~ /^$local_uri_prefix/i) { return 1; } else { @@ -194,7 +217,7 @@ sub Object { =head2 Scheme -Return the URI scheme for RT tickets +Return the URI scheme for RT records =cut @@ -214,7 +237,7 @@ Otherwise, return its URI sub HREF { my $self = shift; - if ($self->IsLocal) { + if ($self->IsLocal && $self->Object && ($self->ObjectType eq 'ticket')) { return ( $RT::WebURL . "Ticket/Display.html?id=".$self->Object->Id); } else { @@ -230,12 +253,11 @@ Returns either a localized string 'ticket #23' or the full URI if the object is sub AsString { my $self = shift; - if ($self->IsLocal) { - return $self->loc("ticket #[_1]", $self->Object->Id); - + if ($self->IsLocal && $self->Object) { + return $self->loc("[_1] #[_2]", $self->ObjectType, $self->Object->Id); } else { - return $self->Object->URI; + return $self->URI; } } diff --git a/rt/lib/RT/URI/t.pm b/rt/lib/RT/URI/t.pm new file mode 100644 index 000000000..2f95b2d3e --- /dev/null +++ b/rt/lib/RT/URI/t.pm @@ -0,0 +1,83 @@ +# BEGIN LICENSE BLOCK +# +# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# +# (Except where explictly superceded by other copyright notices) +# +# 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. +# +# Unless otherwise specified, all modifications, corrections or +# extensions to this work which alter its source code become the +# property of Best Practical Solutions, LLC when submitted for +# inclusion in the work. +# +# +# END LICENSE BLOCK +package RT::URI::t; + +use RT::Ticket; +use RT::URI::base; + +use strict; +use vars qw(@ISA); +@ISA = qw/RT::URI::fsck_com_rt/; + +my $scheme = "t"; + +=head2 ParseURI URI + +When handed an t: URI, figures out if it is an RT ticket. This is an +alternate short form of specifying a full ticket URI. + +=begin testing + +use_ok("RT::URI::t"); +my $uri = RT::URI::t->new($RT::SystemUser); +ok(ref($uri), "URI object exists"); + +my $uristr = "t:1"; +$uri->ParseURI($uristr); +is(ref($uri->Object), "RT::Ticket", "Object loaded is a ticket"); +is($uri->Object->Id, 1, "Object loaded has correct ID"); +is($uri->URI, 'fsck.com-rt://'.$RT::Organization.'/ticket/1', + "URI object has correct URI string"); + +=end testing + +=cut + +sub ParseURI { + my $self = shift; + my $uri = shift; + + # "t:<articlenum>" + # Pass this off to fsck_com_rt, which is equipped to deal with + # tickets after stripping off the t: prefix. + + if ($uri =~ /^$scheme:(\d+)/) { + return $self->SUPER::ParseURI($1); + } else { + $self->{'uri'} = $uri; + return undef; + } +} + +=head2 Scheme + +Return the URI scheme + +=cut + +sub Scheme { + return $scheme; +} + +1; diff --git a/rt/lib/RT/User.pm b/rt/lib/RT/User.pm index cbc10f5b4..18edfd476 100755 --- a/rt/lib/RT/User.pm +++ b/rt/lib/RT/User.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -61,7 +83,7 @@ sub _Init { -=item Create PARAMHASH +=head2 Create PARAMHASH Create takes a hash of values and creates a row in the database: @@ -170,7 +192,7 @@ sub Create { -=item id +=head2 id Returns the current value of id. (In the database, id is stored as int(11).) @@ -179,14 +201,14 @@ Returns the current value of id. =cut -=item Name +=head2 Name Returns the current value of Name. (In the database, Name is stored as varchar(200).) -=item SetName VALUE +=head2 SetName VALUE Set Name to VALUE. @@ -197,14 +219,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Password +=head2 Password Returns the current value of Password. (In the database, Password is stored as varchar(40).) -=item SetPassword VALUE +=head2 SetPassword VALUE Set Password to VALUE. @@ -215,14 +237,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Comments +=head2 Comments Returns the current value of Comments. (In the database, Comments is stored as blob.) -=item SetComments VALUE +=head2 SetComments VALUE Set Comments to VALUE. @@ -233,14 +255,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Signature +=head2 Signature Returns the current value of Signature. (In the database, Signature is stored as blob.) -=item SetSignature VALUE +=head2 SetSignature VALUE Set Signature to VALUE. @@ -251,14 +273,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item EmailAddress +=head2 EmailAddress Returns the current value of EmailAddress. (In the database, EmailAddress is stored as varchar(120).) -=item SetEmailAddress VALUE +=head2 SetEmailAddress VALUE Set EmailAddress to VALUE. @@ -269,14 +291,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item FreeformContactInfo +=head2 FreeformContactInfo Returns the current value of FreeformContactInfo. (In the database, FreeformContactInfo is stored as blob.) -=item SetFreeformContactInfo VALUE +=head2 SetFreeformContactInfo VALUE Set FreeformContactInfo to VALUE. @@ -287,14 +309,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Organization +=head2 Organization Returns the current value of Organization. (In the database, Organization is stored as varchar(200).) -=item SetOrganization VALUE +=head2 SetOrganization VALUE Set Organization to VALUE. @@ -305,14 +327,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item RealName +=head2 RealName Returns the current value of RealName. (In the database, RealName is stored as varchar(120).) -=item SetRealName VALUE +=head2 SetRealName VALUE Set RealName to VALUE. @@ -323,14 +345,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item NickName +=head2 NickName Returns the current value of NickName. (In the database, NickName is stored as varchar(16).) -=item SetNickName VALUE +=head2 SetNickName VALUE Set NickName to VALUE. @@ -341,14 +363,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Lang +=head2 Lang Returns the current value of Lang. (In the database, Lang is stored as varchar(16).) -=item SetLang VALUE +=head2 SetLang VALUE Set Lang to VALUE. @@ -359,14 +381,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item EmailEncoding +=head2 EmailEncoding Returns the current value of EmailEncoding. (In the database, EmailEncoding is stored as varchar(16).) -=item SetEmailEncoding VALUE +=head2 SetEmailEncoding VALUE Set EmailEncoding to VALUE. @@ -377,14 +399,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item WebEncoding +=head2 WebEncoding Returns the current value of WebEncoding. (In the database, WebEncoding is stored as varchar(16).) -=item SetWebEncoding VALUE +=head2 SetWebEncoding VALUE Set WebEncoding to VALUE. @@ -395,14 +417,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ExternalContactInfoId +=head2 ExternalContactInfoId Returns the current value of ExternalContactInfoId. (In the database, ExternalContactInfoId is stored as varchar(100).) -=item SetExternalContactInfoId VALUE +=head2 SetExternalContactInfoId VALUE Set ExternalContactInfoId to VALUE. @@ -413,14 +435,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ContactInfoSystem +=head2 ContactInfoSystem Returns the current value of ContactInfoSystem. (In the database, ContactInfoSystem is stored as varchar(30).) -=item SetContactInfoSystem VALUE +=head2 SetContactInfoSystem VALUE Set ContactInfoSystem to VALUE. @@ -431,14 +453,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item ExternalAuthId +=head2 ExternalAuthId Returns the current value of ExternalAuthId. (In the database, ExternalAuthId is stored as varchar(100).) -=item SetExternalAuthId VALUE +=head2 SetExternalAuthId VALUE Set ExternalAuthId to VALUE. @@ -449,14 +471,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item AuthSystem +=head2 AuthSystem Returns the current value of AuthSystem. (In the database, AuthSystem is stored as varchar(30).) -=item SetAuthSystem VALUE +=head2 SetAuthSystem VALUE Set AuthSystem to VALUE. @@ -467,14 +489,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Gecos +=head2 Gecos Returns the current value of Gecos. (In the database, Gecos is stored as varchar(16).) -=item SetGecos VALUE +=head2 SetGecos VALUE Set Gecos to VALUE. @@ -485,14 +507,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item HomePhone +=head2 HomePhone Returns the current value of HomePhone. (In the database, HomePhone is stored as varchar(30).) -=item SetHomePhone VALUE +=head2 SetHomePhone VALUE Set HomePhone to VALUE. @@ -503,14 +525,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item WorkPhone +=head2 WorkPhone Returns the current value of WorkPhone. (In the database, WorkPhone is stored as varchar(30).) -=item SetWorkPhone VALUE +=head2 SetWorkPhone VALUE Set WorkPhone to VALUE. @@ -521,14 +543,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item MobilePhone +=head2 MobilePhone Returns the current value of MobilePhone. (In the database, MobilePhone is stored as varchar(30).) -=item SetMobilePhone VALUE +=head2 SetMobilePhone VALUE Set MobilePhone to VALUE. @@ -539,14 +561,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item PagerPhone +=head2 PagerPhone Returns the current value of PagerPhone. (In the database, PagerPhone is stored as varchar(30).) -=item SetPagerPhone VALUE +=head2 SetPagerPhone VALUE Set PagerPhone to VALUE. @@ -557,14 +579,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Address1 +=head2 Address1 Returns the current value of Address1. (In the database, Address1 is stored as varchar(200).) -=item SetAddress1 VALUE +=head2 SetAddress1 VALUE Set Address1 to VALUE. @@ -575,14 +597,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Address2 +=head2 Address2 Returns the current value of Address2. (In the database, Address2 is stored as varchar(200).) -=item SetAddress2 VALUE +=head2 SetAddress2 VALUE Set Address2 to VALUE. @@ -593,14 +615,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item City +=head2 City Returns the current value of City. (In the database, City is stored as varchar(100).) -=item SetCity VALUE +=head2 SetCity VALUE Set City to VALUE. @@ -611,14 +633,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item State +=head2 State Returns the current value of State. (In the database, State is stored as varchar(100).) -=item SetState VALUE +=head2 SetState VALUE Set State to VALUE. @@ -629,14 +651,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Zip +=head2 Zip Returns the current value of Zip. (In the database, Zip is stored as varchar(16).) -=item SetZip VALUE +=head2 SetZip VALUE Set Zip to VALUE. @@ -647,14 +669,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Country +=head2 Country Returns the current value of Country. (In the database, Country is stored as varchar(50).) -=item SetCountry VALUE +=head2 SetCountry VALUE Set Country to VALUE. @@ -665,14 +687,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Timezone +=head2 Timezone Returns the current value of Timezone. (In the database, Timezone is stored as varchar(50).) -=item SetTimezone VALUE +=head2 SetTimezone VALUE Set Timezone to VALUE. @@ -683,14 +705,14 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item PGPKey +=head2 PGPKey Returns the current value of PGPKey. (In the database, PGPKey is stored as text.) -=item SetPGPKey VALUE +=head2 SetPGPKey VALUE Set PGPKey to VALUE. @@ -701,7 +723,7 @@ Returns (1, 'Status message') on success and (0, 'Error Message') on failure. =cut -=item Creator +=head2 Creator Returns the current value of Creator. (In the database, Creator is stored as int(11).) @@ -710,7 +732,7 @@ Returns the current value of Creator. =cut -=item Created +=head2 Created Returns the current value of Created. (In the database, Created is stored as datetime.) @@ -719,7 +741,7 @@ Returns the current value of Created. =cut -=item LastUpdatedBy +=head2 LastUpdatedBy Returns the current value of LastUpdatedBy. (In the database, LastUpdatedBy is stored as int(11).) @@ -728,7 +750,7 @@ Returns the current value of LastUpdatedBy. =cut -=item LastUpdated +=head2 LastUpdated Returns the current value of LastUpdated. (In the database, LastUpdated is stored as datetime.) @@ -738,77 +760,77 @@ Returns the current value of LastUpdated. -sub _ClassAccessible { +sub _CoreAccessible { { id => - {read => 1, type => 'int(11)', default => ''}, + {read => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => ''}, Name => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Password => - {read => 1, write => 1, type => 'varchar(40)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 40, is_blob => 0, is_numeric => 0, type => 'varchar(40)', default => ''}, Comments => - {read => 1, write => 1, type => 'blob', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''}, Signature => - {read => 1, write => 1, type => 'blob', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''}, EmailAddress => - {read => 1, write => 1, type => 'varchar(120)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''}, FreeformContactInfo => - {read => 1, write => 1, type => 'blob', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'blob', default => ''}, Organization => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, RealName => - {read => 1, write => 1, type => 'varchar(120)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 120, is_blob => 0, is_numeric => 0, type => 'varchar(120)', default => ''}, NickName => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, Lang => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, EmailEncoding => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, WebEncoding => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, ExternalContactInfoId => - {read => 1, write => 1, type => 'varchar(100)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''}, ContactInfoSystem => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''}, ExternalAuthId => - {read => 1, write => 1, type => 'varchar(100)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''}, AuthSystem => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''}, Gecos => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, HomePhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''}, WorkPhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''}, MobilePhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''}, PagerPhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 30, is_blob => 0, is_numeric => 0, type => 'varchar(30)', default => ''}, Address1 => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, Address2 => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 200, is_blob => 0, is_numeric => 0, type => 'varchar(200)', default => ''}, City => - {read => 1, write => 1, type => 'varchar(100)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''}, State => - {read => 1, write => 1, type => 'varchar(100)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 100, is_blob => 0, is_numeric => 0, type => 'varchar(100)', default => ''}, Zip => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 16, is_blob => 0, is_numeric => 0, type => 'varchar(16)', default => ''}, Country => - {read => 1, write => 1, type => 'varchar(50)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 50, is_blob => 0, is_numeric => 0, type => 'varchar(50)', default => ''}, Timezone => - {read => 1, write => 1, type => 'varchar(50)', default => ''}, + {read => 1, write => 1, sql_type => 12, length => 50, is_blob => 0, is_numeric => 0, type => 'varchar(50)', default => ''}, PGPKey => - {read => 1, write => 1, type => 'text', default => ''}, + {read => 1, write => 1, sql_type => -4, length => 0, is_blob => 1, is_numeric => 0, type => 'text', default => ''}, Creator => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => '0'}, + {read => 1, auto => 1, sql_type => 4, length => 11, is_blob => 0, is_numeric => 1, type => 'int(11)', default => '0'}, LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, + {read => 1, auto => 1, sql_type => 11, length => 0, is_blob => 0, is_numeric => 0, type => 'datetime', default => ''}, } }; @@ -840,7 +862,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/User_Overlay.pm b/rt/lib/RT/User_Overlay.pm index e828ebd71..27ddd4cd0 100644 --- a/rt/lib/RT/User_Overlay.pm +++ b/rt/lib/RT/User_Overlay.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::User - RT User object @@ -43,6 +66,9 @@ ok(require RT::User); =cut + +package RT::User; + use strict; no warnings qw(redefine); @@ -53,85 +79,34 @@ use vars qw(%_USERS_KEY_CACHE); use Digest::MD5; use RT::Principals; use RT::ACE; +use RT::Interface::Email; # {{{ sub _Accessible -sub _ClassAccessible { +sub _OverlayAccessible { { - - id => - {read => 1, type => 'int(11)', default => ''}, - Name => - {read => 1, write => 1, public => 1, admin => 1, type => 'varchar(120)', default => ''}, - Password => - { write => 1, type => 'varchar(40)', default => ''}, - Comments => - {read => 1, write => 1, admin => 1, type => 'blob', default => ''}, - Signature => - {read => 1, write => 1, type => 'blob', default => ''}, - EmailAddress => - {read => 1, write => 1, public => 1, type => 'varchar(120)', default => ''}, - FreeformContactInfo => - {read => 1, write => 1, type => 'blob', default => ''}, - Organization => - {read => 1, write => 1, public => 1, admin => 1, type => 'varchar(200)', default => ''}, - RealName => - {read => 1, write => 1, public => 1, type => 'varchar(120)', default => ''}, - NickName => - {read => 1, write => 1, public => 1, type => 'varchar(16)', default => ''}, - Lang => - {read => 1, write => 1, public => 1, type => 'varchar(16)', default => ''}, - EmailEncoding => - {read => 1, write => 1, public => 1, type => 'varchar(16)', default => ''}, - WebEncoding => - {read => 1, write => 1, public => 1, type => 'varchar(16)', default => ''}, - ExternalContactInfoId => - {read => 1, write => 1, public => 1, admin => 1, type => 'varchar(100)', default => ''}, - ContactInfoSystem => - {read => 1, write => 1, public => 1, admin => 1, type => 'varchar(30)', default => ''}, - ExternalAuthId => - {read => 1, write => 1, public => 1, admin => 1, type => 'varchar(100)', default => ''}, - AuthSystem => - {read => 1, write => 1, public => 1, admin => 1,type => 'varchar(30)', default => ''}, - Gecos => - {read => 1, write => 1, public => 1, admin => 1, type => 'varchar(16)', default => ''}, - - PGPKey => { - {read => 1, write => 1, public => 1, admin => 1, type => 'text', default => ''}, - }, - HomePhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, - WorkPhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, - MobilePhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, - PagerPhone => - {read => 1, write => 1, type => 'varchar(30)', default => ''}, - Address1 => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, - Address2 => - {read => 1, write => 1, type => 'varchar(200)', default => ''}, - City => - {read => 1, write => 1, type => 'varchar(100)', default => ''}, - State => - {read => 1, write => 1, type => 'varchar(100)', default => ''}, - Zip => - {read => 1, write => 1, type => 'varchar(16)', default => ''}, - Country => - {read => 1, write => 1, type => 'varchar(50)', default => ''}, - Creator => - {read => 1, auto => 1, type => 'int(11)', default => ''}, - Created => - {read => 1, auto => 1, type => 'datetime', default => ''}, - LastUpdatedBy => - {read => 1, auto => 1, type => 'int(11)', default => ''}, - LastUpdated => - {read => 1, auto => 1, type => 'datetime', default => ''}, - - } -}; + + Name => { public => 1, admin => 1 }, + Password => { read => 0 }, + EmailAddress => { public => 1 }, + Organization => { public => 1, admin => 1 }, + RealName => { public => 1 }, + NickName => { public => 1 }, + Lang => { public => 1 }, + EmailEncoding => { public => 1 }, + WebEncoding => { public => 1 }, + ExternalContactInfoId => { public => 1, admin => 1 }, + ContactInfoSystem => { public => 1, admin => 1 }, + ExternalAuthId => { public => 1, admin => 1 }, + AuthSystem => { public => 1, admin => 1 }, + Gecos => { public => 1, admin => 1 }, + PGPKey => { public => 1, admin => 1 }, + + } +} + # }}} @@ -147,41 +122,41 @@ sub _ClassAccessible { my $u1 = RT::User->new($RT::SystemUser); is(ref($u1), 'RT::User'); -my ($id, $msg) = $u1->Create(Name => 'CreateTest1', EmailAddress => 'create-test-1@example.com'); +my ($id, $msg) = $u1->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-1@example.com'); ok ($id, "Creating user CreateTest1 - " . $msg ); # Make sure we can't create a second user with the same name my $u2 = RT::User->new($RT::SystemUser); -($id, $msg) = $u2->Create(Name => 'CreateTest1', EmailAddress => 'create-test-2@example.com'); +($id, $msg) = $u2->Create(Name => 'CreateTest1'.$$, EmailAddress => $$.'create-test-2@example.com'); ok (!$id, $msg); # Make sure we can't create a second user with the same EmailAddress address my $u3 = RT::User->new($RT::SystemUser); -($id, $msg) = $u3->Create(Name => 'CreateTest2', EmailAddress => 'create-test-1@example.com'); +($id, $msg) = $u3->Create(Name => 'CreateTest2'.$$, EmailAddress => $$.'create-test-1@example.com'); ok (!$id, $msg); # Make sure we can create a user with no EmailAddress address my $u4 = RT::User->new($RT::SystemUser); -($id, $msg) = $u4->Create(Name => 'CreateTest3'); +($id, $msg) = $u4->Create(Name => 'CreateTest3'.$$); ok ($id, $msg); # make sure we can create a second user with no EmailAddress address my $u5 = RT::User->new($RT::SystemUser); -($id, $msg) = $u5->Create(Name => 'CreateTest4'); +($id, $msg) = $u5->Create(Name => 'CreateTest4'.$$); ok ($id, $msg); # make sure we can create a user with a blank EmailAddress address my $u6 = RT::User->new($RT::SystemUser); -($id, $msg) = $u6->Create(Name => 'CreateTest6', EmailAddress => ''); +($id, $msg) = $u6->Create(Name => 'CreateTest6'.$$, EmailAddress => ''); ok ($id, $msg); # make sure we can create a second user with a blankEmailAddress address my $u7 = RT::User->new($RT::SystemUser); -($id, $msg) = $u7->Create(Name => 'CreateTest7', EmailAddress => ''); +($id, $msg) = $u7->Create(Name => 'CreateTest7'.$$, EmailAddress => ''); ok ($id, $msg); # Can we change the email address away from from ""; -($id,$msg) = $u7->SetEmailAddress('foo@bar'); +($id,$msg) = $u7->SetEmailAddress('foo@bar'.$$); ok ($id, $msg); # can we change the address back to ""; ($id,$msg) = $u7->SetEmailAddress(''); @@ -200,11 +175,12 @@ sub Create { Privileged => 0, Disabled => 0, EmailAddress => '', + _RecordTransaction => 1, @_ # get the real argumentlist ); - - $args{'EmailAddress'} = $self->CanonicalizeEmailAddress($args{'EmailAddress'}); + # remove the value so it does not cripple SUPER::Create + my $record_transaction = delete $args{'_RecordTransaction'}; #Check the ACL unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) { @@ -212,6 +188,17 @@ sub Create { } + unless ($self->CanonicalizeUserInfo(\%args)) { + return ( 0, $self->loc("Could not set user info") ); + } + + $args{'EmailAddress'} = $self->CanonicalizeEmailAddress($args{'EmailAddress'}); + + # if the user doesn't have a name defined, set it to the email address + $args{'Name'} = $args{'EmailAddress'} unless ($args{'Name'}); + + + # Privileged is no longer a column in users my $privileged = $args{'Privileged'}; delete $args{'Privileged'}; @@ -225,7 +212,7 @@ sub Create { $args{'Password'} = '*NO-PASSWORD*'; } elsif ( length( $args{'Password'} ) < $RT::MinimumPasswordLength ) { - return ( 0, $self->loc("Password too short") ); + return ( 0, $self->loc("Password needs to be at least [_1] characters long",$RT::MinimumPasswordLength) ); } else { @@ -234,7 +221,9 @@ sub Create { #TODO Specify some sensible defaults. - unless ( defined( $args{'Name'} ) ) { + unless ( $args{'Name'} ) { + use Data::Dumper; + $RT::Logger->crit(Dumper \%args); return ( 0, $self->loc("Must specify 'Name' attribute") ); } @@ -259,14 +248,15 @@ sub Create { my $principal_id = $principal->Create(PrincipalType => 'User', Disabled => $args{'Disabled'}, ObjectId => '0'); - $principal->__Set(Field => 'ObjectId', Value => $principal_id); # If we couldn't create a principal Id, get the fuck out. unless ($principal_id) { $RT::Handle->Rollback(); - $RT::Logger->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."); + $RT::Logger->crit("Strange things are afoot at the circle K"); return ( 0, $self->loc('Could not create user') ); } + $principal->__Set(Field => 'ObjectId', Value => $principal_id); delete $args{'Disabled'}; $self->SUPER::Create(id => $principal_id , %args); @@ -274,50 +264,70 @@ sub Create { #If the create failed. unless ($id) { + $RT::Handle->Rollback(); $RT::Logger->error("Could not create a new user - " .join('-'. %args)); return ( 0, $self->loc('Could not create user') ); } - - #TODO post 2.0 - #if ($args{'SendWelcomeMessage'}) { - # #TODO: Check if the email exists and looks valid - # #TODO: Send the user a "welcome message" - #} - - - my $aclstash = RT::Group->new($self->CurrentUser); my $stash_id = $aclstash->_CreateACLEquivalenceGroup($principal); unless ($stash_id) { $RT::Handle->Rollback(); - $RT::Logger->crit("Couldn't stash the user in groumembers"); + $RT::Logger->crit("Couldn't stash the user in groupmembers"); return ( 0, $self->loc('Could not create user') ); } - $RT::Handle->Commit; - #$RT::Logger->debug("Adding the user as a member of everyone"); my $everyone = RT::Group->new($self->CurrentUser); $everyone->LoadSystemInternalGroup('Everyone'); - $everyone->AddMember($self->PrincipalId); + unless ($everyone->id) { + $RT::Logger->crit("Could not load Everyone group on user creation."); + $RT::Handle->Rollback(); + return ( 0, $self->loc('Could not create user') ); + } + + + my ($everyone_id, $everyone_msg) = $everyone->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId); + unless ($everyone_id) { + $RT::Logger->crit("Could not add user to Everyone group on user creation."); + $RT::Logger->crit($everyone_msg); + $RT::Handle->Rollback(); + return ( 0, $self->loc('Could not create user') ); + } + + my $access_class = RT::Group->new($self->CurrentUser); if ($privileged) { - my $priv = RT::Group->new($self->CurrentUser); - #$RT::Logger->debug("Making ".$self->Id." a privileged user"); - $priv->LoadSystemInternalGroup('Privileged'); - $priv->AddMember($self->PrincipalId); + $access_class->LoadSystemInternalGroup('Privileged'); } else { - my $unpriv = RT::Group->new($self->CurrentUser); - #$RT::Logger->debug("Making ".$self->Id." an unprivileged user"); - $unpriv->LoadSystemInternalGroup('Unprivileged'); - $unpriv->AddMember($self->PrincipalId); + $access_class->LoadSystemInternalGroup('Unprivileged'); + } + + unless ($access_class->id) { + $RT::Logger->crit("Could not load Privileged or Unprivileged group on user creation"); + $RT::Handle->Rollback(); + return ( 0, $self->loc('Could not create user') ); } - # $RT::Logger->debug("Finished creating the user"); + my ($ac_id, $ac_msg) = $access_class->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId); + + unless ($ac_id) { + $RT::Logger->crit("Could not add user to Privileged or Unprivileged group on user creation. Aborted"); + $RT::Logger->crit($ac_msg); + $RT::Handle->Rollback(); + return ( 0, $self->loc('Could not create user') ); + } + + + if ( $record_transaction ) { + $self->_NewTransaction( Type => "Create" ); + } + + $RT::Handle->Commit; + return ( $id, $self->loc('User created') ); } @@ -355,6 +365,10 @@ sub SetPrivileged { my $self = shift; my $val = shift; + #Check the ACL + unless ( $self->CurrentUser->HasRight(Right => 'AdminUsers', Object => $RT::System) ) { + return ( 0, $self->loc('Permission Denied') ); + } my $priv = RT::Group->new($self->CurrentUser); $priv->LoadSystemInternalGroup('Privileged'); @@ -376,7 +390,7 @@ sub SetPrivileged { return (0,$self->loc("That user is already privileged")); } if ($unpriv->HasMember($self->PrincipalObj)) { - $unpriv->DeleteMember($self->PrincipalId); + $unpriv->_DeleteMember($self->PrincipalId); } else { # if we had layered transactions, life would be good # sadly, we have to just go ahead, even if something @@ -384,7 +398,7 @@ sub SetPrivileged { $RT::Logger->crit("User ".$self->Id." is neither privileged nor ". "unprivileged. something is drastically wrong."); } - my ($status, $msg) = $priv->AddMember($self->PrincipalId); + my ($status, $msg) = $priv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId); if ($status) { return (1, $self->loc("That user is now privileged")); } else { @@ -397,7 +411,7 @@ sub SetPrivileged { return (0,$self->loc("That user is already unprivileged")); } if ($priv->HasMember($self->PrincipalObj)) { - $priv->DeleteMember($self->PrincipalId); + $priv->_DeleteMember( $self->PrincipalId); } else { # if we had layered transactions, life would be good # sadly, we have to just go ahead, even if something @@ -405,7 +419,7 @@ sub SetPrivileged { $RT::Logger->crit("User ".$self->Id." is neither privileged nor ". "unprivileged. something is drastically wrong."); } - my ($status, $msg) = $unpriv->AddMember($self->PrincipalId); + my ($status, $msg) = $unpriv->_AddMember( InsideTransaction => 1, PrincipalId => $self->PrincipalId); if ($status) { return (1, $self->loc("That user is now unprivileged")); } else { @@ -571,13 +585,20 @@ sub LoadOrCreateByEmail { my ($val, $message); + my ( $Address, $Name ) = + RT::Interface::Email::ParseAddressFromHeader($email); + $email = $Address; + $self->LoadByEmail($email); $message = $self->loc('User loaded'); unless ($self->Id) { + $self->Load($email); + } + unless($self->Id) { ( $val, $message ) = $self->Create( Name => $email, EmailAddress => $email, - RealName => $email, + RealName => $Name, Privileged => 0, Comments => 'Autocreated when added as a watcher'); unless ($val) { @@ -644,11 +665,13 @@ sub ValidateEmailAddress { -=item CanonicalizeEmailAddress ADDRESS +=head2 CanonicalizeEmailAddress ADDRESS -# CanonicalizeEmailAddress converts email addresses into canonical form. -# it takes one email address in and returns the proper canonical -# form. You can dump whatever your proper local config is in here +CanonicalizeEmailAddress converts email addresses into canonical form. +it takes one email address in and returns the proper canonical +form. You can dump whatever your proper local config is in here. Note +that it may be called as a static method; in this case, $self may be +undef. =cut @@ -667,6 +690,32 @@ sub CanonicalizeEmailAddress { # }}} +# {{{ sub CanonicalizeUserInfo + + + +=head2 CanonicalizeUserInfo HASH of ARGS + +CanonicalizeUserInfo can convert all User->Create options. +it takes a hashref of all the params sent to User->Create and +returns that same hash, by default nothing is done. + +This function is intended to allow users to have their info looked up via +an outside source and modified upon creation. + +=cut + +sub CanonicalizeUserInfo { + my $self = shift; + my $args = shift; + my $success = 1; + + return ($success); +} + + +# }}} + # {{{ Password related functions @@ -687,7 +736,11 @@ sub SetRandomPassword { return ( 0, $self->loc("Permission Denied") ); } - my $pass = $self->GenerateRandomPassword( 6, 8 ); + + my $min = ( $RT::MinimumPasswordLength > 6 ? $RT::MinimumPasswordLength : 6); + my $max = ( $RT::MinimumPasswordLength > 8 ? $RT::MinimumPasswordLength : 8); + + my $pass = $self->GenerateRandomPassword( $min, $max) ; # If we have "notify user on @@ -729,11 +782,11 @@ sub ResetPassword { my $template = RT::Template->new( $self->CurrentUser ); - if ( $self->IsPrivileged ) { + if ( $self->Privileged ) { $template->LoadGlobalTemplate('RT_PasswordChange_Privileged'); } else { - $template->LoadGlobalTemplate('RT_PasswordChange_Privileged'); + $template->LoadGlobalTemplate('RT_PasswordChange_NonPrivileged'); } unless ( $template->Id ) { @@ -752,7 +805,7 @@ sub ResetPassword { Argument => $pass ); - $notification->SetTo( $self->EmailAddress ); + $notification->SetHeader( 'To', $self->EmailAddress ); my ($ret); $ret = $notification->Prepare(); @@ -929,7 +982,7 @@ sub GenerateRandomPassword { my $length = $min_length + int( rand( $max_length - $min_length ) ); - my $char = $self->GenerateRandomNextChar( $total_sum, $start_freq ); + my $char = $self->_GenerateRandomNextChar( $total_sum, $start_freq ); my @word = ( $char + $a ); for ( 2 .. $length ) { $char = @@ -975,25 +1028,33 @@ sub SetPassword { my $password = shift; unless ( $self->CurrentUserCanModify('Password') ) { - return ( 0, $self->loc('Permission Denied') ); + return ( 0, $self->loc('Password: Permission Denied') ); } if ( !$password ) { return ( 0, $self->loc("No password set") ); } elsif ( length($password) < $RT::MinimumPasswordLength ) { - return ( 0, $self->loc("Password too short") ); + return ( 0, $self->loc("Password needs to be at least [_1] characters long", $RT::MinimumPasswordLength) ); } else { + my $new = !$self->HasPassword; $password = $self->_GeneratePassword($password); - return ( $self->SUPER::SetPassword( $password)); + my ( $val, $msg ) = $self->SUPER::SetPassword($password); + if ($val) { + return ( 1, $self->loc("Password set") ) if $new; + return ( 1, $self->loc("Password changed") ); + } + else { + return ( $val, $msg ); + } } } =head2 _GeneratePassword PASSWORD -returns an MD5 hash of the password passed in, in base64 encoding. +returns an MD5 hash of the password passed in, in hexadecimal encoding. =cut @@ -1003,12 +1064,54 @@ sub _GeneratePassword { my $md5 = Digest::MD5->new(); $md5->add($password); + return ($md5->hexdigest); + +} + +=head2 _GeneratePasswordBase64 PASSWORD + +returns an MD5 hash of the password passed in, in base64 encoding +(obsoleted now). + +=cut + +sub _GeneratePasswordBase64 { + my $self = shift; + my $password = shift; + + my $md5 = Digest::MD5->new(); + $md5->add($password); return ($md5->b64digest); } # }}} + +=head2 HasPassword + +Returns true if the user has a valid password, otherwise returns false. + +=cut + + +sub HasPassword { + my $self = shift; + if ( ( $self->__Value('Password') eq '' ) + || ( $self->__Value('Password') eq undef ) ) + { + + return (undef); + } + if ( $self->__Value('Password') eq '*NO-PASSWORD*' ) { + return undef; + } + + return 1; + +} + + # {{{ sub IsPassword =head2 IsPassword @@ -1035,8 +1138,7 @@ sub IsPassword { return (undef); } - if ( ($self->__Value('Password') eq '') || - ($self->__Value('Password') eq undef) ) { + unless ($self->HasPassword) { return(undef); } @@ -1046,9 +1148,12 @@ sub IsPassword { } # if it's a historical password we say ok. - - if ( $self->__Value('Password') eq crypt( $value, $self->__Value('Password') ) ) { - return (1); + if ($self->__Value('Password') eq crypt($value, $self->__Value('Password')) + or $self->_GeneratePasswordBase64($value) eq $self->__Value('Password')) + { + # ...but upgrade the legacy password inplace. + $self->SUPER::SetPassword( $self->_GeneratePassword($value) ); + return(1); } # no password check has succeeded. get out @@ -1100,7 +1205,7 @@ The response is cached. PrincipalObj should never ever change. ok(my $u = RT::User->new($RT::SystemUser)); ok($u->Load(1), "Loaded the first user"); ok($u->PrincipalObj->ObjectId == 1, "user 1 is the first principal"); -ok($u->PrincipalObj->PrincipalType eq 'User' , "Principal 1 is a user, not a group"); +is($u->PrincipalObj->PrincipalType, 'User' , "Principal 1 is a user, not a group"); =end testing @@ -1189,9 +1294,29 @@ sub HasGroupRight { # }}} +# {{{ sub OwnGroups + +=head2 OwnGroups + +Returns a group collection object containing the groups of which this +user is a member. + +=cut + +sub OwnGroups { + my $self = shift; + my $groups = RT::Groups->new($self->CurrentUser); + $groups->LimitToUserDefinedGroups; + $groups->WithMember(PrincipalId => $self->Id, + Recursively => 1); + return $groups; +} + +# }}} + # {{{ sub Rights testing -=head2 Rights testing +=head1 Rights testing =begin testing @@ -1206,7 +1331,7 @@ ok($rootq->Id, "Loaded the first queue"); ok ($rootq->CurrentUser->HasRight(Right=> 'CreateTicket', Object => $rootq), "Root can create tickets"); my $new_user = RT::User->new($RT::SystemUser); -my ($id, $msg) = $new_user->Create(Name => 'ACLTest'); +my ($id, $msg) = $new_user->Create(Name => 'ACLTest'.$$); ok ($id, "Created a new user for acl test $msg"); @@ -1237,7 +1362,7 @@ ok($tickid, "Created ticket: $tickid"); ok (!$new_user->HasRight( Object => $new_tick, Right => 'ModifyTicket'), "User can't modify the ticket without group membership"); # Create a new group my $group = RT::Group->new($RT::SystemUser); -$group->CreateUserDefinedGroup(Name => 'ACLTest'); +$group->CreateUserDefinedGroup(Name => 'ACLTest'.$$); ok($group->Id, "Created a new group Ok"); # Grant a group the right to modify tickets in a queue ok(my ($gv,$gm) = $group->PrincipalObj->GrantRight( Object => $q, Right => 'ModifyTicket'),"Granted the group the right to modify tickets"); @@ -1264,7 +1389,7 @@ ok($q_as_system->Id, "Loaded the first queue"); my $new_tick2 = RT::Ticket->new($RT::SystemUser); my ($tick2id, $tickmsg) = $new_tick2->Create(Subject=> 'ACL Test 2', Queue =>$q_as_system->Id); ok($tick2id, "Created ticket: $tick2id"); -ok($new_tick2->QueueObj->id eq $q_as_system->Id, "Created a new ticket in queue 1"); +is($new_tick2->QueueObj->id, $q_as_system->Id, "Created a new ticket in queue 1"); # make sure that the user can't do this without subgroup membership @@ -1272,7 +1397,7 @@ ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User # Create a subgroup my $subgroup = RT::Group->new($RT::SystemUser); -$subgroup->CreateUserDefinedGroup(Name => 'Subgrouptest'); +$subgroup->CreateUserDefinedGroup(Name => 'Subgrouptest',$$); ok($subgroup->Id, "Created a new group ".$subgroup->Id."Ok"); #Add the subgroup as a subgroup of the group my ($said, $samsg) = $group->AddMember($subgroup->PrincipalId); @@ -1287,8 +1412,8 @@ ok ($new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User c # {{{ Deal with making sure that members of subgroups of a disabled group don't have rights my ($id, $msg); - ($id, $msg) = $group->SetDisabled(1); - ok ($id,$msg); +($id, $msg) = $group->SetDisabled(1); +ok ($id,$msg); ok (!$new_user->HasRight( Object => $new_tick2, Right => 'ModifyTicket'), "User can't modify the ticket when the group ".$group->Id. " is disabled"); ($id, $msg) = $group->SetDisabled(0); ok($id,$msg); @@ -1433,7 +1558,7 @@ ok($rqv, "Revoked the right successfully - $rqm"); # {{{ sub HasRight -=head2 sub HasRight +=head2 HasRight Shim around PrincipalObj->HasRight. See RT::Principal @@ -1492,8 +1617,8 @@ sub CurrentUserCanModify { =head2 CurrentUserHasRight - Takes a single argument. returns 1 if $Self->CurrentUser - has the requested right. returns undef otherwise +Takes a single argument. returns 1 if $Self->CurrentUser +has the requested right. returns undef otherwise =cut @@ -1506,6 +1631,77 @@ sub CurrentUserHasRight { # }}} +# {{{ sub _CleanupInvalidDelegations + +=head2 _CleanupInvalidDelegations { InsideTransaction => undef } + +Revokes all ACE entries delegated by this user which are inconsistent +with their current delegation rights. Does not perform permission +checks. Should only ever be called from inside the RT library. + +If called from inside a transaction, specify a true value for the +InsideTransaction parameter. + +Returns a true value if the deletion succeeded; returns a false value +and logs an internal error if the deletion fails (should not happen). + +=cut + +# XXX Currently there is a _CleanupInvalidDelegations method in both +# RT::User and RT::Group. If the recursive cleanup call for groups is +# ever unrolled and merged, this code will probably want to be +# factored out into RT::Principal. + +sub _CleanupInvalidDelegations { + my $self = shift; + my %args = ( InsideTransaction => undef, + @_ ); + + unless ( $self->Id ) { + $RT::Logger->warning("User not loaded."); + return (undef); + } + + my $in_trans = $args{InsideTransaction}; + + return(1) if ($self->HasRight(Right => 'DelegateRights', + Object => $RT::System)); + + # Look up all delegation rights currently posessed by this user. + my $deleg_acl = RT::ACL->new($RT::SystemUser); + $deleg_acl->LimitToPrincipal(Type => 'User', + Id => $self->PrincipalId, + IncludeGroupMembership => 1); + $deleg_acl->Limit( FIELD => 'RightName', + OPERATOR => '=', + VALUE => 'DelegateRights' ); + my @allowed_deleg_objects = map {$_->Object()} + @{$deleg_acl->ItemsArrayRef()}; + + # Look up all rights delegated by this principal which are + # inconsistent with the allowed delegation objects. + my $acl_to_del = RT::ACL->new($RT::SystemUser); + $acl_to_del->DelegatedBy(Id => $self->Id); + foreach (@allowed_deleg_objects) { + $acl_to_del->LimitNotObject($_); + } + + # Delete all disallowed delegations + while ( my $ace = $acl_to_del->Next() ) { + my $ret = $ace->_Delete(InsideTransaction => 1); + unless ($ret) { + $RT::Handle->Rollback() unless $in_trans; + $RT::Logger->warning("Couldn't delete delegated ACL entry ".$ace->Id); + return (undef); + } + } + + $RT::Handle->Commit() unless $in_trans; + return (1); +} + +# }}} + # {{{ sub _Set sub _Set { @@ -1514,6 +1710,8 @@ sub _Set { my %args = ( Field => undef, Value => undef, + TransactionType => 'Set', + RecordTransaction => 1, @_ ); @@ -1527,13 +1725,29 @@ sub _Set { return ( 0, $self->loc("Permission Denied") ); } - #Set the new value - my ( $ret, $msg ) = $self->SUPER::_Set( - Field => $args{'Field'}, - Value => $args{'Value'} - ); - - return ( $ret, $msg ); + my $Old = $self->SUPER::_Value("$args{'Field'}"); + + my ($ret, $msg) = $self->SUPER::_Set( Field => $args{'Field'}, + Value => $args{'Value'} ); + + #If we can't actually set the field to the value, don't record + # a transaction. instead, get out of here. + if ( $ret == 0 ) { return ( 0, $msg ); } + + if ( $args{'RecordTransaction'} == 1 ) { + + my ( $Trans, $Msg, $TransObj ) = $self->_NewTransaction( + Type => $args{'TransactionType'}, + Field => $args{'Field'}, + NewValue => $args{'Value'}, + OldValue => $Old, + TimeTaken => $args{'TimeTaken'}, + ); + return ( $Trans, scalar $TransObj->BriefDescription ); + } + else { + return ( $ret, $msg ); + } } # }}} @@ -1583,6 +1797,14 @@ sub _Value { # }}} +sub BasicColumns { + ( + [ Name => 'User Id' ], + [ EmailAddress => 'Email' ], + [ RealName => 'Name' ], + [ Organization => 'Organization' ], + ); +} 1; diff --git a/rt/lib/RT/Users.pm b/rt/lib/RT/Users.pm index d58f69653..abe471f18 100755 --- a/rt/lib/RT/Users.pm +++ b/rt/lib/RT/Users.pm @@ -1,8 +1,14 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -14,13 +20,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} # Autogenerated by DBIx::SearchBuilder factory (by <jesse@bestpractical.com>) # WARNING: THIS FILE IS AUTOGENERATED. ALL CHANGES TO THIS FILE WILL BE LOST. # @@ -64,7 +86,7 @@ sub _Init { } -=item NewItem +=head2 NewItem Returns an empty new RT::User item @@ -101,7 +123,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/lib/RT/Users_Overlay.pm b/rt/lib/RT/Users_Overlay.pm index b397c3bc4..4bb9f8f91 100644 --- a/rt/lib/RT/Users_Overlay.pm +++ b/rt/lib/RT/Users_Overlay.pm @@ -1,27 +1,49 @@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2002 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 +# 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: # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::Users - Collection of RT::User objects @@ -44,6 +66,9 @@ ok(require RT::Users); =cut + +package RT::Users; + use strict; no warnings qw(redefine); @@ -68,15 +93,25 @@ sub _Init { ALIAS2 => $self->{'princalias'}, FIELD2 => 'id' ); - $self->Limit( ALIAS => $self->{'princalias'}, - FIELD => 'PrincipalType', - OPERATOR => '=', - VALUE => 'User' ); return (@result); } # }}} +=head2 PrincipalsAlias + +Returns the string that represents this Users object's primary "Principals" alias. + + +=cut + +sub PrincipalsAlias { + my $self = shift; + return($self->{'princalias'}); + +} + + # {{{ sub _DoSearch =head2 _DoSearch @@ -188,7 +223,7 @@ sub LimitToPrivileged { # {{{ WhoHaveRight -=head2 WhoHaveRight { Right => 'name', Object => $rt_object , IncludeSuperusers => undef, IncludeSubgroupMembers => undef, IncludeSystemRights => undef } +=head2 WhoHaveRight { Right => 'name', Object => $rt_object , IncludeSuperusers => undef, IncludeSubgroupMembers => undef, IncludeSystemRights => undef, EquivObjects => [ ] } =begin testing @@ -197,6 +232,59 @@ $users->WhoHaveRight(Object =>$RT::System, Right =>'SuperUser'); ok($users->Count == 1, "There is one privileged superuser - Found ". $users->Count ); # TODO: this wants more testing +my $RTxUser = RT::User->new($RT::SystemUser); +($id, $msg) = $RTxUser->Create( Name => 'RTxUser', Comments => "RTx extension user", Privileged => 1); +ok ($id,$msg); + +my $group = RT::Group->new($RT::SystemUser); +$group->LoadACLEquivalenceGroup($RTxUser->PrincipalObj); + +my $RTxSysObj = {}; +bless $RTxSysObj, 'RTx::System'; +*RTx::System::Id = sub { 1; }; +*RTx::System::id = *RTx::System::Id; +my $ace = RT::Record->new($RT::SystemUser); +$ace->Table('ACL'); +$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); +($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System', ObjectId => 1 ); +ok ($id, "ACL for RTxSysObj created"); + +my $RTxObj = {}; +bless $RTxObj, 'RTx::System::Record'; +*RTx::System::Record::Id = sub { 4; }; +*RTx::System::Record::id = *RTx::System::Record::Id; + +$users = RT::Users->new($RT::SystemUser); +$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxSysObj); +is($users->Count, 1, "RTxUserRight found for RTxSysObj"); + +$users = RT::Users->new($RT::SystemUser); +$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj); +is($users->Count, 0, "RTxUserRight not found for RTxObj"); + +$users = RT::Users->new($RT::SystemUser); +$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj, EquivObjects => [ $RTxSysObj ]); +is($users->Count, 1, "RTxUserRight found for RTxObj using EquivObjects"); + +$ace = RT::Record->new($RT::SystemUser); +$ace->Table('ACL'); +$ace->_BuildTableAttributes unless ($_TABLE_ATTR->{ref($self)}); +($id, $msg) = $ace->Create( PrincipalId => $group->id, PrincipalType => 'Group', RightName => 'RTxUserRight', ObjectType => 'RTx::System::Record', ObjectId => 5 ); +ok ($id, "ACL for RTxObj created"); + +my $RTxObj2 = {}; +bless $RTxObj2, 'RTx::System::Record'; +*RTx::System::Record::Id = sub { 5; }; +*RTx::System::Record::id = sub { 5; }; + +$users = RT::Users->new($RT::SystemUser); +$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2); +is($users->Count, 1, "RTxUserRight found for RTxObj2"); + +$users = RT::Users->new($RT::SystemUser); +$users->WhoHaveRight(Right => 'RTxUserRight', Object => $RTxObj2, EquivObjects => [ $RTxSysObj ]); +is($users->Count, 1, "RTxUserRight found for RTxObj2"); + =end testing @@ -205,6 +293,7 @@ find all users who the right Right for this group, either individually or as members of groups +If passed a queue object, with no id, it will find users who have that right for _any_ queue @@ -212,31 +301,125 @@ or as members of groups sub WhoHaveRight { my $self = shift; - my %args = ( Right => undef, - Object => => undef, - IncludeSystemRights => undef, - IncludeSuperusers => undef, - IncludeSubgroupMembers => 1, - @_ ); + my %args = ( + Right => undef, + Object => undef, + IncludeSystemRights => undef, + IncludeSuperusers => undef, + IncludeSubgroupMembers => 1, + EquivObjects => [ ], + @_ + ); + + if ( defined $args{'ObjectType'} || defined $args{'ObjectId'} ) { + $RT::Logger->crit( "$self WhoHaveRight called with the Obsolete ObjectId/ObjectType API"); + return (undef); + } + + + # Find only members of groups that have the right. + + my $acl = $self->NewAlias('ACL'); + my $groups = $self->NewAlias('Groups'); + my $userprinc = $self->{'princalias'}; + +# The cachedgroupmembers table is used for unrolling group memberships to allow fast lookups +# if we bind to CachedGroupMembers, we'll find all members of groups recursively. +# if we don't we'll find only 'direct' members of the group in question + my $cgm; + + if ( $args{'IncludeSubgroupMembers'} ) { + $cgm = $self->NewAlias('CachedGroupMembers'); + } + else { + $cgm = $self->NewAlias('GroupMembers'); + } - if (defined $args{'ObjectType'} || defined $args{'ObjectId'}) { - $RT::Logger->crit("$self WhoHaveRight called with the Obsolete ObjectId/ObjectType API"); - return(undef); +#Tie the users we're returning ($userprinc) to the groups that have rights granted to them ($groupprinc) + $self->Join( + ALIAS1 => $cgm, + FIELD1 => 'MemberId', + ALIAS2 => $userprinc, + FIELD2 => 'id' + ); + + $self->Join( + ALIAS1 => $groups, + FIELD1 => 'id', + ALIAS2 => $cgm, + FIELD2 => 'GroupId' + ); + +# {{{ Find only rows where the right granted is the one we're looking up or _possibly_ superuser + $self->Limit( + ALIAS => $acl, + FIELD => 'RightName', + OPERATOR => ( $args{Right} ? '=' : 'IS NOT' ), + VALUE => $args{Right} || 'NULL', + ENTRYAGGREGATOR => 'OR' + ); + + if ( $args{'IncludeSuperusers'} and $args{'Right'} ) { + $self->Limit( + ALIAS => $acl, + FIELD => 'RightName', + OPERATOR => '=', + VALUE => 'SuperUser', + ENTRYAGGREGATOR => 'OR' + ); } - my @privgroups; - my $Groups = RT::Groups->new($RT::SystemUser); - $Groups->WithRight(Right=> $args{'Right'}, - Object => $args{'Object'}, - IncludeSystemRights => $args{'IncludeSystemRights'}, - IncludeSuperusers => $args{'IncludeSuperusers'}); - while (my $Group = $Groups->Next()) { - push @privgroups, $Group->Id(); + + # }}} + + my ( $or_check_ticket_roles, $or_check_roles ); + my $which_object = "$acl.ObjectType = 'RT::System'"; + + if ( defined $args{'Object'} ) { + if ( ref( $args{'Object'} ) eq 'RT::Ticket' ) { + $or_check_ticket_roles = " OR ( $groups.Domain = 'RT::Ticket-Role' AND $groups.Instance = " . $args{'Object'}->Id . ") "; + +# If we're looking at ticket rights, we also want to look at the associated queue rights. +# this is a little bit hacky, but basically, now that we've done the ticket roles magic, +# we load the queue object and ask all the rest of our questions about the queue. + $args{'Object'} = $args{'Object'}->QueueObj; } - $self->WhoBelongToGroups(Groups => \@privgroups, - IncludeSubgroupMembers => $args{'IncludeSubgroupMembers'}); -} + # TODO XXX This really wants some refactoring + if ( ref( $args{'Object'} ) eq 'RT::Queue' ) { + $or_check_roles = " OR ( ( ($groups.Domain = 'RT::Queue-Role' "; + $or_check_roles .= "AND $groups.Instance = " . $args{'Object'}->id if ( $args{'Object'}->id ); + $or_check_roles .= ") $or_check_ticket_roles ) " . " AND $groups.Type = $acl.PrincipalType) "; + } + if ( $args{'IncludeSystemRights'} ) { + $which_object .= ' OR '; + } + else { + $which_object = ''; + } + foreach my $obj ( @{ $args{'EquivObjects'} } ) { + $which_object .= "($acl.ObjectType = '" . ref( $obj ) . "' AND $acl.ObjectId = " . $obj->id . ") OR "; + } + $which_object .= " ($acl.ObjectType = '" . ref( $args{'Object'} ) . "'"; + if ( $args{'Object'}->id ) { + $which_object .= " AND $acl.ObjectId = " . $args{'Object'}->id; + } + $which_object .= ") "; + } + $self->_AddSubClause( "WhichObject", "($which_object)" ); + $self->_AddSubClause( + "WhichGroup", + qq{ ( ( $acl.PrincipalId = $groups.id AND $acl.PrincipalType = 'Group' + AND ( $groups.Domain = 'SystemInternal' OR $groups.Domain = 'UserDefined' OR $groups.Domain = 'ACLEquivalence')) + $or_check_roles) } + ); + # only include regular RT users + $self->LimitToEnabled; + + # no system user + $self->Limit( ALIAS => $userprinc, FIELD => 'id', OPERATOR => '!=', VALUE => $RT::SystemUser->id); + +} # }}} # {{{ WhoBelongToGroups @@ -269,20 +452,14 @@ sub WhoBelongToGroups { $cgm = $self->NewAlias('GroupMembers'); } - # {{{ Tie the users we're returning ($userprinc) to the groups that have rights granted to them ($groupprinc) + #Tie the users we're returning ($userprinc) to the groups that have rights granted to them ($groupprinc) $self->Join( ALIAS1 => $cgm, FIELD1 => 'MemberId', ALIAS2 => $userprinc, FIELD2 => 'id' ); - # }}} - # my $and_check_groups = "($cgm.GroupId = NULL"; foreach my $groupid (@{$args{'Groups'}}) { $self->Limit(ALIAS => $cgm, FIELD => 'GroupId', VALUE => $groupid, QUOTEVALUE => 0, ENTRYAGGREGATOR=> 'OR') - #$and_check_groups .= " OR $cgm.GroupId = $groupid"; } - #$and_check_groups .= ")"; - - #$self->_AddSubClause("WhichGroup", $and_check_groups); } # }}} diff --git a/rt/lib/t/00smoke.t b/rt/lib/t/00smoke.t index 4f36bb346..9e9bf4a60 100644 --- a/rt/lib/t/00smoke.t +++ b/rt/lib/t/00smoke.t @@ -2,13 +2,12 @@ use Test::More qw(no_plan); -use lib "/opt/rt3/lib"; use RT; ok(RT::LoadConfig); ok(RT::Init, "Basic initialization and DB connectivity"); use File::Find; -File::Find::find({wanted => \&wanted}, '.'); +File::Find::find({wanted => \&wanted}, 'lib/'); sub wanted { /^*\.pm\z/s && ok(require $_, "Requiring '$_'"); } diff --git a/rt/lib/t/00smoke.t.in b/rt/lib/t/00smoke.t.in deleted file mode 100644 index 11f0a9c43..000000000 --- a/rt/lib/t/00smoke.t.in +++ /dev/null @@ -1,14 +0,0 @@ -#!@PERL@ - -use Test::More qw(no_plan); - -use lib "@RT_LIB_PATH@"; -use RT; -ok(RT::LoadConfig); -ok(RT::Init, "Basic initialization and DB connectivity"); - -use File::Find; -File::Find::find({wanted => \&wanted}, '.'); -sub wanted { /^*\.pm\z/s && ok(require $_, "Requiring '$_'"); } - - diff --git a/rt/lib/t/01harness.t.in b/rt/lib/t/01harness.t.in deleted file mode 100644 index d132330c2..000000000 --- a/rt/lib/t/01harness.t.in +++ /dev/null @@ -1,12 +0,0 @@ -#!@PERL@ - -use Test::More qw(no_plan); - -use lib "@RT_LIB_PATH@"; -use RT; -ok(RT::LoadConfig); -ok(RT::Init, "Basic initialization and DB connectivity"); - -my $test = shift @ARGV; -require $test; - diff --git a/rt/lib/t/02regression.t b/rt/lib/t/02regression.t index 62b4e9a69..4504cc76a 100644 --- a/rt/lib/t/02regression.t +++ b/rt/lib/t/02regression.t @@ -40,5 +40,5 @@ sub wanted_autogen { /^autogen.*\.t\z/s && require $_; } File::Find::find({wanted => \&wanted_regression}, 'lib/t/regression'); sub wanted_regression { /^*\.t\z/s && require $_; } -require "lib/t/03web.pl"; -require "lib/t/04_send_email.pl"; +require "/opt/rt3/lib/t/03web.pl"; +require "/opt/rt3/lib/t/04_send_email.pl"; diff --git a/rt/lib/t/03web.pl b/rt/lib/t/03web.pl index 4500ff281..94ad3e97e 100644 --- a/rt/lib/t/03web.pl +++ b/rt/lib/t/03web.pl @@ -5,6 +5,7 @@ use WWW::Mechanize; use HTTP::Request::Common; use HTTP::Cookies; use LWP; +use Encode; my $cookie_jar = HTTP::Cookies->new; my $agent = WWW::Mechanize->new(); @@ -15,7 +16,7 @@ $agent->cookie_jar($cookie_jar); # get the top page -my $url = "http://localhost/"; +my $url = "http://localhost".$RT::WebPath."/"; $agent->get($url); is ($agent->{'status'}, 200, "Loaded a page"); @@ -37,6 +38,37 @@ is($agent->{'status'}, 200, "Fetched the page ok"); ok( $agent->{'content'} =~ /Logout/i, "Found a logout link"); + +$agent->get($url."Ticket/Create.html?Queue=1"); +is ($agent->{'status'}, 200, "Loaded Create.html"); +$agent->form(3); +# Start with a string containing characters in latin1 +my $string = "I18N Web Testing æøå"; +Encode::from_to($string, 'iso-8859-1', 'utf8'); +$agent->field('Subject' => "Foo"); +$agent->field('Content' => $string); +ok($agent->submit(), "Created new ticket with $string"); + +ok( $agent->{'content'} =~ qr{$string} , "Found the content"); + +$agent->get($url."Ticket/Create.html?Queue=1"); +is ($agent->{'status'}, 200, "Loaded Create.html"); +$agent->form(3); +# Start with a string containing characters in latin1 +my $string = "I18N Web Testing æøå"; +Encode::from_to($string, 'iso-8859-1', 'utf8'); +$agent->field('Subject' => $string); +$agent->field('Content' => "BAR"); +ok($agent->submit(), "Created new ticket with $string"); + +ok( $agent->{'content'} =~ qr{$string} , "Found the content"); + + + +# }}} + + + use File::Find; find ( \&wanted , 'html/'); diff --git a/rt/lib/t/04_send_email.pl b/rt/lib/t/04_send_email.pl index 46e3d7472..c384eedfa 100644 --- a/rt/lib/t/04_send_email.pl +++ b/rt/lib/t/04_send_email.pl @@ -33,6 +33,32 @@ sub RT::Action::SendEmail::SendMessage { # create a regular ticket my $parser = RT::EmailParser->new(); + + +# Let's test to make sure a multipart/report is processed correctly +my $content = `cat /opt/rt3/lib/t/data/multipart-report` || die "couldn't find new content"; +# be as much like the mail gateway as possible. +use RT::Interface::Email; + +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); +my $tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +my $tick = $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); + +ok ($tick->Transactions->First->Content =~ /The original message was received/, "It's the bounce"); + + +# make sure it fires scrips. +is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation"); + +undef @scrips_fired; + + + + $parser->ParseMIMEEntityFromScalar('From: root@localhost To: rt@example.com Subject: This is a test of new ticket creation as an unknown user @@ -65,7 +91,7 @@ is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation"); # create an iso 8859-1 ticket @scrips_fired = (); -my $content = `cat ./lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; +my $content = `cat /opt/rt3/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; @@ -74,8 +100,9 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. use RT::Interface::Email; - - RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); + +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); @@ -103,17 +130,21 @@ $parser->ParseMIMEEntityFromScalar($content); ok ($id, $msg); + + + # we need to swap out SendMessage to test the new things we care about; &iso8859_redef_sendmessage; $RT::EmailOutputEncoding = 'iso-8859-1'; # create an iso 8859-1 ticket @scrips_fired = (); -my $content = `cat ./lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; +my $content = `cat /opt/rt3/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; # be as much like the mail gateway as possible. use RT::Interface::Email; - RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); @@ -202,7 +233,7 @@ sub iso8859_redef_sendmessage { # {{{ test a multipart alternative containing a text-html part with an umlaut -my $content = `cat ./lib/t/data/multipart-alternative-with-umlaut` || die "couldn't find new content"; +my $content = `cat /opt/rt3/lib/t/data/multipart-alternative-with-umlaut` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); @@ -210,7 +241,8 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. ¨auts_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); @@ -229,7 +261,7 @@ sub umlauts_redef_sendmessage { # {{{ test a text-html message with an umlaut -my $content = `cat ./lib/t/data/text-html-with-umlaut` || die "couldn't find new content"; +my $content = `cat /opt/rt3/lib/t/data/text-html-with-umlaut` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); @@ -237,7 +269,8 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_html_umlauts_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); @@ -266,7 +299,7 @@ sub text_html_umlauts_redef_sendmessage { # {{{ test a text-html message with russian characters -my $content = `cat ./lib/t/data/text-html-in-russian` || die "couldn't find new content"; +my $content = `cat /opt/rt3/lib/t/data/text-html-in-russian` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); @@ -274,7 +307,8 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_html_russian_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); @@ -308,14 +342,15 @@ sub text_html_russian_redef_sendmessage { unshift (@RT::EmailInputEncodings, 'koi8-r'); $RT::EmailOutputEncoding = 'koi8-r'; -my $content = `cat ./lib/t/data/russian-subject-no-content-type` || die "couldn't find new content"; +my $content = `cat /opt/rt3/lib/t/data/russian-subject-no-content-type` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_plain_russian_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); @@ -346,7 +381,7 @@ $RT::EmailOutputEncoding = 'utf-8'; # {{{ test a message containing a nested RFC 822 message -my $content = `cat ./lib/t/data/nested-rfc-822` || die "couldn't find new content"; +my $content = `cat /opt/rt3/lib/t/data/nested-rfc-822` || die "couldn't find new content"; ok ($content, "Loaded nested-rfc-822 to test"); $parser->ParseMIMEEntityFromScalar($content); @@ -354,7 +389,8 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_plain_nested_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); my $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); @@ -382,7 +418,63 @@ sub text_plain_nested_redef_sendmessage { # }}} +# {{{ test a multipart alternative containing a uuencoded mesage generated by lotus notes + +my $content = `cat /opt/rt3/lib/t/data/notes-uuencoded` || die "couldn't find new content"; + +$parser->ParseMIMEEntityFromScalar($content); + + +# be as much like the mail gateway as possible. +¬es_redef_sendmessage; + +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); +my $tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +my $tick = $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); + +ok ($tick->Transactions->First->Content =~ /from Lotus Notes/, "We recorded the content right"); +is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments"); + +sub notes_redef_sendmessage { + no warnings qw/redefine/; + eval 'sub RT::Action::SendEmail::SendMessage { }'; +} + +# }}} + +# {{{ test a multipart that crashes the file-based mime-parser works + +my $content = `cat /opt/rt3/lib/t/data/crashes-file-based-parser` || die "couldn't find new content"; + +$parser->ParseMIMEEntityFromScalar($content); + + +# be as much like the mail gateway as possible. +&crashes_redef_sendmessage; + +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); +my $tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +my $tick = $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); + +ok ($tick->Transactions->First->Content =~ /FYI/, "We recorded the content right"); +is ($tick->Transactions->First->Attachments->Count , 5 , "Has three attachments"); + +sub crashes_redef_sendmessage { + no warnings qw/redefine/; + eval 'sub RT::Action::SendEmail::SendMessage { }'; +} + + +# }}} # Don't taint the environment $everyone->PrincipalObj->RevokeRight(Right =>'SuperUser'); diff --git a/rt/lib/t/create_data.pl b/rt/lib/t/create_data.pl new file mode 100644 index 000000000..35226ea74 --- /dev/null +++ b/rt/lib/t/create_data.pl @@ -0,0 +1,136 @@ +#!@PERL@ -w +use strict; + +use Test::More qw/no_plan/; +use Text::Lorem; +use RT; +RT::LoadConfig; +RT::Init; + +#### Generate some number of RT accounts. Come up with random +#### usernames if requested, otherwise use provided ones. Take +#### $subdomain argument so that we can generate customer accounts, +#### etc. Group memberships should also be provided. + +=head2 create_users + +=over 4 + +This subroutine creates a number of RT users, if they don't already +exist, and places them in the specified group. It also creates the +group if it needs to. Returns a ref to a list containing the user +objects. + +If a list of names is specified, users with those names are created. +Otherwise, it will make names up, checking to be sure that a user with +the random name does not yet exist. Each user will have an email +address in "example.com". + +Takes a hash of the following arguments: +number => How many users to create. Default is 1. +names => A ref to a list of usernames to use. Optional. +subdomain => The subdomain of example.com which should be used for + email addresses. +group => The name of the group these users should belong to. Creates + the group if it does not yet exist. +privileged => Whether the users should be able to be granted rights. + Default is 1. +attributes => a ref to a list of hashrefs containing the arguments for + any unsupported attribute we should add to the user (for example, a + user saved search.) + +=back + +=cut + +sub create_users { + my %ARGS = (number => 1, + subdomain => undef, + privileged => 1, + @_); + my $lorem = Text::Lorem->new(); + my @users_returned; + + my @usernames; + my $anon; + if ($ARGS{'users'}) { + @usernames = @{$ARGS{'users'}}; + $anon = 0; + } else { + @usernames = split(/\s+/, $lorem->words($ARGS{'number'})); + $anon = 1; + } + + my $domain = 'example.com'; + $domain = $ARGS{'subdomain'} . ".$domain" if $ARGS{'subdomain'}; + + foreach my $user (@usernames) { + my $user_obj = RT::User->new($RT::SystemUser); + $user_obj->Load($user); + if ($user_obj->Id() && !$anon) { + # Use this user; assume we know what we're doing. Don't + # modify it, other than adding it to any group specified. + push(@users_returned, $user_obj); + } elsif ($user_obj->Id()) { + # Oops. Get a different username and stick it on the back + # of the list. + append(@users, $lorem->words(1)); + } else { + $user_obj->Create(Name => $user, + Password => $user."pass", + EmailAddress => $user.'@'.$domain, + RealName => "$user ipsum", + Privileged => $ARGS{'privileged'}, + ); + push(@users_returned, $user_obj); + } + } + + # Now we have our list of users. Did we have groups to add them + # to? + + if ($ARGS{'groups'}) { + my @groups = @{$ARGS{'groups'}}; + foreach my $group (@groups) { + my $group_obj = RT::Group->new(); + $group_obj->LoadUserDefinedGroup($group); + unless ($group_obj->Id()) { + # Create it. + $group_obj->CreateUserDefinedGroup( + Name => $group, + Description => "lorem defined group $group", + ); + } + foreach (@users_returned) { + $group_obj->AddMember($_->Id); + } + } + } + + # Do we have attributes to apply to the users? + if ($ARGS{'attributes'}) { + foreach my $attrib (@{$ARGS{'attributes'}}) { + my %attr_args = %{$attrib}; + foreach (@users_returned) { + $_->AddAttribute(%attr_args); + } + } + } + + # Return our list of users. + return \@users_returned; +} + +#### Generate any RT groups. These ought to be named, by function. +#### The group names should be given either as part of user creation, +#### or as a name with a number of subgroups which should be members. + + +#### Generate some queues. Users/groups who have permissions on +#### queues need to be specified on this point. Permissions can be +#### specified by role, e.g. "client" or "staffmember" or "admin" for +#### each queue. If the queue should have anything special like a +#### custom field, say so here. + + +#### Generate some tickets and transactions. diff --git a/rt/lib/t/data/crashes-file-based-parser b/rt/lib/t/data/crashes-file-based-parser new file mode 100644 index 000000000..da1913eb9 --- /dev/null +++ b/rt/lib/t/data/crashes-file-based-parser @@ -0,0 +1,193 @@ +X-Real-To: <mitya@example.com> +Received: from [194.87.5.31] (HELO sinbin.d-s.example.com) + by cgp.example.com (CommuniGate Pro SMTP 4.0.6/D4) + with ESMTP-TLS id 125035761 for mitya@example.com; Thu, 11 Dec 2003 15:17:46 +0300 +Received: (from daemon@localhost) + by sinbin.d-s.example.com (8.12.9p1/8.11.6) id hBBCHjN0031595 + for mitya@example.com; Thu, 11 Dec 2003 15:17:45 +0300 (MSK) + (envelope-from noc@rt3.mx.example.com) +Received: from d-s.example.com by sinbin.d-s.example.com with ESMTP id hBBCHjar031575; + (8.12.9p2/D) Thu, 11 Dec 2003 15:17:45 +0300 (MSK) +X-Real-To: <mitya@example.com> +Sender: <noc@rt3.mx.example.com> (Network Operation Center) +To: mitya@example.com +Date: Thu, 11 Dec 2003 15:17:45 +0300 +Message-ID: <redirect-137509289@d-s.example.com> +X-Original-Return-Path: <vox19@b92.d-s.example.com> +Received: from [194.87.0.16] (HELO mail.d-s.example.com) + by d-s.example.com (CommuniGate Pro SMTP 4.1.5/D1) + with ESMTP id 120757484 for noc@rt3.mx.example.com; Mon, 27 Oct 2003 09:40:53 +0300 +Received: from [194.87.0.22] (HELO moscvax.d-s.example.com) + by mail.d-s.example.com (CommuniGate Pro SMTP 4.1.5/D) + with ESMTP-TLS id 107945800 for noc@rt3.mx.example.com; Mon, 27 Oct 2003 09:40:53 +0300 +Received: from d-s.example.com (mx.d-s.example.com [194.87.0.32]) + by moscvax.d-s.example.com (8.12.9/8.12.9) with ESMTP id h9R6erFm062621 + for <security@d.example.com>; Mon, 27 Oct 2003 09:40:53 +0300 (MSK) + (envelope-from vox19@b92.d-s.example.com) +Received: by d-s.example.com (CommuniGate Pro PIPE 4.1.5/D1) + with PIPE id 120757490; Mon, 27 Oct 2003 09:40:53 +0300 +Received: from [194.87.2.108] (HELO b92.d-s.example.com) + by d-s.example.com (CommuniGate Pro SMTP 4.1.5/D1) + with ESMTP-TLS id 120757480 for security@d.example.com; Mon, 27 Oct 2003 09:40:52 +0300 +Received: from b92.d-s.example.com (localhost [127.0.0.1]) + by b92.d-s.example.com (8.12.8p1/8.12.3) with ESMTP id h9R6eqIe014669 + for <security@d.example.com>; Mon, 27 Oct 2003 09:40:52 +0300 (MSK) + (envelope-from vox19@b92.d-s.example.com) +Received: from localhost (localhost [[UNIX: localhost]]) + by b92.d-s.example.com (8.12.8p1/8.12.3/Submit) id h9R6epst014668 + for security@d.example.com; Mon, 27 Oct 2003 09:40:51 +0300 (MSK) +From: "Stanislav" <drstas@d.example.com> +Subject: Fwd: scanning my ports +X-Original-Date: Mon, 27 Oct 2003 10:40:51 +0400 +User-Agent: KMail/1.5.4 +X-Original-To: security@d.example.com +MIME-Version: 1.0 +Content-Type: Multipart/Mixed; + boundary="Boundary-00=_z3Ln/tUeUBipHgx" +X-Original-Message-Id: <200310270940.51758.vox19@d.example.com> +X-Spam-Checker-Version: SpamAssassin 2.60-jumbo.demos (1.212-2003-09-23-exp) +X-Spam-Level: +X-Spam-Status: No, hits=-6.8 required=5.0 tests=BAYES_00,FROM_ENDS_IN_NUMS, + HTML_MESSAGE,SUBJECT_RT autolearn=ham version=2.60-jumbo.demos +X-Spam-Report: -6.8 points, 5.0 required; + * -3.0 SUBJECT_RT Tracking system + * 1.0 FROM_ENDS_IN_NUMS From: ends in numbers + * 0.1 HTML_MESSAGE BODY: HTML included in message + * -4.9 BAYES_00 BODY: Bayesian spam probability is 0 to 1% + * [score: 0.0000] + + +--Boundary-00=_z3Ln/tUeUBipHgx +Content-Type: text/plain; + charset="koi8-r" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + + +FYI + + +---------- Forwarded Message ---------- + +Subject: [DEMOS #12148] scanning my ports +Date: Sunday 26 October 2003 20:19 +From: 1stwizard@isp.example.com +To: no-reply@d-r.example.com + +This transaction appears to have no content + +------------------------------------------------------- + + + +-- +best wishes, + +Stanislav A. Mushkat +http://www.di.example.com + +--Boundary-00=_z3Ln/tUeUBipHgx +Content-Type: text/plain; + charset="iso-8859-1"; + name=" " +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +Somebody at IP 127.0.0.1 scanned my ports. +--Boundary-00=_z3Ln/tUeUBipHgx +Content-Type: text/html; + charset="iso-8859-1"; + name=" " +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +<HTML><HEAD> +<META http-equiv=Content-Type content="text/html; charset=iso-8859-1"> +<META content="IncrediMail 1.0" name=GENERATOR> +<!--IncrdiXMLRemarkStart> +<IncrdiX-Info> +<X-FID>BA285063-5BCE-11D4-AF8D-0050DAC67E11</X-FID> +<X-FVER>2.0</X-FVER> +<X-FIT>Letter</X-FIT> +<X-FCOL>Elegant Paper</X-FCOL> +<X-FCAT>Stationery</X-FCAT> +<X-FDIS>Rice Fields</X-FDIS> +<X-Extensions>SU1CTDEsNDEsgUmBSTAkkcGNgZmVTY0wNCxNhYUoiU0kOMEoTYGBjYEoJDSZnSyFhUksSU1CTDIsMCwsSU1CTDMsMCwsVHlwZVZlcnNpb24sMywxLjAs</X-Extensions> +<X-BG>8E549F43-079D-11D8-B0F9-00B0D0B65B96</X-BG> +<X-BGT>repeat</X-BGT> +<X-BGC>#eff3f7</X-BGC> +<X-BGPX>left</X-BGPX> +<X-BGPY>0px</X-BGPY> +<X-ASN>ANIM3D00-NONE-0000-0000-000000000000</X-ASN> +<X-ASNF>0</X-ASNF> +<X-ASH>ANIM3D00-NONE-0000-0000-000000000000</X-ASH> +<X-ASHF>1</X-ASHF> +<X-AN>6486DDE0-3EFD-11D4-BA3D-0050DAC68030</X-AN> +<X-ANF>0</X-ANF> +<X-AP>6486DDE0-3EFD-11D4-BA3D-0050DAC68030</X-AP> +<X-APF>1</X-APF> +<X-AD>C3C52140-4147-11D4-BA3D-0050DAC68030</X-AD> +<X-ADF>0</X-ADF> +<X-AUTO>X-ASN,X-ASH,X-AN,X-AP,X-AD</X-AUTO> +<X-CNT>;</X-CNT> +</IncrdiX-Info> +<IncrdiXMLRemarkEnd--> +</HEAD> +<BODY style="BACKGROUND-POSITION: left 0px; FONT-SIZE: 12pt; MARGIN: 0px 10px 10px; COLOR: #00005b; BACKGROUND-REPEAT: repeat; FONT-FAMILY: Arial" text=#00005b bgColor=#eff3f7 background=cid:8E549F43-079D-11D8-B0F9-00B0D0B65B96 scroll=yes SIGCOLOR="0" X-ADF="0" X-AD="C3C52140-4147-11D4-BA3D-0050DAC68030" X-APF="1" X-AP="6486DDE0-3EFD-11D4-BA3D-0050DAC68030" X-ANF="0" X-AN="6486DDE0-3EFD-11D4-BA3D-0050DAC68030" X-ASHF="1" X-ASH="ANIM3D00-NONE-0000-0000-000000000000" X-ASNF="0" X-ASN="ANIM3D00-NONE-0000-0000-000000000000" X-FVER="2.0" X-FID="BA285063-5BCE-11D4-AF8D-0050DAC67E11" X-FIT="Letter" X-FCOL="Elegant Paper" X-FCAT="Elegant Paper" X-FDIS="Rice Fields" ORGYPOS="0"> +<TABLE id=INCREDIMAINTABLE cellSpacing=0 cellPadding=2 width="100%" border=0> +<TBODY> +<TR> +<TD id=INCREDITEXTREGION style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 12pt; PADDING-BOTTOM: 0px; CURSOR: auto; PADDING-TOP: 0px" vAlign=top width="100%"> +<DIV>Somebody at IP 127.0.0.1 scanned my ports. </DIV> +<DIV> </DIV> +<DIV> </DIV></TD></TR> +<TR> +<TD id=INCREDIFOOTER width="100%"> +<TABLE cellSpacing=0 cellPadding=0 width="100%"> +<TBODY> +<TR> +<TD width="100%"></TD> +<TD id=INCREDISOUND vAlign=bottom align=middle></TD> +<TD id=INCREDIANIM vAlign=bottom align=middle></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML> +--Boundary-00=_z3Ln/tUeUBipHgx +Content-Type: image/jpeg; + charset="iso-8859-1"; + name="BackGrnd.jpg" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="BackGrnd.jpg" + +/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFk +b2JlAGTAAAAAAQMAEAMCAwYAAAHbAAAC1gAABZX/2wCEABALCwsMCxAMDBAX +Dw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoXHh4jJSclIx4vLzMzLy9AQEBAQEBA +QEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoaJjAjHh4eHiMw +Ky4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAGUAcwMBIgACEQED +EQH/xACAAAEBAQEAAAAAAAAAAAAAAAAAAQIGAQEBAAAAAAAAAAAAAAAAAAAA +ARABAAICAwEAAgMAAAAAAAAAAQARIQIxQRIiQDIQMFARAAICAgIBBAIDAQEA +AAAAAAERACExQVFhcYGRobECEsHhMtHxEgEAAAAAAAAAAAAAAAAAAABQ/9oA +DAMBAAIRAxEAAADtRZYE1ASghQFgUZoCkKSwLmhcllAEqkSkqFAlhUomoAS3 +IoJqFlDNpFEAQFE1AIVYAWIVKAJRNZpYCwVmmshKACA0CBAUCBYGwf/aAAgB +AgABBQD8B/yP/9oACAEDAAEFAPz6/or8H//aAAgBAQABBQC2+ZeHjbD+saX6 +hwXeDW1Rg4xLLTa+m7ZiIEsI1MTiHP1dYpvFADiFM1/X6nq9byuwdPPz5oFo +fWlEMQ9ULKrWq2ppG9Y2J6INQma9lVTRdlUKgHzXXSEECw1SYu5WsGoJPkis +ZYpx31GvXZQ/JM3VwShzVTsp1EZbBI8LcaUSih86+s2Zl4Wp6+lAZnVsDkjd +ku5m+lJTdXDG2SHM9M2wKX1YxsaZTTwmoVrYnqsMrM652yjs01K0mtbGAz6Y +5dpfqNz06qpq5QNjiIjiZtbhtceNuf0jyeqGgu6rXMvI4omPWbPMYzEfMI+a +xHnFvOP4/9oACAECAgY/AGP/2gAIAQMCBj8AY//aAAgBAQEGPwB72Yucb1Bf +IhFEaeZ+xRXFQELN+HEUQdjU0Xn4g9gRCQcpw1yajGYsP/kFvUzvjUBWrIMF +HI2OJQNEAjiEEFdTmfG/MTHq5RFOnpTV3kzCBx7x4YOD1AV5uYJvnqMA0hep +jfwpYCwC4Bx3q55zeZRBCw9TkoIuHw78RdczSNH2mgqcLpRC+RASAkA3B13m +cYd5mR84c/yOx4lWtRAZ6mGDhiP9WgXVyhWA+xDgMOWGMsTg/wBTz8SjjXrP +8hHIlX1MZ6mDzgc/cIV/iyN1GBR0MQMKjnEzvvMz8mUkErKlfqU63iV+IKNH +7mNZBLFQEpEDeDOV32IVn8WR4caoywqI2p695mbZzNUQIcKfk0bo+0NpCqn7 +CiQiNGXkdQen1DpjGeZ7WNw3pK+I93maCPc16+Zkf6XxMCsFwAkaiIB57vc/ +IAhZ/HqZBBbB0ZokAEOGxsYqBgPp8agQBu4VSMJdqx6SwDsGBrTmAR93uZGX +6KePowEADAIjoX8gw459CICaW/MLGvodQfkDW71zBxRHtB3j3jC4PMIYoAgK +NfPMCQNN7jCzvlzXPopzhQvNZY3CRya9ZrEFfRE0iCB5mscZuVYfKmAi94uE +3Q8qfytQ7xD0svmFcmaxNPI8iMjh3pmF2HbzqeUi+YkiD/MrOl5LmbwPuWVf +mXpv3hDH8qAjPpiZHXkRnSd6ZhB53mejzKV6US0K9TCCLyCeIhtETX5MsHBG +JkD/ANiFkMCE2qGoCdZ8Q8AMGpYFqEhdhRIYH3CF3d1M/Mexma+4CwdQ2Ddc +x0exAlmj04QUQd8QWLB/iB5GxmEg5TENVZqPYzFV8eHAy9T/AEc8a4n3Ov6g +/VwvE6lpQ4VNysXzhS8esOO8w/rlF/rypjV3B5H1Knr8T//Z + +--Boundary-00=_z3Ln/tUeUBipHgx-- + diff --git a/rt/lib/t/data/multipart-report b/rt/lib/t/data/multipart-report new file mode 100644 index 000000000..538e0c880 --- /dev/null +++ b/rt/lib/t/data/multipart-report @@ -0,0 +1,66 @@ +Return-Path: <mailnull@example.com> +Date: Sat, 23 Aug 2003 00:15:18 +0800 (SGT) +From: Mail Delivery Subsystem <MAILER-DAEMON@other.example.com> +Message-Id: <200308221615.CGA36111@mailbox.other.example.com> +To: support@example.com +MIME-Version: 1.0 +Content-Type: multipart/report; report-type=delivery-status; + boundary="CGA36111.1061568918/mailbox.other.example.com" +Subject: Returned mail: User unknown +Auto-Submitted: auto-generated (failure) + +This is a MIME-encapsulated message + +--CGA36111.1061568918/mailbox.other.example.com + +The original message was received at Sat, 23 Aug 2003 00:15:18 +0800 (SGT) +from mx12.mcis.other.example.com [10.1.1.232] + + ----- The following addresses had permanent delivery errors ----- +<jesmund> + + +--CGA36111.1061568918/mailbox.other.example.com +Content-Type: message/delivery-status + +Reporting-MTA: dns; mailbox.other.example.com +Arrival-Date: Sat, 23 Aug 2003 00:15:18 +0800 (SGT) + +Final-Recipient: RFC822; jesmund@mailbox.other.example.com +Action: failed +Status: 5.1.1 +Remote-MTA: DNS; mail.mcis.other.example.com +Diagnostic-Code: SMTP; 550 5.1.1 <jesmund>... User unknown +Last-Attempt-Date: Sat, 23 Aug 2003 00:15:18 +0800 (SGT) + +--CGA36111.1061568918/mailbox.other.example.com +Content-Type: message/rfc822 + +Return-Path: <support@example.com> +Received: from mx12.other.example.com (mx12.mcis.other.example.com [10.1.1.232]) + by mailbox.other.example.com (Mirapoint Messaging Server MOS 3.3.3-GR) + with ESMTP id CGA36101; + Sat, 23 Aug 2003 00:15:17 +0800 (SGT) +Received: from STATION13 (rhala.dsl.pe.net [64.38.69.104]) + by mx12.other.example.com (8.12.9/8.12.9) with ESMTP id h7MGFGac020135 + for <jesmund@other.example.com>; Sat, 23 Aug 2003 00:15:17 +0800 +Message-Id: <200308221615.h7MGFGac020135@mx12.other.example.com> +From: <support@example.com> +To: <jesmund@other.example.com> +Subject: Thank you! +Date: Fri, 22 Aug 2003 9:15:19 --0700 +X-MailScanner: Found to be clean +Importance: Normal +X-Mailer: Microsoft Outlook Express 6.00.2600.0000 +X-MSMail-Priority: Normal +X-Priority: 3 (Normal) +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="_NextPart_000_05684DA4" + + + +--_NextPart_000_05684DA4-- + +--CGA36111.1061568918/mailbox.other.example.com-- + diff --git a/rt/lib/t/data/notes-uuencoded b/rt/lib/t/data/notes-uuencoded new file mode 100644 index 000000000..f27fdf8c0 --- /dev/null +++ b/rt/lib/t/data/notes-uuencoded @@ -0,0 +1,2368 @@ +Return-Path: <mhenrion@example.com> +Delivered-To: j@pallas.eruditorum.org +Received: from serveurlotus.example.com (unknown [213.56.193.67]) + by pallas.eruditorum.org (Postfix) with SMTP id C21DB113AA + for <jesse@vendor.example.com>; Thu, 27 Nov 2003 10:55:58 -0500 (EST) +Received: by serveurlotus.example.com(Lotus SMTP MTA v4.6.1 (569.2 2-6-1998)) id C1256DEB.00578401 ; Thu, 27 Nov 2003 16:55:54 +0100 +X-Lotus-FromDomain: DOMAINEQZ +From: "Maxime HENRION" <mhenrion@example.com> +To: jesse@vendor.example.com +Cc: support@example.com +Message-ID: <C1256DEB.005717B5.00@serveurlotus.example.com> +Date: Thu, 27 Nov 2003 16:55:50 +0100 +Subject: Test e-mail which exhibits problems with RT +X-Spam-Status: No, hits=-2.6 required=7.0 + tests=BAYES_20 + version=2.55 +X-Spam-Level: +X-Spam-Checker-Version: SpamAssassin 2.55 (1.174.2.19-2003-05-19-exp) +Content-Length: 144905 + +I send you this mail from Lotus Notes to make sure it'll exhibit the +reported symptoms (lost attachment and body). I Cc: it to our RT address +to verify it does cause the reported problems. Could you please mail me +any replies to my personal e-mail, mux@example.org ? + +Thanks in advance, +Maxime + +(See attached file: Naz_Head.jpg) + +(UUEncoded file named: Naz_Head.jpg follows) +(Its format is: JPEG File Interchange ) + +begin 644 Naz_Head.jpg +M_]C_X``02D9)1@`!`@(```````#__@`>04-$(%-Y<W1E;7,@1&EG:71A;"!) +M;6%G:6YG`/_``!$(!(D#$P,!(@`"$0$#$0'_VP"$``0"`P,#`@0#`P,$!`0$ +M!@H&!@4%!@P("0<*#@P/#PX,#@T0$A<3$!$5$0T.%!L4%1<8&1H9#Q,<'AP9 +M'A<9&1@!!@8&"0<)$0D)$248%1@E)24E)24E)24E)24E)24E)24E)24E)24E +M)24E)24E)24E)24E)24E)24E)24E)24E)?_$`*(```$%`0$!`0`````````` +M``(``0,$!08'"`D0``$#`P,"!0($!`0$!0(""P$``A$#!"$2,4$%4083(F%Q +M@9$',J&Q%"-"P5+1X?`5,V+Q"!8D-%,7<H(U0QACDI.B)29&5%8!`0$!`0$! +M`0`````````````!`@,$!081`0$``@(#``$%`0$!`0$````!`A$A,0,205$$ +M$R(R87$%%5*!_]H`#`,!``(1`Q$`/P#Y`NZSM9#1`&(!5%[G\U"!WW5B](U: +M0(GDE5'DR3$]R3,K53ZB?5?D$I,JNC=`\EN#.=PHMVZH^%$6?,)R3(`R90/K +M:AB0!LHFG"&6Q`,?*(E\^"`"3.=TC6=J`)([!0M#=1U'X3.TZ9D[X**G=6=( +MR82\]X,ZC`&"H0X"9<3W2:(&GOWF4+VLMN7D2T[[AR*E5<YPU?>56:T,@P<X +M3^D#'*J+3:SC(<8[92\XB/5]U7VV$E/Z=(!.459_B7`0'&2F%<EX)D]R%7!) +M:$B1.<S^B(G-PYFQQ/*7G$P9/M!5>9,:ML)Y$]AW03FLXR78A.VY=&=IV58& +M2!^X1-BFWO)S""S_`!#M,.,'VV2;<.(C48"JR'#&!V*>!LUV_OLBK)KO@C5) +M_9)M=V0(GNJSAL9"7!!E066UR&X)^BD%P06DOR%2&00WG=$WYSQ[JHL&Y&>9 +MQV3ON7.;ZG:@.).%59,Y.#[)H&F7.`/QNBK;:Y#?S$XP"4(N'[:S[Y46H-8< +M2#C.4``SZA!V")I9?5=AVO[<IA7=J)C$[DJN""8!VY"3C$;@(6+?\4_83O@) +MZ=U4;@$YQNJ0<>')L[3G?=15_P#BG`0"[/=(W;N3NJ@/J]>8PG=M(<!P%46Q +M<5)C5!&Z%UR0^=6_,JJZ220[',XE!J(VD@HJZZZ<3J+H)X*=]T]K1ZLGW5*G +M+G3N$[-()F/_`,1E0TN-N7@RUY)[R<)V7=1V=1^ZH@.,F<CA$V/+F8CLJBW6 +MO'^8/4[[HA=U,^L@K/?#GB-N4Y)Y)CW15RI>5'#_`)CL>Z`7CY]1=`[$Y50& +M1,Y]BF&^G!]I07_XRII!#JD3]E(RO<NI.KM-30T@.=P"LV`T[C]D0<?+(DD$ +MR0D5<;?59(+S)P9)2_CJN_F.)VR51=+7@S'QA($N$#9$:-.^JR/63]5(R]K. +MP*CM1]UF'7L,=H1M=+IY0:#[ZL'R'N$#9/\`\0N`3-1Q!.8*HD..1N@]0)@@ +MQ[HK39U"J2!YA`/*3>HU9_/O]5G,+F"9@>Z?5D3Q[HC2'4*PF'9=]T_\?6!' +M\QQ^2LZG,[R-U(3Z):<<"9A*+K.I7(<2*KA]4XZI<:R[S78YE9H))$NB?=+4 +M(C.^4&O2ZM<:Y-=^F<PXJ9W6[ME1_E5ZA!V]1P%A%T-/'NI*+M(U3J/LLU8V +M[?KM\#_[NK,?XBI7>(+\`#^+JQ[/*P/,<'SI`]E/1D[@'.`D*V[GKMZUP>;N +MOW`#RJEQXCZB^KJ_BJ_P*CEG]1JD5PW5D?HJC2`V8,]P>$A.&PSKO41Z'7E; +M/_649\0]18YO_K:I@Y]9@K%:\DDM/P.4#G._J)39IT%3Q#U(48;>U9]GE*WZ +M_P!3:=;KVMCC65@L,M],_=3C\I9@^_*IIT-GX@ZL]P<;ZK#3)EY5YWB;J9`_ +M]75`]G9*YJB-%&!@G<=T?F!K`T3'LL4=(/$_5-`TWE4#_P"Y,?%750__`-[5 +MS[KG?,U-`)..W*$N$F=QW4TKH?\`S5U?7)O:@^J3O%/5&`3>5<_]2YQS_3,D +M90OJ%L9S[*CI'>*^JA\_QE4>VN?[)4?%76`''^/KCC\Q7-.?WG[PHR\9[\!" +M.I/C+K8R.I7(CL\J1OC?K[!J'5KH>WF$+DC5TM&#J_="YY=].$Z'8?\`G_Q( +MTS_QJ\$\"L[_`#1?_4;Q8T"/$-^('_SN_P`UQ.O/`(3O?Z<\JZAR[=WXG>+V +MMQXBZB)Y-R__`#3?_4[QHV2/$W4\<?Q3_P#-<,YTD-[(7N!.70!NAR[S_P"J +M'C(;>)NJ0.]W4_S3?_5'QII.KQ/U0@;?^I?M]UPDN()DCLE2J/%6>?8Y5X-U +MWP_$[QDTZO\`S+U0#L;A_P#FA/XI>-1__D_5!`__`-A_^:XBK4+A#=]LJ'62 +MT@@2H;KO:?XK^.`#'BCJ7_\`'=_FI&?B]XY;G_S1U$]OY[O\UYWYA+")*;6- +MNRJ/26_C)X]8UI_\T]1@XCSBI/\`ZT_B$W;Q5?D]O-*\R#P`#O&R$UC,SDH/ +M4*?XX?B,R)\6]1$?_M4=3\<OQ&F6^+>HB?\`]IM^B\LU.W(D$*.M7\L$-DGW +M31MZF_\`';\2*6H'Q3U!Q(P?.V_15S^./XE:-;O%O42WDFIM^B\K#_3).0>4 +M1>-,R,YB86M0Y>HL_'+\2"X$>*NH?_Q/]%+1_'7\1FNSXHO2>_F+RG5#,F/8 +M=U(S+@Z23\)J'+VNT_\`$'^)M.W:QOBJ[@=WJ3_]8;\3_P#_`*NZ_P#WUX]0 +M/\IOJ`13_P!8_P!_1.#E)>;X.DJE4`G4&CW]U>O/2YTY/95"VD\@O(8(_-NE +M-(*I$\#ZJ.((DP#MRC?I!,.#@3P@<YLQ@D*)T!Y=!!'V3,!(!DR-NZ/!DDS_ +M`)H=3FOU#\Q$3*`2[U;F3^J9FG5DG!VA%J&"\3VA,PC.H3]4#")SCZ[IPZ6Y +M.?;*9Q$P1">`3L`F@0!<W48QB)RDW\W8=DM)B0,C=(G'Y3OG*H)A]7YC]TGO +M`;J&VTI8`@$@QRF`F)A`6HZ<&,(`XM$-),HM.TR`DTC)_9`@]H'?NB(U9)D* +M)Q`R/L"G:]K3D$_*"3`)DS'(_P`X2>0`")).=10F`,SG9*`Y^DS'9#0VZM.' +M@0=NZ51S@XYR=PG9IF'?1!4<)QF4!`X&<E.9%3F2.Z$Z-(:!$Y30-4SL@D`] +M<ETSPD2`X%Q$#W3.>TTQ@",3R5'[%V$1,Y\B8S&Q0:S^;4")R9@(2^`<P>T[ +M)`@^IH&GL%%2-?@B8^J;60">3]T+=C.J1O@_ND<_U8'(RJ<E))W`GE,?=Q,< +M%+TDD@R?E-$C#A[A0$`79&/JF!<U^X^B'!YRDUOJ(*HF#AY@Q&$6KDNB%"0" +M9!2<8.3)Y4$CW2\MF#^Z8.(;!&KZIG-P-L#A"V6F=8!/""0%I.0/<(75#/:= +M@$.F:>8`/)3#3OJ'T*(D:[&8B=Y4C7$"&M,J)L1Q'>$3@1L8'L@8F3@1]4+G +M&(VX2(#3^:>\%`?54P9'SNJHZ;B.^4]0D@X!(0@..QCZIR`V"7-.)0)CR6P1 +MDHFZ@-_B<H`WU1IGV3L#L0!`X)*:41=.<GX1,?\`TYA``=<C`&0EI/,90&PN +M+IQMR437D#8PHVM)B'>VZ.>9&?T32';4C&4FN.24S!G,B.4@"7P-D4;CZ02G +MUQM@'E,`7,D-F-TP:03#B)XW03TW0`3/=.ZHT[20HJ0(=JP<83U=1'Y??=$I +M.>20)B/JF<\D^W<!#)DQB>$)+@3@D=@@.1J(C\RGI.TTAL`%!;@U'@&8)4U< +M#40..%*LA!WKD@?,JQ3<*;=6J?959U`<%*HXBG,R=MU`JM05+G42#[QLF>8: +M0V"1O)W4;):`V3G>$4@$&()W0/YA+H&$S"=Q$'E,X34D!.&MF<>_NBIZ.G5. +M1C=6*32XZSMP56:Z#I#1/=6ZKAY8:!$;PI:1(7B!)SV0O<T[&(0BF-&<#W05 +M7:G%L8&%!,UPC`$_*?7)))4+&NF9P-@0G/R,]D!$M)DGX"3G%P`W^NZ!A;OB +M1[R@JU"1F(;VP4!ET'TD3[("8?&,^R`O!&,&=@A($`P2.TJFAQZAK/V0U()] +M),\A(QITP/C>$+R(+B![(IY&DQN$!U$=OE*99G;V0ZVDSVXE7:0I$@DY12W5 +MF0.P47ID%(N@03]R@.1DL'ZH<X)#L\RF$;:O]$Y8WR]0J-+I_+&?^R&A.=`G +M'T0!\2[)*%P,1D`<(7N`@$_JB40>#_DD#^G"C!R=_NE()$'?!0$X%Q$?NF(& +MY!&.Z;;4`24#RYH!!)]T#U7A@,\JNZ-6?ND\EYDN$]T]-[\MUX[0M!/;+?E, +MUDQ/WW2=4TGL3V*!SAQQS*(D:WD$P?T4M+8@29W]E!J],CE'J&H`.XR$&G0< +M!1:(&R/6WL%#1TFDTEW'9%#/\?Z)N+I/<F"1,=]7^JI5G`N(';`[*[?$.<7[ +MS]BJ=8@'&$J('2&YF3QV0`-+`XD3VY1<D$@'=`T>L@B%`B9(SQF$/&TIHT[B +M2F;!.3'L4#N:&P[?Y*:1!WD=T\S(.3\RA,:2Z.?T3:GD%I&Y&/A*8&9CLA(S +M$B/S8PG<V88QIQGOE$T-CV#9SB>Q&R<Z09CW(40V@#9$=IP/>%0;B#F#CW14 +MXU>QX4?]1X*3,$X(]U!,_2'0XS"%S@'20(CLAJF'#E)I!!:2J$XMS(]L(26P +M)S[(W._EENH@3J4+FR2/902.TZCP(V[HH!!C(*A;#@)V[<J6F<R3J&,3NA3@ +MXW*8",@'(15&AQD8C.\H>8@M^"J#<1&QE-SL0.Y2(SOLE'IF<($XB<F/="8+ +M(<<3$I/TD@`SVE!I].))"@-S@1(=@I"=)SNA((80#*(/$`M:!`SE%%,`#7&$ +MCN"YT_51DNB`Z0#CA.0X_5(AQ&`23[E/L1W/"C@.).T9*3S+@1/9/\.AM!.2 +M0">$3P0[)"%VD9!D#<I./I[IL2'5$`R$!&&SQA"UQTF73/'"?.($%#8Y&3// +MV35`XOU&)2):`?3!'U0O,M$B`>^Q02!D;F2>P0&(,[I,:XB-4B,Q"1#@=49" +M`J9!R^3&R=Q;J$(0(GD(*A<(='U2"1V&;#_-`R(D;%,\DL$B>Z$;X!55)G48 +M1-'IS&VZ'48&#GE,<C<0@(`:\`QVDI`;[<]TP=B00G:7"<;\A`;M1:2,8R<I +M-&0)@H0XZ(<-(B>4[2[5`(GL902`.:#ID(2,Y$D]D33Z().$(F,'ZH#:"6GU +MB9_*F$SO]$F-)V,%(.Y`D(:'4P0`?LD`[2)D`]]B@#LX:1*<O<&ZH4$C9&YP +M-LIW.#6R'&>Y0D02-.>ZE<\NHM`:)'/*HBDQ.=MYW2C,D[(2XN;))"32XM(! +M@'906+-LEU4DXF(2TD$$.)3AX91:WDY0DM#?RQQNI5A]!+@3/PA<=\@HGNCT +M_?/"AJG$#8^V$"UD8!4E,P9;G':5$"`?5()X4[6.@.VCLJ@2UT`B?E.3#`9$ +M\93:H/I/SA.P-J$``R#NH+%KAVLOD=H4I<9@SW[*(0T>EV/8)5'$N&9![K-Y +M5+J<68(R-TTB=0P4!<-`@(`YVH24$],SF?A"]P#MQG&4&J'">$+W>H09SA%% +MEI(D"=RA+9;D_;!3.+B\DCG9,]X(,.T@;?'R@6Y,]L94L4_X4N=Z7R(`V4.M +MPR2W*=S@:@&P(VE5."?KTR1!)F4#LB"-LRBG<B2[L@>YH`$85"!G@'ZIG0<D +M093'&<#@"4%0AI@D`<`=T#D1F0/N4P!!@#?>>$S8D3*L=2_@!58+)U4MTC6: +MD3JYVX00'T[YS\I4W`\H9#G"8^`D\M#AZ9^40Y<7'@?.4#@)!R24Q,]FI$ZG +M$_W5#XW$S'=,UHF(W0DB#DY3R0V29(W0"78)*KU':R`9]D]=^O\`*%&60\1P +M@,#5`VGNG`:T.,9!30`!#N,I0!N(`5*.B*/G!U5ITC)&<_91N+<D-)[0FJ/D +M:08`[H]#O+%0QI)@9S]MU`#1+A,Q^RE9'FD$'M'91@MU&-^ZD9N-.,;JHNTM +M(I@02B]/8H:=1K6``''LB\T=C]D.%FX.EKA@B,$JE<`AT3SPKEXZ"1&?M]53 +M>!J(G`*54-6=H"B/I?MDA2U3DG&.%&]Y=!+H(/W4`N_/@&$B6R'#=)[AJ(P( +M0-$/@"9303HF0TR/T2:06!I)E*3!$8E-K=K!``;QE`0#9`P8]L(&_(CV*<&0 +M<C.X"9Y]7QB0B">.9.4[OR['L"A<1$`A&_\`(.!.854F-(:?4?A$6AKX[;Y3 +M4G.#,[=RE.!(CNB'=&X.R8F``,)2X',0)"B)).T245(..>=L)B<D`#M`3:M( +M!=,@)Z1!?F<'_50)K1)!Q(V[J0#3B#F,(6.;KV(Y,%)S@0UHQP54['4<?B,H +M69)!/M/=)I(AS@8VRAD:P!CNH)<O/ID$<)F$APR?A-JAL2?NE,9P(RJ&=.H\ +M&=I1-$`N<2)4=1\F03_F4=,X$$E`SP-1$D0A$C&(/.RE(:7.<-_?A1D&8&_O +MRHIWDZ2-1&GE)C@TN!.3^B3=&D-(`_NA,-<X!V"(E$(;S(SV1/:]CAK:1(D> +MXX0'<B$;WZC@N(C??"*6'")R3_LIVN`S(,(&N$#VY2$G(;DX0IR3[2.R<.DF +M!!_=(D!@')R?=-/IDD2>R!SAP),>R1Y(SV]D+V_S2V))YE,T:F@`X"J)&2UI +M'._*1Q$&/<!,(C_JVV28(:<0.5%Z%J)!)W`R5&).!&F4;@9,Y![<*,#!,[[! +M!)IFG)?Z@8CV0Y`T@C2A@3NG;Z3\<DJB2GOO\Y0S(`(!)[*2E2<^D][`3HR2 +MA>7:9,`;0H&WR`(.(1;;D",8*:)Q)D;F4B#.'8!GL@?+7$'OPDV"_.3.Z6"1 +MM]1E.ULSD2,90$TES#\@83M&3&W=,USA$R0=RG`T@.!WVA%Z$UQ+CB!Q[I.( +M.`([^R<.EFW/*`DEYDX(@RB:%.8,&/V1MD8R<*,B'`[QPIV#^43D#]D`Y#H. +MK`Y"*J#$F028DY4?YJN,`=N457!<=I&<H:,]V)X`WA'3#L'^F=OA0@2=AE3! +MIY=$F-DIH3CJ?K(V/")H$>K/919@P1DJ5^EEO`(G(W]EEI%5(+ISE!4=D<$' +MO"6OU1Q*:)=G!Y5036G7)VVE76.<+5S1I')=L2J;"00`.5,S\D@C2$^!JAQL +M('LCH,<&E\@$YCZ(6-UNB7$!2@[-&`-]U*';.2#`CLE3'I$@'O/"8P!G'=%2 +M=J>9^<J*>L#$#$8P@:3DD@J5X<##?Z9)([J(?F_+)B<H'#@203@9P@GU';/9 +M,V&R0,)V9SC&4(=X<'#,R.%&3#0XC$P$3\N(`V^B&GM@XVGO^BL!C!`&GLG) +M:W!@Q&>9E`#IG<`\2FEN=L?JB%4($Y"!Q#8&1[]TG26`Z<`;=DG0&C[HH0,R +M<?)Y35&D.(Q!V]T\C5($@#(*C>('(.\*H?`@'O.-T+RUOIW,Y@J:XHU:5.G4 +MJTRT5&ZV3R-I^X4+H+B<Y']T`O(;Z1N.1A*GIDNP2>XE.3J('`Y"6&M^NZ:- +M!)RYV0"G!``&DB1DH8&7'`,C"8N],ZAP)0._2XB`94%5\NTCGE27)?2+6N8X +M:A(GLJ\`F)S^ZH8P!`R-Y3G\V)D#^Z0(&,F#O[)IY)A$&T@&08QRF=!:,$3& +MR<^H0TD$_JHWY]!W^J!W-);!&#NG.EI!U9!VRD0)`G/"%P;$@2(0&!%0.F09 +MG*.F`#^:3O""FT$`D[X^5)1G4!@GL54K1HU8I-!F81><.Q48H]W9&,92\D?X +MBJ<+=T&!T-,R,:>%1J!DDQ,=RKEW`<?OO$*C5/IDG._RIEVJ-_J&IW(A0OES +MRXF(X4E0Z7&"@<1,[\DJ`'`E_ORFP=C]?9$1#@9R.Z%_]1`D%$,?R:@WV^4P +M'IP<<RG@@>Y,X1/]1)!`&T(H6Q'..QW0^^Q]D1/],`X2!<<GY0(F""9]I*=W +MJW,H`)P08'MF%)HSF2$03&`M(DP,D),+@(!GA"X:6D#/PF&XP280V1:><_\` +M9,2Z?RC!X1%IRX?=,-R<G&44B#JU`$=\[)Z8]1,!/MC2<^^$FGUS*H36#5J@ +M>PF$\>HC()V2<'!V/ZNZ%WYL#G[J=D$W#=S')'9"-B=C*+,3JG[X2:#C(SW5 +M#M(U>TIB8P"!GE-F<F2.0A(P29RH@HVC?=&PZ03`)G[(2&R`"B$!XAV$#G)S +MB.4+XU;P-]^4[MB0[9`XXU`^Q"*%QB"79C&4AAV^1^R0,#3L92<3&=T"!VEQ +MR8PF$AH+73*0D`XG.4M0:X#2-X0/.CC"(.]6/R]X3"`<[I-;#8G<3]43_"=, +MZAE/,M(C?NDQTMT_E'9(X;D@$HH1(/.T;)VQF<&<E-!UY)`^-U(R0)B1R)R4 +M-&:/3O,>V4[`6QB3[!%I=H+P"&SM*6HZ1'',($\PR(.3@A0P9)VCA&XNG)R< +MPF,$02,?HB$&XD_7NF@',9[)2=CE%`'LBI#5J&6ZX`&PV48>-7JV`_5/HV@? +M/ND02Z7?TG[H&@#W._PB@Z@):1'=.)>_)@\^Z%Q/YG8(Y0%@$@N`G$#NDTRU +MT<\IAB3.3G>4[7"#N0).$47]43.)_1$PB(C$J,8#8@2C9,SM_9-(-@]$`X.4 +M),C`(#433@M]S*&)=&<]D!TA)S^O)4U9H;;AHDSV4%(@`;F.%+6=Z`>$#,$. +MW]H*8DDDG;M"'S#C2,#L93R3D"2@(0'#5$B813J<6R/="P'RR22!P$S8:^)U +M3N2I5D2'3,1B=E$^"[_5&YP:6@A19F7#"FE$`8`'.91%IJX$B!RGI_FG)C,! +M$[\LP?8@JHC@M#OS23W1EQ\L#&IW9"XR?=3T*;=1>/\`,(:%0:6CDR)_LG<0 +MVI^:.=U-TW^&_C!_$BJ]G^&F!)/`SQ*&]=JJ%PHLI@>G0&Q`[+*HR<S!Q$1V +M2I8,S!WRD_@^W9,Z)W.!R$$SJKV,<`2)PHF:@09&QY1-_*)SPA(&Y,$X0`:A +MG&V^439))!B-ONF>-1R?9*EI%3+CGA`FEQ<XR/\`[=Y]U')!(P8'U1@M!_*/ +M24-2=0(CZ*APXQ$^\\(9D%HYQ*1<X52[4<\SND\Z3D$1[H'JDBCD`9W49>-, +MF)V^4]1PT;DD\("XZC'`50@_U#A!)@S.=H.R-[A$0@#@3+>4@=[M3`"3+1&3 +MPA.6:8R,9.Z6`-1.)0D#\VK3\;H?].02[!$D)G3IG4)/[IO=HE(@@29^B:*1 +M/H+7`P=@HW5"`/T`3$Z0=1.=@%%4(+OR[[JAWU'P-1,1@=DP=#L"1L"F`]$$ +M92S)'M`0$[!!!(GE".2?L4A&LD"('=,X1!D%"<B#@(XCW2U9.-\D#,I!HX;` +M3%IF,=Q[JAG'U`P=7NBU!QC?]4="B^L:@:6-T@N.IP'[\J(D8;R#DSNHFA`, +MU!L'&P[%2TY:X\Z3E0@@.#IF.94K&D.#OJ51>HU7-I-;)V1^>[N5'2CRQZ47 +MI_PE39__`%9N'D/=#RP$&8Y"H5B7`Q!`5V]U$G<-E4:N9_:%:(B!I^,B5&X0 +M,G<X")Q,EHP.T*-Y.N3E3M">TF`/U2]$&"9A._5IR1"C.-B?A!:Z76MZ-;76 +MIZQ!@1.?<**Y(\USF&&N<2`,0%'J=J&`.9*62XD.^J!9($../E)PSD'YE,XD +MNDRB+6Z))`)X'"!-B(+A(3THR2<`Y4;?2Z"W[HV^Q@^Z"S>OH5?+\FB:4,AV +M9U'NH-!D$`CW]DAD`';W2DB1/"!'TGA(3J&4P^#M".1Y8](!)C5R@'5#N8([ +MRF$1W[A,^-A)A)L[`9/97L'3`,^J/9.08^>4(])@G$Y"<OQ''N5`4PTQ!^4$ +MD&=7"1<`-MT,Y)_=`33(R[9,'D$]BF<1H&($YRA82XG`[!!('29&%/\`RBQI +M8\E_(55N'0I&D<2(SW0'4\P[Q'NA=ZFSR/U3%W])P=\H*C@#(&>Z*<D[G<]^ +M4GET9,'ND'-)!,@'E+C!D($W\@@DGNG]4G'/*;:8&.Y0.X02$EK<<)-/IF<C +M"%I(<8)!/"(9B.40]$_TPG^1,80L=)V2<1,D2500D$@P!RC`_E[0%&'%QDHV +MN.?[*`M;M&((_9`7&#Z?NC:^&;Y/":H6^6#MG:=D`L).YB?>$U,AI)+)]I0N +M($[3[IV#4'`D-Q(0,-\B/E.2-0Y[H6D'?CB40(B/LB[."7&(`^2CDSG([(#& +M'$Q"9CFAWM^J"0D"=+O_`,(2:0?S8'<(7?D(9/=.TC>4!'_F?&P3M<"P`M)^ +M2A:2?Z))^J<'.PCF4!O@Q`C&TIP&C+2<H:L0#&^$I`P=O9`9?-4FJ3`Q(3L( +M$P#"C`WU$8[J0;XS/!0('21&_=&'M,G`GOR@I-+\0,]\(@2<@"0@8M:9,D@" +M)".A3>\:PUQCF$``@G`)[C"ELW%E20.,%`U>)(,[<)FZ/,!R8X2;-2H07'/) +M35&C9@R-R"LJ:Z?JJ2TQ.P*9CR6^H;8A`6%P&H93M(@B2/A4&7NSI,81:VBD +MT'NA$@#!":,:AN@DID/J1$QMA7':12TM>2!C3W5>T8&F7#<9A2G2'&-H6:HF +M$MRTQIY&(2<YIV,F<GNAV;VG8%,[4!L0$"+V!N9DA/3=@'5*9^EK1DAW/`0T +M8TDR@DU`8!W0X)TR@^1CY10!ZCD%`TF"3$;(>Y(&??=/Z=XD#W3TV4RQQ=4T +MXD")DJ@=,TX'U!&4G%L@D$GB.4G$EH``B(D(20!I`@2@<N;!&P[90MR<'ZG= +M"Z)`F)Y2>R'8F3]95#U`"TZG#V0,PZ8$?*0_*3J.-P4.H3D0!PF@3F1(D%!` +M#?2_=$]K1SO[H"V`3[\(AA^724AEN(":)$G.>4Q`!+I]D(9X$21N8^5(:C?X +M=M(TV`M.K5SMRH@T22YQ([RHZKPY\3LJ<&J$D[8&<8E1P-8WA&]L1O\`"$M$ +MG]B@*#I/;N$AW.2D[)B?\DQ:6MW0)L3!E+2`X<#;*;=VK:$>F6R3\(A%I`R) +M!0./H)X]RG.N8:Z!V"`G_J'Q*+L[20"6N`'*4-+IG;@SE+3ODD']$T@;$_=$ +M2!KB3!)PBI2'1D3P2@IO(;@[CDJ1FJ<F>RHO4R`P`MV]T6IO^']4%/5H$3]D +M_J[G[(BS?.:1O/Q_=4*S@XR($*W7+M6,?14;C\Y&DGY5JHWU&%NJ(^%$7-#I +MR0.$YVWPAR';@1P0L[#.=,D$IAM,I.P/5L4FB1#<HA\%LM.1WY2IN#!,"8Y` +M,(>^2(14?+TDO#@Z,0-S[H!D$B3]CA/Z9P))XF4C`.WW3"`[9OP-T!:O5I.( +M1#,9Y0-`@D'(XSE/I$3O&=T$D9R0,IJD<#`[(7B!`B$=(,\LN/YAPJ'I!U2J +M*8DEV!">H?5$Q'=0OB=C\IV%LB0?NH%J&`,?7=$7-F2?JHW?G@`QS"?1J@9D +MJB1L.$EWZ%,XAQP)]X0-P-!DQ[E(@3B4#D09!QP$[BTO_P`/LHR`'01(&Y[) +M`-@@GX"@,1M(*>`!.('9,`(B-]H2>WU3)^$BCH,+@ZH&ZVL$NCA"!)W.=D`D +M'00[W1:?^HY]T00T[$B?E+3F9$]D).ET.]/8IC_TNYG=4.W!CT@C8%%B9G[% +M`X-<R6N.N=CLG#@&`-&D]QRBE`'YMW?JFP!,@_5`!)U%TPGR9$X*"0P693-@ +M?Z(!,Q)E2TFZJ;R)EL&%-!\0`#)[)$2-OL@,GU`PDP&),`GGLB)6Z2,3CE)C +M!/K='O,J*($@X.^5(&.))B1SA-B2"!I$Y358!R(E#)`.R%[P70W[=D4G#TG& +M90AI&3F4G>QWW":(W(*(-K!L-SW3U"<9P$-*9!=.$_J@DG!]]U03HTB1*%D! +MV3RA;/<3\IVM($3R@-S9'SC*?3&<GV0L<>2=T\S)XVC=`8$"03GW1`B3.2>5 +M%Z_\7UE$9`$\\I%&X"(+H[(@V!+=O9!,M&04B3.`?NH#C5MN4[!G<?"$O=$# +MA%ZM.K<JFSN:22<>T)P(;.#W]D`+RB),[[Y]BH!((!$<;RI`T#^J9$!"T@5` +M73],HF/=,Y!^5*IV"&^P1.!@:1]45NUU6HUC07%YC9=5XA\,ML^@T+NWU.>/ +M^;G8(;<B\1ZHDE`]K33&"'3O*L7`)I``[;X4,$#)P@4X$[IZ;7.J0`F)$!HG +MZE3V[?+]7/)02.>Z-,$1V3=I](*4R[5!^H2?CC(S,+*E$.YQ\IW`SB<[RDZH +M=S$H"\:).)[H",QB8W[)I+1)Y[(=8/!TQPG-22TP2`J%F#W"9@)9'*1=+>\E +M(&,\(!J-,B3CVV3M\H:PXEQ/Y<PA+FEI$X/ZI:R0#P/9`M3G-+-6V8"$F3I) +M4C'28'I("C>\-&"#)[H`@DZM0'UW4FC^5)W/*`N;,@Q.QA25GD4FM+@0-E1$ +MT%(^HYA,YS8$G[%#4>W5G,>Z`J0+WP2T?*!P+1GGA"7Q//NB#M3I=$#N@%TD +MQ!RG:USCI`)+N(3!X)[?&ZBJU@`()U`]U4*N2'Z9/V43_>$^H&3,<E,2#@DY +M0.<F(,IR0&['*#4.47HF0!'MRJA-<2(X*1,E,7``CGLEJR<J!Y($<(0X@1Q\ +MI@8D).TM;W11&/H4],M#7`_1`(<S!QV2;!WF408(SC(0F1.(GE*!,ZM^$8-$ +M4OR&9R^2@%D-/$?*FI.=,PK_`(;O^GV;WU+KIS;MQ$4W>8YI8?V(^BJA[#<$ +MAH:'&8_LJBRS\H_-]"G^CONI*8.@:=D\.[JFCU]&K))!6=<?.RM7;W!SLM!& +M?=4:CP!)Q&.RS5#4<<`"04#G21.4GO<&P,#V35`=>D#;.>R(:);)D92TYAQ( +MA!K]&DXGE.^IZ]1.Z!R!,.)PF<9,R!\IB[N)^J)Q@B0W81D($^7.DD.)RF;^ +M:)@\04P))P!/$[):])!/?=%'`WGZ)W21Q'8*.G.HD;GNB:^#B`"$B#@D`0/E +M)K3&'8Y0M?`!$%*F_.VRI$KJ!IL8\/:0\2,R1F,J-ATY_1,2.3GY3/?+G.TY +M*BG`DSRI,MIZ=,3O[J/5&",I.>"W5'^B"322V<9V*'!=`R1^J8&<B&CV2+A# +M06&>2/ZD0[V@B&#$X3P]N)`U;CN@U0Z2)^4J;QKEPD?/*`J8$8W3G.^.R&1C +MD#9,7("JZ]6EV^V4I]6T=RH^W/'RGUB`!L<(I'7$YSRG+8XF,X*'40P`#,I% +M[33].LCW0&?R`G?A.]L8&2>R%C@21$QV3Z@1IB/D[(&>),SO[I>Q$)B]H<1. +MV)28<@%THAR8;M\J2A7?1:XL.7")W46IH:0D'M+<`Y0&T^H%PD'=&`"2"0!\ +MH&N!SF2,E.UX+>/HBBI-8714<=/[(]88``R)P8*B#MO5]$S'%I)X/?\`[()G +M?E(#<_J@(AA`S[HO^:XBF)`R8[=U%JP1(A`[LNVVX3M:#]DVK.0!'*9KP'D[ +M(@H),`E.[:(@[Y3,(U9C&-)2>9S@1P4X4F3I):)C,)__`,4)VN&DQPA9$:9B +M>$T'`R2'8^$;&SZ9^J'>=(,?ME%OVA`U,,#<C?ORIJ=,:H,=P%'`<^1D=R-E +M*P@-G>4`09+@G>`3@$?(1@M!)(WY"3CB8&>4#.C@P1S")T!QS(3-=C2(SR43 +ML.:"=N`B!,1)<E'JD1!/T1:(/K*38+ITF!^B+#,<!M@\93LT3)=D;!$Q[F&6 +MN(/',J%I&F!N?E1IJ^%7@=<H/<]K!3>"3JA>B^);RA4Z'>U650PD"F`>?9>5 +M,:0[21!"MUJ]>G;MM:CB&-,D'!!*K-G*.H3Y<;25!+M1G96*CFU&@-!$;F=U +M#6;MF)X470:;"]_J,0%9!ETM<"/=10&MW$A'Z2"1.,PI06HM9I+M^YPDYVI" +M-(W)SPDV)&!CLHIH<3))_P`DY=-/1((!^J9^_?5]4[9PUS`9._=4`TP,#;A* +M1K./H$;O*#X9VV/=`"0\@8/)0(@@0D-3H!2V.9(F/A!L3R$!8+#$2-\;H9(S +MJR.`E`TQ.^Z1;Z?3QA`F/(!=@\Y3$MEWOLF([;'VW0D@$1N3,!4.T@C+FYX3 +MO=#(:Z1V0.$,G8<ISH`B2>WL$`Y_J'RFT@&>QV2<3'YLM3``3!^$#$$3$)BZ +M&C$\)-$P(.4#W9[J@G8+CO/"K/WVS\J0R#O]"FT:<@C=$!$X''*3\")`"+2! +M_6)[[(3ZAGO"!,@1Z8)[A(F#@#(^4Y$@-#I*1WF2/:4`N/K&!/LGT`.$I.)! +M`;N>$Y;@B9A$[",_W3$>D0#*(&"?9,V3OP@30`22#^R0`DX3_P!)DI$``.(P +M?;*='!I^<^Z><P)^I3:8.K_91.R9:,#.4":[,B1*GHRYP)!+?E!1`#@:@+AR +M&F%+0:21)`GVV6D:%N'&BTAKG#O*/2__`.-WW3TZ)+!,CZE/Y/N?N5>$X5+W +M0U\`&!LXB/T5&IVP<[;<J]>Z=;HG'?95:H<6N&J`-_4LU5>J6R=(`GA`UPU3 +MSP0C<,'T_=!I,@$1/"BE-,$:@2W8B>4PC2X:=_N$B#IEP&<PA:(+N/E1"=#6 +M:MP.$HT[Y]T0$&/NF;)!Q'P531_26@#9-@.U$Q[!.#)R,PA=F,GMOM_N4#\2 +M`#/"+2W48!RDUN9F<[SNG9^4`JA3+6M+6C3LAV<=Q"*H/5#<M]\(1EIWX4!& +M)&F(.Z9X:#N93@&,!$]K#&)PAI&V0?T@IS);,SRAW=O`E'`#9VT^Z!-C2,`# +MW0L#6N]61S[HR"!O^9"\^H``GZH$/RR8R=DOVC"+27F2Z"A].@"<E`XV`!W[ +MI$RR!$!/R0"/=,\0W,YY0`"9'Z)G#(AWM\IR,.)&>/9(#U`SL4#M#G"29(]\ +MH2(@29/8HV-BGJ.T[IG#TG=`-,0W&?:43@Z"1J,')3.PPC^KY39`]C@^Z!P6 +MP<;^Z;MW[IS,$AWU*0F2<!`V8G`A.W$D1E.(CY2<X&)@1&R!Q,D.(QE.);C8 +M'!GA"UL9))X1G\QB806ZUG:MZ+1O67M-]>H]S7VP:060<'WD*FP;C'R1*.LW +M)#H!&9!0-(:XG3(CN@)T$0/J!RBTC6886G_#RHX!_-()W2)@S/\`F$!O>3F( +MDS`$(#(/'RG:9.2?<)%OTR@1W_1$"X/:0)0T\D_NB+=9@`YW0+(G5B0G/YRX +M#XW3D:J<$NG?;W2U$$S!&^/KR@31+-0(D',82$:-I,X"=K26''Z[IP(=!=C; +M<_Y(IQ/L9C*)C9:!)SPE,8TS/;9/2:X#L9F5=(3@X``#'"-S8.7<*32UU*)R +M.R'2';MF,RHIG4R,$1&^=D_I`&,C*DIM+O:<H7:FNVV32&(UAA=.>4=4`50U +MC1,3/=,,.D`X_J*>OZB=R1G]%+RL5WODZ1W&,B$X<YIP9U[R=T[V&#J.V,(' +M-B()E72K%!Q:&N:8TYG?,JQ>75>_O*EY=NFI4RX@``G[*I1IR#@>YE2-_P"8 +M""94T@2[33,`R!A/2.LZS@#9-<5'U:HF2[8'X&%)IAH:(]/92KHC(VF>X128 +M$GU>R%V'`<\II.DP"H$]TOB?5VV2<9&J3'9-!+06DB3ND`YQ)B>#[JD+5!!^ +MIRDQVH@.<1[IIC9N/W2&",`DG<H:,20^03.^2F<0(#9^4X):`Z9B2<80@<DH +ML$YP#1!SRD#G\T=D,``:O@2?9)\AL''8]T$]Y1J4"P/+':FBH-+@<'/W4#7D +MR282<6C`,%VW*$D-)@&)'/*0.7G43P/9#K<1,C)W'*;?;[IL#DXW5#Z\:=1S +MW3/)U#)CL=@F$N<&EPR([H2TAK@?J@(%T8=]$Y>7-`D1*3,?F<)2):_!@>RJ +M&&,Q@;J#S`YP=ICV5BXKTS0TM;\E5?1,D'XE('J/$Q(@\!(U(;&H#ZIBT`3] +M0AC$%TJAR\E\"#'.R;4!L,X3`AN(XR4(C)@[J`G.)&`W`^$['2\@C(&(*9I@ +M3!/RG8UFF9W1`EV9D8V2EQ=O*8MGMVW3Y$@1/[H'UX2:X3!/W3``M^".4VSA +MJ]0]T!DB3`QLF>['.>R;TZ@0=^4PWD@F>`$#ZL1!@29[(FN(//P90$3,@0>" +MEIT^D9CD(B4.'((CWW4U")]IG95F07'2I:8`]6Y$*PZ:U!X=1:9C'9'J_P"K +M]%%;,8Z@USG"2I/*I_X@IJ)Q^%>\@2,3[\*G4]3L`EQ=/*O7H&HXP.9W56A7 +M=;W(JM]4;`JU52K&DP#W`0/!TC(R.>%(]TDDF0=T!,NF?NH!.^<@X3<;P2G& +M"#''=.W2=6K&,(&+L'`SW2&_"8DN@0!'LF9@QD#V0.#B0V9X1,:PYTY/NASP +M"DW?)_1!)`!@SGF4U,G3S]$1!+@&`D^PDH6983G"J'):3GYW2DS\(=68(&$1 +MP=OD%%*8$9R>$[SO'9,TPX#VYY0D^QR@7],$E/3U!TZL^R8`:9RDT9,X]T03 +MR"P;GC!W34R2X8^Z1([8Y2#@#Z.$4XG9VR0<3)SE)I!$$`9V'"0/](D"5`[7 +M'5+C!'LE4<7.`WX3&/,+@/NE4@B6SODH!;D3J/.R<[S((Y2&G5D3/,I#\\EV +M_(0+48F1":>=H/=.XX/J@H9&0#]^4#D[N)D\IB&D>K<G$#"$D$#;4B=+J(]4 +M0<!`G:M\"4AG,#'*%ID;\(VCTZ?N@8.`YCLBWR(E,6@-[IP"0`#GL$#M/JP? +MHB+BT1CV0AL-D;!*,R1\90'J!!).3ND"-67`-Y($H<EI$0$JA:'P!I;VF4$E +M4L:]S*1+F#\KR()'PHBWTZL0A!!/:/='Z=1AVH#F$#`RZ=S[(R=3VAVW.5&" +M-1D[(J=33K#`(<()*`B8,`9"=A@!TG[H9D?YI.R`$$K"?*F/9)KA,P$$^C3/ +M.#E$T`28P,*@Z>\3G[),P@88$"3^RD8)]_K*`F#\HTJ:@TEQ#),]LRE86]6X +MJM928YQ=@87J/X=?A_YY9<WU.2=@6[)&<L_5Q'2^@WE[6:VC;N(//^PNQM/P +MZJFS];8=`V^5[!TGPO:VM`-IT6-@1`"U&=+9Y<:`I<Y.G*Y99/G6^\$7MLXM +M;2+O=/TWP'U"X`=4HD-'?NOHJGT&E4?E@*OV_0*#:8_EA3WA[9/F^\\`WS&% +MS:9)VC"I6O@7JE1QFB6^T[+ZAJ]!HZ/RC[*J[H%!ACRQE/>+,LX\!L_PUJNM +M]=1V>T#O\KG_`!7X3J=(`<8=G;_9]U]']4MF6EN8;@+R[Q9:U>J=<IT?+AC3 +M^8+/OOX8V[WMYYT_PU=W-EY[:1B"29QNL.^M7VU=S'M(B0%](])Z)2I=)#?+ +M`;IB(7E/XM]&IVMX:E,0#N`KN6-8YW;SZBW2#G!*,["#./LB<'#,R)Y4=36U +MP(R#NHZA<[47$G/)2],2TP(2(Q+DS<M```[*J>F?3VSLDT""9,'L4+02=.T= +MDX.D$9^2@:63J:=^)3/#0,'/'LF<(,`3'ND[6!$R`-]T41_(,XA,T`MXP/[I +M9&(!`0C83"H<Y$'Z)$-!`)GVG`2>.8$'CLE3INU"/LIMJ8VG:W40,8F$VG!/ +M;:5.VVJ.W!RI_P"#TB"TR>W98]X[3]/E5(0[D8'"8@-(@Y[=LJ^RS#:8)$_! +MW41LW;_V5F<,OTV<4F:-0SGLB>9=C,;'LC?;5&Y:PP.0=_=1.I.#B-,'?LM2 +MQQN&4-Z`T$S*CJN)>&C')37))=C!43B0)'9:C(G!L8@@\(2T`P<1W3-,Y<,> +MQ2<Z`<[X506ML@$`0/H@IMR`?V0@SG(5[I5A5O*=>HQ]%C:-,N.MX;/L)W*@ +MID8D&$.!DC/:4[QB3./="#O\;2G_`%#@1.?OA$T&1/*!L3`XW`*<R&X_?"*$ +M@D$=_NEB),]DP(U29B$1AS2[,#W1#``D@\)VC&`@!DD*6UKU+>X;6HF',Y(! +M_0_*&T9;G&VR+&C^W=-J).)!/9-+L$\]R@?2"Z&R`=I2:1ORFGN8^B=OYL"> +M4!TIF6_*E:,R-Q^JB;F"7P/A2TR"<2"#NK$:-!O\H8_4H]/M^I0VU1IH-+G- +MGW"/73_QM^RNS:.[@SJ='SF51KENJ`(^JNWS0'&#,?,*C5B-QV2FD3C!P/NA +M<0'3(1.D849(Y60GYV"8@!^EY"9GYM]CLGJM(JG5AWNBFEL@!(#.0CI/%-^L +ML94'(=,(6[B-CW0(!NN#D)-_-$8&Z;!?,?5$&P/<Y]D06H:P`Z('=(G,QN4) +M(VREZ1!C94.8)G^Z(!I.K5D[H6@'(3@%K0`,*!G$:O44B!$SONAJ`.=$A(M: +MP01QO*H(8R4XTQM/U3AK74\[\A,2'1/`C`"&BALR"1&92(R8_P`D/]$$_HG: +MV&]OE`4;;DI1G?U!"<`:1$_5,P'.,J`OZN\)$M+3DI?TEO$]T,$[H";$3.X3 +MC?<;(3\Q]4MAC[RJ=$6P2-0W^Z%PTG<=MD3@0W>.Y*`[$%Q^94-$./5&=TY] +M6"YL<Y2HZ)/F:M,?TF,IFQH@$S\IM3@\DY'9&V`)P2HHQV/>43>8)RB#P7', +M`I,,`_XB<&4V(@G*$>DY!)E!(UKC@[)SO&J!W(0M#B<S":3QF-I5!-:[:-^R +M8[P8,)A)G@A(MG<[<HIW-!P0DT;`1!00`1,_*-HDF'8^Z&R>,Z0-]Y3M;!$P +MA=(P(3`N/930D='E9F>R3!Z)(0N)P)Y1ET",#LJ'@AHC:.Z=F6\Y]T+"Z2.% +M)1:[2=O9$%3:&-V$GDJS86M6XJMI,:7.<<>ZKTR3Z0)/<3*]#_"+PU4O+IMW +M49+`9`(/^2,Y9>LVZW\*_`=O2M67-S3#ZKA.1M^B]8Z+T^G;L#13`^%'X7Z> +M*5!C-,8[+H*-L)S"YY9;<9-\T-.V!`X/LK5&U!&6Y5FVH>D<*W3I:6KFZ2*= +MO;!KXC!5YM$%L$;?JCI4I,E6649XW4VU%-U$`:0%!7MQH/9:IH]A@J&K2$?L +MAIS'4^GBLTC.?9<S6\/4OXT/#?RG>%Z+7MY9$96==V6=7]E=LW%S->W%.V@! +M>7?BY8&O:/>`1&Y"]BZE2#&$'8;KS+\5*M)G3*PQLI+I9'@]]3%.I$[<*M5' +MI;DS[*U?5'/JN(V!RJ[W=FQV7:.J"7:I:<)Y,1@E.3#C.4.2=DL4XYVQ@X2@ +M%N9)]MD+I`PW"0=N8,G$(0Q(B-N\),#G#TR>PWE6;*SK5ZA#*9"V^G]'#-+J +MH),<KGY/+CCV]?Z?]'GYNIPPJ5K7J$0U7*72:P$.<#';9=*VVI,8T-:,(W4Q +M@:<+RY?J;>GU?'_Y>,_LYUG23H]69[*Q;],8QTP#P!V6Z*=,4<MR=D+:3=1V +M6+YK7JP_1>/'J,T68G#1",6L[;K1TM),`)F@%T8F%CWKK^S)\9K[2&@C'OW0 +M&W@"1[[\K7T^DN@`*&JP.PWZ*S-,O#BQZMOI=(;+NTJI6L0]Q!$'B.5N5:32 +M)(4%1AG`77'-YL_T\O<<]<=-)+LQ*IUNG5&9'J75>6W4<`_51.H!P@M77'S7 +MZ\?D_0XWF.3-N]H/I46DY#1F5TEQ;,)TN;LJ-S:-)D-A=\?)*\/D_27'IC:3 +MO@\PCHO<UXTG'(G=6*UK!D;J$L+"?3D"#(727;RW"X]ANG:ZAT1!V#0H7ZHS +MN.4;AR1`[$IMR&@B!WX59,R0(B$JC3H!@P=O=$X`#?[%,2"`V8[1B%$T$;&. +M$+7$"!,?LI'L+'%A,GF#,H'QJW0#,&`#)1&"/3(^J=I9`,F1M"$`$R#E`[3! +M@B2@$]RI-W9D]T,2^3A`GOU&3GW2:[)U`3\)/P9DIZ?Y/S$]C.R`Z8!$@?JI +MZ,3"B:`UL$`2I*>F>%J(T:+Z8I`&E/\`^)%YE/\`^'_^=/1T>4/[(_0FDVCN +MR&/CN=E1KM+GX`#5=O<./:?LJ=?6`!CVREYK2*N"&Y:-/=0`1O!5BYK&I3:S +M2T>6W3@;_*KDSF!\+*[`\`"<]R$CDYA.7&#(&4P=),`(A^Y`S^Z1)!G0/A,= +M]Q\)&#C5&$#P#Z2V9X",`!LM)'_2=T#7%K@1N<R41<XF9SQ*!C.F(,_"<-); +M._(2#AF1/]DYB=A@<(A-(TSRD6D`&##ML)R=+<_IRDYSB!,EHVRJI.#1I.#( +MRFCU2X9X[)$MU#&W"=S@1!;[94`2)&"B;@Q&1R2CMWTZ-4.=3#\'!)$'O]$S +MSK)+B23V0`1F0#_FB:8;MGB4TM!RG=AOI=/?*H9QSDDG=,/4,XSR44EID8CN +MFJ/UO+XR=XP$#[@;F#'T0N#0?E.UPTG)U<)G$8).5.@PTQ/Z)R<8.#PFF`3* +M?TDS.$#/`QZOHA/IR8^Z,D1!^Z9SN`90"T[%I_5(CG4$<&20<\?"0'HG(A`! +MCO/N$1+9].P3-!,G)^B,$;($((D&<;%-I([81,AN9G.R<]S'N@'$#)2:6@GD +M)CM&"=Y2TS)]\%-!.:0V3LG;H(]3@R!RF</1._&H)R&@X/V"`>#,2B;!SB`/ +MNF8-6J8QF$YTGL([H%)B"A8)SC")FF9)D>R1&"-`^Z!FZ2!,(V#!C9`S)C`" +MDIZ<D!`J>)&H`*:@T:B'\;94+&@G8#WV5FDT;8'U07NAV#[J]ITJ8U&HZ.Z^ +MCOPPZ"VRZ328&@$-$XB5X_\`@OTT777FU32U"G]>R^DO#EJVG;LP-EC*Z<L^ +M;IJ]+M]+0TC;W6@RB0Z>!W0VS0T",?"O-8'-Y*YTD*W;F8PK0IEPD;)K.E(R +MKK&%K0UH$$9*EK2O18(^%<HTY;@<(64X*LTQZ/[J-:1!DQ*"I1!G4"K(:/CV +M3$`^R&F?5I`">W"IW5'!ANZUJS`!)^%4N*;2,$PAIRW7*.JF6E>7?B%TFI>T +MJE!LC5B3E>S=3H-=3,#9>=>-*#VO<ZEN#V4MXX23EXZS\-R\ZGW&_LJ/B?P$ +M+&U%6WJ%[HV*ZSJMWX@H5GOI4'>4WDA8W4^MUG4]%VUTQDA<9Y?)/CO/'OJO +M-Z]I5H.TU&$9@X4-1@$P?ONO0NFVEEUB62))W6%XR\+W/3'&K2!=3<=X.%Z, +M?-+=4]+O3EG#T0>5+:TV.J,&K$[!.:,#U'`XA36+:0K!I#H_ISRM7+AZ,/!K +M*>SI^AVM(46QDE:1MVZ9)CYV6?TJHUE-K08+1F<J[4NB[!(@]E\O/?L_5^&8 +MS"2#K:1#0&^G$@;J!\<?HC+@3OOOVA`/S;Q!VE9D=./@BW@N.`AT@$S@QW1S +MQJ0%PU$`[JZ2TU(@$SOV3XU;X0GY3L.8_NK(S:(&<$X0`28F?JCI^IV`#/NI +M&-(,N(CNAPKU&X.3*K/;+B3^ZON#"X2H:M,3(:?E:QK&6*F*8`)X*%U,:O2, +MJT6:A(S\H"P`8'ZK<KE<5%],&2,=U!6IM..ZT7MEN,2H33!DQ,+4R<<O&RJE +ML)G2/B54NK=K3J#9G"V31+@8;!*KU:+7&'M,QN,+MCF\OD_3RL"M99]+8',E +M4Z]%S,1)/*Z!U,ZC#3'=05*#"TRPN]EVGD>#R?I9\8);D$@X]DM.T_<K3JVK +M"8S`56M;N!,"0NLRV\>?BN*N0-+3DGDJ,@&9;]U+5:1(((`P(49;%,N&\K3E +MK0?2#@(FMD3^Q0AI,G^Z)K=HDQP@0`/TX2.()!`*6-X..4BW$Y^VR`<$R?OE +M'#=>MS0?;9#_`%R<_=2>HC),#[HA4V@O`!&3B2K+:3J54L?^8;P0?V5=@+7X +M&_<*9H((F9[+2::-$GRADHI/<IJ!FBTYVY1K)PCO8#03$DP1'"IO+7#3'&X* +MNWAET-[[]U1J@9S@SRK5TKN.#&^V2FU`,DP>$50P)(!08#)].4`!P:9W2,'( +M@?"1;!QM"1T[&8X4"F>('LD73N,\)$2<"$@UL[[=@AH[@W!&4\@`2AF,-$=D +M0((/I*!1/'PGJ`#&_NAV`(^ONB@3,Q`RD*6F(S[%,(C!V1`@$1&4(.8T[?J@ +M)P&#P3PDZ"9@;X3$0X#(3;-R1WA`W<GOM"DHEC6G6P/!$"9$'OA"=)<3D3RD +M6>G5M&=^(0(PYT`&#R2F`@S(ENV)3P,D&1$(20?2#))A`[LM.WP.4M+3`#ON +MD/T30"[&)0.1,YVRFB&#YP$@")$_F2C3SE#1')P/CLG@;;)FQL#LG9&,F!C? +M=`G&#!,@]D,>WU3Z(&K,3"8?E(!S*!P($Y^=TX`(._<Y0G4($F-\I`$`'7(] +MR@=N''2GTX!.24IWGD=TL:B03E`^F'1V]TSH+AJP.4A&K#DQ'O\`=`FALP#C +MNC/I(@QVA1P6SZH@I\H$<@R[Z]TV8+2222D8!B/HGAH;((<>QP`@;40R`1ZA +MF0EN`(R,$IB"!NB:-I/&R!B"#N91-P"<D)1!C]$,'43DRBK8J6W_``KRO()N +M/,U"J''#8_+'SR@#G"WT;MU3]5".YW^45/5,;3V4T@F`AVX([>ZN6=)U6JUC +M#)<8WA4QJ#N-UT/@6W;5Z_:-J:2USQ/;<*I7M7X)>'/X/IE*K48-=4!Q/.P] +ME[#TVDQE!HD;!<GX2ITZ-A2T@"`/V746=4'2&F5QSRY<<8U:#"2(,1NM&UI2 +M`9,'=4^FM$!QC9:UM3!`@X66XEITVC:?96*;?Y1)Q'"&G3B".%(3(`;V4K41 +M'+H!*FHR8$Y]T-.D7.!*LTF!A$Y[*:5&01$HFM&G5^ZE=3!$\)FLTM@YE%0U +M&F/95+FG(GLK]8D^F8,*A>`G`A+1F7X]!,?*Y?JMHRO6ES!`.5T=_4+9!&.Z +MQ+BH"7$B(&%C*FF/UNWL'VIM/+:`X:0LNX_":UZ_T\MH-(J.&".Z@N:[W^)M +M)R`?[KU#\,NMT+6[;0K.&1&5Y/W+A=UWF&^GR?XZ\+=;_#SQ2VUNVO;2<[4U +MYF")_P!%V'2[=OB7PT0&@E[(F)S"]6_\9%C8=:\(_P`51:UU>V]0<W>,KRK\ +M`:NJU?:U#,9S\#"WGG,M91N;T\?\7]/N.D=<K65=NG0XP8W$[K*MWO-0.&8] +MEZG_`.(GI/\`_<MO6IL'\RG!('N5QW3^FM92:"UTC,%>F>7&8O3X?#Y//=AZ +M?4K-HB08]E>I:B(_0\*:VM<#TG'SA7&VA#@"V9]EY,LY:^]XO'<<=519J),Y +M/"-I>(EH6M;]-J.:!Y#B79P%J],\*W-=H?HT@;:@LSGIK/R8X3=KE1KW@Y2# +M:T?E.>5WMGX.`<#6=,C(6W;>%K%E-H-%KL025VQ\-KP^7_T?'A>.7DP9<$C0 +MUP=QA6Z'2NHU73Y+W%QDSRO6*/ARRI^H4F`]EHVUE;,9'EB`NV/@GVO'Y/\` +MUO\`\QY78^&.IU&RYND^ZL,\)W^DAQ:#[+U&E;T22)$=D?ETI(C$+7[.#SW_ +M`-3S?'EG_E&]TE^H'YW0N\)7;F>H@$GY7J-S3IM&1QM*K-8P.VW[J_LX)_\` +M4\SR^X\*7S#Z:<@'$*"MX:OV"32,[X7K;J3'#\L(76M$M]7V3]C%9_ZOE^O% +M;SI=W1,&@<;JE5H.#9#")]E[7==.MZH(-,&5F77A^S>Z/*;]E+X)\KMC_P"K +M_P#J/'GM(RX`905*(\LN*]4OO"-BYN*<$]ES_6/"#X)MS_\`A_V%F^'+X[X_ +M^CXLN+PX"XI2,CN5"6MC@SA=+?\`AJ^I./\`+)![2L6YLJM#4'TG-+=Y!_R4 +M]<HZ_N89\RLNK3(<9`(G_94+V!S",Z09VW5RX$R"9C8*.F*8.W$K<KAGC*SZ +MELTTY,0J-Q0(>0&Q[+<K,!(`[[J"K2!F``%N9O-Y/!*PJP+7Z2/RA,UWM"TK +MRW#Q``(6?6IAE2(D3DE=L<MO%Y/'<48@R<X1;'<QR$5%K#J#Z@;,^J#PA<`# +M`(`[K3D$:2,?:=U+2<`-R%&#)U'/8(@&F26^V#$%5!-<"[.2IJ)$ZR"H`&AH +M..>5-0@$`^^%4:M`32:0#$(M+O\`"5!39%,>MR+1_P!;E4W"OC,@M.,22>ZI +M5#L#B`K=WO+HDA4J@:79'ZK-:1O.O/W05`2X"!`'Z(X(,EP@CNHWY(P84.@N +M@'WW3$F(Y3R0[OREJ:701`Y0"Z0\&1!Q*41#6QMV3.,NW.F4@<9&=D#_`&WV +M*D86B3@8Q$84<B(V")D;DY0*,X_[(GY=)B-I":9($#Z;)YR1O"(?!`@2`>Z9 +MPTD2/LG!YS&WPD\!I<6@ELX*<*%HB=]L>Z?!+2XR(C'"9I/`YW31!COE`1]+ +M8WD\X2<"1Q`.R$EI@`00<E.8\LG(C]4"<T2#L/;)A*)',SOLF)$B),^R0(B? +MR^R!#`F3V3.$.)S]4Y,C`3#!GWD\H''S@#;NG<6N@1D[(2<D@C=,XP`<24"A +MP+FDG)@A24VDX+@,')/*!I!;O]43G"=P@3XDC;/="V2T2!ON4Y$@"4P,-Y^? +M9`S7=C(2+A,$[8,I2#J[>Q31Z<9`]T$A@S,8&$FY(`CZ(0!(V$[3.?A%)C?< +M(O18#?HG`+6->Z(?C[(=Q^B=Q,MD^PE$,[5P<#DIH)GDI5!#N/@)-'K$.F$! +M.;I9)<"(G!W48G5O$G8HW3DNV03!11D-T$`@&$@[88QN"DT"&S@E*/1C;LH@ +M00\P=OA&=R!C.)0T\&(W3D'5![JZ#N/!,(V.B21GN$+0TF"G.V=D!TX)U#E; +MGA&N+?KEO6C#'`[_``L*1O'T6ATUPIUF/R8,YPI87E]0>$KYMQTN@YCL.`./ +M@+LNBTW5-,X$;]UY5^"5S5O^ET0=F`"3/LO9NA6^BFS&?V7&SEQC7Z;2AH)X +M[+5M@T&.V%2M6P,<]U;HNR,@?59;BU(:TYGZI4A+O;E1.S$!3VPVD*?6DU)H +M&)4C&2-X2:T1Q,(I:,3[?"H<#2()F#RF(G`10#A,[TLD&(10.I>C5&V.RH7[ +MM+'9V"MW-7T?FC'?=9=\^=0=RH.8\27[:3RW(E4NG!UY(:/S<!0>--+:X(=R +MH/#W6:-D]_G/`U#!*\N>?K77'';,\16'\'U`U?ZAF"LZTZQ4M[X.UF0Y:/C? +MK-"ZJZZ+A`9!(^JXVR+ZO4`."9)7&WV:ZKM?%]Z>I^&JE*H20ZGM]%P'X:6M +M>RZQ7-++02/U"[#J=84^D>6#)+8CZ*CX2LC1I5*C6$N>2DWKUC4NG+?B]KO. +MJT61EC>WN5@]'Z#>73FZ:+HVD@KTR[\/_P`=U'^)JTR2T1!"UK#HK+>D`RFU +MH[0N^'AM_L]W_P!#'PX3'"<N(Z1X.>S2^X/P`%NT/"UK3A[J;3\C_1=2VTEA +M):.P3_P[BT""N^/AQG.GES_]'RY_63;]%MFL;I8W`X"M4[)M.G#6A:5M;9DE +M7&6[-.6B1NNDQD>7+S99=USKK5_F3"E%M4$`K;-!NK`1?PX+IC;E:<K:QJMF +MXM,#)0T;,S&X*WFVX.XD0B-NP"=@K-);6&VR.HN.(X4IL<2(@96KY0+@0%.R +MCZ0`?HJCGZE@7G/"B_@M.=,KI'T1,!JBJV[7$@A6)ISC[>IO^BCKVSRXZ9A= +M#Y!DB(X0U;<#>)A!S+J%5C9(.$#608(GE=)5M6.'TX5.I9-+L(;8E1C2[2!^ +MJ@N*`$P-^ZV+NPT9`YW55]!PG5'=-&V'5M&5'9:(&=EG]5Z!95J;@ZBP`C<! +M=$ZFW7@?9!68'$`-SLKTLRL>:]:\#TGS4HXGC_87-=7\)7EHPN:USF^R]IK6 +M\#+1GV52O9TJK-+F@@[@J62]QVQ_4YX_7@%6UK47N\QKA'>5#7T"F8&W=>S= +M?\,6EXPN--K701@;K@O$_@^ZM];Z#"?CLLWP[YCUX?K9>*XQ_J!=V&RJWE(. +M;@;[+4NK*O;^FJTMA4[ILM(VCCNL3<KKGK/';*:`TGV3M<`UX+=3G#!).$SP +M?,Q(0O'^&?HN[YUT%FG6(!$^Z,;0),(8(@9]RB.#Z096D$&QG)_93T`T/@F( +M&R@!AAD%2TCD>J!SA-)PTZ6D4P"[CN44L_Q_J5%3<\,`#G$!/KJ=W*^IN%>; +M%Q<X=O=4ZK6A\R3"MWC1F-]U2JD`ZHRLUI&2!(^JC<8GG^Z-T:/?Y0R`T&#* +M:0!+3S!CE,=,X,]T[FGG,IN<?6"H!D0`""C$%\'O!S"9TMXWY*$9@@GZ(IW` +M`;_*3?I'$)-TDAIU1.1,)V!@>700R<2J@VMP,GV[)%PWD`QLE(V$I.;F"443 +M1C3(E#4WXSPGW.!OB4+L`0B':1_LIY'F#\H'OE`W?:/=.!P<\H=E4TS$G*6) +MTB3!W)0U`9B1&Z<!LS(C_"$#X$C8>R3_`$`01!V*$@%WM[2A($3!440+8DP> +M_P`)-]7'LFW$@@$<).:X$#(,3"(<Q`,)C@R3LD1D28"9X$;P@0@-C5&K>$3= +MI]D.B&CU;IZ8/.?9%.W2'1$F.4Y'9XD\H""`08![RA`)[0/=!+H`HZB]KB3^ +M4`RFQIB!\%#"<?E`+C/(*0.T3`+H]Y1:<8.$&[MOH"GWF(&(D(:2`L-/3$.D +MYE"3G(VRG8)S*C=^;V"`B`8[\IM()X)2.`3,?W3%I:[5)&-R@,8;G890.:"[ +M`]TXUQC>3E-SEKI*`FQHQCB>R>(&#N4)V`[CE.X>GCY"!VCU2,]D[@#.\I@) +M`EQ(`[IVF!/*(36_U"!",@:-6!/"C:7-.F)&$[LY&P/*`P&^V=RM"P8YSF@3 +M/8+.8'<NTQ^JT.CG_P!2UI."X82CZ5_`*Q90Z!0)`EPF3]%Z]8M](`_1>7_@ +MY58WHMLT<,'[!>G=/K#2#.ZY95QQC2HXW^ZN4F8&RIT'<\*U3<(X6'18IM$[ +M^RLT0`/T56F9((^JMTHP9V14S8#"XCZ*"I5/F1SW4I&(!4+J<&82K$U"H8,G +M,IJK_>4-,:<G)2JQ'*""Y<2/U5&\`@DX/"N5G2=\CLJ%T0>0%#3A_'#'AP<) +MB<X7"=>N"2&,)'<SLO5O$5@RO0=.>5YSXDZ.ZD7/:V2"N.?B]NFL<],FI;U/ +MX)I+IGNJ@K,MGR-QE3BI</\`Y.DG^RT_#_ANO>W#7U&G3,Y7*>'*_&O:`Z1; +M7?5*S1I(9O\`*[OH_2&6UJT:1,=E>Z#T2C96[0&B5IOIZ6B&X7HP\4Q8N5K/ +M99TV@@`;3LH*U%C7:8"TVTGF1D(769).)*ZQBLKR#'ID\J7R/3^671@+4IV9 +MQNK%*P<2"6R5H8M&T=@Z4?\`#/#IC!X"Z>\\L'LI!T\NC"I(YW^#($[J6C +M;3(^JZ.GTX!OY0C;TYK0(:$-.=_@L;;H76T#9=2;`%L`2H*G3`'9"&G/?PX: +MV0W"C-/3,#]UT3NG']5!4Z:X@]BJ:8+J<_EYW1A@B#QPM&K8.!(TE!_!G)VQ +ME$9KZ0&PW0NH-+<P!W5^I0]6)P@J48;M'LJC/K46Z?3RJOD>K:%JBF9(C=15 +MJ0DGE!F/HASH.QY*AK6D[#9:3:<.)_=1U</CCE$8%?I_J=$2JS[)[28;(!70 +MUJ37"0`JU1C6B9E7;.F!<4R`0YIVV*HUJ#@[6`8[!=%<V[*GJPJEQ;`43!QV +M*2&W.UVDN`@]U5N*`J>E[9"V:E"23'W52K3@D!NRHX[Q'X9MKT.+&!K_`&Y7 +MGWB?PO<V)<X,);G9>TU6%C28A9E[:T;MQ:^#\J\7MO#RY8=/G6_MWTZQU@@[ +M0JO'8KU[QQX.I50^M;MAR\RZSTRXL:[A49!G'LM7'4W&YY)E6<W!B)([A/,N +MV&G9/4`D3QOW2C.28696M'@@',X[*6W!U`#G*!L!HQ[94M`-<2X"(*J::--\ +M4P"V?<!%K'^`_8(:#:?E-U.@QME'II?X_P!U/:&J"Y]+BT&`<$0J56)G<<1* +MMW3?ZI$\A57B=GP)R>RM`U6T&V;'MJEU5SB',TX`[RH!^;=$\^K!!08=.8(X +M[J!-;_U2.R$M<)D0>Z=I@YPED`D.SW)0"]I(DB?JK+`*-E4(>TOK```;CNJY +M+B28VY3.RV!QPH&J/U2`C,'X28<29^Z?7F0<'NJ#IR':Q,QC.R%P).`#/ +M,H28.TH@2'9.-E#9Z>VYE)XW!;/:$MAV0ZR3/?94/Q[)#3W^H0Y<#`VWA,"# +M+H(*`G279PEI,;[YQE,2!DRBD:9S\!`+MH/Z(28<"6Z@/U1-TCN/=-5<=69A +M-*$'?LB)<,SN(3.(@P)0D@`X/RH"DY,<)'CW*8G,?=(.,Q&P0.)C3LG)(,-. +M=Y".JRFV@VHVL'$[MY"BU:=\]E=!W%SO<C<I,&#,^T'E,'N:)82)WSNGU8D? +MHH&,9$9E,Z!RG+R#IS'N83AP@;#W"!-D-Y^919T%QVVSRF!&Z(N;Y<;'5R@$ +M$`R/T1``N,3!V3M>TM(."$@0?A`+H!@S\H2'''[HR3IC!^0F(@F?M*H;3F2Z +M`4OS2(!]TX(CB1PD`.,=RH%`$22DV(Y/LE@G/T3C3&((F,HAVB"1]$M#MHG2 +M<PFV(`'W3@D2/\7NBGDHBXEA:W8J-Q),$B>(1@P,X]Y0)N/G96^G/+:@)G&% +M4P3),@^ZFH%K8,Q"#Z&_!#K!J=.I4M660-U[3T>L'4FS\[KYE_`GJM*C>>2Y +MP&H[DKZ&Z-=--%I:<'LN.3EU77V]00.)X4VO.)PLBQN6N$3^JTK7U#<P?=9L +M:B_;N)*NT2-,;*C1@*Y2(,2BI2Z,)4W3(*9S03C*8PTS$2BI'1&^.ZBK/$0A +M?&C_`#4);//V2@*ASA0NIR=1W5P4H;LF%'!(4T,R\I![(E<]U?IU.H3S*ZNZ +M8!L#*RZU#SGD?LJECDK+P_1_BB[2")76=*Z73HT!I8!"NVG3PUH<0M&WM]+` +M%I-*3+8Z1B$S[<G@+5\K`'9*I18UA)5TK,%J`)`"E9:@P3"FJUJ5-N7"/E9_ +M4.M6U!I'F-GY6+G(U,;6C3HTPV3IPG#Z+($@#W7*7OBBBUITU6_=8=YXO9KT +MBKGB2N67GDZ=,?%:]&JWM%HPYJB'4:6K\X`7F%UXO#&F:F!S*JT?&]`U-)JM +M!^5SOGKI/"]=;U&F'?F&R1ZBT\[+SFS\34*K`?-!GW5ZVZY3?4TBJ%)Y:U^U +M'=4^IM$Y4M._:\#(*Y&A>^9EKMU8%RYH_,M3R5+XXZS^)I.;^Z<5J+O3@2N7 +MI7;MR25)_%/U#2\_"W/-6?VG2>73?S]$#K)AF`/HL2EU"HSG;E6:/5SR2MSS +M?EB^);K=/;I,#/95:UA(,"`K5/J5-[<D%6:=U1>W,`+I/)*YWQU@/LBV7053 +MN:'(;E=:ZE1>"1"K5NGTG">%N65BXZ<DZWAIE5JM$3!P%TUS8$$@`1*HU;`@ +MDQNJS8Q:E!@;@'OV5"XI>HY,!;=:W<#$3"JU[:0=059L8D!KLY"CN*;7D#A: +M56VD$8^57\HM.1*(RZ]!H!`;"H5:$/)B%NW%$ETZ57N:`TR1*K+G[ND"TF-E +MEUK5S27[+JW6[<N(A4KVW#@0UL2J.9K4V/I$/R2N4\6^%;?J+7/@:O;_`+KO +M+BV:#D2JE:BSZ+4RLZ37U\\>).B5;"Z>W3(G!A8P8`2"(CB%[_XEZ%:7])S0 +MP!W=>7>,?"E6SJN?2G3RKZR\QVQ\F^*Y-K00!.VZFI?F&<IKBD*3S3$R.4=$ +MC!,++HOT0/*$X/RBTCO^J:B!Y0D@(]+?\014%T&C())[*I4(U06P1A7K@`O, +MP>-U4>X$1@-X'*"#3/J@X0.QQ,J4O@$MVV(0.#0!ZM]S*B(R!$@E"8(C@*1[ +MB7N>3E,6^D.<TP=O=!&WW._NGJ=VDM`2[XF$CF)CX4-!!C`._='2@RV(Q,RF +M=$3&W"9F&QGZ\*FC@$?U$GV2<8Q()*4AVY2T@$,@^Y0-)!S'NDT-G'.R*8<9 +M2&F`#@\J&@M`,F4QPX@[*2&[@?5,6^@F!.T*P1N.<9E$T`,F8C=#IAW^PC:& +MQ`P.5%)@`IZI;OM.4!GC3D=D6`US8,[C*3P'8;P%0VG`C'LF+27]D36X#G3G +MDIBX!T@@>Z`8&"4T0=_UW1%H.9)!0N@$_M*@:8WRGUY@?J4MX'*3&M[Q_=#1 +M$G3,QW1%Q&<Q\I@T;;$^Z3`Z8,GX0T3A@8X[ICW('Q*DTAV=1S[IJC0(TN(^ +MJIH(/$@)'8NW]TX``R0$HD&<B>ZAHFX.-N?=.TY'LD1O'";\L'<E4&(.Z;)D +M$(1)!S]TH.H;GW"&CD`9V1..8'VWE,&EQWCY38D0=T!8+0`(*:/3L8Y1.:9R +M1MRF`@YGW(4".!L430]L5`"T;C";?Y&Z1F2V20$31.C5(3.,-`2`=&^Z3PW2 +M,S[*KHPTC(A24JFDZH!`X,J(F#QA.-LF1[%#3;\+=2J=.ZC2K4GQ!V[+Z2_# +MOQ'1O>ETWBL"Z,B>?NOE<&#.K]5U7@OQ;>='J-#3%/V)/]USSQ^Q+CM]8]+Z +MB-7YC]UU/2:XJ-!#XYW7A7@?QG;=0H-+ZH;4Y;,2?NO1/#O7FD@&JT_!7&\, +MZL[>E47M#<E6:-1O*Y.AUIAAKB!*T;?J+7'+@1\J;5T+7MYA!7JR-A[K/H7` +M<?S?53ZQO*JI6^KW"GI4S@`_HH6.;N/NIJ=3L1CE6"4-#1.?A,UYIG5@SB"$ +M+W@'?=0U:K3/L@JW>7$CE*RMM3M1PC#=1WGV5RR8`?=6(L4[66`A05'LIDR1 +MA6ZUS3I4"=0PN"\:^(_X?4VD<[83+.2+CCMTU[U:WH-)-1N/=<OXB\;VU&D6 +M4WR1OE>:]>\0]3JEVESH/RL!]:[N'ES]><%>3/RVN^/CCM.K>.JKI#7&/E<C +MU[Q;?.)<"\@^_P#JH6]+KOD^HS&\JQ0Z`^JPAU,GY"QWVZS4857Q5?UC'K`F +M)@PJUQU#J3G"H*CBWVE;=;PHYM:(.G?'?[+8Z5T6EH%-S,C@C">L=/:3IA]) +M=7O:!;5)SC.ZSO$/2KRE4-6DXP.R[K_@[:%0.:W3_97*G2V5Z&DM!/=)-,^U +MEW'GO1+R^H/%-Y,#NM^EU&XIM\S45?J=":VM(;'O""KTPAT:#'"Q8U[;;'AS +MKS]3653@>ZZZROJ==DM(7GM&P?3:'#$+6Z76K4:@:7'"2V+K;M#5WAREIO?/ +ML%C65Q,:C'NM>@6%HV^JU*FA.JNU0)1M>X['9`Z"TY^B!WY/VRM,Z6F5W-Q) +M@X4S+EXR'&5EE\#>5(VIZ<.A39ILTNIU6`2?U5ZWZN',+7+FJ;R2<IV/(Q*W +M,[&,L)75"]HU!N/?*E#:-5F'#X7)&X<UI+7J2VZI4IF!4)"ZX^9ROA=#=6-/ +MR]0`^RS;FQS$?9%;=8U,`<<*V+RG5;!+9]UWQ\LKCEX[LBT&`9E4;FV>! +M,976NI4ZC<*C=V6#NNDRCE<7*.:0XR,J"Y@;-"W[BQ.LDM69=6NX`"TSID5Y +MF(4+V@L@MB5JOM"&203"IU:0!C9&6'?48.V%0N;.6X"WZX(&P@\JG6AWHB6K +M6T<M<T"'D`'[RLKJW3_XBD]I8#/LNON[7/RJ-S2TMTZ?N%>D[>&>-^@5:-R: +ME*GCF%RX9I?!!@<+WCQ'TUMQ:U&.`)(PO)O%/1JEE<NFG@[0MV;YCKX\_E5* +M#6FDTZ@/NBTM_P`8_5-0I12`!'V1^6>X^RY:CLJ.KUJ;*U*G5=396:&5`#AP +MD'/V_14GP#`D_P":M7@;JF/]54J#B=\[JT`2UI`G_)';5*#!4%>FY^K8M,05 +M&R`PB.VR$.]4Q*E@,TF/>UM$N<7;`[J*."XHW!NJ0"UO!E"8(`.4`#Y^DIL" +M)._;*.(.ES3(.W9,6MWDQ\H:"[V)'PD08TS(Y3@`S&!W"1`+<X*0"R2[)/NB +MDAPW3M#=^R48VGX0`?9R=X#<@G/&Z=S00(&)A._3P#@(!#3IDN$?*>2)D[;) +M@V#G>82!D<_912!@Y.`G=$C.`F($@$004[P)W]T`@2[*=QQ)^GRGB`29^(W3 +M:0002<?1`Q@QI^D).!F>/V3F0()(0N_,1G/'=`+B8B1',)LGW[)W?_<?IV2F +M'#)309H=].R=I=M.#E.=.G=Q[(0V02#LBGU.+B<92$@?(W2S`D1"8S.#QL$! +ML+IQWV3DQ$'9"P@-S)^41`P=39.,<(@9DR7#.8E2-UAD84;0-S@#V3M,#)D` +MH#+O2&D9]E&XSB-S]D;3#?S2#&$X8"T\CN@`.],N'W3M_/+A',IRTR`8&R8, +MW`+23PKHV>'9CG.R$.,SCX"-K8P3OCE!'IG[[J`B1(C8[2G$EI`'ND9D;93& +M9S$H'GU&!`A,XNS`PC:"3$A`X<M."J!U9^46LZHC9!._^:(&<#/N5)`+7'5L +M"3NC)`@X^J%\AP(B-L=D37<P,"/9-`B_@@83^81$8/*9NH@_?=-,CO[`HK3Z +M9U2ZLG--*L\'V)7;>#/Q%NK2X:+EY<WN2??W7F[2Z03@GA2,G@F#NLW"9=KM +M],=#\?6%^&!MP&NC8F%V?1>LFI3:X5<?*^0+2]JT'!U.J]KA/*[3PQ^)'4.G +MT/*J.+QP7%<KX[&;C^'U3:]9VE^?E:_3NK-JL$/E?,O2?Q4\VMIJ@M;R05W_ +M`(8\=V):T^<,C8X7/5G998]OHWI(&=E,V[;OK`(W"\UH>.>G>2)KM/O*+_SI +M;&`VN"1C&?[)N4>B5[T-F'?""A<^>,.,''RN/Z1U5_4BT,G2>2NOZ=3;2I#6 +MMR;9VNL>6'\TC]D]UU"G:T2XN&%5N:K:=-Q)^ZX[Q7U-Y8ZFUT`*97U:DVF\ +M4>,0POITWKC']5=?57>8=S*C?:/NJ^27%:%ET.'MAL^Z\F6[7IQD@;>QIW#- +M6G)Y5BUZ'1G\@QG9;G3^G!M/0=BM.C9L:P`"/E6+_P`<]2Z12`/IB.5<M.FL +M;_\`HP/HM@46@&0(_=)K6MSP4Z)&1<=+80?2"=YA5Z73-+I#1[0%T+FA^^_9 +M'3MVZ.,)VO3FZUI(+7MDA/0H:29&!PN@KV;8,#V*A;9@G9+"5AU+9K7!V,;J +M,VS702``#PMNXLQH=ME56VWKF)E9K49-Q:CRS`_U06-LUY$B2MPV8>'$]E5M +M[44JF<05&H@T.:T@#A:/3ZCO*#3NBI6S2Z2%*VV,^D?"B[2M,C8?=([R%+3I +MP())"*E193:0R0)P.RK*HYA)QO\`LH7/(,*[59I$JI787.V1=&I5#\(C5]4! +M0GTDD[A1O=I((,PIH6WU!I$#=0.<"R1(^%%K+G`26I`D:H)DY24T-]9S8TJ> +MC=O8R0X[\*EL3G!4-2L6OC/PM)9MTEEU8C#C';*U[:_H5J8@B8R9W7$4WDLP +M[Y4E"[J4LASH^5TQ\ECCEXY7;U&4ZK2&@+.N[`#(;NLNSZN6.ASX[Y6O;]1I +M7#1Z@O3CY97GR\5C(N:)8XM((E9EQ;.+R<P5UC[9E:7`A4;RP@#&/E=Y7#+% +MRMU0=I/99E9NA\1GA=1>VS@8`$+,OK?09Y"U&+-,>H/3J+=/UE4KVF'QZ<E: +M-U3<7%NK2!^J@K,I@8=!"LX1SG4K,E\'DRN;\4])IW=B6%@<Z-NR[CJ%'4#I +M[\+*N;4#&_<]U9=7;.GD%3P_58\M;L#W3?\``:W;]5Z?4Z30>\N(R>Z;_@]O +MV"W_`!=?W*\#NZD/APSR=U4JOAT@8XY4U?\`.2,859PAW8>Y7.NVR+H.TB,% +M,7##HC'>0FQ$B$S@`T=SQMA0V,U6;-!@C8H?,TD.8=MI0%H`F9A`(,AT^R"5 +M]8OJE[R2YYDDF24.L3JSGNA@:9!Q/^PE&(S!W0V(5#N`2"93O>#F<GD(/3R= +MT.`"V-C\0AM*7@MD[[$RG;4&PD:0HP`>8]O9+$S.P022,DG!2#O1$X''NHY` +M[YV2:(S.>Z`@0'0-MLIVN9D\;*,@S,XC9-`!DN@'A%'Z9U<#$HG.86CG/*BW +M><E'JW`.3RB;.'-V=(/()V17#6MKEK*S*FQU-F-O<!009,0$HD';Y)1=I:=1 +MC7`U`'CELD<>R'6W0TM.1PHL@`0(&Y3`8,9A#:1SFAN\CO*4LC\V3R@CD8"1 +M&<X@("V$1CV*)IQ!A1Q)DGA(-,?JIHV,/;J.8!3ES"Z3IGVQ"`M(WV]D)C)G +MX"NC:1I;F#PD).9;@[J(Z@8//9.<`'ME!(UP@B`>9*(P&@%TQNHH@9VYRDT2 +M,J&TNKT_F&/T14:C09G'90`&,?;NFC.VWNJ;62[UR#(D)FS&#C]E"&.B8._& +M82(AOPH;3D`#?9"/SQ,R@9L3,':"A&"8P=O=4VL?TB=C[)B?4,S.)4+2YVD@ +MP!LE,;*&UAI$!TB/=`XC!^ZB'IP23W3.RT#GE71M)N![)X'$Y*A`(?F8GNG! +M(GV]T5,WL.$F<-])A0DGO\P48,N:9G"(E#23,_24X+2!`CVC"BUG,DMQPFU8 +MR0"-LY1=IZ<9''S!2:2)$P.Q4<@/W,<Y3:SH&=_=#:>3K&))X3AQ)D;;C*AI +MN(V.0B$ZMX]DT;3-J.;D3@YA7+?J%RT'2\YB<K.:2V"#F.Z*B20-.2EY-MBA +MU;J#RUIN:AT["=EZ3^%5AU7J-VRK4<[R1./NN9_#SPA5OZK:U8$L]QNOH7\. +M^@LLZ%.*8@#Z+%D[9S\GR.O\%]*9:V;!O`75@-#!(@0J73J8I4?8+.\3=6;; +M,--A`G`6,LM,XQ7\5=6;1I%C=SV*X[1<WUQ.8[*6GYW4+HO<XQVA;=E092I; +M+R9WV[>G&:!TKIS*(!?$K5H46X`&%%2:YYX4]'7OL>5C;K(MT6L`G2G>0'"% +M$R3N8Y1!CC`F5-[;D.XZA&`0F;3^P1BF=)[J;R@Y@/[J=KPA\OG,*Q1;!C>$ +M@SB"/HC8P$AORKK25)I:3D`=_9(6[=)@#Z)B0-A/"-KQMA:E9TJ5:68CY4#[ +M?2"8RM%PE^P3:0Z,*5J*`I13_=4G4?YA@8'=;GDRT[2JXMP2#A9UPUM4MZ`@ +M$_JIJ5-IF0K#J):.WU0-9$08/92B(,=JP,!3-I_RSW4]&F3EQ^JE%.7#N4D& +M959B'#!Q"J7-*#$;=EM5J30W;*HUZ4O@<;H,FNQT$D0J[R)C<[+3NZ3B-L+, +MK-WWQRHL!4R#$9[)A4+1,92;)$&$&\JE-4<">Q]TWE!XF2/JD]P!@CZH758: +M2W*=()K0UF#,IY;$"%!YH&"=NZ'S@';_`$2&DSAWW1T*]2B):2(XE1MJ@GF4 +M;(>V"5N,6-CIO6"QH8]Q$]EN4;FE7HX>,KAZC8!(,?W3V74*U$^EQ@<%=</) +M<7'/QRNMNK9NIVD2LN_M"701]5-TKJ].M#:KOKW6MY5*NS4UPSLO5AY)D\F? +MCL<1?VV@06K(J4'/J3)#5VW4["23I,'E8E]9.`)&'+MVXN<J4X>03C*KW%LW +M20&_5:5S;Z'Z@JM5P+M)V"#--"F#!R4WD4NQ6LRC1+`2""47D4?=.%?)%<D/ +M,#.T`JN]LNQL=@58?!=),2>56?O.XXRH])J@@$.TRWLHV@@',GA&]QYR.4SO +MRDR,<(R"1)`W^4B(V!2G>&IB3JVX[HIW:-1`.`<80.B9!(([IYDP2)[IB2)Q +M]D#.=/(^Z)H@:L'ZH3&G#3O\)<B<E`39:,Y]QPG#1#G2,8B<E"UY`<8$GLB9 +MP"WXA`L-,&9&$],-Y=$<QND0X$AS((.QX38@J@2#N)W1-:-.<#ND#C;"=VG2 +M1[;J`,D\!(F6$&2!P4X+9&K,_1"XM#L9212@=I([)J@.K?YY2$1L?ND70TB, +M)$,0W`)VQA,&[P41(G/ZI-B,(I@0`1PGDG)^$SC!$<]D\CB90.T'8'<[(23_ +M`$[%/J[DQNGQO*!G<9"3M)$_W2!@2'1W"0@\?K"!:6YQ$\)I@<_*)Q]&YC@' +M9,=(=D?J@1$B!GNF:!IWA.(!F<)0W,2F@B!&9RA!&F#PC^<I/T%H`$)H,PP? +M?E."9W28!`$P">R8B#G]$"=J(_U3M$X;B>$YD`MF0=QW3-@C+9(Y0%I;K)VC +M8=T-0R[_`%3AH<[N!PF>-),B/8H'8).9,(!IF/;!)1$ZL>R$B,<]T#@0P'?@ +MI@9/Z).,-B4FG&V_*!P`1C/LD-0!]1CV3,.(`^,HFF),8^4#C5N/L$[9/IC, +MY(2$@8Q^J*1(:1]$"(],0<<)J>F-DY@M$?ND(F0J&/I<5+3(,3D$IG!I!.QV +MA.&P-ON4"(!$#E=A^'7AQW4;MKZC)8TA8/0.FOO[UC`PP2O>?PZ\/FTM6`L' +MRLWIG+/UZ=#X.Z*RA2IT*;,-'*]+Z);MH4`-`"R?#5@U@!(B-PNB>6TZ>-EB +MN<YY1=5Z@*%%P:1C<RN)ZC5J]1O8W"TO$UWG0WE0])HAPUN$GW7#.N^$VNV- +M'RJ0B)A7K>F7#U)K2F2-ONKU"G!CLO/>7IQA6S`QHA3&F0"4@`'2<*1[FAN( +M6:Z2$P"6XP5,T#&%`Q[2_)_56&'MNIMK22FUNG_52M'HQRH&$ZO2K5`#3_=6 +M4T`,,0!",LT@3^BD$.F,)G./*K*%T\H28B``GJG_`*E&7`[S`02XB)1-B9C" +MB8X1,DX1TG09/*FQ/'I@#Y3^6,N)@CV3-)(D(Z?YC^J*!](O?`0U:`;D?16& +M-&8'Z)ZE)KP`X2.45'08W1&".Y5@4QH,)4F'4('W4^D:)'*1*I5*0!DSE5*U +M(:C&Q6C6:!.)A5JC6S);E18S*U"096?=6S1_3!6[7``^50K,#R3C"G2L-]') +M)&`@\HP?9;#K=A&!@JLZD!(`0K(?3)!&WNJ]1C]/I(^@6S5H`B`,JM_#:21^ +MB:1EO;IG!*A#'ZCO'*TW6WJ,A)M!H$&$TNU&DPG?CW5BG3@;[J846L),<HF: +M8$Q\*LVH'M.QS`55WI<9'U6D8C>)5:O2#G;;K4K"FUY:[4Q\%;/1.LN8[RWN +MU`+*=;$B<J&M1<W:<96ION,927MZ'9W%"\H2""85#JMB8)CX7,]%ZL^V>&/< +M1_OX7765[3O*(@CW*]/B\ORO+Y/%KIR74K0LEQ'ZK%K6O\S6Z3"[OK/3@6DM +MV7-=4M2*1TSCL%ZIR\MX9#7M`B?U2\QO<?=,*)Y!E/Y/S]TTO#Y%K-)F71]5 +M6>0<`!6*YEQ;`&..56>1Q"E>H+@2/8)/!D2-TSMA)QV2(F'$X]D-&<,X[(2) +M))&41`'9"X]T#$&9@&=BD9`B"2$PSMQPB<US1+AID2)Y1`$&1.Z1!X!!/&R= +MND9<X^R8D2/[HIP)]61"(2.#'>4)@#_1%3=+80/+MR23WE-LTZ@DZ8&04TX@ +ME$.!Z9S!2W[I9#1.4I+M.?:.Z`?3S,<)`$DX=/`2AP<<X2/<[#;**>J^GJ;H +MU;>K.Y00TGL=DY!C4[Z2D3)D'/NA#`@..GM&R0)`^>R=I+<S![)R22),H&@` +M3E-B!E.23DY]TG0.?H@89=CZ!/.,9[I@Z,#*0)$^Z+H[-B8D]PD<MS'=-,@1 +M]@G;OB"B%@'\T=DQ[!%D[QGB4P_(80-&8.",(C@;`I-D@`&9X2&\0#V*!MAE +M-N,\\HX)'!.^R$N&G;/[(:.&XX,?JF(,SLD)&0TY"0$MQQNH:.#B(&4BT<$' +MW3@B-Y`V"0#]<M$&,C*!`#<\]D\M%0.C4`>4T>F"W=)L!ID?14/=.I.JEU*G +MH:=FZIA1N]@B#26ET8:)WV0F-!Q]5`Y!<=1&!RF&Y@>^Z0(E.8!$85":V3D' +M"<`:<#;=+4T99(/)*=H$=^Z!"1$#*<09F?HD1MRG='(DSW0T8>SI]D]-OJ@D +M;[)@,;F?E&(&^_LBB.6P>58M[>I7<UDD@;*!NDD9,_J5VGX?]#JWMPTFF0T' +ME&;Q'5_A/X:T-;6JLDD"%[?X8Z;%`'1"Q/`_164[:FP#``7H/3:#*-'3V6<J +MXR;NTEK1--L]O95.LWS:--T.B%-?W+*-)V8A<AU2Z?=7&ACC!*Y99:=,<=GH +MNJ7=QK<XD$KH>F6^&B%3Z):!K!A;MM3T`8^<KS97;TX8Z3T:(:,2`IF-QG9" +MT@-P<!4NJ7].WIDS"Q:[1+U"Z;2!,C"R:O7*4D!T%9?5;]URYS:<Y[*G1Z/7 +MN8<7EL]ESN[>'3<C:/6FR2Q\QV5RRZR'D`N+21W6=:>'SI:,GW5D=%J-R&N! +M"OK4]HWK6[-5FH'Z`JRR^+?S#3[K!L35M7!KP8^%J4GT[AHV"FMK&A0O&N/Y +ME-4K!W]06-68^B8&J!V34;PZH.RSNSMJS?34>Z7%`V=63`4=&J'"094K3Z@1 +M&5N7;-@R('I&ZDH@ALB$PRTG]$3()&(5TSM-3P8S"GIM`,A1,(.5*#VQW32[ +M6*8!@2BTMG?.TJ&B1JVE66%IW"!1`P[[(RW!F4@0`)&/E-J&<H(J[/JH'4X^ +MJLN+2TF=N`JU1P#8,E18JW32-C*KADF"%;())2;2C?=.U4JC-(5=U*72X0M% +M]+42!.%%5HC/9$9M6F&["0JM5H`)G*T+EI$P-N2J5<8/?E39I1JN]6X5.ZK% +MA)/"N7`QJB#^ZS+MI<W)(!X4BZ05>IX(:[([JG5ZH8!UPH;\-9(:!/*R+IQ) +M@'*9$TZ&WZDW5)=,JT.HTW-`7$UKEU/)<<=E2NNN/I,($^V84F5B7';T,WK# +MC4/;*FIUJ+VP0"?E>3?^9;IE3,Z?=:?2O&#&U`*U32??*U,_\2^*NZOZ/]30 +M1_=6>@=0=0KBF2L;IO7;6ZIC2Z9&_P#L*=[VEVMI'>97693+IQN/RO1[6LV[ +MMPT1)&95'J=DT,((^BQO"G4SK:U[L]UV+A1N+4.!X7J\7DWQ7C\OCTXBK9-% +M0Y_1-_!-[_HNCJ6)+S#"A_@3_@*].W#3X'N-RZ8G"KDP2"#&RL5\F&S([*"I +MZJ8@F1B%-O2A._<#W2.H#V3NB3N1&2FJ.);OM$?"J<!P9@_KNF<"<[9A.6Q@ +MQ*8YQLHIO[[IG;03/U2(W&>R:">3\J!#,G*7S(A-M[)\=\<D(',1DR`8R433 +MG]X*`C)!G='@;<JAIGCZ%)P'"1'SC=$/RSNG8$D=\#(3">Z=P:!D^^$HD2=O +MV0)F#R)3NB,QGNDX``9'U"1'I,<(IA^4$B>Z9\``C]D_],S!A*0/^H>R`(SB +M<>R=@)G.Z3@``Z1GA,#/$(%IC'"49!V^4XR)/"3))$9[94"(R2(3/V_=&0#. +M-]\JUTQ_3J=.Y%^RJ\NI$4?+,0^1!/M$JBG!C<=HW3"=6#D(FDZI`GZIRZ6P +M2/D;H$"TN`<(2<,P)^$((@#;Y*=TD8?C_P"Y`\C3_ACLG:X@[S*;$$S@=RFU +M9E`1)X.=D)!C"67&>P3`8,9*!`^J28'<<)R0-G<]LIB!/")C27`-&78B$"&/ +M43@IP#!,'2>3RF<V)U-@_97.FCS[6K;%S6@`U6$[D@9'U'[(*U3`$['OA"<X +MQE.-,R,SRD[3J@;(`,C_`"3MB/5^Z3@#!VA,&R#E#9`Z3@;B-DWJGG"+9I2_ +MJS]4`QB3RB9&9F/V1%HD!IG*<-CT.G4TY:$"IZ=>DR6]P8,IB0#I&8[%.6Z9 +M;I(/,H?S/COR25%$QQ+H(1F3&G[E-0\LEQ<7#'')4]M3+W-`R51?\.]/?>7; +M`&D@D?NO>_PS\-MHVE*:?J@25QOX.^'75`*[Z4S!R/A>[>%NG-H4VC3&%,KI +MPROM=-+HMCY%)N`"KUU<BF,$2G>YE.F-6(7.^(;\'4QA@^Q7*UJ17\0=1=5< +MZFUQ2Z#8N)#WY)]]E3Z=;FXN`]V5U%E1;3HC'U7FRRV]&&.EJW8&L;Z=E:%0 +M!NX5%U9K6Q(V[IA4<YN(*Y6N\BS>WK*=(Y7-7?G]0N-+7'3^RT;MCZSX.%H] +M.LZ5"V#C^8Y6=;:WIF].Z2*;AJ))706%FP``-5>B[75@;<+5MW,ITY<8"WC' +M/+)<M+1@:!I&%:9:4Y@M6%?^(;6U<9J"1[K/_P#.M`5L5!VR5O<CENNHN^D4 +MJK(T`#NLVXZ54MI<P$CV5OH/B"VNP/6"3[KH&TZ5Q0($%/69-XYV.1I14ECQ +MD8(*I]0LG4W:V;>RZ+J?3#2JZV<=E5%)E1A:=QW7++'7%=\<M\QA6M5[:D1A +M:5JX&">56NK1U*H2V?E-;EP,+E.'2S;7ID%L0$MLZH"BH$>7JG=-4>5U[<UJ +MD\'=RFU`"`LRG4@R2K+*X(W51=IU(;&I3MJ@;'99@K09+AE%4N1$"")R5EIH +MBI()F$+GQN539<0!D3\IZERV03G"HLNKL&^ZA<\..3E47U'.,CNIK9WJTJ-K +M=-@+D]:0?9-3<!F$3G`CU&%649<`8]MU#7>W3A'4(+L9&RC>!&<H:4KD@M)A +M9U8')C&T+3JL:X$!5GT@UL&,*:V,VJWDK.OFAQ(;_HM:Y87/V5.M1(.RD@Q* +MED'DR<'.5G7UK;TY[KHZU%P8=(63=60?5.K.54<U>6C"XN#C]`L3K-E+"0S8 +MKN+BP@2!C9974NGZV$'93U-V/,>LNJT7END$#W61<U*A)>:;@!R.3\+TOJ72 +MNF^0T>5_,`AQX/NN3\06MM3)T,<Z<XG"W+)PW[[Z9W0.O5K9[6ZX`&>?[+OO +M#GB)MT/++B';1_L+R/JE-S'DM'I.T!2^'>LU;&Z`.8Q!6KX_N+%LO%?072KK +M14:X;E=]X6OQ5IM#SF(7C'@[KM.\HL!/JB8/_9=]X=O13<TAVZ8WZ\_DQ^5Z +M0&L(G4,I:&?XPJ5I=TS;,/<*3^)IKU?NO+^T_/.Y=+W%I$959T`[J>M(,0(V +MF=U7=(?&5Z;VTC<09`XY2JX`;!VS*?&L`NB3DH.=\;)0F@D3G?=,\.!S@^_* +M:21OE(N)(!=/RH&R7<;)`ZN3D<!.R"9G,[(<;YP@6)D%WLD#@$.^Z4`F9,>P +MA(#$?N@/`<07`\2G<X08V*%O],IW#TB!'=%(D3(Q.Z>1G.Q0_P!'O.<HL:=4 +M(AB)_JSV2,%H2<?Y@`A.0)'$A(I@.Y3F.#.,IB0#B/V2`)J$;#]40Q;G)^XW +M2[B=TAI+^XXRFIP,@(&(EV_Y<)&0)`P$9PS!R3&$!)P3(A%+$23]$[9QF`F# +M)P!A(@8$P@)O?^Z1:"TQ`)Q\IRUHI?F:3.R%X&D\QE`Q&./NFGD1"<`D8!A, +M,G,Q[H'/R.Q3'!DQCE,X;QC,)VM$-<1,^_9`61C`QW2:(!.#P@(B!C[IP1.T +MSB$!.D-$;I-QP2F@:=X]DXC7^9#9$`),:"=($SPF@2<(@&Z@9QR4$A?-'0Z( +M&=1&4?3'`7U&HX2UC@YPC@&5"XR,$P[V3#?'&$!W`FK);OD#="-QC<X1!V`3 +MVB24S@=/^J)L,08YC!"4278,@(B#(CD(2,X/**8`8P8W3D8[X2`W))@F,IRX +MG$J!?TB!SV2$@@B3';E/IDF)CB4;6PW/.RH0))DG+M\IH:1DF`4AJ)B2`?=. +MT$@-YE`@PDMW(_5=E^'/AYW4;YA<UT!P,?9<_P!$Z=6O+EK&MC(SE>^_A%X: +M%K:L?49ZW9_92UC.ZXCJ_`'0:=G0IL;3#0!L%VU.FV@WM"@Z?0IV](#:`J?6 +M^I-8TZ'?<KEEDSC#=;ZB&^EIR0>5SH=4N:Y,[G=!7J5;FK(G=:G2K4,:"3\K +MSYY;>C#!;Z72\ILN&%>KW(IT\QLJP(`+01E*C1-5^J?NN5=I(9M1]5\SOE7: +M;M-,9(,*2VLQL&G.ZLUK2&&!!C*QITE9U2JXU>ZN![BP1C$8*J_P[F5@8WV* +MMTQI;D9(315RQ9Z0X1C<]UC^-.M&RM##@#NMFU>T4R-B!"\]_%-Y<2!\_.ZZ +MXS;SY\./\5>,',8Y[ZPF<"?E<A7\>5_-.ET@']%E>/7/IW08`=)Q^Z[C\"_P +MUZ'XDZ"[JW7*]8L-7RV4Z#@#L#)D>Z[SQX_6-^LW6A^'/CJJ^JP&J02=I^%] +M#?AYUD7UJPN?F!SLOE?QIX9'@_\`$3^`Z=4?4MG$/ID_FTDX!@;KW7\%;ISP +MUAF,?V7++#URX:W+'KMS2;5I;;KG[^D;:L2``"9E=-2@T&&(D+*ZU1:^FXM& +M96?)-QT\=U6-69Y]/4(E4*E`M>8^JNL?Y;P#SA2.HM>=0V.5P[>GI3HU#^7? +MV4E:"W/'*CKTS3<2!`05*X#(..Y5G"6`,->/A.ZH&[''RJU>LT2951]R"V`X +M+>V%]]UIP24A>-`!!SV60^L7$29E.R9P%A6Q_&`DP2)2_BIP=OE9;6NB#REJ +M+9.P_=%;3:NJ>ZFMG'5JGZ+$IW`!''.ZNVESD'ZJ+MO4R-`DH75`2J(NP6[I +MZ58ND?JKM(MM<&NB=T-;).1'LHR^`)2\S8?9:A2:UN3LH:C2YY4KW`@D'/RH +MWNS@_P"BJ*U2B`<M'OE0OHM/?93O?ZB21'LHO,SW4%2K1&F(E5&VC"XD[RM- +MSVZ5`ZF0XN_I(51FW5NT>ENRR.IV9+3S/"Z&HTZHX56XI!P((B$B;</U&Q=4 +MEI;@[K'ZGT2CY)<\Z3W.5WMY:NF0W?*P.N=.JUIW'NKZRL[>:=<Z9T]C=)R9 +MSNN1ZI94Z3M=,F"3$<+U>\\.VOJJ5@7.))DSNN;\3=`M?))INTD;2%<<KCVW +M;*PO`?539W+070,"%[%X=Z@*K&%KP9@@KPBO:NM;LN#@(,2O1OPYZBY[`VH[ +M((&-E<YJ^T3*;CVNQOHM*8UC92_QW_6%SMK=4A;L!)F.ZD_BJ7<_=.7+A\97 +M4$G<?[[*!PEA=!`&)!V5BX=AV?;Z*H\DN&,;A?1KA0/$R1A#48=$R43_`%'X +M0SQL2B!`]<">Z3@!!$DSRG+CI`!PF=)`QL-^ZBFEQ)=RG@`Q)DH0X3(G*<.( +M.)5#P8&?LG:3$1DI,)&"XP0FGW_5`8#-&"9!VXA(^IQP`$.-0DY'9'J!,.)# +M9RE@$_\`+`G=(B!EVV(2`]6#A$0)W!$2B`R&X.4Y+HB?NG<0.,).@"/K\(&U +M&>2>4.2#D=OE/(`:3N<)SD`@B>W"*0@.D)F@EV-Y1`C3&`)V"3G1,``H$0`Z +M3A!$CL$3C!R`3\I`Y&=NZ!A.@-G!X3&200C=+8$C*;4)WCL.Z!MP)CY3QB9V +M_1,2)WPD\C&-T#.DY.\II@DD`GW[IM7J[)SET[(IR9C`$#;W2`)@3!2&!@"4 +MQ+-,YDH$<>G$1E+`<(XV3-P?=.</VG"B"DZ3.9*8SJVVW3ZAH]TA&G!@JAFE +MT&,<)Q.DG)">)!]\X2C$NR?9`P)TD'(E.R3)T_=,V"#@R>.R=A8706F3L`@0 +M)D1,S&R-XGX[(0<2/L43W"((R$`@F0`)3$SD#`12.1$A,<F.Y4"R<$!-D';" +M-D8!X3^D@X,0J$QIU?[A/480-Y,;2K-&"S2?H.R,4QDD3_=39I4$`Y'PIK:B +MY]1L`G40("E;2R`T&3Q*ZOP'T7^*O:9T@@D?1$MU'5?A3X9;7:RO5H[$1C?W +M7MW0K>E8VP,M$#E<CT1]ITFR8`X-$#<_[[*'J7BHUII6[RYNTB<KGGGIRQQN +M5V[+JO7&!NBFX2L1]:I=.EQ.5D6#JE=P<Z3,86YTZD!$S"\^63T8X:7>FT&L +M:'$;=UH,=C?8J&BV:8#0K5K0+M^%RM=I#TF%S_>%HVC(`'9-;T&Z1)QV5FDT +M8(*RUI9H1N["DR[!4(@;'=.7EA$<HNDAH-<2-N94;[4G\J)E729[*:C6!,G? +M=3VTNE-UH\;3)X6!XCZ#4O!G)RNS\^D<0GI&@1F/E;QRC&4V^=OQ$\`=0K.- +M6@PN(R&_=9/@A_C7PH*E.UI.\EQDTWM)`]P/HOI^M9V%=OJ:T\255O/#O2ZS +M8+&2?8+K++-5C6G@W3[3J'5^HNZAU4E]=[L3.,^_"]E_"+IKZ6EY$`QQ\(AX +M5L:;P6TVD#;"Z#HC&]/;I&D!8RR28<[=I3.FD![1\JKU!H=2,1E9(ZL(`+\# +MW05NJZFX.3ME8RSCMCARSNHO<RYP8@JQ;U=5,&=MU2NW.JOU<3/=#;57-,$1 +M.%YYQ=O19PN]0JT_)P<K!NKD1E6.J5#!))'PLBJ`YQ]1,+6]UF22%6N'.P#A +M`P%SMC!PG93D@QGA3T*328.YY6ML]AMK<N?);GY6I3MP&R6P0$=C0B.<*Z:? +MIR``H2,NI3TDX]U'7I.(P%JFB!E"^BW1($*1JL"Y!IGU3E#;7<'\V%/UL!K? +MCE<_6N7,J:0=UK3#HZ-T7P9PKUK7]_=<Q85G",K8LJI=$HK<\_\`E",Y0&M( +M_,J>LP/TA#YT'3Q\K;*\:H([?L@J5=(D@J$.!V=[[IJSI&#*!5JL`F!["<*( +MOD\9"'U&9W0M!C.,;**D80.<3LG>[U1Q*B<^-MR4SB=."`FTT*070<*-S!). +MQ0PZ<G?A-#B"<_Y*RI8&HQIQ`,\E5;BU8]L1^4*VZ.^5%(D`X6MLZ<[UCII< +MQVEL\K@O&'1:F@N8#MG/RO6ZU,/;!&%C=8LJ3@X.#=E>*SO3YSZK3K6US%0' +MT&22/=;G@WJ#J5W3;,-D3&W"['QMT2TJT7O$!PG^ZXFPMA1OAI$M!WGW6[JQ +MJ7;UBROV.M*;IF1O*E_C6+G+"NT6=($G#0%+_$-[E8W7-\XU]#JN#`YY*J52 +M`?1'NK5?#N!.ZK5A$C$;1"^C]<43R9/?LE$24[],3J@SV0N_)^B@8G.(2;#B +M9@XPDT$X`^R$MAV1D(%$)",SLGW$%+2=])`]T"D:0($^R<QP"D6ZG?ETE*#' +M&-U=!XC)/*<@:>Q]TH@"?V3M&=X^$0TDQ@8"=S1&=B)3R`-`!GNF('Y3OO** +M;WTQ\)&#G!^4OZ)PD-\8'NB:,!)C8)$!I(TIV``;_?*8S.P^RBIKAU%PIMHT +MG4H:`X%^K49WVPH7;[9/9.\&-XG@'=,9+AD&.Y5^AMC),I;X**1)*%D:23,H +M'='/Q,IH&DR-]DPY=)GY3R=$G"!F@-)G;^Z0@D\A.&NXS*?4?+#8&.VZ`,!Q +MB/A(D!I:0`/;=)P,9,2-I3<>R*(1$;'O"8M$1!'RA^3"(S&Y"@&)^B7>(!*( +MQI&3JY28`7?YJH3)B&F`[!2#6"?4F]IPG<UP&D_*!"`"!E$6F-HGW3-;!W'N +MGTSL,'E`@)S#1PD&@$3_`-TQ&0!E$X''Y8WE(':`W/V/=/I))@),$@Y$^YE) +MK2!,!`SFAS9!SM\IPSN)2_,2(A$<.&,`1E1"#<D@1!3-&IOYAOPIJ;):2""1 +M_2HWB'X@HK0LZ8-,8))4[J(+<&",Y3=*!-,8!!5]E.7CL."L4Z1]-L/XBO38 +M#^8P3E>B^'*-'I%@*E0LUZ>#"Y3I56E9GS-/JX&Z;JO4;FYJ>6"X#L"8"7+7 +M3%Q]JWNI]<NKR[\JE4=H!C3.X71^&K-Y8'/G,87/>#^DNJ%M2H)F,%>@=&M6 +ML#1'/'*\^==<9\B_TRVT@'*W+2B2T0(5>RHDN&_T6U:41H!7&NV,%;4,-&RM +MTJ3ALBH49:%9;3TK-=)!4F0-M]Q*GMV0#(F-E'1'J^BMT6SB$;]0BF=\'V*) +MU*?@(W,=P)"E#'Z?=#U5C1&D"#(,PCIVIU=L*=K3,'=3T6:LB%E?52?;.!]. +M%&:-0#?Z+6%$N(X1FVD@IK:,;RZ\2'$0$%6K<M:`#*W76S2(&?91FS!!!:KI +M&)Y]PT9+DS;JL<$;+2KVS0(A5:U.FSME32\*O\35=@G"=MP\'*&KH#C#=^R@ +MJ%[L?LII=M!EZQH.5'6Z@S3+?NLXL,[GZI-I^KY33-J6K7?6W,IF-$>RD`:U +MD",**H^?3W34B;V=PEWIW"NV%`ZQC*AZ?2+W_P":W[&T@`D96:W.#VM$0`!M +MN5:-`%L3(CNK=&UTL!")[`QIDJQ&<^F&S`V]U4NZH:R-NZL]2JM#?W6!U&X] +M4S]%-M:VI=;K:FN`&^ZYBZ=-:/HMOJ+]605AW&*DD+6*7A=Z>X-<"?JMBV?` +M&GNN>LZGKAI"V[)P<-BMZ8K2IO)]1V'"($&(Y5=@=C.ZFI%F))'$*[1,T&1B +M$;((AT(?,:!L-E&*X)SLLVM2;2^ANWU"@J/DF-/R4-2K(,<>Z@:USB3G"SMJ +M8K6(GORFIQJ@C?*9@EN94K&9!Y5BZ$6C$#(0&!,B%9IT^"AJ4A&)`5TS5&L1 +M.^_*A=`,GA37+!JGMW4%3+(!6F=&UC29$*EU1NJD((D^RM0`-Y3,8'-AQ)2, +MY.!\3].N:E-^EARO/+VWN+/J$U&:0X[+WGJ-JQ[(`PO._'/2AJ+PW:2"%TQD +M8]K.&+:5&FV9SCNI-;>Q_P#WE5MZ3FT6MTNP$?EN_P`+E=)IX77R_`C.ZKO` +M$G^ZL5LDD'_55ZL`[8/=>ZUP0C,YPF>#`C9$`-)W33$S*&C#`$2F&X<,)3+I +M!33G=0.7!SB?V3`8W,>Z33F"/[I\3DC*H+29#C!]A,I&.3E-`G3LG/I&2/F4 +MV'#0,A,<SN>Z0<(,PG)#0-L[A`A(,GG9(G&YRG).F!L$C!W,1W1##`P?HF!@ +MD(@(GLFQO)12'Y)'ZIB9;JGZ2G&TSD8^4S]Y;(4")X(@H7&#/ZS*-P)$Z8)4 +M>G)(/UX5-$UQ&0?E(?/*0!!,)X@3!0/Q";U;$[)V_E2'YIF90."9"3S@<I]G +M1N?=`9+23)0*#I,#/[(2""#_`&1;`B29Y*4%W'L@'>$P[&81Z8(S*0;V,^Z* +M`?XA&$33Z?=+CG[;)-V]E`^H:?RC='3+7.EY(&TJ,`!TI^<!#0W#GCW1>=-J +M*,-`F=49*$X$<)G-!@,G43D*H0,8@?5.3D0!A#ICM@_=.TD?1021,>G?&4Q` +M:>X3R8`:9`R,X0PX.#?U[($R7&(E$6[%KI)W'9#!$Y1,^,'L@-KO1V*`3YFH +M\H@)`TPDS$3QN$&MT4C?A;-)M-U,Z78Y'=9/0:>JH&MS\K6KL%%FB#/*Q>S_ +M`!7J57`G\P'>5I^&[9UW>`@.C&^ZS&`UZN@-R>Z[OP/TLTRUY'N"N>66HW(Z +MCH%B*=!GH"Z;IU!K6B&K/Z;1R#$+>Z;1B#W7GW]=,8T.FT1`)"U*%/(@0.RJ +MV+-+1[K3MV"97.NTB:VIG3MA6&4=42E2;#8VE6Z%/GA&I$=&@)_+A6*=&?\` +M)6:3,[05-3I@[?:$:5V40.(4C*$M]O96J5)IYW1BF&Q&Z:6549:B1.%+3HMD +MX.%:;1Q*D9;SM,J6&T#*>WLC\LAL!6Z=N1`1&B-6VRK%40P@$\J-P(_=:3J` +M!.,*)]($0%$VR;BGJ!G=4*]OK.0<+=KT@W,`JI7:UL]NRB,2K;1@&/A15:+` +M!`,K0N2)G[`*G5(CU*;%5U(;DPH*M5K<3A'?W#6-C^ZS!4=7>0V3QA#6UD5" +M]_IX5NTMGU*@)'T3=+L7ZI=RM_I]F`084M;F)=(L,R1]5OV%`#C906-NYKI# +ML'A:5`0`8^4C5B3RVAA[PJ'4,-*OU9T[0LCJU0L80,CNE28L/JM1NDDOCV7/ +M7E4%QRM'K-7)B9*YZL^:D:E(TDNCJ9`S*R+X#(,"%L4V:QE9?5Z6G8+>+GE5 +M6Q)\[?"W^G@B).%A]-9#YX[+:Z</-K!K<*7)J8\-$/.`!,)5''5V]EI6]BUM +M`.]LJ%]JUS\K7.F9K:L:@T1V4+GSN0!W5FK;ALZ9^JJNIN`/IF5S;#4J`"!$ +M=Y4M"LT$`'?NH7V]1QP"HJE&JW+6II6JVHTB-0^BL4-,@@Y7-BI7823("GI= +M4=3YE7E+'347-&T)5C.Y6-9=3IO(!=G=777`&1F?=:QK-B*[;),95-_H!P%9 +MK52XA15QC!E;W$5"[>3[HF;D@_W4-W@]Q\IJ)<>?T4+$U;+28_58W7K(UZ#B +M6SV6N#)@;?LH[MWE#N"NF-TX91Y[4L'-J%N@X*;^!?\`X"NKK,INJEQ:)*'R +MJ7^$+ON./+Y#N3+M,$_)4%PYQ`&HD#8RK-<:B`V/5Q,0JE<-V:\P,;1*]*(Q +MS!]T,^DA%B#F$V6ND.RTJ(`D`$PEQ[]T[AOD?"3V@#!,';"!-/JD&(]T0,NP +MXXV*9\BL[4S3F=/9-`/,R>$$C=()F2?F$PR<X3.;#LS([[A(DY$X[JA-C3D2 +MB&G&)([\H1R"92:`>3[!`3B-6!$Y2:-3PWOW2B=,'/(3$Y@!02,)#2,04&-6 +MV$G1\^R:0!M,@*A'2TDDQ]$P(P=,Q]D0PWN@&#)P(WA%27%4UG%[PV2(,"`H +MQI@[>Z08#OEQY2`(<"Z80+TC&)3#:0!"=H.QC*<M],_E0,-H@2G9I+@1GV2# +M8),[)-@51)QL2@=S<P8Y2]ASV3/,&`9PFG&\F)D(AL\F4FC)WRG<"?;^Z0&8 +M!Q[J*0@F8P>2F<`<@X]RG(.G\WT";8Y$`_JJ$V)SB/=,W_ISRGTD-G'/*0C2 +M21!X'=`Y$_/LDQOJ`G/ORF!!`Q]47],0-D!%HV).>R$M@0#ORI/3_0'("/27 +M&2=D#.$1P.Z>F/5D[);#;ZA"S88WYA`8$F92@2#KR>Z>89@2A`R<">R((MD` +MZA]$3.T'ZE-&T[=@G+73IB>%`;/2\0`83MU5*FV_8(*9),;*WT^BUQD3\(-C +MP\?*8"X>P@*]>.#OZM@=E2IQ3<UL&#M[*Y:4C5J-;!(&\97+*\K/RN>%+(U; +MQKVM)@\C*]1Z%;>70:V`)7(^#[-K7M<6@>\?*[_IE.=.!G]%Y\[MTD:-E1V& +MRV[&F!`P)6?8T@&:C)_NM6RI%Q`C/=<[7;&-&U9Z1Z<+3M:8E5[2EB./=7[6 +ME#?=9=(L4:8A6Z+(XPHJ#/3D25=MV>K))114VQCG?"G93<8Y*EMZ4%6Z5(1@ +M1"U$VAHTR"9`^ZG;1U#:)1LI@'T[JU09W(CE-%J"C;Q(`R%89;D"8W4LM#AG +M=$XC3(X2QG=1>6!QL@J,Y4T^O'U0N!T$`[J"/2(@M4-9K8]U8,=Y"AK"9VGA +M04KPAHP2LN]+0"=EIW8AIET3W6)U.X:`YH(6+6I%.ZJ9QRLZ\KX(`SV1UJI< +MXL;RHA:U'ND@=UF+I2<U]R\``K7Z1TF(&G=3V%BSS`0`#.P72]&L2Q@Y(.ZO +M:ZTIV?3M+1+-EH4;4-`&GZK6I6T>F`$YMI;/*UI95*@UC3^ZL$`-D;%)M&'3 +MI@)G@AN\J-\`KO.GNL;JKO3(XY6K6.!WX67U$@L,]E$TX_KKX><PL&?,K&"M +MOQ/N[]I6!:`FN-HE).&,FO;L)I2?HLSK8:&;[+<M@#1(*Q^N-),0(A:CGW6= +MTN/-#"=UO]/HAE36TB%SEJ_RZX.-\9716Y-6E((QF0L6.DK?I7-)M/\`-^J= +M]U;L'])*YRNZL/3/J'NM#I%C7J-!J$GZJ7*QOTFMIZ]\UQ<0V(Y47\4V-7EG +MXA:]GT=I:"6@K1H](H`QH`^G^BZ3#*N.7DQCE*ES5+891)G?"@UW;G8HNCL0 +MNV-A:4A+F-'T4+J5H)/H('"Z_MW\N?[T_#BKA[J=,^=2(/PL2[O*9K:0`%W_ +M`%*QI7-,@`01D+E.K>'',<:E*,"<J7"SIO#R2]LO348T5&.Q\JWTGJTU?+J. +M_58G4*]>WFDX.^(5>T=J.O7Z@N=GX=-_EWS:K7LF9!Y4;JD3)E8/1NH#%)YY +MV6M4<'&6D0=H3_#1KIH(G49]D#):V=7NBJCZ9>200?E-KI^_W7 +M5P?'U8`%QU2,S_95JA&GXXY&5/<..HD<?15ZCGEQ$-''U7L<T;P-@`T("(., +M%$\C)D8.0FQZ2@1EL@[C$H,<E$8F0A=!$D\=T#@M=JG4#P1_=)HDSC=,-.DD +MB'#MLG!`!`_50%'J@A%#2_.!'W0L(B)`.\RD"6G`G*H0:/I/V3AO)'V2:Z-C +M[83`M$X[YE$.UHTQG.V41$#O[E,-(R.4[C/]6/9%-@N_=+2T$['^Z:1J.G9* +M>W"`B`6D3/\`=-I$3N-MR4X@M$P=/!35B`XM!+AR=N$-A(AN$VF1@?=%4+=) +M$1]4FX!P2@30=MCV2<W>?E(F#&\8RFG!SG9%(F!`^"D!Q/T2!`/,I2-<@$0B +M'<-1!!@3"%['DP!MB`B);]1RB)D2XR9Y0`<-DREI$0=D\MUD@[;2B9),B".0 +MH!P03,<IBT:3!F43C,Y^R$F`?5^7"JA:-P1O[[(],4QZ@9[(0?41!*1DG),2 +M40\`'&!RD=42#[B4[)+,$9,I-,GU'`V^44Y._J1:AL"A,C(/.Z6I-(8B792- +M-]/)!`(D2,(\AN")&4,N,R0.X"!VZM\PGI8<)_[I3`&W<RFV``.1.2@<F9`R +M.Z,NG<GZ(6-)J`3MRE`:)!$<*"2W8Y[A^JVNG6;VMD_U+/Z6QSZLC!G,+K7V +MWEVS06Y/`4J6LVWH5:K@P3''8+4Z?;%K@UNHYS!Q^R'IM-H9#X).<\+7Z!0# +MZ_J$CD0N.5KIBZ?P?1:UNIQ@]IGNNSZ=1)<#`6+T.V93I"0T<X73=/IYWCX7 +MF[NVXT;*D-#<$!:_3Z.F"(@*GT^CZ=EKVC`,K-=8O6E/V5VA2`SRHK-HR`K] +M!HD#*-Q)0IC8A7:%.(TA0V[,XV5ZWF`8E%2V[,#"M4VDC`P@I`00,0IZ$C*T +MR36$>EW_`'4],#5'9+^K?/.$3()$;'E0-4;.3VW2`,`$R1V1.`'NG8W2Z=_? +MNH!T`YXV2%/<SE2N`D#NI&,!&?N@JFD0"0)5>[+:8DK0KD-,3L.5S_7;P,81 +M.2LVZ63;/ZU>L@C4N>J^96JG<B5<<RI<UI()^JUNF=-$:G-$^ZY[;Z9%GTUQ +M!<]ICC"MNMVTF_E@]H6\;=K&Q_9974=+'&9V5TDNT?3F#7LNHZ32:&C&`N;Z +M29JY75=.+6@"-L*XM5H4:(<,`&$-2EI)@84]"JI:;0\C&ZZ\5GIFNI2/<*K= +M-TCU2NA;:MVC!5.\M`9V'NI<5F3F[QL#&RQNI$$.]ALNAOZ8;J@RN?ZH``3V +MS\KG>'1QGB9S1JS]UB]-@W!+5K>+B"TG;V6-T36^Z[:3]E/C&3IZ+8MS!SLL +M?K+<Z=^5NTJ?\@>_=95_3)?EOR4E<Y&#<T?+$B)&0M+HEZ�\S*:O;:J<PJ +M#0659_1:LVL_#H@UCJQ>#/;*Z+H=:EITN@G;"XVRN@)#S@>ZU;*Z-.'-/U6= +M:JW>M.\M7-;3D\*AU_KUITZF2^HT1W(6-=>(&6]@XN<!]5XO^)GB^O6JU&-J +MNP-@3C]5Z<.MO'GWIV_BS\2Z%,O;3K8'O_JN0J?BJ[SQ%<P8V/\`JO#?$/7K +MVXNG`5*AD_E!.5GW1ZE9U6/NJ%:FTY&MI`(7;]JWA)I]3>&OQ#IW,!]5IG$$ +M[+N>F7]#J%MJ:09XE?'OA?KE=I:"^#N).R]P_"#Q,ZJ!1K.]0.<_*XV7"\EU +M\=OXIZ2RJ'56B"1A>=]6\WI]SZB=(.0O6[A[:M"<&>%P_C?I+:]%[@T`1O\` +M93/'<X=?'Y/E8]K=,JL948\2.Q72])O?.HQJ]2\ZZ9-G?FWJ$@'8<+H^CW6B +M]:T.])[_``N%M^O3K5U'74G;F!"EID'(.>P4-L-5,3!'96*3(GNMPM0W!#7P +M<SNH:M5NF0,*>X:&DR>%0N7RSM"Z1QR+1J]0>(*7E'_&%6\QO^RG\QO;]5UT +MX;?(=S`,`AP[]U7J"'=YR)4]P6DQ(D<GE5ZI;`(,[X[+UUA'/&X&X49``!&Q +M1G3)GE"8@;'X40TDP#E,,.G8A&7$L#3$`R$((&44H$D&)PD\`G?(38U2)SLC +M/Y8QG]40P(R!]^Z<:0Z7'&^R83SMPD021P@.D01$[\I0)V&W?=,W;$@_*;82 +M52G#6C(^436MW<^,;^Z$9.R7^X0)V7D[Y3N;!.KC:$@V$S]I/^PD#Z6D1D$( +M2UHF<E(CF9GA(-)('/RH&`U'YQW1`$?/=`"0>Y[(].F6ELGB#_DJ:"0!L#'M +MRD(_*1F-TGD%VXPD"-,R"XJ*0'H@[CE*'3,_ZI/`(Y^J=FDND?9`@&:#).K@ +M<)23C4E5!D'(D2A8`AH36G8'/L81`[`B.Q/"%H(_F3@8[IH9)R8^TH$3`B"G +MR6:9'>4_Y6G;`Y*%@D9)]D0S6#`GZH]()R=DP!`&84M33H])@#@JJC$`=@,` +M),P[5!(V*1,Y,`%,W<F=^$#P[D(@TZ2-O[I1$"?HF.#Z3"`FMDY(G"9S"XR" +M??"<#`DP1[ILCU<?V1"`]A[>Z<`.=$B?V2`#L1_V3DD`8CA3H,`<F28V[!.W +M43E*"=L2IK5H-5K-LS*#J/`71ZMY5%31+>_?V6_XP8VW:VFT-U;=H5[\.6&C +MTXAK,D3\+/\`&.IUZ6NF)V"XYYS?JUAX[;[52Z)0\RL=8+I@8*[+HEGH:V`- +MYPLCPO:%T$@D[X7:],M0W3I&%P\EVZ3AI]%MA`U<KI;"B&M@9[+,Z50AHU#E +M;UE3U$2V,+FU(O6#7:1@`K6LJ4C\H5&SIF=_JM>UI'3[^RC<6;9@:9$*];4S +MA0T&`$*_;T8Y*-;36],`CLK5!D-'LHZ;6@*>UAPGCL5=":F`0`3/]E8IC$<0 +MHF`[*:EL!,!6"4-]0,HP!'RHV[_W4U(2)[J$`W>8(A3,9)S`A%2IAQRIPT!N +M4T(6TQ,$\)5H8P03E2NTB?=4>HW+64YD*45>IW(IL))7+WCC<5=,D\JQU>\= +M4):UQ*/I5`$!SQ)]UQRNZZ2:2],LVL`)9GW6DXTZ+,B!W0.<VF))B,K!Z]U- +MP!:TF"/LIO2^NQ^)?$-O947_`,QH`]UPM;QK1N+WR65&DSM/^JI>+A<7K7_S +M#GW*\TNJ%?I/7J=1Y(:X[Y@J7VK>&..^7T;X:K"XI"I,SW74VE2(_P!RO//P +MVOA6L6YS_P!UW-O5D`XE7&\)9RV*50"`#A7;6L0T$D2L:C4(]2M4:OW"Z3)F +MQLMN1IW56]N?285&M<:6D3^JI75X,@._T6KFDQ!U&JV""`9"Y[JC_28C*T;J +MX$.AP^%E=1?JIGV7.UN<.,\6.!!D[K&Z!J%R6G'Z+>\3T=3'/VC]5B=#9%WM +M,G"EZ+'7VXF@`<E5+F@#QMA:EC2/E@XRD:0-0J1AB/H$B%E7=!P>2W8KJJ]$ +M1$+.O+8%LP`MQ&`ZB1D'/[([>X=3<`XF#[J]5MP&$9SLJ%S1+7'>.86M;5<N +MZ(O+:`001C=>4?BAX9NF:JUNS#1D0<[>R]/Z9=.;4#7-AOLMFKTVTZE;::C& +MND=EK#+5<<\?KY)\,7%ET_QI:W'5Z`?;TJFI[*@X'RO6/_$'XT\$7_X?OL>G +MT[*YO:VGR'TF-FB`X$Y&TA:?XE?A9:W=%]6VH-94`P6#_1>&>(?!W5.FU1Y[ +M/29&QD1$S]UZ\?[>^WGRQF4U^&9T6L0]I<W\OZKTW\)^HO=UIM,-($P8^JX3 +MIUAY3,,)=M'NO5/P=\-5*50755K@7&<K/FU88O9[2HYUJV=U0ZN/,HN:3L%< +M8X4J$3LLN]N&ZCI=@<+E>(N$W>'`>+Z1H5!5:(`.3"BZ7?,?7I"#+MCP5T7B +M.C2K6K]0W"Y#H]L*74H!($X,KAY/R]F&OKU+I%8.MV@X,+0:26R<K'Z!'ELW +MD>ZW'M`9(/RKBEJG>G+O5CGW61>U0`8=\+2OGQ.?E<]UNNUC'&?U7?&..5X5 +M*MZX5"&D0A_CG_X@N?KW;_-=IV0?Q=3_`&%W<O6O`[D#S"7&>%5JN].D1!5N +MX+7OEK(G8`[JM<L+':7"(X7>N2%S2,@$2)R@&>%(X3$ND(1`/?V32ASI(@I@ +M.-T<NR!]<I.+2[`COE`!,[82>T"(TDD?;V1L$B"\#G)_1!IYS]U`B#JV^R0D +M081-`#ADHB!L'?W5@8DNW'Z0$VDGZ(X])WA)S=D#`^F,S^Z8"<1E.W:"=L)$ +M$"90(3$29W14C#FRT'V.Q33@YB.1RF(@9A`3RW=I4=:=3B'&"BS`@@2F<YP& +MG60#N$$;OM*<3L2?H4G:NZ0S$_LBF#=YF$\3.EWNDWDDGX3Q!,$*:#$G;4G: +M3.)38)C=(G$*AR3P283M)/=,"WE.2)B`1WV4#ZCR3&TIL[`PGYV$!,_?@]I0 +M(EP&28"%KB8!/W18#>-LYW09)[J@I))@Y"D-1SZ(IP(;[*-C9,$@>Z)H])R$ +M#$&3V[A(`B#"D;ALD84CRP6X:6#6#.J=QV326H7$XS/PF(=));]`C:9(,#/= +M'#8@E#8!J()&0/9"3#I<V>Z.!IF"`>$PQ^5L'N@.D3.!N-TU0D-@3*3=X@9V +ME$]D@X'R%`!(#F@".,KHO`/0J_5NIL;HEDY*PK.AYM9M,'\R]J_">SM[#IS" +MYK=3LRN7FS]8Z>/';J.B]!I6/3?+#`-(R>ZX+QC18[K@I,=MV*]*ZSU.C0Z: +M\AW&%Y:*K[[K3JO+BO)CSD[R:EM;_ANWAK1I=\KM.C420"6K!Z#1`<UIQ`C; +M===TFC#`,I]<JO\`3Z1:X`C=;-K3../=5+*EM#25K6K02TD05*W%NPIY$A:= +MMC(W5*WVQPM&U:3[?*C2Y;#8PKU!P)WA5[=@(^%88T#8*JLTCZ@)QRK-NX0? +M3"@I`R.59IB1/*"1F'3F%,P^J)^JA;JGCY4]$9R,%3:I&@D[%3T],?""@UQC +M;Z*5[6CA!(VII:9":I7QARJU*P!W52O<-;JSO[J6FEB]N]$S@+G.L]1)!:#O +MV1=9OP`6@Y*Q&%U:M!,K%R=,<4ULQ]:KJ,Z>RW["GHI1!/NJ_1[<""0"%M4Z +M;`T8CX7.1M0N*3GB<_"PNOT&LIE[H$!=:]K0"3PN3\8%S@\,)5LU-D_#A^J> +MNJ?9<=XXZ36NJ(-,B09&%W#Z+G5O4/JAO.GBK3RS"LO&EN.KM%^$[:M&T8RH +M22`O3K0N\L?YKA_"EJ;>H.R[6U>&@">-RL8S2Y]M"DX3$J1U9K6Y.0L\W`8" +M2<!9/6^N4K5A+G#'NM[9TV+R^`)`<LVO>R<N"\W\2_B):VE8M=6`(]UF67XA +MT;FM#:HRL7+ZZ8X5ZHZXU[F5%7<U\@1\K`\/=8IWK`=>>RZ&VIE\'/\`FI,C +M+'3'ZW2!ID1PN>Z93#;T;[KM>K6Q-N[&ZYFE;Q?2-YRM6\,1NV3]-,@[*>FT +MG)RGZ=;%U,$;J\R@`?WE,>6:SZM,021"KOH!_P#3]5JW%`$8(*A%&&G"VS6% +M<VL&#PJ=U;`4W-Q+AN5T%Q0;JG]U4JT&G<#/*VPY*ZHFD9`(*N=$Z@^F0UQV +MV"N]4M@>!LL>O0<QVMLA6KW.74FM3KVY!`]EQWC'PQ;7K7.\D$GL-EK=*NM1 +MTDG_`#6D]OF-@D&<JXYZXKEEAJO'*/@ZA9]2#ZM,%L\KO.A.M+2@&L`"TNL] +M-;5S`^BQ;JS-*F&M`$<K6^>$]99RT;[J%)S(:1]UF0ZM4]!D$K+N65&F"=D5 +ME>BW?+B2`N>6=^MX82+?B"U>RS+78D+DK*FZGU(:OZ3L%U=[U)MVP,F)[K.? +M9M%<505G/5G#4NNW0]`+6M!)(A;AJ,-'4:D'@+G>GO#6#U+294+F$$C(X*WB +M9(>HU@1#>5QWC"[\J@:<P7X"Z7JA&@DN/U7"^)W.N.JT;=N9*]&$^O/E?BST +MOICZEA2J%IEPG]58_P"$N_P%=?T3I8'2J`.^E6O^&-3ES]WQS5W]APJIW$`R +M5:O=+JA<&``F855X,D@8]BO6RC>3J,[\@I2P$Z09XGLDX3).23W0/W'<;H$( +MP3E,8G?!1`9Q"'?!_P"R!O8@GW2';!1%C@W+26S`(3.:0^1('$JAA^6(B$6\ +MG?;"%HR`"B(@Y"@+4<'@)#\LF4#<MW1-((&-^Y5#YVXY3/'<$)H)"9X).24! +M.<!L9^B0.?9!F$T3$H)`6')&3NA?#N8'NF)SN,)MW3!'>$4HVQCW"<'./W3` +M83!L'`4!.;!("8>[3LEI`,28`S*<`:?9`P@`04@)G"1$B-B$6F&_"H;TPGF! +MQ]TS0=<3&.4S=Y/'NH@CEHS@)`#5ONG`(W`^)3&)[>R*?T@'T@CY03Q)E&V( +M(WG;A,V`_@9V"(:28R8E'ID0-TY)#2UKX!W2!@QW0)H.DR["+4(@Y*#$P#NG +M`;OPJ&D`@?NB<2`1&>$((!QD)<G5'V0&R'-C?Z)G-C))]A":D&EI#0G@C&([ +MR@>F)=)!PC,MQ*"F,F!"EIM+GC2TDSG*@N]%8'7;7`1G.%ZAX4N7&M3H:H!@ +M&%S'@SI%-U'4X&>Z[?PCT84KP5BTX&Y7F\MEX=\,O6+_`(W:VAT@PXDQB%R7 +MA.@'W7FR22>5L_B9=Z6-H!RK^!+?8N$Y[+CCQ+8U;P[+H=``-DB>5U73*>1C +M'98O1Z0$8PNCZ53AX)V4VQ(T[)D1Q[+1H`$P!E5[1H!SSP5>H-;M*S6XMVS9 +M`,%:5N,#"J6K1I_-^JT+1L-U;A%6J$Z5:8`(]U7H@=HE6!M`$JJGIQ,*=CL1 +M.%!1VR-E8HB8,9*C6DM$?4*S1:V1.%#0:6^TJ1U4-W5V:25:[J;]-.GC<F=E +M%=5XY_55[BY`$ZMUGW-QO!E9M)%FYNL8&8PLZYN"9R@=4)D:OHHG-+C]%BMR +M,[J=1SGXF$NFD`^KNK56VUSB%&VV<P86+MVFKPV>G5FM``6BVKK:`#"P[*F\ +M/`+EJVI(@?ND6Q/4<\LCA974+!UP3JV6TQNJ!PIQ;-TSI]UO6V.G%U.BM827 +M#G=05K#2=L=UV%[0:&N`;E9-S1;L`5-2+.6/96K6OD"(6FU[64LIVTAO^JAN +MA#2&\+#2IU6ZTT708,+@?%+[BZ<YH<0%V=_2?5:1)@K'N[`YU-3MJ33PSQST +M2]JW#G4VN<)69;=+OK=C7.:6EO*]TN>F6[YU,&5D]1Z-0J/T:0>(6KG9#'*N +M:_#?JU>C=,HUB8G&/]%[CX=N&W%HTC)/N5Y=;^'Q1K-J,:`9X7HW@FF:=%K2 +MXDQNN/,K6=F4;74&`T"#&0N9-$-ZA`&Y767PBD8,K`#`;[5L96ZY1M]-MR+< +M1V4WDN`("L=,9_(:8X4U1OK.%TG3G6<ZE`@A0U:9#96C5I3PHJM*`<$K49K* +MK-!/^2J7%/>/LM>K1&8'TE4[FF0#`!51AWM)L:EDWM$`D@[KH[JB(]0"RKRB +M-41^BC6G.D/IU"YI+2M3I=X'0UYSLH[VD`2"/LJ<>55#FR"J6;=`ZFVI3G"S +M.J6@+.ZGZ=<RT!SOD*2X<UV(P597"RQR?4K8"8"P[VB0X@$Y79]1H,<3PL*] +MMOYI`B%N\PG#&HL<*@)V[E:#'M%/)!)&Y45S2%/U1D*M4K@-U2,=UPUJNO<; +M%BX&)S/NM`NTLV6'T5_FD$#$[K8K5&LI29F%UPY8RX9G7*Y92<22,+B>AU#> +M^,=.N6M.P71>+K@MMGD/CTG=9OX2VC+KK!K%N=>Y7HG3SW\O7>EVX'3Z0#?Z +M>58\@?X5IV=LP6K`!B%)_#M[+K'E?`-Q)JDSG=5WP<RW'ZJS>.EY@0"<<JK5 +M?G!)^5VKLB<)&,DH,[`C*E<1.VWO*!Q;I(@ZIP>(4-!R3,),'I(D=Y3EPC`G +M*$F3/]D#N)VC?A.2YP&HR>QW0!_^RG)Q&^-^Z:#9!B-NX1GU.)(P3F,)@8G; +M/UA-)D-)$#8*AY$!K6DG^R4XVV288[#Y3N)!(TX]U`S2=XA-F8C'=&S:8QLA +M<[.V1A`T@-T@9F9X2).F83NRT2`8"%Q((B$T'`)]1!SRF<T@Z<&1/=2LK.;E +MI=MI^G9`]V9C`[*J$@Q^6?A-)&8*)N4S@-YE`HR"3]-D],P8C8II'=(QI'Z$ +M*!R2-FE,3&THI`&\D'9`"),H$>#.R<9]Y2!W`&4[2([_``J"#HD&"(V*8$;C +MZX3$B,3GW3LB,$SQA1"8`23JX3ZMH/RG%0:1Z8@S,)C^>50\C5P)2)$$P/9, +M=$A$S000XG:0BADX[)-/9.V"1.>"B,:1IC"`&"&_*?&Y@?"=X$0(CDII!,DX +M&\)H)OOE$.^`WMLD0-YS&1[)@?5B/[J(=ADB`M#H],5+EK($SLLX1W``XE:O +MAMS/^(4]1`$J9<19-UZ1X.L7-HTSGX'*[BT'D6VJ,`25B^#:;/X.F&Z5T=YI +M9T^I$8;_`&7S[;M[,L9T\W\;W)N.M>6TB-41]5T?A"EY=LR2)A<E??S?$3R9 +MPZ%W/0*(9;TY'J,!:O&+'DXNG5]%&V%T?3&-P,@\K#Z'2'E`RNCL6P!@CX48 +MC1M)#8._RK]!N0"JELW`D-^5>MFR!$K-:BW:#(,+0MP!OM/=4K89VV5RD1GD +ME%7*)C`&RFI27*O;\*S1&>))V2M1:I``S*LT0,$E04FY$J9KH&!NHJ8OTM]X +M5*]N!,:LA/=U@![K)O*^IQB=E+5B2M<:G$`D*(ND$3E5M0D[H@2,0IMK20X^ +MB-CA`(.5&R'$#E6[>A)]E%!2]3NZLTK<$"1NI:%L"9A7;>B(`(5TOLJTK6(+ +M6Y5RWMR`)^RMV]NT1'"L,I,V5F)[(*5,1B,=U.UOHB%,RB`,DPK%.@(!W6IB +MSMD75OJ!.!&2LJ]MW-<3NNJJ46EN6CX5.YMFO#F@#/)4RP=,<G*Z71@;*-]) +MSC,86[5Z<W48F"D;"&@=NZY>KI[1S_\`!S,A4>IV8T'V755+8`0,E9G5*/H( +MVQ*FE<)U!OE.?MA95-CJESM,E=9>=,\^L0)AVZL]/\.`.U8.%B[IN1B6=H*F +MEI$+J>B6XI4P1`14NF"B[;;E:%*D`P8XX*2<I:J]3>!1,[A8]@T5;V?=:/5W +MM#2TF.%#X>M]5?61REYJ=1TMC1B@&B9C=$]FY.ZFM9%,<!'5`[_5=XXJ%1I4 +M>B2<A6:S=1C:%`6_>%4JI6G@?*HUQ.P^5I5VAQA4Z[(;I)"J1GW=.1,02LVY +MHF3^F%MU&C3@@_*IW3&AIG[J::CF^H4C!D[%8US#:G(@[A=-?T0YC@!(6+>V +MA#C@&5-MQ3MW.#Y!P<K0;5)9E9_ENIO@"0,Y4[7X@'C95SRA7A]&#*R[]OIG +MGV5ZX(#9CA4*YD<@+<<K&7?,+V1)G^RY[J-9].OY;1.5TMZV-7[KF^K4GNN` +M1,$\8A9RGTQO+H_#%*+=I(@]U9ZM4`)@^RJ]!?Y=D&@Y`0]2\VK3JN8,,;)R +MKXYPF=<GXVO/Y6AID@[RND_!GIU6F&W#@<G405POB=YKW[:8[QDG)7J7X14Z +MK;*DUV,`8^B[R<R.&?$>CV];31:)B`C\_P!U7&!&HI9_Q%>OT>/V?!5TT3J( +M#>T&56J@1+3DXRK-P/YG`/;=05&>K2X<*O2K$Z9`!!^4GMTZ02<Y([(W-&WN +MA,2>W!)4`;B,;IB,Y*>!ID83Z,$E`+A.!*9A)&Y`]D<YF8^J8@S,G[*A-;NX +ML($Q,)#\T'[!(`<S,I1+H`_T0(&=X!"3L#<X/T*)H&C;,[IC+G:B20@9KO3C +M.$B&G.T\=DA`W"(@;9A`.YSA,[#2/H%(X2?D90M:)(C$_9`+#C]4=Q1J4M(J +M-`-1H>,S@[)F$MJ-J`!VGAPWA27ES7N7,\^IJ%,0T1L-X_5!`P-`,C!_5.(X +M&R>!`<4Y:-.HC?*`($[3E-$$1RB($8R)[*ST9]K1ZE;U[VV-S;,>#4HM=H+V +MSD3PH*PS.,A,YQU2[C`^%/<FD^ZJOH4C3IN<2QDSH$X$\X43J<F.(^R``T$8 +M(F=DP',<J0T26X!_R3FF2XC(X$E4"TPXB`0<2DW$1D1OS",L(=Q[%,6$^HN` +M^2H&$1./ND^`8&>^488=,EPC@S"8@#5(:<1GA`+FM!'O[I-TD=C\I.:#_4`# +MV1A@+8)&_=4"($<HZ+A3J:NV1'?A,QD"-6Z=S&B(<!B4`AH.2[)RFD2?43]$ +M>EHD:D_E,`:2_A-@&'W/=%&29.W?=/Y;/\8']T!#)F3"!L<D[[J:W>:-9KQ\ +MSV0!LMEDCZH(PX3LH=/6OPTZ[2T4Z%=X#L`2?9=IUR_I4^CU"QP&L0#*^?>G +MWE:U>'TW?E[+;/BB[KT!2=4,;+RY^&WIZL/++_9TW2GBKU\O)D:H_5>B]*IB +M&,#3``@RO-/`G\VY%0Y)S\Y"]0Z,"6,Q&Q7/.:X8SR]KMU'0V::;<[?JNBL6 +MRT`F,<K$Z.STMG.%OV`P#N3NL$7;8`&(5^V&`Z?H%4H,]0,>Q]U?MP<3\J-1 +M98(`D0K-%IB95<$@YV'Z*:@\GX^4VU%VB,`JU1C"K6WJ`5IK0`,J5J+`VU9" +M:I4`:/5!0EVD8^RS[^X+=7J@!2J'J-Q!/JQLLXU2Z<SF=T%U<&H^)4=!QUP= +ME!8:TDP"9^59H4G:<R5'0;)!!]U=I#/;W[*:78K2E+CQ')6A;TAJ$`3ONHK> +MGD3E7Z%)P:.<YA61+4E&D&R>RL460)A-2!=@8PK%(-@3\0M*DIB`TR,J2F`7 +M)`!V&P2G9^;M"HL4Q(]E-3$-Q^JBIG/]E/3$C/PMQ*"KANP,JNX'=6ZC-\J( +MLA^)"595>G3#B<"$]6D"V8E3,`#\B/=/6(`(^JFFMLRM1R8$86;U"WD'`6S6 +M[XB%1O=);@;KG9'25S;J.BX@C8K4L-#F`1E5NHTAKU-$'=*SJ^7$F5QZKI9N +M+US2U<1"JW3A3IND20,*=]VSRSZA*PNMW^#DB>)2UF1G]6K&I<Z`5K^'*9#! +M(^JP++57N)W!.ZZKI+0RFULS&%,>TRZ:U'#!S")X!&-^R"BZ![E2O`^(79R0 +M5&&9(QW4%1F8C'=6G-QOME05)F`JE5JK`!@&53>S)5^O.D\*K4VF=E44JS-! +M)5"\!+<8E:=U!DA4;B#@G)4VU&749)(GC*S[VE`+8,E;%8-!D$*A=AIU1OOE +M-*YZ[IN;4)B.,*`@;[$\K3O!/ITX69=L]4@^\*QJS:.JXND$<*M5T@1"FDD^ +M^RCN"-)!&58Y933*ZBZ).^E85R]KJL-'J&5O=3PUTD?*PJ[8?M))PY,JXKMC +M6+:6(B),*OU*\++=[FGU.!!,*%U;2T,&_99_7*[OX9P$1&4PIE&+;UA5Z\V? +M5Z^WNO:_P_I>784_3!(F>Z\2\)M?<]>:3_34X^B]Y\*L?3Z6QH&-*].$_D\W +MFO#3?<L#R'-,C!A-_%4_\)5.L[^:['*'5[+W/%M\35H#B2#CE5JH!XF%8K1) +M@P%`^`X:_4#N`N;VHG$Z"T_E&0/=`?B92?ZC[#8)H..(,[H&V!E)H`/_`'3O +M:00!VF4P&0$");DP!/Z)B"6@QCO*)^<F7$<RA<XP`0"`H&W.HDRG!`9G&(W3 +MD@DN``D[#9(P)VGYA4)H]4B8Y$H@.QVW3-,[`RB$'!*!M(T@YG:2FG$2?E$T +M8[I%IT$D2$#;@0XR1E(8&'9.$FP.9]TG;",>T)0YTD[X]D`&X+D0@-$B?HA. +M1(R@=C?<P<I">2-LE-Q,0@:=.YQ\(">WW3`Z<R92CTS'SA(9.1L@+4Z!)3!Q +MU'8)W`$`C*1#7-)_+`^Z@$O=J,.,)M9<6R2F,S(28UKJ@:7:9_J*JB#G`G(P +MF!=@G<I#!P9,[IB1VE`@2#P.,)VN,&2,8RE(G_-,T2=(]1C;=0*?3G;X1AQ. +M&D1*!PSP([E*??Z*B1I,C&R<ENG!!GW0-!:S43B8W3P)B1!4!`D`GO\`5,\G +M5G)XDI2.\`>Z1D@095(4F/68E(NA^_QE+20(SG8]D[A#@`\N`R3L@=CM.'-D +M1M*$.,'3NF:`1C]24I]1C"B#IG`](GY4M!H\P0/U45,8!G92VT>:-P)RBQZ) +M^'E.&LU8C$_9>H]$;AITXP%YK^'%+66DN:.TGE>G]$IP]LU&G"\7EFZZ1U71 +M_P#EMF8XA;MF8`GY6)TMHAI6W:-,`X^JYUN-*UG`S&ZOT(`ET_'94K1I(GZ* +MVP:>2HTG)D8)D[*2T$B!^ZAI9V<KUHP'.!\HU%RS8("L#;V_=16\-`SPC+PT +M079[J:VJ*\J:)D\+&ZA<:I;B>5<ZE6'JTG*Q[DDN)/*R!8XET'\OPK=O3U.S +M\JI2@>TJ]9MDC8B4T;7+1AU?FPKE$MF9D[95>@P`[1"O6H$[X*?\6+-J#J#B +MM*W`(`GW5&DX-P#*O4*@:!ZLA6"Q2;Z"1]DS"2^",;RDVLTX$2I&:"Z9&RTL +M'2,84[#J(,`2HZ6DN$?=3!XF`=D@D8R/ZL`*1CHV.V84#*ITZ<;J1KLC:2M" +M<.PF$%V^/=1.?I^4[*D"<*[-)7QI)D;J*KZA&)3O?)F,)M33)4%2L#JSG*HW +M^)P%H5R-EGWC06F2L9-XL;J-32#E8ES=Z'D-,0M?K`Q`.>"N=NZ9+BX$X7#) +MZ<$M:^/DDZ\]ED7]TZK5#9QLFO2]F!RJUI2<ZM,<_=0L=%T"D"QN`)72=/;I +M8,+$Z*P-IMANVZW[0[?"UBXY+=`$NF,*R6:LGLH+8^KG*M2"(E=,7.H'M(DA +M0/$YB%9K8!C*K$R2(SRM(AJ06D'M]E3K`D?*N/@XE05&C/8<H,^X(F#B%3N6 +MMTDM_17;QH@F=\`E4:\G!/'=*U%.LT#X&%2N\B>>`KU;_P"["S[P2^`?JC3. +MKB7$[$9^JH7%,:'<DK2N6@`DJC<B!$ITK+>0UY]E!5?+C[*6[:0XF8$K/JO` +M>?4<JLW$-Z&$96)U!HF)^/=:]T\%N3@+&ZD[USJQ]T^//E-51KO`>0[A8OB> +MX:*+@2&X[9`6G6,N=J<X97,^*;@.+QJ)SF5OQSEFM/\`"JFRKUD.=!@_W"]X +MLGLH=+9IWT_V7A?X1@#J`<7""<#[+V,UGML(.T?9>GPS^3Q>>HJUZSS734C* +M'^-I_P#R+!N6N-=YU')[H-#O\7ZKW/*^7:WY@V`3['=5J[8)])'"M7`!)*KU +M-);.?A<'N5WD;<E#I&Y'V1G)W.$Q(TX)^J@"0';?0I$X+I(G$)P`1F04SVN` +MQA`&HDXF$^II$"?JB(`=.1^J8P3OCW0(E@,M)]TL:I((!2(!Q'WQ*38`,EWT +M*0.TMP&X]T[B`,Q.R=L;[RF@3B539PZ/C9(N]\;0FV.GNDYHWV0+$2#OA*I& +MF2A`$P#$(J[FOJ:F-#1VW40AI#07&(]DB0YL`3R7<I?U>K./A,YIX./A#H+0 +M"(V^4B2T07$CLG@1G<;82<UIYD(I'8P=T(@1+D\#/JE,6R>ZH(")@X3.+=)W +M)3_T[(7-,?FQLH%)$PF$\$%/I($2DSG2=MT#`NDG5D^Z6VQ`QLD0>=NR$P!W +M^J51$_U2,\2GI5#3,M,&(D'9`UH.Z<@!`MR8.V8)2/M@]DT`'O\`!2`$D;_* +M!QN<A.`(()CX30=P0B:#J.HH'+=X.R;8C$_">,Q&0DYL8@;;('#LG`@IHSF` +M/A.1C:#O@H3ODX0$T8P`4B)$:1/>4FMS,.A)S9=@[(@F2/\`)3V7_/;C"@`X +M*L].$5`,CX18]'\`:139(X7IW0A(;"\R\`L,,#B97J?06AM-N%X?)/Y.N^'5 +M=+@-:3QNMRR`+1DQ&%B=*@M&(6Y:B",;K%:C3MP/+YV5BGAH[2H+0"/[J<8? +M"RTEI.@C'*T+,`JE2:(SLKE"&MW1J+3<`DE5KNL`(!QV2K5@&F52N*FL0TY4 +M$-R^2294%>JPT@UM.'3.N=PFNW$-,G94PYSZ@RB=K5`-DP9/*O6T-V!PJ-!N +MD@;*4U-.2Y1J1KTZK0T$NA2_Q8#0)(GNN;K]2T#33,RL^ZO+UP])(:<[)MOU +MUV[=G463ET0IJ?4Z9P'97FU"^NGW'EZX.RZ+IM"Y>`XN*;OX6W&?77TK]D@Z +ML0K=&^8X8=E<U_!5A3U:R.52_B;BC7(!)"F5N/:XW'+IZ!97$M!+E<I%AR25 +MP=GUBJP`..GY6]TGJK7#-3]5<<I6K@Z$C`@!."X9;((4%O=TWM$'=66%I_JE +M=8Y]&U.)R3E&S:$P`W)1@8C.%-&PAP)_,F<^.4SF&)&%&1!&5`U0^J95.]!+ +M294URYPG*KU'@CU'/99JQC]3I%TD;K%KTR)&)*W[_208"Q;W!)W]ESR=<:RK +MVAJ'PH[:AIJ`E77Y:3*%C0'3N5AO:[T^`0MRR/I$\+$LL'?"V+(@D$'A:CG6 +MI:C$85AS@UN`%6M.8(]RIJH],S"W&$55QR=E`70"#N5)4V)!5>JTB3,%79H% +M5\'A1/<'#(^O">J8YG]E!DDPJF@5@'-@B0J=S3GLKSF0"3^BJ5ORF/W6NS;+ +MNF.DPJ%<<1E:=WALK-KCU?KA--13N&!X^%F7Q@XV'ZK6K2LV\``D@(LK)O2W +M<A9%T(<2!CNMB_:",+)OB6@I9LM9]S5()@0LV_?J)$3W5^ZRPZL`<+(O'#6[ +M,]HX68XY,SJ3RQCO+S\C9<;XCJ@U<Q._^\+INN5Z8:0V,\E<5URO-0EIF#E> +MCQSEQSZ=W^"[7/ZJTN_5>N=>J"E99($!>-?@<[5>NK:X`"]!\47HJ4"P/]EZ +MO!/Y5X/U%Y57]0I%Y))W3?Q]+N5GTM)I@D$HH9V*[^S$E?/=RQH&.>.RK/TD +MF6\<*U6>X$_E^55KETB2`2N3U(@!JDX"&-1_9)Y)=O\`5($ENXQPB&<T9C/U +M0F=/?W1N)`$D9V0:N1PJ&`,;_JGQ(/"=CRUI(`AV"#E,QS2!'?9#9CET9/LB +MTZ1L1\*2N^B7@TJ98`T3J=.>3L.4S3+0[3M]D`P9V/T2$P2EK)))W]BF:X:C +MG`0/EISRFV/*69$[#ND2,`2BF&<@Q*0!W,E$8G/Z)AC9N_,H&VD$2-X3-ATY +M._=$8,<?)3:1N9@\DX4"&WMW"9TS.93M@DC8(G$`?"HB^=BCHN+'!['9;D'L +MG<1/I!CLFY)@XX0/4<ZI5<][M3GYE#'L,(RYI,B"0$VIH,Y01P7/P9/LD#P? +ME.^!$RWL4(TSOO[IH.<QD3RF'<D$I2#B-T[2'`P<CA129G)A"=AV1-(C3CV* +M3O*X)_U5`-WA/!!W"3@`2)3P)WXR@<`#U#CND#!S]D0PZ&_E&Z0WWV[J(;?M +M\IR(>,[^Z4,F&X!Q\)W@#TDS'(0,R(W@^Z3BX^WR4WHT[_3**6EH&G(Y!.55 +M$2#$-(')W09`AN?=)L3))QC9.<&<91#AW$X"N]*@U@=PJ;6D@$`1W6GTND&D +M.QE9H]`_#_-8`#CE>J=`TEC,%>5?A\0;IC2['*]7Z""UC>5X\_[.KING;@<+ +M?M22T2L/I>X&WRMVT:-(GCA<ZW%VW.!A6*8+G0H:(!SL%;MF@0866XLT&0P< +MJ1QTB04-(#Y$(+AP!@%*H:SS!(*KO=IR8E%4<#Z95>X(#42JUV^7$3A16U,% +MP=ND]NNI`,@*8Z:5/=-$A[BJ*3,X7->)/$C+)CB7[<)>*^JTZ-LXO>`!LO)/ +M$G6!>W[J;JI%.=X6+;O4>KQ>/?->A>'_`!11N+R7/G,1_L+L_P"-H5K::?(7 +M@5O6I4&MJ4ZI#VKL?#_BNG2L]-:H!A;PMG%<O-XK>8V/$76V],OA5J&&3NM[ +MH/XA].9;-#Z[!`Y*\:_$7Q"WJ5?RJ#O2WGNN0;<U!@//W5F][CI/TTRQGMV^ +MIJ'XAV%W6;;4:S7N=L`5UO0;47E`5WMW7R1^'O5FV/B*E5K/].Q/9?6'X<]< +ML[GIM)K:C2(WE+;E=9.'E\7[7]6A?='!;+1E46V]S:O],D+L:9I5&#U`SV*! +M]A3JR"``LWQ_@P\UCGK+JSZ9#7DA;O3>JLJ0-2IW'A[S:T4P/E4K_I%[TT"H +M#+0?=3^6/;M,\<G7T+AKA((A6:;Q&XA<7T[J;F0UYCY*W++J#:@`:X'X.RZ3 +M*5FXZ;3].GB56JF780,K2,$''=.XDB1"5-:15!J:>ZJW+0`3*GJ.TD@G"AKP +MYF%C8RKQYU0`LR\;(,B/=:MY3AI)P%DW67;[_HL5O%2TG5$?5/I/,(B3&-^Z +M"8=!^ZQIO:S0QMN%J]/.`0<E8]%P)Q@E:O3#!]E6:VK-WLIZ@!$E5:#HCD'L +MIG.B"MQD#Q!.57K&3A2UG3,*"I).TJJK5"2["'28D[*7TAV<E`YPV_NM1FHG +M.)&^_NJU?(CA3U7>G.55NG#20`M(IW+001NLZLT`GM[J[7<1,*C=.,F/T15. +MY=!,RLZ_@L)!A7;DDM67=O=M,@H,^NTQ(*R;W+HB/A:5Y4`$;$+*NZX)))D* +MEJA?._EF<!8M^ZF&;Y&X"UKYS7,W'U7-=4J$^81$#<K.OPY=L#Q!7,.8'3V( +M)"X^_+JI?.0<96OU^L#4>`[/"PJCCHYEQR5Z_'-.'DKT7\'!Y5HXC[_5=3UI +MI>#J)$9PLK\+K`T^@,K3EXG]5<ZS<^LM8X%TP0%Z/#.-O!YN<DEO3;Y+<\*3 +MRQW5>E5'EC40"B\UG<+>DV\%N7;-('IDY"IU6'))&#RKE8>C42T@=U4KQ,<3 +M*YO6@)B1B"F<P`'41V1.T@X(S,SPA(!F2)'=$H`)@#8<IG[_`"C'Y2.^R&`2 +M8B/<HH'!LB`?A$S0:<:I)X[)$>KO"36@/@=OE4.\$'26P0<@J>G7;3MRQE*G +M+CE[A)^D[*`-`)./F=D0D-@$`(&`],DC!2(;J<B:T?$)B,[1]4#5(:[(V3$# +M223'PDX;(@R8:(S(W4`B08#1(_1,_#>_`1%HG83O*8-$@$?7V0T89:?G,)X( +M,C'9,1C';=2.CR\B%0,Z6D#&K=)Y=`U2G#89,?FV/=(M$80,9)B4(:?>$^B1 +M@0$;8TF9S[H!#009"8-_I.(1N:(=F$+FD@#4<\H&<P1!S'NHB(=)^REJ.&F` +M[[('#83'*B@<(.^R1!=DF.,(R"'&9@]BG8T%QU:BT;P@%H+=."/A-^5^[H[J +M2&D$"?JA=$S'TA`TR?S"#WX1%S2(@`]^Z%D1S*8;Q.P0&#Z3D"<)-TDDDXW[ +MI/:)P<;Y1.:0R2[=$"V1L[8X2))F#+DW!.K=.T`.W/T[H'@D3(2`)D<$)JAU +M$Z73/!2:-,912CU8'^^Z/2(@B#V*`CTET@'@#E$,G5JB"J@K=LU/\UT%C1_D +MM,0.%B]/:75=/?E=3:TW"T)(PW("YY5J1T'@`?\`JVM$"<97KG1)\IN,PO(O +M`LBZG'SVW7KO0/\`EM)7ES_LVZ?I@@#/ZK;M1L9C&Y6/TULM!F%LV[8;.KA< +MJW%ZCF<J_0;GD^TK/H`F#(RM.S;@9E9;2%Q#-B%4J23)5FJ[$;0H'9$'"NC: +M%Q!R!LJEVZ9$[JQ<``0%4=)))2I"I-@:MH69XEZBRUMW0[*L]1O!0HDD@0O. +M_%M]<]1N#:VY)DY/99SRF,>CQ>/VKCO'WB&XN*[F4G'1/=<5_P"H=4)=J))^ +MB]1;X)-2B:M7+CG*Q;OPH^WNH#-0!Y*S/),7T,)CU'-65.N6B7[9C=/=U"PP +MYQ`[%=)5Z=</=HT&6M$``<*.MX4O:C"]M$GY*D\D^MZD<9=/<XZI,'&^ZJ5- +M1$SD;KL7>$KL/=J88!'U4'4/#%U;VVMU+*Z8^6.>>,_+D[>L^G4EKB,[KN/` +M7C_J'0WL8Y[WT@-B<A<;5I:7DZ1`*C:)$?7==;)DX98_*^EO#7XT6!#65ZP8 +MZ/ZCA=WX?_$WI=X6M;=TSJ'^(?YKXQ:7LR.V#W5SIW4;FVJ"K3K5&Z#OJ(4] +M;.JX7]/C>GZ`>&NKVUZR6O!'L5J]0H"[MM+&APXY7R9^%GXM_P`$&6_4*NGC +M43@[^Z^A/!7C_I'4K&F]M]2!C(UC_-7'/?%>?/QY8)NI]*+=1##J"S)KV57) +MP/==1<=2L[QYJ4GM+3[[K!ZZ^@X$-<TGY6+X_L,?+9PL]/ZH*@$.RM6C<AXC +M5MA<&XUK5WG-=Z>ZV.C]4%0:=0D?JL[LXKO-7F.ANJG:%&:GIR1\JLVL'4HE +M`:@.)]E*:*\+3.HX65=,TM*T*YEL<*A=G$AWT6:D4:DM)(Q[*"H\`8E'<.WQ +MD*M4J0V94;3T7CS/E;72WN(#L^ZY^W?_`#-UN])&IN^R%;5&IM`^ZD+B<'Z* +M*W`@2,J5Q:<R%4@'1F/^R@N'%H($J4D..\*"JZ'9=ONM0JMYD/DF4!?ZIVG= +M$\"<"`@=I@P<JQFHZCH:"3OPJM=V5-7C^DX/=5:T8$_Y%:16K'(RJ-V\3\*W +M7=B"0,K.OW`M(!$HBE=U0V<Q&ZRKZN`XD#=6[Z9)+C)Y61?O+FNC_LK%4.H5 +M]6RS;EY,Y)"N5PTSWE9]\XMIEJM8M9G4[EM.1J]BN3\17H-+TC2)S!6WU60! +MDX).2N.Z[>.8[:`PG(S*N$Y2ZDX875GDO<"9Y`5*@WS;UM!LET]X*>^KN=4E +MHEP)VPM#\.;=USXIIO$PS,_0KU7C';S7F[>R^&Z!LO#5*B['IR5A=4JL-P7& +M)GX6_P!8J.IV082`(Y7%=0JDDN(F-EZO%CK&1\_+^657V=2H!L2?NG_XE0_Q +M?JN6>^7DR<^Z;6>Y^ZZZ:]8X2X9',G;<JK6:7$RT;8"T[H>2#Z!K/YIV'^:J +M5:[)E[6O`P1IC[+S/4H5`X"=B@:(SOPK3G-8QX:^6NSIC*KD@B>WZ(!J%SW% +M[@.V/]^R",_F@SO*DC;4=QE"6AQ!(^@4`$&`"?@=D_IW=O\`*<S$D;93;'V/ +MU5!@!T^G_1(M!RUV)(]T-/)B?U1,(0L,"=X`GW3M$&3M[I/<"^-(`X`3O:0= +M+I!!RWE#02-+CS'9,"X8.W9$TM!!+2?JGJ5-1+G'/=%`!IW$RA?!='T4D>DD +M"4QT<S@930$3L"9&R,MD#@./.R8:"8[[IHT8RF@XGD;X2SJ`)."B8!&3PB+1 +MJS.1B4T@0SW/V3B0=XX12)TI@[!$H(W[\DE)[B223]E(`#."/=`\N`TF.\HH +M,:M\$H07$0<A.';<G9)D8!X13.U9V^J<.#1C20?NBT@R)`"8P0`<'NH@2XAT +M-/\`9(O!.70GX!D&>83>K,"1\H&:]P)(P"$W!).4^\"82()$3@I5.3@9D'A% +M4)D&2!P/[H&M`=C[IVN,^HC!W1#28QGX^48)W:0.P3:0,@X3L#9&H2#P#'ZJ +M@8(=)@E.Q[PSRPYL.()!'(_[I&(Q$#&R1$G3C3V"@)@)D'2"9WY^J1!Q(]Y' +MPF`Y..Z<CU`MB"9@H-'H30ZX)+=PNF+'MHC2L;PE0\VKS/M]5T=>GI:!N3L. +MRXY]MQ>\#S_&R-H7K_0!#6#;"\B\$M#;_3.)V^B]=\/D:6CLN&?:NKZ61H$# +M$+6MB2(_99'33D"`?JMBS:/3&WNN5;C2M&@C;]%HT@UK?=4[6=H5@XGWX4;. +M\->\F<=D-=H&>>45(-&\R%#?/`9RFH6JE5TO+0=E!5.AA<?U4X#34))^JQ/$ +M]\*%`M!S\J6Z;PQW7.^-NJ$%U.CDS$?9#X/Z4W4;FHSU.S^Z;H/2JO4KXUZC +M26S*Z\VC*%`4Z8V[+S[W=U[Y)C/6*%VVF&>6P?943TEMR\D#=;=G85:]3;=; +M-KTSRHD9"7^79N8].:Z3X48^MYCV8/9=E;^#;+^!DDZHSA6*#&TFB!GNIA=7 +M'_*\PZ2NF,QCCE<KU7']0\.T&U7`-!,[KA_Q&Z>*'3W,IXC$KV2YL:CJ+WR` +M<8*Y'Q7T(WC7`M)XPLWCITPRW>7R]U2VT5G`;?XEDUFAH&73)7K7BKP15I7! +M=3:8G:%Q_4/#-Y2.H4G.S!PNF'FDXKV98XYSAR]-Q>T3.,J1N@X!,QNM"YZ3 +M5MVZGTG"/LLRK2J-,220N\RF73SY>*PJC@&2''.)'T6MT+Q'U+IM1AM;VJS$ +MEH<8^RQ'3N1'M$)WD:,8'9:NJY^M>P^&?QDO;6W#+ISW$#=I/WW6YTK\7&W_ +M`%1E#4X,.[G'_5>!!Y`#I$D3(&ZEMKFI2>"UV1V*SZZG%<_VL+\?973>HV_4 +M>EC0YI,<+.I7KK._`+S&VZ\6\`?B(ZRMA2KU':F",G??W6[?^-FWEXTL<2'< +MA9\EEF[VY>/PY89:^/=^G7C*EN#KD0KC*HD1LN'\$]4-Q9M:7#@[_*ZNA4;I +MR5REVWE-+I=S,A5;P#08&/V1!YU3M*KWE26D?LCE5"[AI,;*@^H3G:.5+?U# +MF8*HEQ\S<%9K<7+,GS02<%=)TD^F`87/=+IEU0?JNGZ:`U@GG@++5:=-WIP4 +M-1QA,PB,[H*AR?=:VD(N[[%05W<3*3G9CA05'K4*%S\\QW*C>^!_JB,<S)5> +MX<!@G"U&*BKO.HSM[JI7J;F?U4M5Y,R#]51N'N&6XG?*J`JN`)^51NS&21]% +M-7>8D[G=9O4:@`,.CE61%;J#Y;`B?98M[6`:X=^2KMW7#3_=8O4:I>Z!WE;2 +MHJ[A$G8K(ZE5AKAJGOE7;IX;1(<[/>5SW6;EK6%PF7;DJ,=UG=;N@V3/I'9< +M5UJX#I@2"<-E;?7[II9`P`5QO5;B:CSK)/)7;";Y9SOQ1N:LO'IDCV7:?A/; +MG^.%PUD!HWWX*X>QMW7%ZRF&DS/&Z]L\*=(H]-Z*P-/K(EV9[_YKOK=F+R^3 +M+UQVGZ_?L<!3<<M^O9<CUV\ITNGN/G>H]QM_N5=\05A1N708U&%POBJZUO(! +M)R9A>SC%Y<,?:B_BJE3U^:&SPEY]3_YPJ%NXFBTM+H^`CEW=WV"Y>U_+U^D= +MGXR\-]/;3\QE,LJ'AIW7$]0Z8UCR((/*],ZXUUQU`TW?E'U4;NC6M>@T.'U7 +M.8UPGD]>WC]W1=1`U-)CF5"_2*8,[S(A>H=7\&"Z9_)<1&=ES]WX!OZ;=37A +MXY$;*;=9GC?KC3$("<SO*Z]OA"I3=_.!!(V*AN_"=<#71W/!57VCEB0!F<I2 +M#CGNKG4NG7-G4BM3<!W"J,;)+9`GNG#1SIU[X/=+T$-TM`(W=&Z?T>G&P[I, +MR<'[!4,79QQC9.(F7O,DIZE-["0]KFD\0F@3.<\(&!&0#)E,2.,RB:&YU`F= +MDTCL80(#G>$PTG`$0B@2E`T[01RH'I`!DDB>ZF)HFU`'IJ-,&,Z@?V4&S!P1 +MN40B<';.RH<@#'VSDHGZ0"21)0D@SEL>R9VEP`D;=T"D$$`1/NA><!H?,)P0 +M<')X3`$/,('80T;QE-<5"][JCX)=V$)8\N5&X@C`R/=`+LQ&D0B;#3L(GE"X +M#&1LF`':<**E!/&W*#5!+M2?<`2?9,6P"`<3L@0$\X3%N)B.(2]H'W2@MP8S +MVR@0`#`G@AA`&"A'[>Z378.<[9*!H)VPG$#!PD!P?NEIF3.RH36@8)!E2!H< +M,`F/=`W><%2-<6[8/SNH!:!D@$CY3:!S(/.$5327$M$#M,H#$D"3]4!M!([_ +M`*I])#])!!Y!3"-')?QV2+3.<(.H\&4PTS`&)(717=-C6^IO')6+X+HES0X+ +M<ZDUV@/.RX9]M1;\%TP+T$N$+UCH(_E-D$87E?@5A-ZQN"<KUKH;1Y;1,D+A +MEVTZ'IHV&J%N6#1@%8O3P0=]^ZVK!IQ$@=ESK<:UH,3(PIVRX`<*O0/V^5;H +M3IE1H4%C252N*PIU0_2UPWTNY5RZ=%,R8^%B7U:*AS"59-@OKEM.B7%WJ/9< +MK4I5NJ=3\O<3PKW5*[GU0P$$=UM>$[*G2?YM025RSYX>O#'TFVQTKHM'I_2Y +M;AP"IN:*M<ZFR"KW6+TN8VDQ^.<H^F6C0SS7%3+FZACQ-T_3K713D`2KF'&. +MW"JU;JG3)9J$!5+OJ]K;-U/JM[0L[TWVTG@-9`!D=D5&EJ."!]5P'B7\0K"R +M:[36:2/J?V7'W_XK=2)BQM2_$!SC_HF.6VYX<[-Q]!4*376Q:^X$Q.RSOXJQ +M94?2-1I=L25\U=1_$[Q@7.:ZN:378AK1_DI?"?CV\KWX9=522[NMY7C<A/TN +M7VO<.N6-I=UWFF`0=EC5/#=*H(\L$'V1]"ZD:U)KM0,A=/T<4[BHVF2/4N.U +MLN,>:^+/!U&I;.#*0'NT+R+Q)X9N;*LX%AB5]8=?Z53IT6N:X%K^.RX/Q+X< +MHW#S_+&<_"L]L:WXO+^7S1>652FZ/+/RH1:U0X^C=>T]7\$->\%M,#/`_P!% +M?Z1^'=@*7G/I^8Y@D-=^7]EUQ\UO&G3.X2;>"5:%2GAS7=LC*K.U,<=M)^Z] +MF_$;P>RM;:>FVK35:9FFWCM@+R:^M*E&X=2J4]+V&"'`@A>B>25QF,RFX73? +M56;F`<+T+HMK:LZ<7ZAJB?=>>VC8,!H!'NMNRZC4#6,U&!N)6<VKX[9.7M_X +M:W3C08V9PO1;![B!J.5Y)^$]VUP#>8WE>KV-352;F)"X8=/-Y>*O/?+("IW- +M0EN\2CK/AF<*G7<)SF5IYZI7U0P1.Z@MP7P3GV1WCB7'&$]AETD$_5*U&QTE +MD$%RZ*S_`"?V67TJB-`*UZ#2T`]ME%3,;Z!Q&Z"L1IV1>8,Y^?=15GG3GA6* +M@<<^RBJ[%&^I(Q$*M4<2[E6):=[X=&?E5JQ;$20B?4P2JUQ5):)@?"TQ45P\ +M]RJ55X;JER*XJ9+MRJ-P]V2#*H"ZK9*R>H59!`/W5B]K2>0LB^J03E:D9V@N +MZI#?4LN[<8)!W5BYJDR#.-EEW=:)DA7>F;RH=5N]!+3D+F>K7;7`AQU#D+6Z +MS6`$G\IW]ER75GZB'`B)5QA(RNNUAJ(#L@[^ZYVYESBX!IG`!5[JM8/J.:2" +M>\RJ=C1=5JZ&YU87IFI''+FNB_#OHW\5U-A<P1$_&Z]0ZC3=;64%T0(E8WX= +M=*=:6HK/;ZG#D*]XPOV,MRRI`G?*Z^#'=V\?GRW=.!\3]4TN>73O`=/^BXR\ +MN]=4OW,_HM#Q;<L-PX,?,GDK$IG^9G29Q*[9WG37CQU&K0)=2:X:A/9%![N3 +M6Y`HM!,?5'+>_P"JQMWY>K6W3!<.-2X>XU%H-Z;28T`-..96YTCI8-/43G=7 +M*]FUHPI:\#EZMI4;)8^?91:'-9_,9`_=;M>@T..<+/ZRP4[7,$\*;-;85:T_ +MC+OTLAE/<R@%FTUWAK9#$[>HNMP6MI2J5;K+V/-3RW#V"LARAZST6WNF%KV" +M7=PN(\0^%:UO4+[<2)VR?[+MZOB&B7#S*+E`_KMH]_\`,C3&Y"GK^'3'.QY7 +M6MW4ZNFH-)&(.$#6Z3(=MR%W/B2PZ=?,-2W+14W[+BKVVK6]8L<S8[PD_P!= +M\<YET9]6K4@/J/>!MJ,P@,EQ2+\>EH$)M3HB/]56B>-O5MV3AIQ!W33[!(., +M[!$V<9R8$>R4NT@H2XDF44D#;]478>9G?L40&-\?"',_ZHVF#,1[;H'8#ITB +M!_=)C!)`$^X3`N<Z`W/ZHV4JKGDMI.).ZB;@1,8@<(?ZL*=UO6:#+'`*!\ZH +M<"JNX8<QD'A`\2["?4T"8(E,]P(](,G=#87"!!'J2:V3$'/*=CF\@DI?U;%` +M0;'R$+@.\%&YS-,^W`0AS2W$_0*:-E3:/_Q#W3/(G@)PX#(D'YE`7!QW**9W +MN?LG.D-RGJ5`8@#TB)0:P3)X0/$@)0?@)]0G&R3BW$?H@-P;$S,I-.DB=O9` +M"W3$[;82U`YF(VP@>#J_*G<"3B#'NF+F@"<%$"W2<CY5#!H'])4E,'S(.!*C +M8YNTX4U)S-;9<`/=!V_@YH;:`[GN"M+J$:2"J7A,--C(``*L7[FMSJGA>:_V +M:G3:\!,+KO5F?=>J=$PUIC/LO./P\I:GDD;<KTSHX!(@B%QR[:=!8-#F#=;M +MBV6[!8UBW8@X"VK+`S]I7.MQH4&D-C!5JD1$QRJ=(G?5CW*G+@UO/U*C1NH. +MQIG98/53II.).5K/<ZH[=9'7ITZ=62=I6:Z^/'EA])HON;_(P#RNUITZ=M:# +MXW4'A'HU/RA6>-U9\0!M"F6@X"Y:O=>GVENHSF`UKD.X'"N]6ZK3LK')&`L2 +MCU!E%I).W*X?\1O$%9[#3H.=]%-Z;F'M4WBGQZRA4>RD[4Z8@'_1<9U#K_6. +MK.TAYIM=V_[+.Z;;NNKXU*HF3RNCI6S:8V(Q]UC+6+V888RZ8M#HQJ.#J[I) +MXW72]'Z=;4:`UM#BW]$UG3!>T`\\!=1:VE(V>&B8F96,;<JWY<M33C>I=,H7 +M37%M(-DKF3T?^%ZH"#&<+OKRF*3W`-()Y7$>+;Q]"\:[8`Y*WC;T87EZ]^'] +MH;JFRD'0T-G==)U.>DO8\5</&/9>0^"/';+*BUKC!;B94OBWQ_5NS.LN<-HV +MA)-37USR\65R_P`>K'Q#Y\,K5AC:2KEM9U.HTP:,OC:,KYLNO%767534HEQY +MQ*[O\(OQ;%A<ML^L![6N(]2W,;]<O+X[C/XO3[FS-$^5<42UW8A36%"DRF0X +M@`]U<ZUXCZ-UGIC*MK7HOJDRTL()`6795]>IIX4RGK7+&^^/*+J-K0\Y^FG@ +M\B%Y'^+'A9U6[-]0HQK)+H$?V7LKP"X&"8[Y5#Q#T^E>6I:Y@)`X"U,JL_AE +MN/ERM;NH5M&W&$SG%A!'!7:?B%X?-A>NK"GAQ.RXVY&C):"?NNN%]GJLFMQZ +M3^#MVYU4#)(`PO;.E5?Y`)'"\)_!>/XDQOC9>Y=.`%N.#"QCW7A_4]IKFL9P +MJWFD.)F92KDZL$2H8=&ZUIY052Y[HTX'<J[TJB9'(/"JL`+S(6OTEA=&F%+R +MU&QTVD6P3VX5]N)B3"BM!I8./JCJ')`D(L)SA\A5ZSW.$94PES<E07$`Y5@B +M+AM*KU7[G.5)4(C4#E5JAF3*K-15'G3NJU9\C.?E2U'B#PJ-T=M)*L9J"O4. +MHJG<U1!X5BN]K1G'O*SKVL)QL5J1*K7E3<+)NGSL=U9N*AEPX'*S;JIZG9$+ +M<9M4KUQ;,;+%OZT.,DRM.]?.`?N5A]5J,:TESC[*5F,?J]P\M@@QRN8Z_6;2 +MID`DK<O[F9,;#>5R'B"OYM<Z<&5UPG*Y<,BLYKZAF)/*Z#\/>E5+SJC2&RS< +MF5D6W3:CR):<G=>N_A;T5MOTQM0@A[ARNEN^(XYSUFZZBUMJ=I8-)(V7EGXM +M]3+'FFS(G/9>D^)KC^$L'DO&.Z\$\?=1-UU%X#@9*]N$]<=O!)[YN?KU75GE +MSC]$]#)AT.4#!!)@94]`MU`M])YDKGMZHV+=H\AL=NZ/2/=!;$B@T3PCU.[_ +M`**.D?45M0T4Q&,*/J-.*1(.0K]-N(4?4*8-J9WA9KP1S=.F*E4DF0J/6;8U +M(80(6U:V\`F/=4[JWKOJDM<T#X5HY>O8-&/+6)U:TA[FL!E==?VEQ@4W>HGZ +M*B[H]:"?,:2<J[9U8XFO8F"33#C[=U4JV&J"VWJ./,-PNZ_X34UD/=3(`[*I +M?V[Z3'4F:)(_I!E7AKVTX6XM'3Z:+A\"52O;'63K9QRNO=;>HSF3F6_Z*K6L +M2]^DAHWB$TU,G$U^E,V#=NRIW'3:@P&Q'.<KN:G209`U$A5Z_399#HD8W33I +M[N#JV]6G+G-/91D8,@CV7:U>E-."R6QA4KCH#:KCY8R3QNHU[1S5O;5*];12 +M:7$]EOV'ABYJTVNJ,/\`DNU\%>'+6SH.?5HZZIYA=*;5M8M92HD1R,*V:<KY +M?P\YI>#GZ-;F&&Y(!2H^'Z#20:1WB)S^Z],N[#RK1VH9/SE5K'IE%C-3F^LP +MI$][]<YT#H/3"]K'6GU)*ZRT\,]/`&FB,J3IEL&WD1$8E=)1I!N,1&W9,F)= +MUSQ\,=/J`M?;-CZK+ZQX!Z7<L,4-+CF05W(9$@#*;RR?21G98;FX\0\2?AY7 +MM230!>W<>RXWJ'2+RT>0^BX#.87U`^R;4'J:"L3Q#X5M+NB6FD,[8Y3==,<_ +ME?-;VEIS@;Y0$D#!F>R](\9^`JM#55MFN,3L"8"\^O+2M;5C3JM<TCN%9DZ2 +MR]`+2&X>'2.%$Z0<'Z(BT#(G[)B,SJ)^55"X&9+OT3C3J.N8CC>4[L`2XSW" +M"#/O/952@SB)2(.=@"EDDP=N2E!F"5-!S&H$'YGNDXX@"`G,$C(R4H,Y('8( +M&D:<8*6(.<!.0-(,C/"8`C,-A`[M0EID>R9L`?F$)5!)&!\)RXN`DM$"!"&B +M)VV4U#);)D_"KM!QLIK=L.;)[0@[[PN\LL8+1D0K5;0^L`=_94O#CW"PV`(" +MOV-(FZ$B<KSWMJ1V_@:CHI-.,Q*[_HU.3Q(7(^&;;R[9I;'==IT%I)!WG=>? +MMJ.AZ:,`&/JM>U$#(!]UG63)B``5J6W&%ATBW2$-DQ*BKO!@$A$ZH6L,B<[* +MM2FK7C@<)5BU1IC27'D;KG>M5F_\0#?Z6E=)>'R+0_\`V]UP?6;E[KXEN=., +M+.7$>KPX[=M9=5HT;)H:1JB-UG]2O/XPD`R5SEK6K5G`$D#Y6WTNAL9RIOV; +MN/HJOZ:Y[#C#ED7WAAE4Z],'.05VM-@TQ"<T6:9@9"OI*Y_N91Y77\-MLZVN +MG3@9G"HWS-+2US8/Q*]2O[:F]A!;L%Q_B7I#7-+Z8((,X7#R^.]Q[/TWGYUD +MP.E-+GAX$`+>I533`@[X61:L%$QI,K1H5-5.<_!7#"/5Y;LUX!4<97(>-.A" +M[I%U+<<+IKRLYK@!LJ3[C,O$3W6\;-[8FYT\O'2;NA<Z#J`"Z?H?1`ZBVK6> +M2#C*W+NE1J'4*<&9E2L#!18QQB<+>7DV[;W!6?1+048+`0<KFO%7AGUNN;6F +M6B3M*ZZA=0P4VF>)5_R`^U@P9R0ICDX7^-V\M\.^(NJ=!O12KU:A9.Q<5['X +M-\56W4J+7-JC5&1J7F'C?HYKZZC&Z2V<PN;\,=7O.D=5;3\UX;J$S*ZY8S*; +MC7KM]26EPVJV0<*VRDUX@E<;X$ZFV_Z?3J!Q)+05W/1]+HU''NN.-<?)CIP' +MXI](\RS?Z>"05X7UND:5RX"9E?47C^WI5>GN`'J((V7SCXUM'TNKN9W<?W77 +M&ZR;\-]L=.F_!JDYM0/)[?5>SVE0>0-UY?\`A+:Z;5K]($QO]%Z53=%./9;Q +M_+Q_J;R.J0XD\\H@TEL]E'1)>\S@?NK=)GNJ\RO0HN=5Q^RZ#I%#0T$B%1LZ +M4OGW6Q;"&QNI)^6MKU(C3[IB<2@&1GA)VV^$#/>0<%5[I^KE%7V@*K5<"2)C +MY5*&JXD$*O6=C*.K4$C.54N'DM*UME'<$`95*LXP7$XX4E=Y.Y52Y=#<A6<L +MJUW5ANDF?A9ES4()SRK-P\@N_NLZ[J``\>Q6XEJO<OP<CW67=5-),00IKVZ: +M`<B?8K-K5-1SLM6L(+BI+7%P``7/];K0,EO^BTNK5@QCX,_5<CUZ]TM=+IB4 +MDW5GY9O7;T-+F-W)[I>%^@UNI5#6<UVG>2L_IUN_J74FM@F#W7KWAFP%ITVF +MQS0T@!/)EZ_QC>$O]JY9WAUE*HQH8#GOLN\Z#:BUZ<R&_E;M*A%JVI7'>96G +M=N;0L]($$!=/T\W=O-^KSNM.%_%2_=2Z8\N]P#_L+P?J-P:UT]SA.>2O3/QA +MZPQSC0.'YDYRO*ZT$EPF">^Z^CGQ)'D\,[IPX:9C8Y$J6@X:MB1QE04CISG( +M4U$G8$D;KD[[:M&L/*;B,(_.:E0/\EOIX1R?\*;:?6]-LF..4/5`T6)(^(E3 +M`>O"BZL6_P`.&]S"S7AG;,MJ9-N9W*KW-,LIDD+5I4P:0T]E3ZE2.(Y*7LC$ +M;1+W&JX8]U'79`@">ZUC0B/A5G4QR$5C5K=[S$P-EEW5JW4=()DY*Z.ZHN/I +M`W45O92XN<`594L<Z_IX8UQT@GGG[JC6M@7D"F#$X"ZV_I,93(@#N0N?OG_S +M6L;!^%J7;-FF<+`5(B!.Z*MTBFYVD-(,296UTZWU09$QRIZK#J+6MGN4I.>7 +M*5^B:1E7?#GA^:HJ5J<P<"/A;K+=]2J)87-:03A;EG6ITP&BE$>VZFVN?K,; +M:.&&T84U&W=2;JV'*U_.81D0J]=XK.AC<`9*RK'=1?6JESR8&P'"(6S7'5L5 +MI.I:<D83,I2X''O[JIJ,RU8/XX`+HJ5!Q:#Q^JR*["VZ#N/W6_THM=3`SVE- +M<$%2M&.;*;^#@X&W"TK5D-@1'RH[JO3I#W66E;R&-9(C*I73J3<$H.I]2@$- +MQ"R;DUZX#FEQ)/"*+J%.A5U-(:00N"\;^#;2^I/JT`&O,YC"[BA87`>7/<2# +MPK(L6%N1/>5+(2V/F?Q!T:ZZ9<&G68=(Q,++R!!_5?1GBCPU9=2M7T:E(:\E +MKH&\?"\+\7=&K]'ZF^A581DQ@Y"2_*[XY>S'(+78^$,N$"20#LB,9,-2](=. +MX6V]@R9!.-TAZ20<@H\-<<80^GDJ!GD;MVE//!(^4G``CU2$B)/:!RJ'+70" +M!B,IMP9@GZH@,.]0CLF@`X(RH!9)SR$0+L@@;93M'NT)R`08*`#.W^JFMI;4 +M`/?91[GTCVGLI[8$UFD[R,RE'9=!J.;;MP(WRM[H=$U+QI(_J!/W6'X?IOKL +M`I@O($P,PNN\+VX_BV:A#@X#3O[KS^2M8NXZ-3BDQL8@0NOZ#3.(;(7,]-I_ +MECV76]`I;'(G9>:UN1OV3(;"T*8B3A4[1L08.(W5L;;_`"L5LUQ5TCYV1=+R +M^8&ZI7+R*D;B5<MG>30<\[*SMJ(O%%X*=$M#L[;KCG-%2H29"T>M7/\`$WD2 +M2`=Y]U'2IB=ESSNZ^AX<?6%TZC&\86W9PT<2JEA2(C]EI4Z8+06C;*8L^6I: +M#CJ$[>ZGJN`$3*@I@QOD(WCT223B5TCR54NH<9V!]UD=8`%)P.=X6U5I'1)[ +MK'ZO0<_N1"-8WEQ%_5-.[+'0!,J0NBC(.47BBR=3)<!)X/98_P#$5&MTF8B# +MV7BN/K;'U,,IGC+&E0BHZ=4S[*MU:V>'C0?S=UG'J8MZT-S`R"-E;/5VU'-< +M3'?W6'>8V78+BDZB1JW/"AJ5#(SC?"FO7F\IRPR&_<*G>-JMI8!!GA734_U- +M9OU5&Y]MUJMOBR*>'?!7/VCJK()'/V5FGY[7E^C$R=U>9TSG)>TO6'^8QYT@ +M3*X3Q'8-;4\YH#3JE=TYS7L=KXGZ+G/$S6N<"TG=;PRU3&?':_@W=/%G!,@1 +M$[[!>O>'#YC))7BGX4/\MI&"TD<?"]K\+$&BV(V"S)RX_J`^+@W^$/!SM\+P +M3\0:;*GB!C6B<P?NO=_&50?PS@#!*\2\16GF>)VG4YTNQ\RNF5TQ^G=K^']D +M*=BR!B`?V74D-C3MA9OA6CY5@P_].WT"U`S4[;`77#B/%Y;NI+2E+I/)W6C2 +MIPV4%E0),1]5<;3.T;>ZUVXGLVB<#"T[<"`)RJEM2@29@JVQS6CMP5`6N9$[ +M)B_?$H7GU$YRA=F/]PB[1UR""(S.ZK57"3D*6L8=`XE5;ATR`?[*I45PX<%4 +MZKY)"EN'&<'95:E4##HSR545[MXW!]QE4+BK(._,*:\=(D'?LLZZ<1SLM1$- +M=X$DG'*R[^J"QP`^JL75:6D?NL:[J$DMG'RM=,54N/4^2,;X56\K"G3($`_* +MENJ@8'.]BN=ZY?8(F.P":3M3\1=1\LG0<D0N.ZI=NN*WE@;G,*WUZ[<7RXDG +M/TRJ/1;*YNKD5-#BP$$PNLGK-M2>U]7>_A;T!FD7503,;_1>@/MJ;6P'8'9< +MIX,O!0H-IC@!='6N@ZEK!P5Y9=VV]O1EQ1VA:VY@GZRL7\4.N4NF])J.%0-< +M00T'X*H=8Z_3L:[YJB0"=_\`1>1_B=XG?UB[+!4FFTD8/N5]'])CJ7*OF?J? +MYY:C!Z_U*O?WKZI>XAQ,_$K-,$`R<=D(<2<G?W39,9]EVMW>222<)A!S$1[J +M2W$.S('N>5`S#Y))5BEE^J<!0:K':6ANO[)_,_ZRAI.)IM/MW12>WZJZ:T^N +MZ5P`_2[!E1=5J--:FTG!5VO;LJNEV"/U697LWU+\14):-@?E3?/+PZ:%%@T2 +M"J-PT.N''LM"V86TG`G8*"G2PXD*6<D4:S(DJE7#9U#9:UQ2!]BJ=2FT/,B< +M_1%4J5N7NSM*DKTFTV$#`.%:)8P>F>Y"J7+BYQ(!QL@Q^L-F2(CW7-R/XL@R +M#,1WRNCZXXMI'(F#PL7HEK1JW)J57$F<`;!:Q9R:?2K1SAD>DCLM!UJ&TPP9 +M)Y[*?IC=1\M@)^FRV[7IH%*7"7.4JSABVS&V].`V4KDT=.K+2MJM94J#2YX5 +M2C:-NJWJ9Z`5!B4Z=6M7`)=H!6E3%%K`QC8`WE;#K.C2ID,:-L*O4LV:,B"4 +M5EUF-VD(6-&DJ6[MW-?#23W4894:<Y[HJM=TX.<+:Z.T?PXU3[>ZS;H$L,XA +M:70P'4!WV*J+6IT0'!5ZM`.)+R8]U?%(D845R`QDQ/NIH8]]9TMW.`5FRL6> +M6W2,#"&HWS@2[8<*WTTZJ!#>$4%:U]`[JK5MXD8^%K.!B")Y45:GJ&`)4(Y_ +MJ-$-,F)',+S/\;^B-K]/;>TZ8ULG41]5ZQU>EI:0N5\6VS;OH-PQPDACL`9V +M6;TWC=5\W/;I,$B9Y0-(@AQCV5[K5NZAU"HPA^'$01PJ+V^H&<>RW.GH,?S` +MR/2A&6Y."G<T9]1CW3L9+9!V_54*`1!@F<%,]I!'WRD`(*(N+_S'`;`Y4"9@ +MDEH'9,9#R,&.Z<M;@ZYE,UH(_,&D($))&!"FKTZ;'!M.HVH"`Z0"(/8_"B8R +M=C(]EUWX<>!^H>)KYHI,+*,P7P/\U+=08?0^BW74KHMMZ1<UHDQE37UDZUO! +M0<S0\8(/<%?4O@[P!T_HG074Z5(`Z,GDF%X+^+5B+;QC5#,`N)CZE8F5MTF- +MW4?A.C4#)!@#<@PN\\(VN14)!G<KDO"]G_(8=4!T`E>A^&[4-MVSN0O/Y+RZ +M3IO](8?,!P5VWA^A+`2,_LN4Z'3]07==$I!M`$`SN5QR;Q6Z3-.3A*X?Z8'* +M*J0%2NGR)#MEG;8*9UW')&Y5CK;W4.GD`XC*J].!=6U$\\H/&%8LM(#MQ&ZO +M4M;\>.\I&'9ESZI<3N>ZT;9A<X"%0Z6PZ0MRU8-$[+CV^E>(L6=(M'NKU)L& +M%6HZME<H`XX]EK_CSY#HTB'$Q\IZS0)QGA6J8]$(+BCZ9WG*Z:T\][47@EL$ +M2J56AK!!VC"T7T^9F<(6TAIR03^R:1R/B6Q-5FV!V7'7UJ:50M<"TSNO5;NT +M\T&`/DK#ZIT%CS,;K'DP]NG;P^;UXKS*^Z8*M,U&$XS'99CJ#V/($QL2.%Z+ +M6Z&6N=3@D$=U7'A-KGA^D_,KA<*^AA^KQDY<WT%M1M,`G<YGD+:LNE"N2X@^ +MK)"W+7H+*8$@86MT^R;3&G$RMX^+\O-Y/U/M>&%9^'62)IQRKI\.T6TSZ=^% +MNM9#X4PIE[<@CA;F$CC?)E?K@>J=`EITLW[!<5XDZ)=4*@<X%S9WS_DO<:MF +MPMG3)YPL3KO2*3V.+VM."5F^/['?Q_J;B\^\!:V513F(_39>Q>'+AM"RSVE> +M?=%Z0:5\1387$NG&5UEKYC6:#+2,0N,WOEZ/+E,X+Q1>.KL>&C2`"%P%C:ON +MO$)>[=KI_5=]U.AIZ<XXDCGX7.>'*&GJ+ZK@)G?ZJY3=C&.4QETZCI](4K=L +MB/3'Z*]:L+GB,RJE-X>0T;+9Z31)C"[O#GVOV-,-I@$94H:"XP8]U(U@#1,= +MT3609X*TY'8W2/\`-$^8C]T1<W3G!4<@SGX3I2,<G]4#WMCB4SB)[*O6>`"` +M,H%6JX.)5.L\03'ZHGN#N?DJK<56Z2B(KBH!/;]EGW575($;_HCNJS9)G?"S +M;JX`;@\PKH#=5B)$X`6=<U23B3WE'7KR<E4>HW#:=(P86Y&;=*_4:T&>RQKR +MY$$@?)"DO+K7))^ZQKZZ9)]7^15W^&-;#U.]`:>T&%RG6+AS@XD%L;$]E<ZK +M=M=K=J.!&ZPZ[JES6\NGZN)E;G'-:F-MU%$TVW=T*8&[@)]EZ!T2UM;#I0UA +MLEN9^%SUMX??;VPN2(.\^\(>I7]RZU-(/(XPLV^]FG2X>N*]:]491Z@[2,3M +M/NK'7?%3;7ISW`^K,"?9<97J&C3+G.)>>5S'B;J=2XJ>7K,-VDK>'BWEM/)Y +M)ZGZYU^ZO[FJ35(:02<K#>_5,YY.4QD&)^@,IG.$@-Q`7M^/%KD[8&0$[RQK +M@&O+\"3$0>R8`:9#OLA;^8`$F-U`='<XV'=3T##QNH&EI@@$"5/0_/B=UH:M +M(#RQ.Z*&]D%%H\IN"<;A'I'^%RJOLL@&J9V"IVK1_%/<),E77B0\S&-U7Z1^ +M=YW,K,>&I+B&MTX!*<TXI0,)5Z3S6EIE1W#KH`Z::G`K78@9[*C4C)G[E6+V +MG>53);I`506+R^:E0_"32AK/I@$:A.RI7-TQH(:`>_*T*EE2&3)/N50O*3=6 +MFFT0J.;ZW4N*N=`T9WRKG0K)CZ8].8RFZPUK7BGB5J>%J!=5;3`QW5B5O^&N +MF-ILUEGW6U492I,U&('"*U93MK8<+-ZC<&ZJ>32&.2I2(JC?XRX@1H!^ZOT; +M>C09@!!8VH8,1`W4M;TC3,E155[0ZH2!@*"Z:`PGG97"W0P[R51NG3,\JHS+ +MIH%6#GW3TZ>)`VRB<-50XDJQ18XMC^GV**HWUN#3EI(/96/#?J:6<C"?J\V[ +M=%5A:Z)`/94_#URX7;FAIR@Z,T_*&=EF=0>Y[M+0=,[K2%.K5:2_TM[*C?-# +M7P%"*XI#RH4?3JGDW9IDX)5ZFV:4++ZAJHW#7C8%%;=1P#9(5=M:GD$B5:Z6 +M^E=VW$J.[M:;7X_109?7'-\B8V'*YSJ`\RRJ0W)!X6]U\.;2ADD'NL^C95;J +MB:;&N<7!17A'COH-?S'W%*@2"XR0-\KC*E+2Z#+?HOIR\\-U*5!S*M#6'`_F +M;*\_\5_AN;FL:MHUM.<D`0!^BF].V.?&J\?C,DR$VD:1E=]<_AS?TR22"!M' +M_99MWX(ZE287"DYP'8+7LW,I^7)P-6P/MW2<!I@?57>H6%Q9U-->DYL<PJ;@ +M-]L;%6-!QK.>>45-OI=$']$0;(&?T75_AEX2K^(^LL9I(H`C4Z-PK>$WI9_" +MSP1=>).I-<ZG%NPC6[[+ZF\"^%;/H]A3H4:8:&`9"@\`^&;/HW3:="A2:T@1 +MA=93<R@WW[KE>>7*Y;1=5IM9TU^G,-*^4?Q?/F^-JH@8,9XR5]5>(;@CH]4, +MSZ297R=XOHU*WC"NYY!)J']UCZZ>.-?PI2.BFTNYE>A].IM%```+C_!EK+VQ +M]EW=M3`8T2%PR[=&QX;I@U@/<;+M;4BG2:-H"YGPQ;RX'3]ET55NEH`Q\KCD +MZXP=>I+`%3O'@-V$]RIFN&C:52O8\P;JQ?J[T:FXF=_W5#QDX:6,`,DP95RT +MK&A;:R`/JL._KNONH`?TM]UG.ZFGJ_3X;RVGZ91@-$'LMJTMB0(V5/IU+T@Q +M_9;MDP!@$+GC-O7G=!HTM+L[^RN4:)<V3QW293&J0(5NA3C<+I(\V5/0I@LV +MDCE%6;#/RSP%+1(:T>Z50R#Q[+;A8S7L()0O:3!.`K5>GG=,&R,$I$JN:+8] +M2J7K&M.`K]P2,;\3*H/IFH\N!='*;28LZM;ZG!WU1"FW#2-NRO5J$"&E1>3[ +M&=U-JJ5*#29`,<J*JW20&E7GL)$94;+<N<)G=2UN0-"E+`1O\J>FPATDJQ0M +MM+,C[IZM/&\=D`Z`:9(^JSNJ4QY1['=6*M=P<03$+,ZM<GR2)5M;QQJY^'=[ +MTJTZA5IWIHL>?R/JQ&ZTO$PZ?==8\[ISF.9I&HTXTS*\RZK6)J:P3*Z3PG?A +MMMH>^2=LKA<I?XZ>C]OUOOM9\37&FEY;")VA9W1[5P`>`02K5S2==W9=F`M+ +MI]O``(Q*J9743=,M"\@E=%84`T"1@*M8T=#0(6C1EL#=:CRV[$`V8C"*DW.> +M43&S!3NAN%I@-0"/\E$Z&A&\Z22>5#5J>F$5#7=P"55JEP:23*.O5@02%3KU +MH;$B40-:J(*SKJX&H]D]W7P1*R[NJ2-4[85@&]KC.5F5ZQ<?S)KJOOG"S+V[ +M`;(,+<B6Z3W=T*;")"P[Z\=5<?5A/?575!!,K/NZV@:<''"?XYU7ZE=:&D#5 +M\A874KT-8XU)&.%-U2Z#"Z'`;Y.RX[Q3U@4P0'#7V:=UT\?CW2W4375R^XN? +M*I9<[Z+KO!'AT!@N+AGNO-?"G6:8ZLPW$%I<,_5>U=%O[:I8M=2<TM+>"L^> +M7>OCT>*R8[G:;J5"D+8LC`&%PGB&B*1/EM[GMA=C?7M,L<'>I<=XDKZJ;I/! +MQV6,.W3UX<QU6YHBDZ1Z@.%Q/4JC:E<EP((*V_$5PX.(;L1W7/53KGB=U[\, +M=3;Y_DYH(`R#E)P).<E("-@3"=WYL2/JNC`=OWRG8#$YVS"<@Q,8^$PD.Q.? +MHB':#M^ZL4V[$;;J$''OQE3VSL[X5&E0>11:(=MW1^8[L[[I4"XT6D(O7V1M +M]F5?3;O=(&%!TMKC3)!$%7.HLTV3S,$JG9.#;2?ZE,?KYU6J4OJ;?9&]I&(2 +MLF$-DG)4CPA%.YIEPR85-],`&8A:-9IF(5"\:0[_`%05+MS!1C)*R;V&TRYW +M/"T[W3IP?HL7JSI],S/"JL:ZEU:??'*Z_P`(6IHVGG/$2N;Z=:FXOZ=-K,DY +M7<NI"VL0V,Q`"O42\HJ[Z]S4\JF[`W*M65JRD!OJY)2Z;;AE+5&2K3*1W=LL +MA.`:TZ2846D$R1`4U:#`&WLA<TC\PW156X=B-XQA4*Y&5=KY&WV6;>.+JF@8 +M[H(J=,N?JB)1UZNEHILF5*QH92AIU/.V5:L[+0-=;+BJ*%*R#O75R>R+I=%M +M/J0`:%I5:0TQ&>,JG1IM'4&NGE23E=MFLS^6LJXI!SR3]%NFGKI<Q'=9EW1( +MJ$PHJ&VI@TX#54ZGTZI4&IHD%;%C1DR-E>;2:1D)2.8Z!3JVKWMJ,(DX5FY- +M4U-3*9/T70"U9,EH@)5J=-E.=()^$',5+$W+@:K?HMOHW2Z5O2UAH!4EM::Z +MWFG;MPM+'EC2<++4C&ZM0IN&6C[+`O+"FYQ$#/9=)?R\XY[JA<4/23"NDKG* +M_014&IH#F\J,="I`8:%U/32R2QYP<*6M:,95D9:5FPCSCQ1X$L.JVCV5+=@> +M1AP&0O"O'_@^[\/7SFOIS2=^5R^NZENWY6!XT\,6G6NG5*->DT^GE9LLNXZX +M9ZXKY2\*]%N.K]7HVE"G)>[/LOJO\*/!MMT/HU-OE@.W)]USGX0_AU2Z/U&I +M7>`XEV">`O7Z5$4F!K1@!:WLRRW=*8(MQ)&!R@LA4O[L!OY0>%!UFMYERVWH +MB9Q*ZCPMTSR:#7$03[J;33.\74*=KT&H2-F%?*GB(,K>*JU3TEH<>_=?4OXO +MW'\/T&KG=I"^4[C57ZR]Q.SID!<LKR[83AVO@JB`T:0876TZ9!$A8O@^W#+9 +MDB)726S`ZJT3A<;RZ3MTWA>D/)!`W[+6O6CRLJMX?IBG;C"N=0,49PN.3K&; +M3J0TF8`X51[Q4K_F^B5W5TT#IF?E5+)Q<\F?F5N1<>:T.HU&LM-!,X[JETRB +M7.UD`2E>N=4](SQNKW3[?32&%QSO+Z/AQU&A94\<+5M\-`5.PI>D2`M&DP1` +MW2+FFI9=LK;*9T=YY4-%F0K=('3S\+>+SY(:0=,%3-9(DIJC2,!/!;DG*TS0 +M5:9[B%$:4L_+[S*FUY@_HA.,]ME6;BK/IDB"-R@-`,W$>RLB29V^J187?V*) +MZJYH!P@Q*B?9D'MW"O4Z+FOS]T=0"0T*4TSFV8`,G*=EKZQ`C*O!AG`D!.&! +MIWV[IK:JM6CIID\K-NM9&,GNM.[>`#E9E<@$P2LY5O#%0JAVJ7=UE=8<T&!` +M*U+]Q;3)E8%ZXU'[K%NGJ\>&V3?6H=+A.1PBZ#1N/XEK1,3]U?9;.JNT`3*Z +M;P[TAK*0<6C'LN4F[PZ^3*8SE/TRR8*'J;G=7+2T'F;):2RH!,`*[8N$\+M' +M@SR34*1!5AK2$31$<RHJCBTD#A5R3C#25#4>>\!1FJ2%#4JQ*J)*M0!BIW%8 +M@;&4-Q7);^8?"HU[@Q'=5-E=W!!PJ%W7+@3C"&ZN"2086=<5_>1/":0US7,D +MG99EY=','Z(KRO`,&%D7EP)))6I"TKRN2#J.0LFZK9,';WV3W=R).8"S:U23 +M&J2[LJQLU]=%K<&"5D=3O@*;BYT$!2=1K:)#IQE<7XJZU3:XM:2#V73#Q^R6 +MR`\3]::QI&K(D`RN'ZC>5*]Q)D@\(NIW;KBI+I@]YRJ]2A79:MN'47-I/<6M +M?!@GM*]>.,CE:BUEKI`),]UTGAOQ=?=.:&.+BP<$E<T3OV^$+26@B,JW&9=K +M,[CT]*_\[4*U,EQ+7G=9/5O$5*HPZ'9(7&EPB1@)M4#G[K,\6,=+Y\K-)[ZZ +M-6K(R"JSW9D2DT^O.1[I2"0<PMN)Z=32US=+7!_^+A!J[3["43HB>/W0[R)F +M-@@8OQIS'.4^H[Y^Z1T_[RG&?4Z8[JH=IYS]2K-&"\`X]U`(@<_"FMY#R).> +MQ5&M1@4FC*/[I6[6^0V>W)1Z&?[*;:?:'60!8NGLLSI;?->`#("T_$.EO37$ +M%4?#M-K:0,J8_7@R:#0`(V1.`DGA$\B1G=(@:<E5%:I$E9]U!<9,#Y6C7])] +MEE]1=`(`^R#+Z@YK)),E85>KYCB2W`*TNIESG\85-E#55#`,NQA6*N>%:?EU +MG7+VP-Y(72VVN]J:W`AC=IY63;TVTZE.V$`'\RZ&T=3I,T,B$J)6L+3MLI*_ +M_*$X1B"W!4%5Q<=,X4$=,'6FN'0$B[2('T*@KNTMU$[(*U[5#&',$JI38(\Q +M\DHG'S:VMQP%<Z;:_P`36#B/0TX44_2[,Z?.=)[!7*Y@:0KKF!M.&P%4J":D +M`;>Z:@A#26`*C<TRRNUY&)6I3'&TJM?M.@G.%>CMJVH#K4$%5;IDF85SI0!L +MT-XR,B)4O;416C<>P5RBR20H[2F="L._EL01UG-I#\RCMJ3Z[];YTC:4=&W? +M</+W`Z6K0ITM+0&B`LUJ(A3:&`8^%4NVFC)!QVX6FZF0.RS.J.@:>Z:&:ZH7 +MOS./9*JS6R-_A2NHZQ,9Y1T$`'L56637I.8Z1A7^D5#<,\MYDH.HTP6$ +M90]#FC7$P!*"Q=6]2W,\*"Y<W0&-(DK0\27-.C8$C>,+"\+"K?76MTZ0>5G3 +M5='T2S;3M-3ADH[VIY5N]^TA:=*C%O`.0,!9'7V'0VF.5*U%/PS9&ZO?.>WG +M"[VWI>70T1$+&\.6C;>FUVDR5T$Q0D;PIIJ/)_\`Q`W?E=&J`.$EI'[+YPZ: +M[7U02`2797N?_B7NG-LW-:?Z<_<+PCP\[7U8-``),R.5PO-KT83AZEX<<T6[ +M<1[%=#TTS7;_`'6!TBGY=LW$1M/*W^@4]=9L'E<=K([GHS!_#C&3PFZV0R@< +M*?HC?Y#1F54\6U`RD1@#E8=(YSJ5P<F9*KVM=S*9(E5+^MKJ;DJ(UW0&,6 +MLOXQV\./M6_TX><\8.ZZ"TM"&3DK'\,4R6M>=B>5VMM1::(@-&-UY^Z^A;ZS +M2I:4X;C4>,J[2IG$H&L+2,`_"L,!C,$+>G*U-0:T>DA3M#1@'=5Z32!NI6!S +M7;Y6XYT;FP9,$(G`8(&$6B6Y.R"H9(`B$9TK5B0XZ1(0@@L@;GA2O;/Y1LH@ +M-+P)E&]"#2!WGE'0G,D_(34LMC*EIB0!QPC-@3JX$DIPP1$0C+=3_;A&&0-I +M[^R)I$ZE@&=E6N7.#?=7GDAA`5"Y>.5;-$FU"YJ:R1"J5`T?"NUV:C,*M78` +MTR1LN==\69U&'`MGCA8E>A#IW6S>&'23\++NWZG:0L5WQXB]X<LYJ:G9![+J +M*<4&<".5B^'&Z*8<<0M*XJ.J8V^5O&:CR>;R;IGD5'X,\JW9,=J!/"KVE/@[ +MA:5JS2((DJO/M-3:`U1U0`XRBJU"`H'O<79A/\0-2-.#"JUZL$PY'>5`UORL +MNYK@@@`>ZTSLKVN6YF2%G7%<:3!37=8Y=B>\K-N:I</3B-U8EIKFMJ?^;'.% +M0O+H#`A#?W6@&0%B7U\03.5J326I;^[&3(6+>79#LE#>7;B<9G8=U3J@EI&O +M'<IRR&I6+X("I7UPUE,D^G$RBNKC^'9ZX=I_5<IXFZN3,$@0<+>&-M+0^)^K +MM;2=H=$#$%>>]5NG7%1SG$F3DA2]:OJM9Y`<8[`K+)).1^J]F&,QCC>:=P`X +M$_=*<:9D'B=D!'J.)^J>9SO\+89S=($[;E)PDDZ<I.)D"`?C9"23/MOE$%IE +MIS'L$(B<A*`&P/U*9TEW,!11/'JQ,)LANVW=,79A,?S$`G'?E$(N;IR"2=BF +M;,X!]LI.P!$CY14ZCJ=5M0.<2PR#G=`)$',CME/`.VI7>J]6O^H4:-*[J@TZ +M,^6QM-K`V=\-`[*@V0Z)(![JB5KCI@R/E34!/)4+7#<3CLI:3FSN?\E4;EJ/ +M_3MWV[*2/]PH[8?R&R\C&R.!_P#(FF]?X^Q_$MQ3/3G2HN@U*?D@2$7BVSI' +MISGM,$]I5+H%G4\D'S2.<A3"SEX,ITW6@.$@X"3V@^K95F4[FF/\34?\20V* +MC?JM=],GN0TM6+U4AK9!'NM6[N*>@N!$+F^MWU+\C#K)]U-#/N#JJ%Q=Z1[I +M^A_S*YJ$'2W8JJYEQ6<*;6D:CL970](LQ3<VC'I&^%J<%6;*S;5)KN!#CM[* +M:W;5H5`720KUK3U,T-`@*T^U8RD)`^JR(FW#31P<E"X-U9._NJ]>@X.EAV0T +MZ[FXJCW!14M0MY.RSKVKYCO+;L-U)=73?RM,RH&-QI&7%`]I0=7J"DP>GDKI +M+2W;;VX8`H>B6;:%#(EQY6@X2PJ-2*M>?RCE4Z@(82095YXSN20J5T2!IDF5 +M4I4&R-7U073&FD3P5-;M'EQ&WNBK,UL)[)2#Z'#J43E6*](YDJKT0AM9S8V. +MRT;AL.]7=2K$=)K0R20$U*FZXJ<Z0A8QU:J&M.!N5K6ENVBV.%%D*G1:QI:, +M#E$UA&2I`W&221NFJD-9`)^4:5[AX:R3@']%D5CY]<O$84_5:Y)+&DGA16M, +M@#NFD/2:-(VD80WS&M];3A3R&"2Y9G6[VFR@X`B?9-)M#5J!]73/PHV`"Z9' +M)6+;7U6I<G1)"U.EMK7%X-4Z6JT6O$6A])M,NEQ6EX-L&T:37$1*QFT7W?5M +M,^AJ[?HMJ:=%K3@#99:BPZFW0%B]58']1IL70560#G]%S5]6/_%&9B"LZ;=3 +M96X%L-+MDGU"UCFN_53=-=JMAO$+*Z[<BC2>[4`(W1?CPO\`\2ET"7-Q!;S] +M%XYX5<:O56D.'I(R!$;KO_\`Q#]0=7N@`8D',_"X?P#;/-1U:K^7G=>?\UZL +M9_&/3[*NT6S079CE=7X/+7U&D@#A<1T>7,:!!^5WW@JU.L%IDKS^UJR.\Z/1 +M!I@Z<+G_`!^2!Z=EUO3:99;\97)>/P"3)V"-1P=S4_G<GV5WIU`U:D`@E8]R +MYQN`ULR2NK\,VYTZM..ZQY;\>O\`2X\[=%T2T+*;=+,<0MZU<ZG`,_!4/1*0 +M;2:'85^LU@!=(GN"N>,^O3E=W14BW?96:5-I;@XW5!CS/$!7K=W8;KHYU/2P +M(($*2!EW/""D,"<^RD<<;+;G]1ZCO&$+SF2/U1@-Q*BN,-#P-E&H=VV9RHW4 +MM<D1*!E36_1ME6'4W-9C9NY3M>D`8YN)Q[JRP>D2HHU1J"FI.]7J&.R%$/4R +M9",-T-R@!C\F`FJO])@E(Q8CK/R2/LJ-:2(W5MQ#B9.ZJ.#G/ALD]E+6\8B< +M#"S^HOAI,&0M&Y):V'`A9/4)<TQMW7.UVQC+O'G2=1Y5.V::UR/?=3=0+0T^ +MJ3PFZ+2.L%W&5,9MKRY>N+;M@&4H!5BW.NIL<*M1:Z!$96E84QB5UKYN]K=I +M1!9)*M1I;*%C6L:-_IRFJF>R@"L\:H)^ZK5ZH:./E-7J`'*S+NX&HYF58E-? +MW!+3GA9-:O+LE27-=VHQ^JSKBHW(QE73-I[ROS)$>ZRKVX#?ZL=D=]<-ILR= +MN5B=1NY80TA;D8M0]2NI=^;`637K%YTS`15R:CC+C(Y[(6T);!&(A3:(:C`U +MNJ<_*J7-0MIR,&)5RY#:5-V#LL3J-UIEI]..=U9RU&5UR](IG5L)S*\]\2]1 +M?5K.#2<]N5O>+NJ-\WRZ;I:9!65UWH%RSI+.JM:31(RX<9A>OQX^O;CEERYH +MO<Z>?J@?^:<=MT>`=L]Y0`QOW[KLAC$>_P`I?E;`S\%(EG<?=(``R0JAA^8P +M3('?(3.U'GY`2)S![1A(D!T#;E1=FDG8%)TET@QV3@#(!3-@NB2@88,B4B0T +MXR"E`)(2<`<3@(!(+0'$'.<IHSZ=65;K6[J5A0KBM3?3KET-:X$M((F1N-PJ +MP@0-D0),';]4IF.W9.UH!U3OA.UK1I=P>90)CHVWVA6*1(=C]5'+<F0`>RGH +M#U#V*HUK:J]M!HEN.Z/SJG_3]D%`@T@8E'([+6XV^TO%;0>F.'^PL_P[_P`L +M"9'RM/Q.#_PJH0=@L7PNZ*4#)4P^OG9]1T8P)$0HZK&/&6S*.EJ\J>.%#=7` +MITMP(5L3;-ZI19&D$_`*P+FA3IOTM9)]UJ7UT^L_2P$D<J&G:O=#W-CM*2&U +M3IE'37#RPN=L`5T5A9.\N7_F/94K2W)JA[!^5;-J7$!L`'=7OI!VU,4\%N%) +M=/UB&YCL4]2?Z5`"6`EVZRU$=0P!C"SK]S9CM^JNUZH#<C99[YJ522W`053; +MAK"XSJ5WH-K48_S:[3DX4G3K9UU<`D>@+H:5"F*`;IA/^+"H%I9C=$\>G8@' +ME0U*;Z1EFW924ZP>!J])45&]AQ`^0LN^<-8CNM>K_P`LDDK'O/\`F'4>58E3 +MVAU`"9]U:`#V2852S,F&F%?8V&^RM2*MF!2O(F)*T;SUO;39,K)NWZ;IND[E +M=!TBTEK:KSD]U*U!]/M6TJ7N5<#0/=$RF!Z3DI3&_P!U&P/.D&52O:H8UQ)B +M%9KOWW"Q>HW&I^C[HBO/F/UN[\J5CS(:P%T]DK:B:D3^5:-M2938`&B?=$4* +MEO4=3+G'3[+"Z_;,;2.9]I74=0(93);V7*]5_FG1).5-+M1Z;;AL0T">0MNU +MJ,M*!U"'.V4-E0#&C4,!,VF;R_:&Y:-RKIEJ^&K5AJ^:3))77V09Y>.%D='L +M138(PMRC1(9B%ETQB&](;;N)/RN=KVIJ%U4#(X6QUA[F4RW,E4@1Y!EN_*G% +M6M3IU;18YSA<IXTO/-!IL.85]U_IHN8/A<_U:LUE&I5J?F(P25G*Z;QCPO\` +M%*SK7G664=XSN)51EHVPLFTJ;@71F>2NLZY2:^^?7<`3Q(6#?AKZ[7'U0?C" +M\-RWV]V/4C0\-TJH8'O81)WG=>K?A_1+@WT[KSCHM>E6+*;-Y7K?@&U#*32> +M5F,]UV5*D!:ZH'RN%\?,+M1G`"]#T`6A/ML%PGCD-%&J=.S5:L>;63!5ZAQN +MO0.@6[6T6X_1<+T"GYG5"\#E>D>';9U>JRBW!)A<,KNOH>''UQ=/TNQ8ZT#M +M)(.9"H79T5BSCW76T>D5+?I[@VL-31D+D>I:?XHNR(V&RU9K289>UIJ>'#.Z +MNVT-<`-E0H/$B2/;*M4G<R5N0K2I.D2`$!/K/J_51T7P(G/RAJ.`F)E6LQ+5 +M)$004#WX#3E/3@Q.W;NHKCTF1PC4#Y9;5D#E7&D/9I=B51:YSR!J4P=!&K,* +M3A;-K)IC>(`3ADM47F%P``F$[7'(),)M-"B&2,PHS(:9*EIND$_NF>T8Y515 +M>9!`RBM7"F"YQ@]RGJ`#)/RH:QEQ`/PLUJ3:/K3FN#0QP)&Y"Q;L@$CLK]T0 +MT03!63U!T@Y"YY5WPFF3>>JY`X6KTNCZ!&25G6U#76!/!70V%(``Q$<PM^-Y +M?U66[I+0H00T\K1MJ$$.^\(+6E)D@?96B"T95KS0-5VD#*JUJ@9(DJ6Y>!B1 +M]5EW]S#3G*NDM1WEP?\`%,+)OJA+B2BN[B!(.^ZSZU0N<07+4C--<5)#A@E4 +M;ZLV)$3RCNZP:T@"7'8K#ZE=#45J1BU#U.X.HRX9X6-6+S4@9A25JCZM6&B? +MJK]I9`L#G?7*MUU$_P"L^VMI;J<,3N5*X"FWW&<K6\H4V0&[JC=4F@DF/HLR +M*R;TC0=9@%<)XXZ@VG_*H@ESA"ZSQ%7+R*%$R]QB%9\*_AY5OO\`U=ZPF3,% +M=/'J7;.5U-O(KSHM]7L#=&D3&1/9=YX*Z>[J7X77%G<4]3F@P7#?,KM>O=$M +M[6Q=0\H"!M"'P-2HNZ54M:;(;D1]UZM7BUXO+G[33YDN:;J-5S"`(,*)V@.Y +M!Y!V7:_B=X5NNG==N'T*+G43D$3C9<;4IO:8<WXE=7HQNYM'4:-P#CE#J/Y9 +MSV"<-.H"/NC#"''L.0II0`2V8^J9P&DNX]U(&^J=TY83Z=)D*B$`8TDD)0"I +M',>UWY7`=BA<QTP6GZJ`&-U/@<IH!.)RCTD&-N<I-V$C=$`&@XDXSA)P](WQ +M^B+)RV4@S68:/B%0#`??*>!(W&?=+DP9^J42WOW[H"C_`#^%/:'^9,[F5"(` +M!$J:V.0=O=4C8M@/)'K(1X_^0_9-;TM5%IU0C\G_`*_U3AO3[7Z\&CIM68(A +M<SX;K14=I&)73]6:76%03@A<;T9XI7;PX_U<*^/^UCYV7]74U*SA3C5E4KAK +MZQU$P.5-1.MD[\JK?URZ:;#'NM,@-2E2>0P!Q4U%M2Z<&Z2!W&$NF6)?#GB! +M[\K6IT]`A@&.%!#2HBF!3:/JK-.F*7J&8_1/38&C41G]DY(+3$**4SF/HJMS +M5;.<$J6H^*>2J%1VIW*`*I+]R@ITW5J@IM^I4E41#0,G[K4Z/9AK-1W/=%6> +MFVM.G2$1CW5MVT):0/3`3&<A12:!IRH:]`.RS!'NK5-LB=DY;`W164^JZF=- +M14;\ZQJ:/HM>[HZVD`Q*Q.IM?1)$F%8E3]-/IW@JS7N#^5@U%9O3ZA<W0V2Y +MW*V;.V#*8)R3OE6I&8^WK&NRJXXG9=3TNH/X5H)F%CW[99IB(5[H3@:0:3)4 +M:TU14$`[!"XR8!^Z1:(B("`@"0HJIU*IHHN,@%9%O3\VKJF0KG4B7U]`_52V +MM)K&B-E`5NS```"M,8`PD;I[>F`)_1*N-+)!.>$Z5E=9J0V))_LL$TV/K!V5 +ML=6]1(G/L%G/I"F`9(`[HS0W]44Z&EL:CA:OA&RTTP]PDG*PZ+?XSJ+6@$M" +M[GH=J&46B%2-/I]!H&0KS&CX06M.&A2O&)V*Q76,OJK`^N&G8*&[L@ZW.@YA +M3U&.==XV5C20R#F%F1IQK[8T[QS7C=8/C)F/*;@0NP\0T]%3S&[KCO$+@0YS +MG9A</+=1T\<Y>=^(_P"43F,96!6BJP%@D$?,K7\7GS*[H,">.5CVY<TY>(G= +M>2UZI&WX-M3_`!3!$97N/@FWBBTD+R/P%0\V[86[2O;_``G0TVS!"2G^M.Z) +M;;P5Y]^)#PSI]1Q/'"]!ZE#6%OLO+OQ?N!2L7:3GLF5:QFZYWP8QKW^:<">5 +MW?0JKZ->G4IG+3*X7P++[1KSSW7>=+#6,'JSW"XU].36.G=W'7VOL"`P,JN& +M2=ER-U4UO<00?=*K</?2T`[?=5M7K)*W<O:\N6.$PG"S1V&J/NK=(G3_`&5" +MF_\`57:#Q`<5N)8)U1S7<E$RL3APPA@.).84%5S61E0D7//(V"9[M;2!D\JJ +M*V)G*-E?'I^J;:TG80P@$?93_G;JW]EG^=#P8RK5.I(DX/LA9I;HZ#(..RGI +MTQ,QC]E6I2'`J:H[F8^%8Q1UH!WD'D*$N`&-@E4>(E15'2PD'=*2`JU),`J$ +M@G,IC(='[HZ/JQ$+%NW233,Z@3J*R;U[B[3_`(EN=1$'+868]@=<#G*PZ[U# +M]*MOZHF%LVM+`&TJ.RI`4Q$+1MZ0%.0NLFGSL[NBI-T#'^B&K4&DGMV*)[]+ +M2.ZS+^XT-,.581]1K[P0L>\KZOZI*>^N'/<<_JJGYR25IBJUP79$JO5>13)F +M25;KPUI61U&L&M):8A61+57J=Q!.5AW0=7?#3NI[ISJCHSGE6.GVLN!(@\%: +MZ9[5^GV#F&3![K4HT3I@&(4KJ6P@8]E(P!@+B`?=9:TK730UF7K!ZY<BG2=& +M8V6MU2XW.RJ]#Z2_J]WZAZ&E;D8RJO\`ASX9J=4ZBV]N&R`=BO7J-C2MK44V +ML'I'94/"EC3LJ8I,:!&\!=,ZFU]&7+T>/#5W7G\F7L\L\>6_\U\",+E/!\V_ +M4JE'(ER[_P`?4--8D`0N&L6AG7`T")*]&4X>?MI=1Z+9W=9[;FG3>U^\B5S7 +M7?PNZ#U"7TJ(I./_`,<#^R[2\?Y-9A?B0I[2K2B<'NL^NXN.5G3R"]_!>W-3 +M^7>5&CW`/]E4J?@T&"6WI/R/]%[57N*+CAID=E`74W3_`$G=3T_UT_=R>.4/ +MPFHTGDU*I<!MC_16[3P!TNA5`=3U'W`_R7J51@-,N!:%G.MP^J7D3'*>C/O: +MXRKX"Z-5;B@-7PLGK'X;6A8]U`"8P"O2J5,3D94SJ;'B"$F$/>O!^I>!ZUO. +MJ@<C<+(/AMNK14+FQW7T-=VE%TRT97/]9Z!:W#B13$QN,+4A^[8\<=X9H/;Z +M*Y!(C(5>Y\(W6DFE4#CM$_ZKONJ=/K650TZE,5*8YY"ITJ+`X.HO)_Z7*S%? +MW*\^NO#G4Z+=3[<Z8P05GU+>O2=%2FX+UP.8ZF&5&9_Q`S"AN.G=,KRVX:\] +ML$)JK^]^7DNSMM]@3LIZ.H.DC<Y(7?WOAGI+WS3>1[95&IX9I-.IKYC`3IJ> +M25D4`31:>_\`U(])[?\`\RZ*U\.,_AVS,J3_`,N4^[D=/:/K6^:W^&>R=PO/ +MVN\KK3Z9.-2]"K@&F1R5YWXCFCXA='*N/&;Q=XUT/GGRPUF\836%)KKW^8=O +MW5?I`<:#71+W;+6%J*3!4_J.ZW>W.=-"FP.,```*5S6LDG)4=D[^3)^Z:H35 +MJXV"BFJ/)_+LA,P,Q\*8LXC`[*"X=VQA18K7;H!]4A5V_EU&9.%([UO/8<RI +M+*@:U4..P,!!)TRT<YPJO:MVC3#&2`HK.D&,4SW9QV4:#!U8A.T$GX29ZMU- +M3I@-D@HIVCTB,%,=6RE:T`2>$M(,]D%2J`<1*R^MTP:;OW6R]H</A9O6:;?* +M,E!B="TMN2'#(VE=-0:2`5S5I2TUBZ>5O=-K.<P!VVRTS$E]3/E8^471Z;O* +MEIAREN&ZJ9(E+HIBH6QSLLM+]&I,,<(3W6EE,N'".K;@C6TY6?U2J:=$L,@E +M3;2G2'FW!<KU*EZA"AZ=3]&J1E7J(&%4'39I:)PHKH0P[_56(],C"KWDZ8D> +MZBL*^AMQDA4>K/#:&D8QPM#JE,MEVK*QJSG7-<,,C,>R1FM+P99E[Q4(.3RN +M[L*(`!"Q/"]IY=HR`%T=K3TP05:UBM4F@#9#6`\MW"E8"1)05VQ3<3V6'1ET +M\W!/NIW/8X`(K!@=4),;H[JUQJ'V4I&-U^D/X9SNP7FOB*N6U*K2=EZ=U8'R +M'@Q,=UY'^(#C3O*@:=UP\_3KXN].`\1UVU.H&F9WX4E&G0ITVET"?U4%_3F^ +MU5G`1QW5RQMO,+.>9]E\[*[>WIW'X=T:3M#M`B5Z[T$-;;M;,%>8?A];-8YA +MU8X"]3Z7`MQC/==<.&:;J[P6.',+Q+\=[TT:08#NX8GW7L_6'^EQ'9?.O_B+ +MOGLZA3IXC4#/U6<N>';P3>4=#X`J"ITNFX?HNYZ;4EK9`"\W_"R\+^E4A@X7 +MJ'A:C3N'?S-@)*YV;NH^A>)RF?&F<`JM4_Y@.!*T^M6].DT/ID@.X*QZKX=$ +MS/NK.*QW-Q:HN&_"M:Q&%1MX(F2IVB#Q"Z,)A5(."(]T-=X<))^@43@1L9"C +MU.U;*+(.K^3='T]PDSO[JO6<"S!0VCB'<J-?&A4IESM6!"LT9#=]\JDRN2\> +MD1W5NDX1M/96,W:Y;D@"5+4>-$!5Z3O2/V3U'?TCE;VP(.D=Y451X:=X33#9 +MSV4-2"9!6;6I#O?DG<*[TNDPTY<[?.5#T:R=>W0IC\NY*UNM6++"T#V&8QNL +MR6\KE9.'.^)G-94U,)(B%F68-2IJE%UBX=6J%L[&,*ST6V)`EIRLSFL^7+6. +MFA8LP,X^5=:0`FITFLI@`9]U%<U6M8<Y'NNCQH;ZJ&ATN'W7/]3N"3&J?JK' +M6+S=K2L@/=4?F8/NM=,6D22.$+R&MU$P0IQI:S.ZI7CX:8._=6,U5O*YSG"Q +M+]Y>XMU%7+VKDC.ZJ"GYE9;ZC-Y1V%MK()$_*V*%NUC,#Z)K*B`P#<A6Z3`# +M*Q:U(B=1&@.(D=E1OB`TAIA:-V\,81C98]^_5R""M8I:S;\O?5T-`+G;0N__ +M``VZ.ZATWS'M]3LY"YKPG84Z_5&OJD`#(!"]8Z;191Z>WRF8C?9=L)NN.=X4 +MNG6>FIJ(6@]C0PCE*SI/J58+H"O/MVLI0!PO1BXUYSX_I>H_"\_<P4^N4W'& +M5Z?^(-$&F2%YIUX>1<-K[@$+K>8X_6CXBIN?4I%DY@2M+I/36?PP<Z7%16KJ +M=YTVC6'8&5LV,"FUHCX6,>4G6E<6-$"?+'U5>[L*4$%FGW"U_*+Z\`>GVRI; +MJU_D$QF%K45PU\U]"OY>[95JVHM?0@@94G6+=SKO26R)S*&F*M!H:YDM[A7I +M$-6S-,ZL?11MI@&(RM*F!5IX<,]U6O;&HT%[:GZJ+M2KL83#CMPHGT*;S@82 +MJ6M<F=4J2A;5"(.Z49O5.D4KFBYKMB(B5R'6/#->A5UT&E_QB%Z!4IO9)()A +M05-3@<%!YY0Z=7HO]=J]I';*GI=.96U$5'!Q]LKMWTVU6!I;OP4%3I;20ZF" +M"-T''4>@-!Q&_(W4KNENI^GRI`Y74_P=1M3(EH.R3J0#3CZ(,&VLZ`H-&DCV +ME2?PE#L?NMIMO3+9+,^Q3_PU+_`?NIMMZY4,@8_5<%XWIZ.N-<=L2%UM1]RS +MTN$B,$+B_'-U5;U2DXC3ZAGMNKQ[1RF]5=Z#6<VOK`):/==+:UVW%(D[A9'A +MVG2?:MJ-.HD29Y*5:J^SK'3^4E=;^'*?XUV5''T9A6K6-/,CE9?3K@5,\E:# +MG!E.0<D*58*XJ:9R1]54>2[`F/=)S_,?OONE6BF(F2[A1H+6^8\4:>>\+6Z? +M1;28`&Y'95>EVX#0?ZB=UI-`:R.0%")`X-&Z0.=]T#3("-F7`1]4:'3W5EC2 +M6B3A!3IC$J<M``@;!"&.&X1#(_5,``?E)K0TG/T45'5',8^5G]5:?X=QV@+3 +M+#DJCUK_`-J8`GG*NASMF8N-,;E:[:?H#FXA9);HN`<"2M[ISM5$-$;*]QCZ +M.A4!I:7;@)^E@"]([IZE+3+H06A'\:W.5(TWAAO$+)ZZ6N(&)Y6M2&I@B<X" +MRNML/\8&$1\J6-%9,;H:1F%<I,&F8P2J%'S*,?X96I;%KJ0)*J`=(;$!5;LD +M[#;]%?J@!N(GY6;<NA[M]LJ*Q^MU=-,MC)PJ72:#JMZW`W_NCZF_S;O<D-.0 +MM3PK::Z^N-MH2,NGZ/;AENW2!C"U*+3&`%7L6AM.#@J[1TG!QA+'2)J5,%LB +M3"BO0/(*L4YV#OJJ]^#_``Y,94L:4>GP">,K18&N9&9*HVK"6<25(*CJ9VE9 +MI%3KMN!2<X@G$2O&_P`2@*5R\D1[KU[Q%=`6KAC(Y7C/XJ/;HJ.<[<1/W7#S +M3^+KX[_)PURQS[L:1K;/YE?LXIC><QA9%A=4F/\`+<[.\A:=*H'Z"W;W7RKQ +MR]_^/1?P\'F:)GY/T7I_3PUEO]%Y;^'E;2QDD!>@65Q-,2Z2[W7?&QBINID. +MIOD<+YN_\2E$"_%3,2/[KZ1N`'4C.<+P#_Q,VSO(+QGU#'W4R[CO^GO\F?\` +M@RZ;)D/QVE>O=#N3;N#VNC$+P[\&[HL:RGL/^R];Z;<>D!T_=<[Q:^E9MTEY +M>/N1J<Z8&W"S*KOYI,_=2L<30U`@M_55+AP\S;Z>Z3EC6EVA6!<!LKDMT>DK +M.L=P>/U5LDP%T8L2!PF2>-E'6>-/LH7EQ,;?"=C9(U<HNATX>Z,Y4[;<F%%3 +M(9L=E9HW.(.<Y"FB_P"!8QU,R1@*Q3J`C<YX3-(J20-Q$)FT7,=JX*K-6!5= +MIR83BKB3N%6#CJ+<A.YT!HV5J:35:TMRX?9`'ET"8E0U7[@_=14GN+Q'=9M: +MQCJ?#]-ULWSR#)X]E4\8=6?4I_P[1I`R24-'J1I6H!,:6[%8%W6=>7I$[NRE +MRUCJ,^O.Z:QH/N*\D3)W72=/H-I40,*/HMDVE1#W#*LUR=6(`3"</)Y<_:AK +MU&@D8D=EB=8N=#3Z@K?5KEM*F270?E<MU"Y=<5]+7$CLNCC;L%>L^I5,J2DR +M,F?D)4:$L!/Z(JKQ386SLG:!NG13X"R+UY<2-6.,JQ?7!((D;+,N:DB)W]UN +M33*O5ESR.ZM]/M3Z<2HJ#/4#"VNGL'DCNIE5D!3MRT`#,!,^6$P,JU5<`P25 +M1N3(,&.RS%JCU)Q+MU5I4#4N&R<?NKCJ+GD^G;:2M?POTCSZH?4'I77%C+B+ +M'A>TFYIM:S;V7H-"A%D,0LCI%E1H51`C*WZSPRV$8PO3C.7FO2.WI:&^D94D +M.+<]E7HUB3Z1(1U+@Z8(A=)IFN9\=40^@[&87F7B6V!H.&C9>J>*:M-UL^1Z +MEP'7J0?:O<NT<*@\)MU]&:R/RF%N6],,<'.$-`V)65X-`_AWL/!6EUJH*-H" +M)&,KEA^!._J="@XZ0TGNHG]3>^G+0(Y"P>FU?/O-&DD2MQENP4M.B0=UOCX* +M!J4KB[FJ`"=E:JVI%/+99"S[^DZC6EHD+0Z3U!C6-HUY@XRE@HU;-NN6%U,E +M0W5K=END5);\KJOX>TKT=3"V2JQL:8.G4/B5!R[NG78;K:9CA!0JOI5--PR/ +M==DZSBG`V5&\Z8'`@,!:>%(U6,/(J-P0<*&I1I%D`R#PKM?H;2=36EHY$H'] +M%!8-+W-([*HQ;FTAY+3[A%:$D:2#(4W4K*[M07AY>WW""Q>RHV8AP&0B'>!/ +MJ9'NJMU39O/Z+5#6N"SNH,TUH:@&C;!U(.C='_"#L%=M:8-NP[84GE!1T=G5 +M,%<1^)=,Z6U`V8(S]UVCW>@YA<OX_+7=/(WS_FKE/KCC>6-X.ZDZF^G3<[#@ +MMN]J-KO)X&RXOHD^:]S2!IF(^BZ"TKO-#)RN^7+G)ILV#=#-3#*M-N'.(8_' +MRJ?2ZAT@`_=7Z=%KQ),%9O"K#0P-U2-DUNPU;CS#EC3"H7KZC*C:+#(G.5I] +M&<TM#70(WRLJT;=C6M4PR)R@:6P(B%(2!@#=1HFCCA6*#6G`G"A9)<,;<*Y1 +M#?+!P$!`0V91S+?E1ZO7@!2@<@3E%.QN<F91$1S)2:2!M/LGW=//9%"]L4R2 +M8`69=-%:K$>EONK5]4'_`"FS+C&$5&AY=#(]2@YSJE,-NM0&!LM'H9#@#V5? +MKU,Z]1[[H_#]08`SE;G3-[;>F:4.,R(6=48:5Z"#`GE:E/+0X[1W5+JC)<'1 +MGNLUIKV;IHM(.1&0J/4ZI=?-;4;J]^58Z6X&V$G80LV_JM?UIK9D#=-<FVB: +M;:E(`-CY0T`ZD_3/I4U/_E@!&^F'4I&Z6$!6RS$K'ZS5\NFX`Y(CX6P7#06N +MQI7-=:>:MYY3<@&2IV54MZ1<=9,EQB5U7AV@&4FD\CA<]1+16:P8B-ETO2:G +MH:`-A"TD:](P(E6[8:HD*A2U/<,;*W2K-IMAQ`^JRZ1>D!H"K7IFB04S;NB3 +MFHU*L]KF2""#[I8NXBLY#<I[HCRSC,*2BWT*M?/+:9:3A<ZTY7Q=U`6]-Y=L +MW)7BWXA=9%U5?3#9:XXS\^R]-_$5TV]0AQ!C*\CZGT^G4OQ6>\D3@2O+^HRN +MM._@QF]U@6M"I4NVN8--/N976].M&^2(&&@'4J[:5(D#$MV"U>D.;YK&U7^D +M<!?/RG+V>VVWX<>ZCH.D@=UVW1;HN:TQD^ZY6VITQ3:X'!V70]&T!K8,X6I: +M.B8XN89[+R'_`,2EH7]"K/#3B#^Z];MJA\L'8+S[\=[7^)\-W0&?23/T*WE> +M-M^+C./#?PHN-/4&4W.V);O\+V?ICR:3#@[8"\%\"5C:^(RTNP'G'U7M_0[A +MKK>F=0R%C.:R?5EX=+;52*<']%#6J%U6&[3E5_XE@I_F`.ZCH5BZH07;]BI. +M$L;%K(:"T$_*NMAP'ZJA9$E@!*U^EVS'M+GDXX[KHY7A!;T"^I,'*.[I.8!( +MCLMRUL0(((@Y^$U_T[6PD)IGWFW-D$OP=U(Q@!X^%+>T#2K:3N$`@OSN%&JM +M6YTN!CV5BJ[T@1&%2`TM!:<'=3:G&C$B2M2L6!?I$GG<J%U<9'8(JKQY1&Q5 +M4M=J(;$0LVZ638JE4ET"2/W5GIU/S'YP/=5F4'/$Q(Y4[*O\,PR,0N>]UTLD +MG`NM5!2HEHW*;PQ;^;4;5<#,[K,O+G^.O6TF8$]UU70J'D6K3$8W6I-W3S^; +M/UQTTWD,MPP=EE]0O&4:3BXY'<JU>5M-)QD!<9XLZ@?4&N_WE=G@1=9ZJ:]< +MTVG?;*&PH_U/YRLCHS:E>^#GB1,KI&4PRD!$'NL[VMD@:C@QF/NLV\JAP(GE +M6>H513ENQ]BL>]K@N.DQ*Z2.=J"XK9/)F,%1T6>94!,Y.$J=)U1\1N5J].LF +MAHG$%+=$@;:T`#7#*T&4PVF2!PC93]$!"_5&D+';>E.]?K):!!04+<N&?OW5 +MZC:ZJDD21V6AT_IY>1`5VK-MK`U*C6-;DE=9T;IE2E:^EF8W6SX4\.M?IK5& +M9&<KIKBVH6UL1I`@+T>'"V[</)8XRRLZ_P#$@/!PM8VKS&MTA';Q4ZB8',*] +M<4F@PT\+O)S7&J]M;TVL@#=-7MV%A@*S3IP/=-7;+8(72,5Q_BZRFW>6[[0O +M/NJL>R@]CL`=UZKXAI3:N)W`.%Y_UNU\RC5])F"NL<,F;X*I,9YCBX%HG^R? +MQ=<MJM%*CM[(O#E,4K>JUW_4J%"D:_5'-W:#,;KECQ;3ZO>%K$-8'O'J//*U +MKNEI8=,XX4_3K<,H-],8E27,-89:/9:QBUS_`%!@<"1(C=/2M65[4.:WU`J> +MJR7N!R"I+-GE&!!!6F8KT65K?U-V&X**\K^8T5&.+7#A:/EM<9PJG4+1NG6W +M#AE(JWT^J]]JQQ,PBKO<<M=![*CT>L0UU([[JS6)TR#$%9BU%<W%=H@`%0'J +M88"*M+`W,I7M3\Q)W&RSKC4UA+<RJRLUNH6=:)=A5+CIMK=M\VVJ`/.T'E4B +M*51Q%003A0UZ52A%2A4<V#P5=;76DM6A>6N:E/S&C^I475!5O`'2)X6K:WUS +M4I-:7!W!;"L46VCW@7%#23RLW_"?Z&A3:*31JX1Z&_XBM"CTN@:32RLX-(QE +M%_PJG_\`,Y9Y::A_(3SRN0_$"H?*+)R=PNPJO#:)<<>RX#QK<"I7<W4-UTLV +MY1SG2G>34>3C4Y;G37%^ESI(VE<S<5=->0W'<+8Z-<#0)=[+K.6'5=-)V[;+ +M4IU&M:23@#*Q^FU6BFT@F85NM4):Q@_J.5*JU:-;5KNJ1O@`K2IVNBF'L.2% +M6L&C4UK0(`X6D'`0LJ@I5*K'^MN.ZO4:@J1ZOI*#0'M@Q]4!MW,'H)G=1II4 +M```=_E2^PPL^VN-(#*@,\K0H.8YHC,H"8R#G/U4]/#8RHFCU[X*E9@RBG,"% +M%=5@QIB22E=56L$\H+&@:K_.J_0=E*"Z=;D@UJDEQ.)5IS<;*1H`;M[).8"F +MFF%UVEZ"9Q\*ET,AMQ$E;'6J0=0=!("P^G'1=:"0KBSDZ>AMLHNH@&B9.45! +M[12;D!4^IUS4864Q)VE+`NGW#W$4VF<IKZAY5XRJ<DPI/#E$M$OB?=6/$;"& +M,J3@%9O<K4BU;N_DM/LI35TC,`%5+6LT6@?[<J"XK5:A)9L%JZC,!UZ[;0HN +M>TY/=<Z;G42\G+E)UZX?4KB@TZC.T*3I_3*KM#WR&[G"FTLVO^&>GNN'-JU& +MG/\`B73M;9V%`.J/:(WDPL2XZQ;=+Z<8(U,$+S#Q_P",>H7E1]"VJN8V<1*S +ME9.VL>>(]0ZYXWZ1TYKP:["1PTA>?^(_Q5#ZSFV@)'!7G)H]0O:DU/,>3DDR +M59L^@7-3/E.'T7.^61TF'Y=/2_$+JKJX=.Y[KUG\/NI5^J6%*K6.7"87@W_# +M:MM5;YK2!*]I_"FH&](I0=FQ^RZX9^T8RFK'H#&M;2WX6;UHL;;N).P4C[T, +M9I<%E=9KMKV[@'QC98M='EWXD=4)NGT6NVW*\PZ[U5[:[J=&-1W<<PNI_$^N +M6=6JLD[[C*\\ZG5=3K/>XX(P%X/-=W3V_I\>F\>)>YQ+B<GV6YT>Y>ZY:X +M;-./=<9TBX#JHU8@X`Q'Z+I["\8`-1DCL%X\YIZ;B[SI]R'4VDNR8$+KO#Y9 +MY()[+S7I-RX!CXQ[E=MX>NBZDT%PRDNT^.OI/:*<R8'NN3_%,BIT&NW?T\?! +M6LZ[T-TD[\2L?Q1_ZGI]1LXA==[B3M\R4G&T\759)`\R9^J]>\+70?94R"XD +M`+RKQ_1-CXKJ%HTC5(79_A[?-N+.F)F-\K.<W)7U,,IIZ`*NMH/ZJWTZ'502 +MTK';5TAH$GZK6Z&6EP)D9^5B=NG<=!8C8!I]EN=,MZ@RTYWT^RR[*`T;`KI. +MF-IFV!`AY'YETG;CG=1+3<:='\Q#@%-3NF&A+CQ$*A4=5=4T-!(G\P17-`,M +MYF5TE_#E<65U9X-T2,@E5<:HC*DN3+B>Z@=4@97.NLG"1E6&$DR=D+ZY#8#B +M/E0"K+S$QM*DHTC4=),#NEIZ_DF/<YQS[RIJ$:NQ4]C;AE4ZA)C"BZO5ITVA +MVSMOHL7=:FMZ7*-:FREZB``,E<[XAZA2UN93=SQRJW5>J"G3=+_JL7I51W4^ +MK-`)T3_=+>$O\>:ZCPA;&I7\Y^Q/^2[#S0R@&@[+-Z70IVMH-,`ANZK=0OO+ +MGU+IC-3E\WR9^]V;Q%U5M*FYH<N1NWONJ^K<'A-XHOO-N"UCIDI^BO$AKAQ, +MJ^WQCU^M/I5NVFP.(C"L7ER&M(!V"`U6,I`A974;L:B&D%;QC&5V:_NYD$C] +MUGL:^M5`&)/='2I/N*L@8[+5Z;9.:YIE,LM+,!=/L88#RM*E;Z&Z8YF5/;T( +M:V.%8<R&9"Y[VUI3\LZ829;N>\`*ZRE+HCZJW;6_J`T_*"O:V<1V72^&>F>9 +M5#W``*#IMGYE1K0,=EV71K-M"DT@?HNOCP]JSGEJ+5NQMM:@8!`63UBO4J4W +M!H^5LUJ>OTX`*I=1IT:5N[5!@+WS\1Y<O]871VN_B"\X([K0KO/F=_=1=+`- +M1Y`D&5.`'5H4Q^I4E`%S=TJ]/TE6*;(`$H*NQ$+I&*P.O,U6[P-X7#7].75F +MQ.Z]!ZW3BV<>X7$W0:+FJUP,96_CCDXJ_N'6=2HUN)G`*M>&:?F-\\@R3.57 +MZ_08Z_,@Y*Z+P?:4VVX:1*F?%3&?5AE9K:<.!P%!7J-,\8D3B5JW-*E!!8/A +M9UU;4RTC;L0K"L]P!=B-U/1I8"@J4*U)X+3J:%8M:S7$-?A#0].E\#`'9'5` +M=0@C=&\LQD05%</:QDS]$&'6?_"7VHGTDPK=6NVI1U-S.5G>)'!S-;-Y5#IU +M>Y?3+6C9+J4DW&N\-R7X:JM:M2:XR=DS:5>H`'NW3U+*B!ZQJGA38I7-:B>! +M"EL_+J"!D)7EC0\LPU4J5LZF^:57(&`@NNM?(JBHT0KU+16H9RY4@;A]`-D$ +MC*&UN*E"IZV$`*&FM1;IIALG"*/^IR"E>TC3!T%%_&4O\!472[U2MIH$`K@^ +MN4Q6O7@977]5JM;0).ZY&Y9I>^N2<[+KIRC&N+:F:+B2"6\!0=*<&W$.P.$] +MPZN*C]/Y">55:]S;C!@<*XI796-;32&95_IKWU;@N)PU<[T^M-O'*VNAU)8& +M\G<K5'3V0T4M<Y5RF[DR3[*A;N`IM;(GLK=`^H&,+-(O6YD`@25:9I)@JK:` +M:I"L`D/S!E9:AZE"F\2!!4;15H.D$Z58IR?=3:06YB44UE7:YL..5)=W#:;/ +M2<E4;MC:3"YF'*'I_F/J!]PTZ9VE/^B_9T'UJ@JU!(!Q*U&M],`0$%L6%@TG +M"E$`*::$T`X)PG<`&Y*>DV3V")PD^R"C?-+Z3MX7,OTT^H$KK+K\D@;^ZY7K +M32V]R2)/9)Q4O32M"^Y(IM..5IMM:;*>1J57H3`R@T@[K5()8>ZMF^R*%DT, +MN=(Q[*WUNCYG321N%6J?RKH%:<"O9EL[A9O,:G;`Z.36_EDX:CZ[<LM+<AN^ +MP4+'&RO*C!R56\NIU&_TD$M!W5[FV;WI'T#IK[NY_B:HD$SE:O6:].UMO+80 +M"!$A:#13M+04J;1('"S+BQ==-<YP.5G*Z61QW417OJSJ+0XR?NAZ?X(;6KBK +M7:3.5U%'I[+>K(`!F,K4L<;F5R_;WVU/XL3IWA"RI``4FS\+5H>'K9@@4FX] +MEL6WE@"",JVQK2TA:](UNO)_Q(L*5N_T-`@RM7\*+F:;:,F1PG_%>AZ-0V!6 +M3^&-P*75=&I3QW5,IN/4KJV+Z7R%R_B?S[2@_1+AMNNXM&"K;-/$;K'\16#: +MM-P(A7+A9'SKX\>^O?U'N$9WW7#=;#R2X&1PO3_Q=L76E>H^F/LO+ZC_`#[@ +MAP).T+Y^<YV]_@Z#T(-%4FH1)VSLMVP<VG<M]8+1F8C*S+"S+JL.,=L;(NHV +MM:B\/F9P#/\`9<,N:]'%^NKI]19J:UF3MA='T+J9IM`U9[+A^A4`RD'.<-16 +MYTFK-8,&0#NN?MJL:=Q2NGW#06DRK%7U6A8YVX63TZLT-`D"%:JUGD0W]%TE +M'CGXW='>ZN^YI-<2#Q]5RG@WKU?IMTUCCI#=]2]\ZWT:AU2B6U`TDC*\T\8_ +MAM7:Y]>T'N!G_):QS]?XY=/5AE,HZ'P_U^VZA38#5:'GW78]&K-#&D.'W7S[ +M1I]6Z-7TO%0:>#*ZKPQXVK47,96+H&#J)3+#[B]>%^/?.C515J-#CCY704JX +MIT8IN.<$+RGPSXE9<L:^E6S\KLNC]3J5ZC==01[%8EC6>-[=[TS3_#AY:-,2 +M5F=>O&"F]K#`*O65]19TUI;49$>J2N-Z_?\`G7E3089.%TO$>;#'VR-6NQD< +MJM5N!)@JK4J9&=U&YY7.UZIC%VE5.J,Y5NC<BDW.5DBX:R"@NNHT:5$N>0/A +M,=UG*1KWG5&`_F((&`L#K76&,8Y]2J,=RN7\5^*[>W+A1,N7+VESU'Q!?AFA +MY8XYB``EXYJ=3<=)4ZG6ZI?BA2RR8*[WP;T@6U-M5P`<<B53\%>%Z5G;TZM1 +MGJC)*W[RY%NT-;B"LXS?->'S>7VXC4JUPRE!VC9<AXCZE%TYC3[0KG5^J:+, +MP<A<7U&Y?7K/<Z<G"ZY7AY\9ROEOGUFOU3E:UFQE*FTD[+%Z54&C)DA7A7JU +M7>2P$SRIA/M,N>(LW=X#+&9/R@LNG5[BL'%KH/RM+H?1'O<*E5H]Y746=G1I +M,#6M'9:N=O$)AID=.Z2&4Q(`*T*%DUIVA7]#)`#83N89VA8_ZJLVFUH['LB% +M(N$$85AE(`3^Z.DT:M/Z*[-(K>C#@%=H4X(`&2DUK6>H[K4\.VKKBY#W#!6L +M>6<N&IX:L"&M>YJZ*BSTP1@)NG6X92#1B%.88W,+W^/'4>;*[0W!#:1("YKK +M]9SY:"M?JURUK"-6.RYVX<:UQ`[KK>(Y]KG2:1;;22K-%DGOE*VIAEL`,'E6 +M;>F/S'/LIC.$O9]):T#90U`(.5<+?;"@N&@C"Z1BLKJ4&@X?NN*ZG2!OGEHE +M=O?L_E.7(WC)OG'&ZU\<[VXCQ/1(N-78R5I^%:X#6Y/O*C\749:\Q$<JCX3K +M?S=#G;8^5<^F,>W77;0YD@JE4;(B<JZ1KI"56<R'_E)455#3EA'NA_A*;S,` +M?"LN8-4@*5C`!@A15!]CZ?SG[J"O9G,N)`[K5J>QW5.],TRFD8M]0I-IN@3A +M<_3J5*%_#?R$PNDK,+CN85'J-F`TO&%=<:B3B\I:(:]D@&3RIB*9;#L$")4? +M2ZK74])&6A2UF@L@%2<K>%*M3T&?U5.YH^OS&.WX`5[4`\M)P5!4!:#!,3A5 +M%>@\TZH!_+SG9:;6-JT0[3)'*H56,+)#H/*N=+J!A%-QP5FK%BE2:*8V1^4W +MV5RG2E@(B"B\D^RFFW/WU4O86Q)=C=<]U5YIWE.@X8G(6[6:ZG2-3<KFNL^9 +M<WFMN"W==OKA.BZNUH9Z&8A<[=.;JB(SRN@OZI=3#"[(P5SW4SHJ$F(2<5.X +MU.G5`VVWVPNB\+EKJ@!G&5Q?3JY#0"0/A=7X;J"=7<8RM_4EW'5:OYD`K0LW +MS`[+$H5"XR"M6R<0T+"M:U,;#`5EIU&3F%2MWD`<CM*N4':A&T<RHU%FG^5* +MK7%*GJ=":=+"=AW5-I==W.G.AOZJ">VINNJ_F/)T\`J^ZV8]H;`$;)6S0P`- +M$0IVD3)32J['.MSI=,*];N#X(*A<T5-QGNA#7T7ZOZ?9/^JTF"?;W3._+NH[ +M:J'"`I*A&(&ZBHGM$9(7-^**0;7#\Y/*Z9QEAU;;+#\5TOY0.P[J43=!=JH- +M![8RMJBWTSLL#PW4!I@?1=#2/IV6ZS&?U)I:9A6K*N&VH+B$_4:;749B%BU[ +MAS`:<X"D_#5_(>J5&UKP^6,DK4Z9:MM;85'1J=[*MT.V:]_G5`M-C?XBN*;/ +MRA9O";#;6[[FM);CX6@;1C*4"![*]96S*3!C,)ZS6DSCZ+$YY:CF^I6T5):W +MY52E+70X8707ENTM)61=T@QVQE6+I);@1A6QKTX*HV[A$?NK5!QVU*K'*?B9 +M:5JG3G."\X\,=0?8^(*;7XET$KV3Q6UE3IKVG.%XCU.@]G67O$@,=(*Y?UR; +M[CZ-\*UVW/3J9!F0I^I6VIAYE>7_`(=^,6V[&V]P^"T1)PO3;#J=M>V^L/!) +M"ZW'?,9QRUQ7D?XRV+74G0T3*\9O^EOI52ZFV9.Q7TCX_P"DF]+BT%P.87GS +MO";J]8@LQV7B\F.WHPR]7EUC8UZ3R\M!+OT1=0#C#=,M9[KNNL=!%E4TO!PN +M>ZS;LI"8E>;R8<;=\<[:PQ7K4Z;:5$?)[+5Z+6=3:"1]5F&[IMJEI_-V0UKT +M0-#H:,0O/=[>C3LNGWTU`7GT^Q706U1E:@W3$_JO/>FW!(:[4872=-OFTPV7 +M3([[*XUF\.@MB16R<!:-1M"M1T.:#/*Q:%85:6K5$[%.RZJ,<3J=`]]UTQ%? +MK?@^QOR2:329DX'^2XCQE^';J-N^M9L+"-H_[+U#IM\:K@TO`'*OW;+>YMM# +M@""IZ\[CKCY+B^;>D=4ONB]1\BJ'-T&#)*].\'^+;>X:T.<&NCD[JKXY\(4; +MNXJ.8S29D0%Y]U/I?5.C5O,87.8W&"KN9?Y7MP\TO;W@=8\VCZ:L@C@J(W8> +M8)V]UXOTCQG=6Q%.J\^G'JV"V:?CINQ(^04N-=98])JWD'!D;)S>4VLU%T%> +M5U_'#G$N8=("H5O%5_>$TJ3WDGM_V4F%[I<OP]$\1>);2V#O5+EPW6?$M[U% +MQHVVHR<`(^C>&.K]6JZZ[BUIS!7HO@OP1:V9:^I3U.[DG_-+G)QBXY>3&=N* +M\%^#.H=6KMK7FKR]].R]:\+^&+/IM$!M,!S1(6Q:6]I9T6A@#<+.ZCU`TZA# +M7XE9U]R>7/RW/B-2YN:5&EI]H@+G^IW,DOF8V6?U7J3R]I!CZJM<W9?:@B)* +M991SF.@7M9U1VAVTRJ/4&-8V0<E,^Z!P5<Z3T^KU&H`1(7/W_+7JAZ%9W-P^ +M*;2X'LNY\.>'W@!]2G!]UL^#N@T+>@V6#;>%U=&UIM:`UHA;QW8S;)TPK6P> +MUH;IP%:IV&Q=,?9:YI@&0(]D+FM;D\K<C#.-NU@P,^^R!]$<J[5J,!@E4KJY +M8S^H)H`6-F"8/=":C*1))`]U3NKS,"?99E[6N;EXHTVNSRDT5O6%0WMZVG3< +M2V<KO>@68H4FXX7+^!>EMMZ+:K_SD<KLZ%:E3;&J%[/#A]KS^3+XNF&[*AU. +M\#&&#E0=0Z@T,(&_=9-5[[A\`E>K>G'LUS7+R7.,A1=.+7W.H$#Y3U[-Q$$+ +M0Z59-I4]3FB8WA3OAG_4]-[7O+,$MY5R@W$X*KLI@NW*M-U#&WNNC)WC&57J +MC)GA3N?@M*KW)`&#NM1*S^H-!I.7(W-/_P!<XCOLNNO3_(/=<S4IZKUXC,K5 +MZ<[VYOQ51F@Z1NN.Z56-KU@:MB5Z#XEMYH.,+SCK`-&^U@[%:LW'/JO1+7^9 +M;->T[A.ZGZN,[*KX4N6W'2Z<'40%HPX[[+#:LYF2T-D<F4`8&RK<`"57JD!T +MSNFA#5``$1*HW;FD$&%<JO`$Y5&YR_:545"WU$CCA1WC-=$A712EH)P@<P$E +MKCC@HE8%H[RKPT\D']%<JZ9@*/K%`4ZPJM.`5(8JVPJ-@'V4ZIW%:YIP[6?W +M3!K7,]RIW,#FC5B$%.F`X@&$%"K3-*KOZ2KMJP8)X37#`XG&45C^:)&%*L;% +M!W\EN>$6L]T-`M\H8E%+?\*SIMS'7#_"T-'(W6/08]@-0Y:_*VO&8_D'&9X5 +M2WJ,=TP-J-`<!A=9=[<.G/7CFN>0W:>5E==93=1@CV6SU*DQO\P+%\05)MAB +M3*L*HVE336;JTXSA=5X<J>EW^:XUSBQ[3'W70^'ZY#)X/*WWRQU7963]39!V +M6ST]P(&#E<MTNL=/YACW71=-JCR@0%&FS1=ZA&5H42-.^5DT'ZS(!$J\*P;3 +M+CVV6=+M)=UG/<*#'23N95ZRHBE2`@@\K/Z8T%YKOW=LM:@X$"3A3_524XVD +MR5,`(B%$V-X.RE9"*DIMB"5+`<R`HP/3,J1IG$J*A+32=K9LK%O4:YH)&2DU +MH."9)45>D6NUL)]PBIR)S&/=9OB6GKM25?H5P6AKL%!U5GF6C@"I2,#PP\A^ +M@KJ;=PB97(]#>&WSV.X.RW[F[93H:0X2>RVST;KO4`QOEL,E8_3Z56]N(&W= +M2/8ZXJ:1))Y6Q94*=C:`F-<96=G8+RX;:4VVU*#4/9;'1*7E6X?4&2-UC],Z +M<ZOU$W54SR`2ND`:VAI[8PN.5VMA6W4:+ZYI!XD<2K#R'`&?C*Y#K6JPN?/I +MOPXY6ST'J3+F@PEV2%TQU8U_5I56`M@Y6;?6[2"M34'>D$&5#>-:*>8(2QIS +ME;^6X[@!1MO=!C)6C<6KJ[SL`HSTQ@&1*SLTSKBJ^Y)9_2N'\9=&+*AJTF3. +M\+T6I:-9^4`:55N;!E5A%2,K&<]N6L;IXU7IU*;I`(A;OACQ3==.J-94>2S9 +M=/USPO2JM)I0#[+C.L]&KVE8RWTM*QCG<6[C,GI?0_%%EU!@8]PF,_[A;0MK +M.K3-1L`N"\-M*M>UK:V/+7!=#TGQ?=4G>75>=/O_`-ET_CFQSCTWO'?1YHOK +M"!"\?\4U88^F<0=Y7J/5?$'_`!"R\L.ES@N&ZIT2K<5'.#=1)PO+YO'KAW\7 +MDWV\SJ>8ZLY\&3M"EL];ZKJ;@`!GY787GA_RO4YD+&N.G,I7&L-+?A>:XZCU +M3RRHQ7=;T#/S`1]-ZG4J7`;J,3D2J'4V.<[,CY0V3/*)>[Z<+EZZCK-6.^Z7 +M?@4@TG/`*UZ%1M2D)$D[A>?],OG/N@ULS\G9==0J.IV8<(EWNM2\.=XK>MPQ +MFI[2/H5:97]49C]UA=*K.JB,GYY5FI=EC\DAW8JR+[).IU`XF0-^5E=7Z1;7 +ME(L<P>K*DZK=--,&23\IK*O4J.$\>ZQE_KI*X[K7X=LN-3Z(ATJI2_#6NZD& +MAH:!S.Z];MS3%LQK@)(S*FHUJ+1,1"LEZVZ3S61X_5\"%CJ=)]-H:S^H#+OE +M=3X=\&6=HYM3R?4-B0NHJ%E2Z!#>58K564P,PI9;Q:7RVK]E:6MK:M+:8!(Y +M2-^QC/Y9,MX"R;SJ;74M,RJHNV`Q*MLG#G.>URYZH75C)52[NP\ZM655O&:S +M+"<YCLLZM3>&%KB09Q*X^_QK2Q<D5-0+S*JUKC0R`X]E4N+MU(QW"CI5C7:' +M05F_E6C86C[CU9C==YX&HLIM;+0>ZY;PM2\QH;J))7:]`L:E(X^JU).TMXT[ +M'IU2F&`#$J[YX#=\++Z?:52P1)6I9](NZ[L@@+K+\<D52]$F"H*MP\MELF5O +MT?#C6MFJ8A&_IMO281HSPNL\.>7QB^3&.2J&XJ.@`Y3#IM>J9=NNG%I2!.EH +M1,H-G\L+>/Z>WMB^;\,&UZ&TP7"?E:-CT2D'`BGMW"V+>BR>,*[;AH'$+T8_ +MI\8Y9>6U4M+(TV@-=MV4E>W>6@-*O4V:L@Q[*5C`)E=ICKIC;#=T^JXYRAJ4 +M*MN=0^RZ-K`L_J3FG`[K4P9M8E2\J.=!D`=@H.J>)[?I]-IJU`/;_82\075. +MSMG/YX7E'B^[N^HO>:;"6@K>YC/;)PSMZQ>DV?X@]+J5=)KM!^O^2Z#I_7K> +M]IAU&H#.<%?*U6G5J7]2F7O8YIG!73^#_$'4>D5!3J/+V#:5G]W&W34E?1_\ +M4',`)RHZE8/V,KB/"OBVVZBQM-]0!T97327MUT7RU=$V.]>=!@A8%)Y_CG$@ +M22KO4KE[00X$++L:[7WD#E6])]-X@;-$X^B\U\5TCYSH:!!X7J75!KHG'T7G +MWBVVRXYP5J.=['^'%V^7473@?W78R8_U7G/@ZLZWZL!,:L'*]!+R:8(^\[K' +M^-"J.`;D*E<D:L%25GD#=5JIY*NA'6+B,C?@*![1&0IBX.RW<;!!IDYWY01! +MQ@B,)XU-@%3>3Z9E`69G909O5:6J@[.%1Z82&.89QMA:O48-$\@<+&L"16>$ +MO42?5DAAV'R(2:P`AP">F`XR1A3M8W3@04%&YSB)16M,@SIW4KZ<UM)D?"FI +M4BR6G'92D6*#1Y39(E%#>X2;HC;]4O3V_59TZ.:94'4>JN8XC0P_=#U6A2I5 +M2`0.T*#I3?(NJM7,%1]7>XN:^<NS,KMJ<//]9G4*9`QD%8'5Z(#20=MPNGNO +M5;SB=Y6!=L<*CIR2=DJN:NJC)]6Q.RV/#]0TZ,D@SD_=9'6&:+B>"5?Z0X:0 +MP5/:>ZU.F:ZBP?',+H>DW$4XQ\KDK*J`X;SW*W>G58@DXC9(O;KK!P(&=QDJ +M6O4#M-!I!)W6=T^J74QZN%/T]X?=NJ$&!LI81OV+6M8!V5ZG^2(*SK)PF!`5 +MZF^!NHTM429W*EIB8[*O3<)B=U9;@"%%3,_+`W4C6X'WE14\22I9$1.%%/F, +M#/RBI@_U94-2LVGDN`4)OJ0$`?571M8KVQ)U,*@KUBRF14G'*=G46:=L+/ZK +M<NN&:*;9E/4VPK:JYO5ZK@#"T#7?7N!3&RDL.FM:34K'?DJ*Y=3;<AEL-3AV +M4EX9URW["A3I4\Y="N4[2I49KJ?EWA#X=LGZ&UJ_(E;59H%.`V`LWGIN37:C +MTUA!(C'"NENH22`%%0`8X@_='4JRW2"#*QC-W:3MG=5Z>+UODM@CNL=UG<]) +MKB"[RUV/3Z$`N</S)NI6=.YH%K@#'W4LU?:.LFYJJ/3;ME2B"")[*2X(JPT; +M$K%(JV%=S7M.DGW6CTVX:^H"3LNDLRG#.M7E?I46,IP<J&XI`;`*SJ!`A/ID +M=Y4TTRZ](&<9[JM5ID&2`MA]$OVG*J5J,&#/LH,]S/0!&#RJ?4NDT+AGJ:(* +MU:U.)$%`YL".`LW&7M97%]8\*T:C"YC1/LN.ZQT6O:53#,-)7L7EEPP)"S.K +M]+94!=IB=UROCUTW,M]O)J3:E%^DL,!;_1ZC'LBH`#O*Z#_@%.LXZFJG>>'Z +MM&KJI20F[]2R?%&_Z?0N*9.D+E^K=!8ZF][6R`<GLNW?9W%)H#ME5O*#VV[Z +M5,"'X=A8N,R[:F6GDO4^E>K2UNTJK=='<:<AI!7=WO2*QJ'33+IWPH+NV<RE +MIJ4B#W(7&>&?EV_=KA[*W=1J@D!L8GNM6ZZEHH"'Y'=:0L*=1I&`%G]5Z:#3 +M);&3O"YY>*QN>297E?Z)>NI40YQ;!&X4M[=MK/:01)]]ED68<RB*;C):,[J& +MO5J4ZX:""TXP5PO'#K&C4J^:[3J,3O*N6E44-.?JL>G5`:'2`!O/*EI5W5'[ +MRUJQMN.CI7CG$MG"G_B(GU3.ZR*%9E%AAPF%4N;\@N>"M^Q&ZRZ:VO@SW17E +M?73UMW/'9<C_`![G7,AYS[K09?.--H:<_NI<MQ=:37-4AQ<#OPJ]*N[SR2X^ +MR@N*SG"2`0/=5*M<"H2TG*YMR.@L+L.J-:YVVZ;KU;R6BHT$25SM*^%*LQY= +M$')!70731=V!<001LDE6\=L*XJ><]KFY]N5IV5`LM]>K$8PL[I]J\7D%OY<# +M*ZNTL:E2ES'*LPW>&<LI(+PV'4ZP=.^R]6\%61NV!SMB/\UR/AGPW5K!L-7I +M_@WIE>SI!KFQ`V^Z]7B\4MU7G\GDNN&_TKIE*E3:"`5JQ1H4Y;I4%K3?H#LA +M!>M<&Y)7OP\>./3S7*U6N[MU1Y:W;N%4KU''!XW*FH#+DSK6K5K:H,+>^&5< +M9,P$3`XG`6C0Z<XMET_57:'3F-W&>RD&71I.DR,*W3MW2M-EDT$G=2MMVZ<? +M9:D%!E)P;G*)C#VA:'DC3(2%$1(51FW>IE/98=[<>6"3]ET'5"&4\[E<CXAJ +M[M89DK7QBN7\47=2YK.IC8'[)>'NGVE>V=J:-495^WZ9K::CQ^9+H-D:5Y4` +M/I/"X>3^4W6<IIR'5/`M.OU5]>B(U'98G7/#%U9G#-0!WA>ULLAIU-/Z*M=] +M/;5:6/:#VE9GBUS&Y>-/":1K6=>6RQS5VW@OQFZ@YEO>.G&Y4GC7PN&36H,@ +M@SA<!U!IH52UP+7-,;K>&5Q,IM[O5JVO5;'72(DB5R5RVM9=3)$Q*X_PCXMK +M=,K>35J33(@2=EWEA=VW5XJ4RUQB=_\`?9=]RS;EK5%_Q!M1FEXAWV7.^)F- +MJ,>=,@G=;/7K(T3YC20?98EW7<:#V.`U'&1LND<LHY*UJ?P_4@X8@XRN_MZQ +MJV;'-=DCNO.NI_R[N1O*ZGP_=N=9MU'("EG*R\-USCR?LH*CAM.$#'^8-SE( +MR'&(4:`0!ZN5+3F-DWECVD^ZD9@94#U!#1F57KN]/8\*U5;Z0[,JA7=G?<]U +M8BM=D&GI)_18ML?+O7C43/9;%T<.))E8E0D7Q[)>D:=(2V=X[*3;`5>W=``" +MLTFF>9]U%-1:#5]0(A3/`!E$QL"2<]D-P0,_HHJ6F\!@&4_F#W4+3Z1ZH]D\ +M_P#6HUIS=9WH;3(`,969U!AT$QE2U;DFLZH1`.TJM<UBYLR"5VTX(:A(H_F^ +MBS;RF7DN=PKM=SM!XGA4ZHFE,PI5<MUUI;7#G3I!P0=DW2ZCVB7MD'^J5<ZQ +M2Q,3RJ5H#5I.#I`&V=EJ=,ULT*Q#P2[!'!716%4:6DE<9:5=/I+7XY*Z+IUP +M7TFB=MH*I+RZNA<%E(0Z0!PM?I`TVV3NN5H5XIM'O]UTE@_^0WX4L5NV3\9S +M]5I6[NZP[6J`X0?JM2SJ:FR)[Y4I&A2_.3E66.TA5:3I8`%-3)U1*C46J9Q( +M0WEVRA1DD!)BYS\0J%[5LV_P9(/LL7*8\UJ3?#8I5*%4:GU9!15KNPH`RYI7 +MF-!_B*D-&A_;A07=MX@N`Z7.SVA7W\?Y/V\^GH%]XAZ52!UO:`-LE8UYXZZ; +M2D4(<?:?\ES'2/P\ZO?U/.O*[P#F%UG1/PVM*+PZOZOF?\UC]Z7^N+7[6O[5 +MF#Q/?]1J1286TW<E=KX*M*9#:CQJ<X<I7G0+2TZ=_)IAL)>&:S:;M$P1A:QM +MR_LSE).G;68``;$1PIZT"F52LGZF`RI[JJ'-#1E,NEVJ5ZFFF23NI.E4C4=J +M>=ME'6HZR)..RO\`3@&P,=LK&*XS2]28(P43FM.WZI,&(!!^JD:.\?=:;C(Z +MYTYMQ2/^+VP%SEN]UG<EE21P%V]0!P(,$+"\1=+;4I&HQN1V7/\`K=Q;-\4U +MI=,<T>K=7*+VD#..,KF;-[J=4TW...Y6Q;O)8,KKVQTTP6G8P.RCJL;"@IBI +M.ZE.N((6:T@K4L3&ZJNIGX6B[20,;J)P;R/NH*@!&!A#6IMJ@#WW5I],3,?9 +M`8;N84[X7I49;,INGGNF%!M5T$81N>:C](`5R@QK&#W4OX(R.H=/%1D:<+'J +M]/'FZ=/LNV\K53P%5J6+7/U1NL7%K;F[;HM$PXLRL[Q'X=HUJ9T4Q)W@+O:- +MG@`C"CO;!I&V%+A%V\AN/"M1C"6@_*Y?K?3*M'4T3\+W>ZLV"@06CZKS/QI0 +M\JY=%,@$]EBX-3)Y6\/9=%A#AGE-6B"8,CLNDONF-J.+].%B7ED6/+73'[KQ +MY^/5>G'/;+\XNJN9I<X*Y2,-D8CA3-M&ADEH'>!NJX8]I=`7++#3I,]E5N7; +M!Q'<JA?W%1KBQI)*G;3>*IEI=K*LML*;FESV$D]UC4CK+(R+8/#C4)]+LD+6 +MIUM&F3Z>Z"[I4J,`"&G@*(.<ZEIF,)9M;EM9K7-)M$^H@E9#*IJ7!!=`'8*V +M+2I48&.;^;F5:L.F-#=9:1ODJS$]Y(:QM&U"Q]29WA=7TI](46L.\05D6-J' +M.#6%=7X:Z,0W6[)/9;PP<<\_R'IO2:=2Y#V,D'*[#H_098':-ALM7PKT9C0/ +M0<CE=OT7I3&LDMX7J\?B<,\]L;PG;-HU-#F1A=I9TF!H(`677L/+K:J8`6G8 +MM+:8D_*]6.,G#BM&H6F&C`5;J#I&1'PIG.;JPJ?4GM#9#I]ETTSM6K5*=&GY +MCR%-T[K=C&EU1I(]PN+\:]5N:5`TZ3'?(E><OZIU6E<N+*M2"=I*7+#'BIK* +M]/HAO6K,`$5&?=/_`,=LA_\`I&_=?/K.M]>B-50_=%5ZGXAB07Q]4_<\9Z9O +M?CXBL6X\YN?^I1N\46`.:K?NOGQW4NM:CYCJP^Z.C==1?E]6H([DJ_NX)<,W +MT+1\1V53`K-^ZF/6+73+7A?/G3KCJ8KRVN\`^ZWJ?5+UC`U]5T_*OOA4UE'I +M?6^L4G-TM=)'995"B;EQ>X$MW7/^'?/O*\U2=*ZI[A0H!C#^JS<O>\=+)Z]J +MM^\,864QD*'HC-%4ZOS%6J-L:KBYQGE2T:(:\F!]%G/IG2_;N](DRCTMDF<% +M0T8$P1*DDQD[+>/,%>_MJ55A8YLA>??B#X,IW=-U6U;I?/'T7HU0@C;*JW+` +MX$`*Y8S)9=/FCK?3[VQK&C589:2%K?A_XDK=*Z@UM;46$1GC_<KU#QKX8H]0 +MIN>U@U[X7E?6NBU>GW+@]A`G=<;[8UOC)[(:E#JW3&U*3VY$X*Y#Q#:/HM=$ +MS.ZS_P`.^O/L[@6E<S3(ALE=EXIM&W-AYU$#(7IPRV\^>.GDW52YU7,`@[K9 +M\*LJ7%N=#H@+.ZY1ASLPX'NM/\.G#SC3C!5RK.+7:+BD0"?96*3*[@,`+5K6 +M8.0`HV6[V]L;++2@:-P)!<$#FW#,3*U7"&B?U4%9NF85&;6J7.VP"S[JM7!] +M;/LM>Y,.R`53N2UXG2$1E?QF/5QW6=4J-=?AS7<E;%U18_\`ISW6'<6T7GI/ +MT5O236VO;N&K>)Y5VAIF)^BPPRNS.DJS:7548<W'S*RK<C21G"@N'`.V*K.O +MV@:7#]$GW%)P!F.R"VP`M">&J%CVZ!Z@G\QO<*-.$NZL^GA.`/+!=E1U634P +M/=2L:U]/2.%V<5:H095:J=0CG967`ZCC95ZS03'ZJ:5E]8I`T-``E9UFP`.: +M0/HM/JC9JM9V"IT*(:\P))25FHJC21#A\:5=L:CJ+@W8#@R%7SKCCOPK)IEU +M-N-7N$&O85IK-DF"NJL:HAN9PN#L*FF[%,SA=/T^O#1"U.5=/:UB7!H^RV;* +MI#<?J5RO3J\O,N)6]TVKKC&R6(W*-0``!6K=S7.D+-H.DB/W6@R&@`?HLUJ5 +M<:X<HJC6ED$`J"G!(_NBN*PIT_[J:VNT%X;=@@,"CL;1E:KK<T`)4*+KE^M^ +M!P%IV[(`;VV"QJ7IKI:M&-:T-T@*WH]/^JKVXSMLK;!_W6A4ZC0\RU(7+V+1 +M;]1<TCE=F]DM(7(=<I>1U`5`8DY69=9+>G4VEPQM)L<C96[`&JXE<_T>J;D1 +M&RZ;I5(LI9Y4SO.G.<I:K`&>Z&V)#O4%/5&H?Z*!PAPSE633JT:)$-RI9RJU +MLZ6@&`58:"8[(T51H&905F5M]-I]E&ZU!R$;*DP.49]+20<]EC4K6V=>L-, +M8*I-IU:C@'#'>5HO'FU2(Y[JRVB`T#3"S_D5FV])E-V<E66,&L$%2U*()QNA +M-(@X36A("`I:36P2>55<2",8[J1E8!%70UH;`E#4:"S*A%6=M_E.'M(R<H*M +MS;![B-*Y?Q?T*G7H.<&Y/^^RZVK4`<51ZE4%1FF-UC+':[>54>A52]S(Q*Y[ +MQ7X?NJ)+@TP3_OA>P4NFN;5-7RR0[L%'U3I-.[9#J6X[+A<-NLRT\";1J4_3 +M4$_*MV?3&5R-`A>B^(_"5%E$O:T`_94/#/0CYI#FX"Q<-\6+[:YC`M_"DT-? +MUCLLWJ/3S0FF*9G9>K'IS@T4VTXGE"/#--_JJ,U'E+XI.B>2WMXG<]'N*KQ_ +M*<0I+3H=Q(:6GY*]J'A^V;Z13_15+SPZ)!8T1\+$\<VW^Y7F+NAOIM#N5/;] +M-<ZG!/U7?O\`#-6J(`PK%OX4,1IRM?MQ/>N#Z'T>+F2["[CI%G2I:-3H5YGA +M&L!+"1[PM&T\)W3J0ESI[PM8R8LY6UK]!JVK&CU`'NNCHWM!K``]H7`7W0NI +M6DF@]Q473K;KSW'4XPO1/)XYVY^N5=U>=2MV/!+Q]%/2ZM;>0#J'W7#5>C]6 +MKN#B]TCLIZ'0^JD:75'1]4_=PV>F3H[_`*]0H_\`Z1L?*CL+\WSBX&0L^S\+ +MU:@FKJ=\K>Z7T06S!N,*_N;XD/37U%>V%K<VY#J8<3W"P3X-MZU<O\IH;VC_ +M`$7;T;-K0"3)/NK#:=-K8`!4R\<R673E+3PA9,:)I-D>P_R5O_RY9-;'D-(^ +M`N@JQ*@KN<!NK/#BERKGJWAJQ+3_`"69]@LOJ'A>U+8ITQ]%U^E]3$84M*U! +M;D9*7Q8_#VKSEWA]U(D"F`HO_+UQ5J`Y#5Z3<65-PF(*SKLMH'3`,]E/V[\I +M[,KI=HVQH``>H"%;HT'U'R9,J6A2=6=J<,%:-O1#0!"WC-349O/**WHPS+8^ +MJC<P"K!G*O\`EC3@*C=RVMR,K>N&:8M+78S*1,$J:MFB#'U55\SE2<5DG.TG +MY4535F"C)$@'"9\&8*TJK5;JF2N;\3]"HW])PT#5W74%A)V0OI:FQI4N,IMX +M7UGI]QTN])@B#Z2N\\!=7;U'I9MJSO6T`>I:7CGH-.\LR]K1K&<+S[P]<U^D +M]:\IQ+6DP=USG\:MGM%OQYTS^%K/>UITN."%E>`JOE=4+"XYXE>@>)[6GU/H +M@JL&0)QRO-^AAUKXA@-YA>B_U<9V]4I`.IC!P.2HW,R5-8Q4MV$DB0AK@#(4 +MBJ58.S.P4%9TM^5;J@0>52KG!C"(I7,D20J+R-6ZO5RTX"I730(`PJB"X.#( +MGLLDLF[U`+3N7.GV673,7I(VY4O5)VO,$S_DIZ+!AT#"CI`;S$\J>FT3@J*" +MM1IO&VRK5;5IR'*XX$-R@=!,CA-$0LM:VD14PB_A:_\`\BMTP-`S">!_B4:< +M"XESH."$=$D3!D!0L)#<R/D*Q;Z@V8&Z[:<:BKR'%5JC0'YY[*U=CU856X(` +M)D2%"LZX:7W3G#@PH:K);`P?E:'E11G:52JL(>2,SA155K)'<'LK-`Z</&^P +MF%"YI#L_]U/0=K<,25>TZ)S1_$-)D&-PM.QK.:((.>5E7NJE4:YAF3$'A7K" +MIKPX3"16]87!'($KH^DUM%,$'=<10JNI51.&KH^B7(>T'5*TS766+Y=RM:W< +MV,RL#IM4$3NM:V>20I2-$U64J9<H+1C[NOJ(A@]U6K$UZXHM)CF%L6K12IM: +MP<+%_#<_*9C`Q@#>$QD&0-^Q4K#QV35#`C)*:5-:N.L$G`V5ZFXG/<K.MW28 +M5Z@9$;*BP(+8`*YSQC:N>&^4W<KI*8_EX,*I>L#ZC01)W6,HTH^&+-U"V;K! +MD[KI:+=#`J=NP`-``$*9]R&D-E8QYK&.EID'!450#5A/1JM)B4540<+I72#M +MR!LK=%V),+/8=.T^ZN4G`MXPBQ+(WWE(Q_LI-!/;'9"T0XP5&C.`TD2J74*- +M.I1+7<A6W&-S/LJEZ?4`.<%2P<?=6=:SNW56DZ25H],NPX`ZMEN7=FRM;:2! +MLN5ZA:U;*O+0=)*SC=<4RF^736U8.&_"EKU(9A8/3+T.:!^ZTC6;4<!.5NLR +MM"RICR]4F5.6>KTRH;?_`)<B!^BL4L-EWW4D:1NIR,F$!IP`K`;.=D[62X!2 +MJINIRA%"1*OE@R(`^JC-/U0.5!4%(@9PC\H1,[JP:8&#$%-H[#"FE5:E&1*J +MBW\RN`6\[+4-,QV3]/M0ZKJ*6$2T+.F*0&D;<!17'3F/`AH^RT]/&F?92AK6 +MMG$=E-1IR'7.B.?2.`0LSIO1/)=ZFC[+MNH5&Z(T_14&^HQH4])O9MF?P#`V +M7`>REHVC'0(5ZI:U'$P"FM[=]-TP5C*S>ED9]QTX%X@<\*:GT<.8"6+:L;37 +M4!<%K4K6F&Z>RSCA]:<H.D`-!TA2T.E0Z2V%TE:V;B!E)M(-`.5UF++,H],: +M6B1GW1/HMH-($>ZO5:S&LW.%F79J57P-N%9C(EY0/8VK4RR<JU2M*#698)04 +M:19$@R=U,`Z<@Y34MY7F#9:TA_0$YHTFMPW*"7!V)3OU&-)*:B<B&D-``@IG +M/(=AOV2;3/\`4EY3@XPKP:)SC&WW3EV,G]5(*9:R0/HJ=:I_,CCLLY9Z60US +M<EHP%';.-P^`FKEDP>>ZFZ-0&LOXE<YEEMK46J%#2,C*D<`T2?U15:M.F#D+ +M.O;IS_2QR[R,6FZA=ALAOZ+.%)U6KJ>,%7*-N7G4XRK+*``@<)645O1TMPV% +M*&CD*4@S`,)0"?=601D'Y_LJ74Z0@&/HKYDG!5?J(]`D[*I4=`:K<3!`4;J0 +MG"L=/&JC.T(W"#')6/\`4RXK.J4(<9"C-/@K1J"./E15&3D05L4_+$8RDQD- +MSCY5O2(E1$;@B$%2XHM<TM(!E>7_`(E]'_AKD75`$23,!>JOP")E8?B^PIWE +MBX.:"8*93<3>G,>![L7O2G4'.ES1&3[+D.J6O\)XK((_,XG]5T/@B@^TZI5I +M%IB?@)O&]H1U>C7:`?5O]5,,MXV,Y363H>GD?P=.,X&R>XVSA*P'_HVF!D!# +M=P`,K>*5!5V/"HW!,D#]%/6J0)!E4Z[B3+9515JCU<?=4[C\V3"N5R)!.%2J +MD$Y^Z(JU3Z\SLJ=O+KEQ@QRKEUAITR<*IT\S6=D_52]$7&P'1'V*D9J<[T[H +M-!C8%'0@;-GX0&[\OJ.R:F&X.K9.(G,DHBT$=CPHL.`XB92AW=&S3I$RG]/< +MJ;C3S.W=+)[JY;5!@'8\+-MWEM*-6KO"N6;IS/W7=P6KR"1IR%0O&X#!_4<J +MY6>($[*O0;YUPZI,M;@+-6'>P>3@Y5.L``2<=CW5\!KG$=N5!>4Y9EON$JL: +MH)J`D$CLI:!)<``(]U)=42*0=F?904FD.F00#L"D2Q)>M:6M#@"?CE'8.#'X +M&?V454&I4B<`<Y*>FZ'"00-B4B5IL+:A!&/E7>GW+J#X;^4\K,L7S5+85YD: +MM)C/Z*SAJNQZ+=M?3$>PRMNG<::)*XGICWTP"PB)6W:7IJU&42XQO"U6>G4= +M%8\36=C4M:VENY]UFV-1OE-`.!'[+1HN$3,+&FEEASE&X225%1@Y)4\0T&8! +M4L:!)!`"M6U0$Q]%3<,GD_*DMW:'=Y1&K2)B8A-#7OGLH#6TT9$!3V)+J>HQ +ME8S+4VK13+BJCGMJF0=BH?$UT;:UP=U1Z1<A[0=6_NIA.$C7H574G2<A:%"L +M*C1,3^BHT--294C&.9EI6W2+FKT[;?<J>BX0J=%X=$JS2QSNHTM!P`ALGW2/ +M>4+-.F!^J*0!D*:4%:&LU$!5*`-6L29@84EZ_P!):'&45C3AD]TJIF@2#V5# +MK-DVYI$`96BXP0(3.`TZ5,IM8X*X8^SN""#$JW:70\T21D2MOKG3V7#"=.RY +M.X94M;C27>F=UG&WJLY3['96E753W5JG4).-AV6!TBZ#FB7+9MWR)E;TDJVP +MR(/=3,@`S/95J!>7^IP(XQLK$<\J-G:)R#(1`<D)J8/;*D;DPI1$^F79!`4C +M:+0WW`4K&M&#NC;N,84TJK7;I:K-C3#:<[2HZK2]P&%:8T,I:8'T2K#B!RHJ +MSC'8J0R_`4EO1#R9E.A3;9NJD$@Y5@6+&Y(`^5ITJ(IT\H;EHTDA36U4J=$: +MM$*9UI2+?RH*!FI,X"LZ].Y4UNJK-I%CI`,*1E<@P>RL`->T84;J(>9[%76A +M(QP>-]E7ZA#:>#**K2=3RT_=4:M74_0\\[J\!J-)U0YF%890:!NI:+0U@&_P +MIV!H"FOR*OD-[;G=%Y`U1"LD-F>4_I@<IHVJFW`3MH-Q"LB"-N$FAF"#":$+ +M:`)V^4A;@[[#LK!+0))CZJ)U:FW=X31LWE\8"JW%BTNU$HZ]]39L9CW69?\` +M5M.&3E+A+V>^AW]M2;#IV04:[:=.&!0-K/N0"\DCWX4U*FP-RDQDZ2VWL%4U +M:SX)PCIV^@[`^ZL,\L#>041@[%:TR&FP!IGA.-_A.X`#TF4$#5NJ'?G(*$3` +M)^$SS,]PA>2UL]T!8&(S\JMU""S&2IM7V4-_`IRWZJQFGZ8TZ3&RDK$:@=H4 +M/2\-,E2UXF9P5SLX3()<")(]D#R`(*7[#*$YAP*W.E"8TX0.&9`GY4D3_4AB +M'^RHKUJ<CTR%4N:.JD0[E:#Q.1N%6O\`_EX5B5Q=>V%IU8O:/S'^Z#Q/0\SR +MGZ3W*UNI4`ZX#SIE4>OF&,`B9W4DUMF\E;PR@P#``4%TZ2<?JB#M5,`G<<*K +M=/B8(GE:G#*M4)DP<*"H9&)SPI'.!F#\@J"J=.SAW1%>OEWM[JM4#OS<=E8N +M#J]H*A<($`_=!3KM9I)DY53IP'GO),$<*Y<?D=..,*ITP.\UT']4O1%YF<1^ +MJD83$1`'NG#1,D'W'=.3+<84#.(<!!RG`[DIZ1:1/^J:L"#G"BI&_EW/V2^O +MZ*)E1FD22$7FL[E--;>/4*CJ;]1)<.%KVM21,P>RR[?3IT.SV4],NHF=Y^Z[ +M;_+RK=P]U)AP>PRKG3F>7:^K!(G*RJU7^)N:=,8:W)6L'?R2W[*::@0"PD\( +M+C\H$3/Z*5Y/E1$DJ/3.\[(TJ5VX`@[S*I!A95(G[K3J`D9:%0>#Y\:02HE5 +MVG_U;A)!`P%-J(.9]E#/_JR,R,;84]P"TSIGXE$Y%0<:;I#MSW6@Q[?S+*HE +MSJ@!&^P"M^8-@[E58W.GUG>6<K2Z('U+AU:?RX7.V58Y$D!;OABJ,@DS*UV5 +MU=A<NI.&HF%MV=TVHT9SNL&U#:@$1*O4&.9!;Q[K(Z*W,MW5RG.W985G=EK@ +MT\[Y6Q:56N`,R%*U*DJ@`2H9<TR)^JM/TO@JL]L'(E94=2Y'I870MBP_Y+3. +M!"YZDTOO6[P%T5`%M&0N67-9O;'\8--2E(_I_P!5B=&K%A,SV71==;JH'4N6 +M:UU*K.5O#BMV<.MZ96U$0>%J4CJ;PN;Z/<9`G*W;>HV`9)6S%8JLV<U'1JC` +M(3M=Z1"&I3CU`+/3HM4W9PI'/&GC"J4:P@ZC":K6!PWE4V6H5KF-X*O4QB`J +MW3Z`8TEW*M`9V69^6C%V0$;8(D'Z)B&XG=$&C<X0156M(((GA<YXEZ=K];1L +MNG.^57O*8>V"-\+-QVNW#V-1U"KI=N/==!TZZ!8)/LJ/6[!K'ZX&%5L;G2^. +MWNM2[<[-.JMZDG#L*SK$]UCV=QJY6C1>#C=-+*OL)+)E24CE5Z1ALD>TJ>B9 +M(SMP%&ED$$`;]T1_+,[**8*)YTL10T0'5YD8'=6JL0%7LBV22`K+&!SO]5EH +M]"G!E7K6F&[0@HTP8PK--H:`"Y%AW`!D2H;HPS^RF>0!G?Y5.\)TQ/NJE0V@ +M'F&45P8YP5%9_F),[JQ<4R1A94%"M!A7:3FGZY654)IU([*S0J>D=RM)%NZT +MZ3`&VZQ<&N8V6A7J$TX<#"S[9NJL7`*6+M:+](QPA_B-)DIBSDG'9`:8]\\J +M@_XKD9A+^+&5`:?J@=^`F92`=D%-HE_BS)]TOXP\%0BG\I"D,%-B2I7J$1)4 +M%057XU8*L-:`$X89SB%-BF+5Q,.<?NJUW:`$20M8#95.H0"`2%=<`+:V:*(+ +M2?NC%)VTQ[RI:0!I8.GX3GL2DG`K.;4:3#DPJ/8W.1"M$#<J-S`>$1"VYP9' +M$)V5Z9`(*9]$'X41M@#@P$1/K;O,<?*(D1CXW5*I2>T^DJ-[JH]U=C0])&-P +MJ]_4;Y<$A5Q=N!R%6NZFL:M7W59J[TUQ<V.#LK-5I$$\JMTA[?*)F5,^H"Z) +MPN<EJ7@)'I$3*0$"/JDXM/*0$N@25U:(0/E(029"<3&R=\#VQLH`>`#E4[PC +M3."%8JN),-5&[<6X,JLUD=3J,;5!,?*Q.MW-.I48UI$K9ZM0UTBXN`PN.>QP +MORTN)SS\J\:VQ]:A<!3EHX5.L_48$X/*G+O1`.0JCYUD"2K.D`[O,J"IVB.5 +M*^1&-U`_5L4$3AJV*C<V1!^BFB#(0P8@")4-J-TUVDDJOT9I-1T?NK=P?26@ +M1'NJG1!ING@_U83+HC1+0'$@9(SPA:UWY01'<<*<M'"B+PPGE`5*F!'8*.KD +MD/E2,=$$2HG3K+CO\J0(-;`]2?2S_$G#C'"6H^R-</%;%\.&J"9V6HUPTR1( +M&<&%B4*K34])(]IV6D:W\EK&B2XP(7:O*.U#]3ZS01G"T[.X!;H><^Z"@P,I +M!@R.4C0TN)&^ZSTWI>)!@`(7,(4/3K@ZB'JW4#33F55BM6U:2T`'4%GO]%:) +M(/Z+3=3BFXSNLRZ#6.)=R,+/TO2L[2ZL7N`[*\UC74X':!E5K>D#1U%NYY4U +M":9`F0>2D$%9HHUO?=*K^77,%3WC&N]>F>ZJD#3I,P$5;L7M-,ZCQN%L]`J^ +M6S5.YY7-V=3^2X@''"U.EUY8`>/=;B1WG2K@$`D_9;UE5#V@E<3T:YD!DKI+ +M&X``$E+$Z;HIAX)8`3Q+E:M0^F1G!5+I]68]2U*+@6C"SIK:W;W`C2XY/NGJ +MP&EP)4'D2-0W[H;ASVLT[GY6+56>F4O,?J$[K9HP*<3LJ'1O10]6>5/5KR=` +MY7/&;J3M!U-IKO#&G"Q.K4-!CLNGMK>*9>[<[++ZQ;R#CZJUUTQNG5?+JPZ5 +MT=A5+V@`Q]5R[V^74Y"U>E7&(E=)S&.JZBW,B)'RIW?EG*S[-X+9F58K50QD +M24TW*@OJ@;L<GCNFL&U''4Z8G9-1H&N\.=QW6A3IM:W"QW5UI.RHV!*G:X$S +MC"IFG)D'V1`/:%6EL&3@I`D_TJNVH08E2,K-,@N@*:5*,"80U!(E(/9,RC.6 +MX<IH9?4:(>PXRN5ZA3\FXD8GW7:5@'",K`Z[:C27#CE2\%Y4^FW):()6S:5@ +M1)*Y6D]S'D=BM;I]>0`=EISZ=-;U1Y6\PK5JZ3LLFRJ2)F%HT*D[%--RKP=* +M&L\!D3/U0-*&X+@WY45-8"3NM.U8/^ZSNEL<6:EJVH)B2/A9;6:;0.,A%(.$ +M&2-PD>$43^TRJMZ`*9(W5C;)A5;QTMP/F54J.Q:1)5MP!'!56RGZ*RXB5%5+ +MFE+I4+':7Z<J[6$@E4JC9=LB):S@:<3A06Y(>0"5)`TX(4-%T5HW,H+1[$2% +M%IWR84CL9P4SLA`,`@;X]T@V$1_+,(3G?ZJFS?LD`",<).$#!320`-,('#<3 +MRD02(U$)]1_[II_W*!<PJ?41D9/RKA^BI]0R.?H4B4=MFF,(G1)R906CAY6D +M.E&Z`Y(4Q)C!E-.=]TQP<[)$PJ$X1S^JC<Z793DF$$YRB$3G&2@JP3F/E$XB +M20<J(DF<JA&FPB("I]0H-T^DB2KK=P)D>RK=1ANG/U1**RHFG0])*"X:\OU! +M6*+HM1/*$9V"QC$O:G-5IR20=E+2KN&3LI7@")3M:TB0/NNF@S;@!LN3>=JF +M(2JT6N,!/2HM`01OJ!K3/[JE5.H%Q..ZM7H#1M"P.M]290IEK'"0K)MFW2KX +MEZ@RA;%K2"3[KF>G!U6H:A$F9RH^KW%:M5-1P,#Y1V5RT,R(E7.SB1B;[JV_ +M>0%`]I.VZD=7IEH@P9V4?FLF0X#W01OU<M]E&]LC;93RUSB%$\>J`0@A=CZJ +M-X`._P!U-4B%"1G,HBM<!L8,E5>D0+I\DY/=6KD0<D#'94NED,OS/)^ZF72X +M]M>L,X4)@G(W5BL0!$[Y5=\[?W1",QJ#20.?91U#J=+?DIR^&1_=1%X@D['& +MZ*E#V`;):V=D#64M(EZ6BE_C4TKP6RJ.=4`)F.ZU^D5/-O9T@Z%SMN[RP3R- +MY6OX5KZ*+]0`<YR]&GFRFG3T@-4G)]BIM&KLJ=M5)`/!PKE/5/=JPW+#OHX] +M,`^R!M6HUVEPPIJ4M.43J9>W.Y4_XI$BJP1/NL[J@T-/I$*U4:^D^!.RI]4J +M"H!3$R=PE4]L!_#"#S*CR:F&F%.&^4P-X]E6I:C7<9(XD8E/J?%QH#J<1,*G +M<MBK$1*NT7'`.GZ*.[I"-8`^B56>WT%X!C'!16-=S>25#<G0YSCL@MW%M/;= +M6,V.IZ+<D$23A=/8W&IH/*X7IMQI#9'RNBZ==MU-,_"T.WZ94=`),!;E"H"T +M&5R72KEKFC,_5=%8U`6`YCY4L)6U;/DY".YA[QA5;1QU29A6:)UU`)GY7+.< +M-;7A4;2MY<(1=+:*S]9.)5+J1)#6"<J_T2`P-DPL83:XS35T@-C@+.ZG3U`X +M6HT`MB56Z@P%NTK5CK'(]0H^H]@JMI5\NL!)W6MU.D=1QA9%>F6U)3'AG*.D +MZ;=`L!R/E60\UZX:#(Y7-VUWHI[Y6_T&IJ9YA,F5K),:VK9C6TX&X4A@;**@ +MZ1DB%)CV'PLNAJ3C)P5-3,NS*!C94C(X&%%%H8[?"B=0G,*8D:1.Z)H&TQ*: +M7:J*;QWA-JJ,<1RK;?S1PG<QA&=PIH4W5C'K"H]3+'4CW*U*M%GL5G=4HC1$ +MH5S%W2TN+FF`FMZL8E7[RV=Y9F)6/6.A\'ORF-8KHNGW'I&5L658%H]4+D[& +MKH`DX6[85P<`[JTE;U%TYD(;EY`B5#;O$?W37+QJ:)Y4^--KI##HR=^Q6G3` +M')5'I&D41C)5X`D<J-Q)_3";.F9"'5"<ND(I.(D2Y5+XB-U8)Y@*C>D:A@JI +M4]CLK#`W5E5[/##*DU2[!A9X5)5$[*K69ZIX4SW$Y`RA<)YA+5T@J,=C2J-= +MYI5I<M72"V8(*R>M4\2-PB5<H50]LSA&X[$+(LJ^1.X6BUX>T=U;$E2@F#E- +MQD)-&.4Q'ND4YC>4+R3]$VXG8)I;R@/)$(9XA,#`W3:H!$H@I/('LJO4/R8, +M'MW5C5[_`'5;J1:&AP.?96)36GY.WPI`9)4-HX&EN4^J#`<2D*)YEVZ1SNY, +M82;AI&Z!W;;H,3_FDXD&>4+B1F50G$`PA<(.^2FY]3D-0R\"9A$.YPVC/RJ- +M\[4\-/W5RI@;Y6?=NU5P-XY3XB]3;_(!S]TB0#A$`?X<0<J!KH!!68E[/5?& +MQ4;J^@`RFKNG?A5:ID:9D+H-%M]0T22)5.[ZU;T\%P^BR[NB]WY7D*A<=-UY +M=4/W3<GQ-6_4W6>O"H=%&2?99++>K<O-2N70KK+"E2=,!Q]U,6^F-*>UR_Q- +M2,'J]*FQS6!H3LLZ;J8AH4_5VS6;D8*F9I%,-VE+VDZ9=Q9-.Q`52M9N:8:Y +MRVJNDC;E0N;JR)51CNIUV<DJ!U2LTD03[K:J#!("KOIM<"8V09;[N!F1"8W3 +M8,'"MW%!E1TD"57?9-),&$Z0-6HQP`+N.ZS*3VLZFP^_=6[FSJ`#2Y8M_3K4 +MKYICG<)>J8]NJK$%N^%"20W.RH-K5O*!T\*$WE0$M+<!2:*O/=+M(43H&)@# +MW55E^#,H:]XS8X[JBTTG3N$\GN/NJU.O3+`0=T_G4^ZC3YZ-8L!#P<X"W>AN +M:VBWM/)7-5W/\QI+0X.,#NMZPK^50:<^K@B/U7HG+AG/PZ?I]1KR`=S^BU6' +M`$GZ+!Z56@@XSB5LVQ+@-UFLXK31G)4OJT@`?51")D'Z*3U&F`0LNAVL:\$N +M"RKFBX7\TY<UJUFN#:3B<X5>PHE]$U';.*E(I/K-=Z9D]U&_\Y!,8[J2[H$5 +M"]@)X@*J'Q(,[[#9)R7<7;9N"=D;Y<PP@M]1$X@<*RP?R)0C#OV`%X))4-`@ +MTSDB%H=0IP"3&!A9MJ^:1)`P4B5<MWF=1,1PM6TN-+!!E8]"HUP,">P*FM*L +M-`)6H1W71+@%C3JRNGZ;7D`2=UP'1K@!@`<NKZ;<-('JQW*U4=C0K&-P(5_I +M7J.KLN>HUVB@!,:N5T/1V_\`I@[NN&<^&]KE=@(/[(NG.#'@2F+01NHZ/HJ@ +MY2<.K?H'4T$.2O6C3)W473ZC74\%3U1(D\)6XPNJ4SJE8E^P]ETO4J3BQ8=[ +M1,%PS"R5B7#GC=Q71^':Y\@#5^JYWJ3"!($?*T.AU7LIB7+<Y8Z=E;U3H`@* +MQ3?Q*R+*L74A!_57Z#I$R5+&Y5T.,D`HV.D>RAIOYVA22`#.RC21CI.1A&3] +ME#(#2`G:??;A%2B)WD]T61B?LHVD;''PI0#&%E35`",F0LZ_C6&@Y6C4.EA) +M,?"S6M-6ZB9'=+T`KT/Y.DB5S/6;?2^=.W9=A480-IGE8O6:1F8GW4TE<W0J +M:7Z286[TNJ"X96'>TRRIQ)W*L=)N0QX!=.5J<L7AV=J[4P#9$2'7+6JIT^XI +MEDEPD[*>B[5=MC:4:CJNG@>0(_16@Z/8?*K63HH`@B5.YT`3"SIT@Y!'"37" +M(.Z`NGLG<X"(0.3E9U[.H9(SPKU4R"!B%FW%2:H$B42KML?Y??W4X@"5!0D, +M$%3[A2-!)$@`;)';;=(X$PD".<JAGF/3$K-ZN06F>RTA#L0L[K#0)D<=TB5E +MT029&ZLV]32?4HNG`Y!;';*>NW2[5)3%*T:;Q(`.Z-L]BL^UK1)<-E=H5`6^ +MGE4V+3B?T0.W_P`U(_NHW$``P44B0-DP,`2GYG2?E"3/QV*B"+LQCZ*MU*#3 +M[J5[VXB(4%[4!I20K"HK7\ASGV1"=?S[J*T=Z20$;3)F$A4T3W*8$SC]4['" +M"!PFD?EC!50GNRHW'NB>8X4;CE`_]/NHR9=(Y12W3N<(,.$Q]4`UC)A4:\&X +M:-2NDR8./94;@`W(R$O2?6I3]5'_`#59PTO+295B@[TCD?917C3(.RG255KG +M.ZK//T4UP02JM4B,GZ+:!JNE0U?R[?52$MX*BJ?EW05G_G3.YX1N#2<2FTG3 +MC[(C$ZP'><V))]U.S\C0[]$'6F36:[B<J4-'EB"E[2=(JS0.,%0_E=$?JK-1 +MH.)^JKU&@'4(A5$-4G6.Q05(R/V4E9DG&%$6DSW')05:V'C,IO3!AN2BKM^Q +M0-CR\?4HB"N1.DC[+'ZV--9KNQ6PYLS[;+*ZX/3.K961%NW>U]%IC"CN:3)P +M(!3=+<'6HD9/NBJ%PQJ6<>BH/(I%OY<_94[NU8X%TP>5>&3O!5>Z$-R95TLJ +MJRU>&@-=A/\`PU3NK--P#``#]T^O_I6--OFRL\%U,F"),9D+2MJWE46%L25D +M6]1QN00=4;85ZFXEY$@C<$8XRO5'/*.IZ74U071@\%=%T^JT;F5R/2JCF@`. +M#F]PNAZ;6AVDY@;I7GG%;K2"V8B=BI'.@1S\JO0<2R(V"L`$MC$!8KK*K=2> +M!1#`8<]7+-I9;@"1`*HN:;B_V]-,85^K+*9C'UW655(EQU?94.I4"'!S)$[K +M3:T:9,2H7L\QV<II5.QKC4&ND'NKQ+0V=7YN52J4OYA#9!.93N<^G3:UYD=E +M>V9P+J30ZF0YQ(CE8K612).-6(6W6+:EE+I$X*K.MVFF(:#"EFE[9MNXZH8V +M#/)4VKR\.,_W356.%:`2)454D3[;95EVS9IL=)NF@`.)$''NNIZ1=%S!GE<! +M85'-J`N,2<KI>F78:WTSGB5M([SIU<5+RE3F<_"[OIL-MPWO[KS+P54-QU$' +MM&?NO2*#]+!G"XY<Y).UZFZ'$<_*&I$DSLH&U1JW4Q=J:3W2QVE6^E5G!Y#X +M@+8IN!:N>MW0_!P%J6U:&Y,(W!7K)D1A9%]2(:0MUYUTYD!9G4&3(V^%FM.8 +MZC3_`)>)^JALJA#8$"%I=3H^@[8652@2!NK&*W^F7&T\\%;%G5U-B8"Y2WJN +MIQN?<K8Z9<2(U#/NJDX;['[05,P@O$N,K/IOQCE6J+YRI8Z1;VA.P'^K*C![ +MYA3!T#&5+%@Y(_+*-I.2H@1DDR4GU-(.>%-+LUV^!'*"S9$N)RH*8\^MC(5Y +MF`!P%+VLZ"Z<D<+/OJ)()B3[K1=(!Q\*L]FMI/"5'*]6H@2<>ZRV-#:@>.%T +MW6;?4TB..%SMRPM?&PY4C-;_`$DEU$96G8!PO!/"Y[H%<L<&D@Y6[0K`74RM +M:25V5J0&C/ZJ9SAI$K)MKN&`<*2I>0T;J.D:0?'^92U0-RL]MWJ$DS\)VW8` +M[&47:]4?Z2>2%EUG?SQ.<J5]T`WU$?(6;4NVFY'J/Q*7I/K?H.EC<1W"E8X$ +M0-EG6UTT4]U-_%-VF%--;6R1`$?=)A$;[<*I_$9P04[:XTZIB.%=&UI[L@RJ +M'5WRTP),*=UPSO)^50ZC4#FELB$D2U7LWB8Y*FJ-!!)&5#T\DY@*9S3D!T<J +M155P(,S,%6[.K``,8455ON3[J%C]#@"K$:I,B1N@.(YRHJ521DJ02=R%*'J. +MQ(,A1N,B>41`!.<>Z!T"2,2@!Y'!*@O'>C'&V5,\S_HH+LS2.\K42H+)X(R= +MU8:9)AQSQPJ=G!,?NK3(F`T!2%2?TX3SP<2HW.(P-D[7%Q"H*3![*.I,P70B +M).GM"#5ZT"QHW2,`1.R=WY=Q@(()!,R50!B2`250N#INACGNK9_,8(RJ-VXF +MZ"EZ3ZTZ>6M]MD;B'TR"H6$!@/9%4=Z-RFMI5*X&DQ./=5JK3J@*W7`)SQNJ +MS\XP4B17((.(0UL#<%2EHE1U&@B()(5$%)L@DC)3$>HC92AIG/V2+1N$1B]; +M!!F$5*'4`8"DZXTFB2,$#=5.F/#K>!CV5O;,$]PU>W)4=1@=&DX2=.J"(^$X +M<-,;=E16KC)!W"AJ/AT$*6X/K.256J&0<Y50-8`D\*%H(YW4DRW<X4=9TNW@ +MC]5!#7(GB2L_K-+5;DM(VW5]SM39=NJUZ"ZV(/8K4[9O2ET5Y-H<G!4U:3_F +MJG0W0]["=NY5JMB=2QCQPN78=+-BH+@SS@IV$Z\R@NL'2)GNK2!&D!/+5$TC +M2,IY'=&]OF*PN'&H(VQ!E:UM5)=!B3@`KF[)W\SU8C8+8HU&G3!D`X*ZXW:9 +MQO\`37D/'OL/==)TZJ&!LC)W7*].<'56`20WE=!2>W0'$B=ENO-DZFTJ-=3W +M`]E9?5TT"XC99O3Z@-,,]E)6>^K=T[<'$R5BS2XU>Z73_D:_5+E9KSH`.=\I +M42&-T[`;IJH:XQE9TZ2A8!`!(PHJI]4@XYA2M`CDJ!Q]L<IH05/34QWR"BO@ +MVI0@-SNG?3#G2/U4=8PTMDQ""@ZMH:V@Z9)RKH>S6T2J-)@KWT$0&^ZFNFFE +M6D"8@)WVR*]IM\T;*G=LTLD.$*[2+'TSJ'JW454!U,YSP5-::WMF$`D:'1W* +MT^GW/I`:<=E1=1)!(`QRH:%7RFNP1GG8K4K%>G_A:\N]7_5]MUZ'YS=($PO+ +M?PGN`ZDYWO/[KNZEP=8.K[K&N7/&\MNA5EX$A7J#@6[_`%7/V-?.#]5KV521 +M\K5CO*N#TO!!*TK3348%F_F9A6.G57!\3CW6-?&]KSWN83,PH*SFU,X'=7G- +M#V9"I7=+2/3LLUME=69%-T9`"Q6LF1L#WX6QU1Y%-P&)"SZ--II&3]D1")D@ +M&85JPK>7'=0-I%K^W*3AI=^:0KM'16MQJ8,G=7Z%3T8."N8L:Y;`U+9MJXC! +MW5TLK8I/)&\_*F:Z,`X6?0J3_4K-*H8_-NHU*M:]B0J]W6]6D<IZM6&2J=`^ +M;6F<=E+=*T;*GIIB-^RL,&J)_=04G`"(RIFGTRI(HG-Q"C+8$QNCU"-TU0X` +M[;(*%]2;I(.,+G.I6VDN&.ZZ>Y!..5D=3I&/RY42L2U(I58SA;W07BO<YSE8 +M56F6O[+:\&MFM(Y.ZK.G94:#-&R8T6]P5)1EH&?HD3G*CH`4&`P$G6LGF=U* +M#&V2B=4,Q":%6M;PTP1`6;Y`_BP,F5LW+H9DY6?2<UUP$LX/JTRW@0W"-EL0 +M/4284K'8V1M,M@<*:Y57-)W'*847F<JV8W'=.".0J,^I1J#+3$*CU`O:"'2M +MUQ]N%D]9@`DI$JK852&",JU_$M<<E5;-@T?*G--KR3D$I-B5M1N<X05=.X,R +MHGL<T8G"!^L8""S2?I<`7`JVUP,$+*%2,D*S:UQB"G8OG2=RHJF"8,@H@X$" +M#&-BHGX.#A`G$D08^JK7?Y#LIPX1NH:PP03NJ52LGCS")&.95L$`$%4*9T79 +M$B.ZMN</E(B0$3(.W=$"<F84(<)PI`09<1A4$T]T!,&?V1C#2-X4-4[CA0$7 +M%PPEO.$&J(A.W:`51'5Q*S;@D7329Q[+0J&'8_19UX?YX,0EZ1I4ZD,!A#<5 +M`QFZ&D\>4!^JBNAKIQRD2HVU=>=_JF/'<(;1GELR[/[J0C,I.C2*K@J,>H'( +M"DJ\XCV40D"`(E4"X0XC.?JFJMC:8'=%$$H71O\`NB,_J@_E.!Y"Q^FU-+W- +M@A;G4&!U,SD$+G+8Z.H$#<[JWIF=K]1LF<D]]U&\;QA3U`-*KN=N-R@@K@@C +M]E5?CZJW7,;'(5-T$Y)PJ@7G8C`*"KR!(CNCJNTM`DPH7DO$DR0H(*IGC/=` +M^#3/J@_*58;EI48.X=&1N%48E(MI=6+7.Y&/HM&JX3!V*S>I?R^JM>"`!RKE +M9XJ-#@GVK>9"<8.3,(:KMYW"![W:#&Z!SG%GJ;!0@J8]`X3Q[H&5'!H&H?9/ +MYKO\0^RSPV^3`XT[@M(TP>2M*RJ!SA)&>52\04G6_57B``?=*TJG!C=:\>6X +MZ>3%U73GAQ$'!,;K>L7:G""<87*=%KM:R9]<X706=RXU?-<07'?W7H[>/.<N +MJZ97#1)XY6ET?34J/N"!DP(7,6%V_4*;1+G&,+JK!OE6[&`#(6,HQCVOM,D. +MF$1F8*C;M,_1$VH($@D^RRZGJ8;@084+6@B2#[*2HYNF-C[J-KB[`B`H'8T! +MWPHZU/T&<%2T"T3(_1-7V)SLFC;$M2?^(OC$=E=<[U$.$CNH+>F75GU=,294 +MCVN!![I.D#4ID-<YFT*NRH1NZ1[X6@W%#D^RJW5`-9J`(^BBJ]5H<):)![*I +M>TM%)SHB1"TK<@M@`PFZC3#K5Y9G'"6Z339_"2MIH.&6GG]5VG\9J>?5/NN` +M_#:6TCP5T3KDMNBV2IC=UQDYKJ>G7/JP2NCZ?5!I#,%<%TR['FAL[KK.DW&H +M`+I8Z8UTMLZ`#RI@[34!&%1M:LQE7(!9@K%=8V;)X?2&4=5@.ZS>FU8=!,1P +M5HNJ!M,PX+-;E87B"C+]`&5GFDZDP!TB.RV:X%>[WD!1WULTL,#(V)6-ZJZ8 +MU,MU[D^Y0W+9.,#N%+6I.IU%'4>-B<JHKTWEKA'ZK1LZX']1*RW`%^(^5/1> +M0))B.RJ.AMJH+!ZE>H50(Y7.V=?.ZTZ%Q#-6T(LJ]>5Q.D&"5/T]NFG/<K)M +MZHK7.^!RM>DX!D8@<RLWMJ+32`8V4S2(!!WX55CP#ONIJ3\YR/=54[7@C)RF +MJ$`'8!#,F>>R3AJ.5`#H<W&96??4YY6D_`@!4[EH<TD[I1@WM(!T*[X/?IKG +MY0W;!!D!'X7HD5R1W4G:.N95$9V(3FJ"0(5=H=M*(`$JM18UB,%(U"23(5=L +MZ=TVH\<()+I\M(F`%0MW.-S@QE2W+SIG95+*3=:IE+T3MNL=#1'*?S.)5=A@ +M!$)F2@L:\&$XJ'`4'P$XE*HR\3@DA9G6'2KQ$YF%F=7B8!1*:P<?+A3:HB8P +MJMD3HC]U*7>HSL/=2+5B01\I.`)[J)K]N$X=ZXVE4#4I`@Z5&T%IV*L.<2-T +M'YO=30=M=^,?*=U8Z<@X2`;&=RC+&'$A!`;G,1]E&^X&))RI32;MA15*(&QE +M7E%&YJQ<"(A6VO#VZEG=29IJ!P,0C8][:8$E/J-!CNY4S"2/[=UF,N8)#E:H +MUPX`2J+<^D]U#5._!"<5!W4=4C:440=.Z?4)WV46J!$I!W(1!/P(&RS+V/-! +M.RT:A=!!/T6=U&=8DCX3XE7J('E`C8>Z"H01&?NAMG?R(0ETG*3I:>(9)2ID +M%N9"$N@1O\IFD:>RJ(ZL%Q`.$+\#L$3_`,RB>X]P40HR$U68PG),25$Z9,_< +M((+PM\LCV7,51IZD-]UTET'%IPN:ZK++L.`"U>F?K5>6Z!C?NJ=4EM0S'PIJ +M;II!P,JM>._F$@_5(@*I,F1NJQ$O#I/NCJ.)`,('.,1C*(:H6G$?JJ\Z26G8 +MJ6KC(,_"KU<9B?JFBH*NVD?=0L=O.$=PXD_YJN7DNW,!5&5UP@W#3SW5FG/E +M`\_NJ?6S-P#LK5)W\EI:F7]B='.7GE)SF^7`@>RCJ.=(+HREK+A)<-ONI5A` +MXPV0GD_X/T4)J'M/NF\P_P"%&]/G7\3K1U#J!JMD-/8KG+*J69:8E>A_B=:" +MI0D4B33;F=I7FK*FG^61)#MYX7+"ZNG:?RQE;G3*HD#_`&%T?3JQ+6F3(W7) +M=+K%WHG![E;_`$JX`IZ&G;D+UX7<T\_DCH>CU75>J-$X;P%VG3G.=I+CMC=< +M'X8=_P"L<^",KL^F58TD#;NK7GO%;1(:R2!E%2;B8^O"AI.+QJ+I4K"XG$Y7 +M-T!4R3RFEL<[(JC2#O\`W4%0%KMP<HM6;4&#,`>R#J)T6QAVZ>D\Z(U3*@O' +M:[BFP3[I4/2`;;-$"2)4-;43'?@*^YLB(&.RK5&Q6$;J=*B$M#02E=-'EF#& +M%-4_F;B"%7N\-W)0X-94&NIG.4UV"V@\$3(X*DZ406D@G>([*W<40^V?,S&R +MF71`^!7<D`;A7.O56T[X`'/RH/"-'RG2YI'9+Q93+*WF2N6-U8Y2?RJSTZZA +M[7$C_-=?T"]&D9_5>:V]R0X=@NC\/7\.:"9GZ+TSE7IW3J^K25L4'@LCNN3Z +M%<A])OJ"Z"SJC2#*QDWC6BTEKA&5.ZX.C1R52:^6$S$)K5X?=^HX!6-ND:ME +M3:*>HSGNGN&G5Q$*6E&@:3'U2J@&9(E8UIT95U1#G$EJS+RA!."MVJP'_54+ +MQD-/)[*#`?-.MA&UVK\RN5K=KP21!Y5&LQS3`.`DK.DU-^G'NK#[K13^5G:_ +M?9-=51Y>J<^RW*E;O0JFHR5N,J;`F?A<GT"Y&@`GZRMVSKAS?[J:7;6ID!H, +M$*Q3+0!*SJ3Q$R?E6:-2>?HHUM<8[U8^%)J(,JNUX.?V4DPV>Z*)[OJH*Y!, +M']$;G=B@<&D&5!GWP]!PI?"P)J?7DJ'J`ACC)]D?AA^DR2D1T8P,Y'=$"-U& +MRH"S@2A+@2(<C25[@,0@),GU0A<<ZB90%T$R=_=`-T_^61./=5.GNFYW$*2] +M=_+F?N55Z:[^>2,Y5J3MNM.-T8=`_P!55UX&8]DFOG))459+S.\A)K^2?HH" +M9P$.HPBK?F-R!CNLKJCLF"85DU#!S/LLSJ50_E,2JB2V>`TD291.?F05!;._ +MD[_5$TB?41)YV4@LM>0-YY1!\G=5R[:<)P[.=D$X?G=&Q\#C*KL>"-]D[70X +M9^J;%EQ.-DB\]U"7\&8*<.X!_54$YY&9E`7DNVW35'@;G*&0[Z>ZNT5.HG.4 +MJ8'D[8_9-U+4!N82M_\`D`[J7L+RVDX*3:3ID(FN]4(VNAW"I`/UM[X4=2X< +MP9G/Z*V#+5%5I-.[=]U!"VY$_P":E;<-)`U0H*M$<*$TG;#A!H>:TM]+I5/J +M)`$G"B:VJUQSA0=2-9M/97:5I6;@:`)=$(7D`K/Z;<5?X>'`X[(GW1+O4DUH +MJ\'`P#PA<3&VRJLNFZO[(S781C'=42U'2V3NHAOLA\YFG\WU0"H)W.564Q/I +MRHJFQC"=U1L;J-[@6SJPFC:O=.,?(6!UO)+APMN]<TM*Q^K4]5J\YF%J,4/3 +MWZK82?LFN8`R0JW17_RBPG93W#?5CA9QZ6J[I`)[*%SR02IZ^&D[#LJCC)C[ +MK2#+@84%PYLD#[J7&DE4[N0=0VY0VCJ/F<3\JJ]Y#_S`2I7N)$@J"L?0851G +M==)!#I,*2S?JM!_4>ZK=7ES/92=/(;:-!S\E3+N+.DI+6M)(CA"8%,$'"5:" +MTXSPAI@^5I!!]U%@FM!;)A/H'M]T+#Z1A%/LHV\H\54&UZ%9KID-/RO)NK4' +M4.I50T`M!R9VRO;.I4P]CG')CO@+R?Q[9NI]0>Z<3,1[KGGQE*O@O<9EKEH+ +M0=.X^%K=-K@4M((_NL*SJ/IO:`>^3PM2E6UR74Q(WC"[X7ZN4VZGPW6+*+<Y +M)[KLNF5I#(F8_J*\]Z3<:'TFC`,;KL^A5?,8S(GWX7;6X\?DFJZJU?-,"02K +M=-SM,`"/=9=C5@ADM='97J+IP=6T^RYV+C4U0GYA5ZF7C?\`S1N>[41OV3&2 +M3P2HT3JFEA."!N`HNG@5*KJAG?"#J-0TK8GDX1],+V6K=49[IVB_JVF=E%4$ +MG494EN\$?/":K),D;84L:B*W'J)WE07;7:S&/W5JF"!,;SRJU1NMSL\[H([3 +M4PYG)VA7GUO_`$;@,8YG"JZ((+)!XRGZA4<VQ?\`:5/B-3PPWT!\R2=T_C$. +MQ!/J$84_A%O_`/3Z;].$WB!HJ5MH"XR<L8=N-+G,K$;*]TF]\NJV<0=Y4O5+ +M3^67,&0=UDO+J+@3E=\,ERCU#POU!II,SE=ATZNU[&Y7D/A;J1#V`E>A]!O= +M=-I!6\HDKJC6#:;CJW]U'9U7&[!`QW6>^Y\RJVDV<K6LJ>B@)B>5RRNN(ZX_ +MEMVM<&G'>%8W&3/NLBUJZ7`$C_):-!VHCU+-CI*-S1I,`RJ=VQI?[_"O'/[* +M"HT203)E8L:9=>FT$B"J=>CC;'*U+ML$@`RJU>GB2D1D7%N#)!R?T5&^8YM* +M"86U780TJA?M#J#I'"L2JG3*^FGI!S^ZV>G78TCDA8%M3(!(5BA6-+>!E:E9 +MKK+6X!;DQ[*];U/2,Q*YCI]WL)_5:MI<:B#@_5+&I6W3J>H0<?*G;4`],E9M +MM5'W4X?MWA9K6UPNU")W2<!I&?HH`_;(E23C915+JIBBXCA%X<8#!2ZEFFX1 +MB,INA/%,B-I4G:5MP(&3[HVPJXJ-/RB#C,3*TJ8]^/E!4,'>2A)!Q@%#4)V. +M%-"O>F1OLJ_3?^;GNBOG>@J'I9]9DR9PK?B1L:A&_P`)M>(*B:XS&(A,>ZBI +MVU1.Z(O:3,CO"JD'![^Z3@[28)E-B<OW,8Y63U:L-?I/*MR[;?V65U)SM>!R +MK\%RS>?+!"F+O>51M"?*!,A2TZDNW*S%6'.)_IPEN,&"HW.!.1A#J'?'""P- +M38!VB<J2F1_LJOYFWV3M.,F/JD-K#G.(QPD''<E1%_I@<)PZ!))5B)9D&4PD +M'>9]U%YF-T@Z>51%U%WH*&S(\D9^B;J+OY1SCY4=B[^5OE*BP9!D)&0Z5&YW +M\R9^B?428)Y06&ET`IY)89CWRHV.QI"9S^$#5=\)##8[H7G.#$IJ;G28*"5D +M$[1]5%?-#J9D3[2B:XYXY0ULTR"58*E@QLN`:BK46.>3&>RCM'1=.!.)4]0R +M3"D*K/H>J02F=0<6G=3EQ`"?4-)Y*ND4'4G`8)4(-459E7RX:C.Q*!S0'3CZ +MHBD]]4&0#!*%U:H&Q!5\M#C^7Y05J8#<-'U5FRZ8M]<U!@@A4KJX+Z#A)V6Q +M=TV$F0,]@J-S;,-)PTC/NM[K%8'3KK1=/;)WV)5\W;2(.ZSS;:>J1."5:K63 +MB-33"F]6GP5Q7'ED[PJ8JM+Y!W2K6]700"9A9U5M:F2-/RJC4+\&#]%!<P6D +M@*@VXK,;$%*I?#\IY5@-[@UWJ^%#7<TCG&RB=<MU;IA<,=Z79^$T*76@TT-1 +M'R5'TFI_Z8MG"GZH6NMW1)"K=$$-<X1"F7PGU:.XSNG)]#C(PGU-=(+=D#IX +M&#PI5AFL)$A/Y9]TFS&/W3Y_V5G<=7!7+8HF1@B=]EY_^(MJUU.H]HR.>Y7H +M5=S2")XW7,^*K8U*%0;R)SPKY)N.'COKE'E#7Z*A:!B<%:%FX/8T["9A4^JT +MO(O:E,-(@]]U-TYWY6C`:5,+N/7G&S1=H\J3G<05U7ARZ#FX<&D#OGA<E0@, +M9]EK]*<:=1LM(;NO3A?CS>3'<>@]-JM--H[[S\+3M*Y+1,&-ES72;IKVL`)' +MN5MT*LZ<[*6:>>72^QS#4DD[X4FN2!G[JJTOB8GLI2X8<=Q@SA8TZ2JW5'M? +M=MI-<7'!(4U`C0&;`=E7HM-;J#JN(;C]58JC0>T_HH)Z=8!P`/U[JVW2ZGD; +M+,HN+KAH)P5ITX-(-[CE6K#`'1@G_)02!4(GE6)`:0)PJE4^H_=1=I6YR3[R +MHNJ`&R?C=34W32$MVPJ?6ZFBV&PEP^J6);PZ3PSZ.D4LQ#0._P!$_6&R0^9` +MX1=!+?\`@E$[2T)^I#52U8@'"XSMQPO+.K-8^CI`XA<_URSECM.^\+HJ;'`C +MW5>_HM-%T@+=_+O'+=(N'6U=K3JP<P5WWAOJ8\IIU;#NO/\`K5%UO<:Q@:E< +MZ/U(TF-!='$CNNV%]HYY<5['X;J.KU14)!$KIJ-3,`_JN#\"WH-FPATF%UMK +M5!`,Y.5BQO&_&I)#ICZA7;&K.'$`K+IO);$J:D_R^=NRPZ;;FK`G>$P@YG*J +M6U<.&2(4X>"!$9]UG3<H*S=\!5JS);&`5<J9!RH7,$&=PLJSJ[0`=4+-ZCB@ +M[$>ZV;FFPZ@=BLKJ[!Y+@WZ*Q*SK.F8U`XF)1U*32XQ"EZ?2/D`]T=>G#HXX +M1&<7NI'\V!Q"N6=X6ELF9S!45:D2Z`,E5JE/2[&",K4J5U%E=A])L'?]%HV] +M66@3NN+M+MU&J`[8+>Z;?->&RX!+$E=`Q_$J859:/?A9M*J'`:73/96:3IS. +MRPZ'OS-%P!E'TADT_A17#AY)4W29%(P0I!?;@'V1-=GE1S]$3=.)("JI(,S^ +MZ%QW#M]DY+8WW4;S`B1\H*G47``CE1],`UDCOPBZ@X!AR%%TQ_/<\*4:E-V) +MTHO4<[*)CL"%(TXGNFC9.<`(Q/=$'PTB5&Z9G&$%28[JB34P-=.>ZR>JN:*G +M;*OU'::1XX63U1\U0`('LH59MG#R0)&`DYWJWP5#1GRP,YY3N,.P3ME)2IQ4 +M'!^B37^M0%VT)B\@S@#A!:+AW3L><*&0<1N$F'2X23'RE%L.YF>Z;4`2?[JN +M7^DQ*(/P)@H)=?`!^4=-X+<[RH`Y)K@,JANHP*9SB%'8QY>#LFZ@_P#DD$'Y +M4=@[^6=]E:D67:B<NWPDTG5_=1ZCPGU'G=!8:Z`F+LG"A:21O"1=F.$$CC.[ +MH3<^ZCJ.Q]$U-V!`03TW2<(JQ;H,Y(P%`UWJE&[;O[*Q%`NB]B8DJVXR/251 +MNSINFD#G[JW3/\H.D!3Z?#N,L@1"83VR$!C48*1/JW6@-3#MDP,;Y0UIR2F9 +M')W[HB1Q`9@E0UZA((RC<<?N57>9G,951#6$_P!U4<!K<2..%:J`Y!.%#5RZ +M08[JHP.JM\J^%08RKU-VN@UT3(W4/B.G_*\S<A-85&NLFP<A6][2='N)`('* +MS;EDF3WV6E7/HQ]U0NYTG)A5*J&DPDM(F2H:UI3,X&5*\Z3@F9Y3N(?3+MHP +MIH95U8AQ);QV51]K5:202#)@K8>88=,QRJ]1WJQVV5T;8M\VNRA4D$X5'I=W +M4;4<#N"8"Z&[:W09SC*Q:%)C>H/$R'$J7>EG:9MV7&2WY4E&Z:1$[)A;L\QQ +M@9PDVT&J1O\`NFUFEFFYI9.I%+?\85=ML^-T_P##/[K&W3U>?U'.IO`/T69> +MO\T/#I@<+7T4WTGM>\-<!(QNLKJ5!\%P@#OV73_*\TT\X\;T!2Z@^IOJS[[K +M*LVP!B#J6_XX:Y];.=(R>%S=*J]M00/RY/NN&/%T]TN\8WK<^EI<TNB%K6+V +MN+3!(`[K"LJKG-`.0=BM;I]0Z@20(A>G&N&3I>FO+;A@:YP&"(."NBMKJ:@; +M+=+<8*YKHU:=,P=(6E;^:UX>X`P9PMWAYLG46Q,B<M.1[)7]8,ID1I.V%1L; +M@AK9,\917-8UKAK6F8=)@%8L)?BYTR6TA+8<[)5@@NR<SQV5:A5DP9AN%8ID +MEATX6=-2HJ;=-WJ/!6C1,CZ+.>?YD.:<G>5=M7%D#@H;'6UBF2=O90522PQO +M&P5BK4EL$*O6)R-(AR+L]&12C:5E^(7PRF`[=X!$;Y6C.BC)9!]C,K)O#YE7 +M46R`X1/=3+IFV.SZ"7'H]$$02!CA7*P+J7T5;H'_`.44]P(5UP::6VZY3MSP +MJC5;#Q,#B945>D#D;=E<(!(&)35F12F1]%T=]N8Z[9BI,M&W*Y:Z;4MK@B3H +M:X;KT"ZH!U-Q+<KENOV;2UX#2!*DOK5LE=/X#ZF&T:;=63&)7HG2[EKZ33(S +M[KPSP[U#^'NPR'-CNO4_"M^*MNPZAMRNV4W'*<73MK>J(`!D[X4XJ$C$A9-K +M7Q\8PKC*DLP9D+C765?H7!:[2=CRK]O5&D#NL4/`$SE6K.YAP`4:VU]6(E-N +M#PH*+PX27$`YW4@>"["S6Y456F223A9G5VC0["U:SN%E]0<'5`SDE016E/3; +M"!&.Z&H-1DC?=6PS32;.T0HG!H<?\TA5"HT:H`V]U7K,W)P>RT*K?48C?ZJ* +MM3EL@_,J[33*?3.K41"*G6=3J`M5FK3(SLJSQ`WRK*EC9Z;?D:6..8W6S;7; +M2!#IGW7&4ZFDB)'LK]M=EH&8@)4G#I;JN#2)D#ZJWTJN/(&09]UR]3J`>UK- +M6^`MSI&;=N8E2\++MK^=VVV1LK>KC*H.<X")QV0FJ01+I4;:1JC$;]D+JA._ +M[J@;@-<&NJ-DG`E$:GJW'S*`>IU/1NAZ62*8,[E5NIU"6&"$73'N=2:`=^4J +M1K4ZO!/ZHV5H'YC$JD"<P90&JX$RD%\5B[,H75M+M_NJ3*CBZ)PE5<X@Y&%5 +M7*E8%D;K'ZC7!J1/*F=4=P5FWM7^<)G!V4O2?6I0J#R1C]4G%N_'*K47#R@0 +M>)"/6",G=1I*7[ANZ1=&5`7PW!A(O^I518;5)[(M6TE56N``(")M01ML@N!P +M@0=TXRV9"K!\B$8?!03AS28!D]D;2.3]%5UQSGV1!Y@[_P":H74'?RS$=H45 +MBXMIP"`=U'?/EARFLG2W$B$OPBTY\&-^4P=F4$CG?N@U0X[0B++7$'Y2>[B5 +M`U_<)R\[$G"HDJ.(;,IZ;QIB,PH''N8RE3)F)*@G#R3'',*<&6B`53U28W^B +ME;4<&C*HK=5!:=4;*6SJAUL#]"HNI^JD>?[*'IK_`$P3LE2+-5^<?,RF:<@G +M=!4(U'GV3-B-U055Q+C!PA!`;G=*<!,XB<G*(,/.G;<('@<G=(.`$S,>ZAJN +M$$QE6%!4_.<X]U7J.;J)DQSE'4)+]XGA152V8G9:95.K--6T<`($8[E972GQ +MKIG:=I6U<^J@0(_NL"B2SJ+VD[DI>CZOUI`(!PJ542\R(5QS<;Y*IW1C$F=E +M652NS\QF>5%2=#H.WRK#SCW5:!)SLBCK-;HB9"INC.^^59>3IWSL0H:[=+"1 +M^Z(K5(/YLK)NJIHWIIZ1I>9)T@G[Q*UZPEL3GV67UNBXT!4$XSNEG&EG%3R" +MT%G92VY)!(WXA4[.MKMF'^IHC=3VKH):5)>%URL!S>93ZF^ZCAO8E*&]BG#; +MSU].##9PH:E%AR>-YQ*NG<J/AWPFWGLURX7Q'T]MS6N',88:#.%PUQ;BG7<U +MP.Y^B]-J?^WN_P#\2\_ZO_[I_P`KCEQD]OBN\0].AKH)P1NM6T(UM:`2%E6W +MYA\K4L_R!=I4LVZ3HWDMI:P7:B(&<#Y6[TP4_+&LDEQX,RL#I7Y`NCZ?_P`T +M?"Z6O)FN>7%+6#('TE0=*+_.?4<##R0`<PKM/_V[_A5+7_V_W6-\Z9G3086B +M7%P@[@*]9AKFB(G>5E'\K?A:5CO]%?B]4]=O\V3NK%$0S)GLJ];=6:/Y6_19 +MC6^3U`00.Z3@=6G.VZ=WYDF_\QORFC?*&^;IHR"1'M*RJM)PI"I/YGXE:W5/ +M^0LZO_[+_P#&%G*_$RX==T)I;TFG)G&5=R:>TJGT7_\`+6?`_966;!8P[KEC +M"PT^Y4PIZJ$]U!5W5NG_`,KZ+HZJ5:B13.096%U2U+R8`RNDK?\`*/RLFZV* +MS>G2.#ZO;.MK[S`3`,KJO!?5X;387Q[2L+Q9_P"X8@\'?\_ZKKX[PQGC]>Q= +M&O&U*;3KS&RV:%0:1ZOU7(^'/RM736WY&K.4Y7%?U%WI_9)KG-=$_5#;[!)_ +MY'+G6XT+2O,`NV]U=8_TR#ORL:WV/PM*A_R6I5B6I4'EJA3FK>DQLK5S_P`L +MJ/IGYS\KG;J-3E.6C1![1"@>V1&_NK+]C\J`_F5-*[VD/.,;[H'@.:0)^B.X +M_*F=_P`GZ(:5*U,M!Q/RJE5AR5H5/RGZ*H[^KZIM*I5&&<843JKV'NK=;\BI +MW'YEK:6!97?_`!5/W*[/I%QIM&#&RX1O_O&?*Z[IO_MF_16I.&UYX+2F+F$` +MJK3_`.2/E)OY?J5C36UN*<C(U)Y^L*&G^9ORB'YOJ4L:5;]I<TY.^REZ;(IY +M,*.[Y16FP^%/HO!TXGZI1G*C9^<IV[JU(,``R("8D:D)V1'<?"BHZ\"7+%O7 +M`W7"V7_E6#=?^^<K>D^K]*I#!&Z/63_4HJ?_`"_HC;^8_`5THR\8@)]<[2@& +M[OA*EL4T"-4#&X"0>.^_91'_`)A3MW;\J"PUY`B81!Y.02H'?\M'0V^B"5KB +M#*E;4QO!]E`/S?1,W<J]ANH/&G=/TXQ3,S]5!>?F^BDZ?^1+\2+#R4QC5,IG +M[_5#4_YGV5@<.`,GZ(I,@]U$/^8%,>/HJD,YQWDIVNS$H*WY/JDS\P45('>K +M!PI`YI&V-L*!OYDXW*J&OS%$MD0JG3':JQ$JS=_^V<J?2_\`W04I%UY_F8(3 +M.=&1V2J_G*&K_P`L*@P_T=IY0.B<F)3-_($]7=JJ%,"%%5<'-@2"B?\`D4#O +MS'X50%0D=_E!4=+4]3\H^4Q_*541.,MX*P.I`T>HM?L"<RM]NRP_$G_-^H5^ +M)]6`Z6`MSB5%<`NSS"*V_P#;,^$U;=2=(IOB8^JJ/<6U<#G=6G_\PJI=_F"T +MARYK21.ZA<09`4K?Z5'<_D*;57J-QMD=U!<L\R@ZF>5/PAY*#%LIIWCJ)(`) +I("O4!#X(DJA<_P#YE_\`B6G2_P">U9ZNFXE:#I_,$^EW^,*4;)(T_]EK +` +end + + diff --git a/rt/lib/t/data/rt-send-cc b/rt/lib/t/data/rt-send-cc new file mode 100644 index 000000000..da8c4daff --- /dev/null +++ b/rt/lib/t/data/rt-send-cc @@ -0,0 +1,5 @@ +From: rt@example.com +subject: testing send-cc headers +RT-Send-Cc: this-is-a-sample-test1e@example.com, second-this-is-a-sample-test2@example.com, test-sample-sample-sample-test3@example.com, + afourthtest4@example.com, + test5@example.com diff --git a/rt/lib/t/regression/01ticket_link_searching.t b/rt/lib/t/regression/01ticket_link_searching.t new file mode 100644 index 000000000..6d10221c1 --- /dev/null +++ b/rt/lib/t/regression/01ticket_link_searching.t @@ -0,0 +1,155 @@ +#!/usr/bin/perl -w + +use Test::More tests => 25; +use strict; +use RT; + +# Load the config file +RT::LoadConfig(); + +#Connect to the database and get RT::SystemUser and RT::Nobody loaded +RT::Init(); + +#Get the current user all loaded +my $CurrentUser = $RT::SystemUser; + +my $queue = new RT::Queue($CurrentUser); +$queue->Load('General') || Abort(loc("Queue could not be loaded.")); + +my $child_ticket = new RT::Ticket( $CurrentUser ); + +my ( $childid ) = $child_ticket->Create + ( Subject => 'test child', + Queue => $queue->Id); + +ok($childid != 0); + +my $parent_ticket = new RT::Ticket( $CurrentUser ); + +my ( $parentid ) = $parent_ticket->Create + ( Subject => 'test parent', + Children => [$childid], + Queue => $queue->Id); + +ok($parentid != 0, "We created a parent ticket"); + +my $Collection = RT::Tickets->new($CurrentUser); +$Collection->LimitMemberOf ($parentid); + +ok ($Collection->First); +is ($Collection->First->id, $childid, "We found the collection of all children of $parentid with Limit"); +is($Collection->Count,1, "We found only one result"); + +$Collection = RT::Tickets->new($CurrentUser); +$Collection->FromSQL( "MemberOf = $parentid"); +is ($Collection->First->id, $childid, "We found the collection of all children of $parentid with TicketSQL"); +is($Collection->Count,1, "We found only one result"); + + + + + +$Collection = RT::Tickets->new($CurrentUser); +$Collection->LimitHasMember ($childid); + +ok ($Collection->First); +is ($Collection->First->id, $parentid, "We found the collection of all parents of $childid with Limit"); +is($Collection->Count,1, "We found only one result"); + + + +$Collection = RT::Tickets->new($CurrentUser); +$Collection->FromSQL("HasMember = $childid"); + +ok ($Collection->First); +is ($Collection->First->id, $parentid, "We found the collection of all parents of $childid with TicketSQL"); +is($Collection->Count,1, "We found only one result"); + + + +# Now we find a collection of all the tickets which have no members. they should have no children. +$Collection = RT::Tickets->new($CurrentUser); +$Collection->LimitHasMember(''); +# must contain child; must not contain parent +my %has; +while (my $t = $Collection->Next) { + ++$has{$t->id}; +} +ok ($has{$childid} , "The collection has our child - $childid"); +ok( !$has{$parentid}, "The collection doesn't have our parent - $parentid"); + + + + +# Now we find a collection of all the tickets which are not members of anything. they should have no parents. +$Collection = RT::Tickets->new($CurrentUser); +$Collection->LimitMemberOf(''); +# must contain parent; must not contain child +%has = (); +while (my $t = $Collection->Next) { + ++$has{$t->id}; +} +ok ($has{$parentid} , "The collection has our parent - $parentid"); +ok( !$has{$childid}, "The collection doesn't have our child - $childid"); + + +# Do it all over with TicketSQL +# + + + +# Now we find a collection of all the tickets which have no members. they should have no children. +$Collection = RT::Tickets->new($CurrentUser); +$Collection->FromSQL ("HasMember IS NULL"); +# must contain parent; must not contain child + %has = (); +while (my $t = $Collection->Next) { + ++$has{$t->id}; +} +ok (!$has{$parentid} , "The collection doesn't have our parent - $parentid"); +ok( $has{$childid}, "The collection has our child - $childid"); + + +# Now we find a collection of all the tickets which have no members. they should have no children. +# Alternate syntax +$Collection = RT::Tickets->new($CurrentUser); +$Collection->FromSQL ("HasMember = ''"); +# must contain parent; must not contain child + %has = (); +while (my $t = $Collection->Next) { + ++$has{$t->id}; +} +ok (!$has{$parentid} , "The collection doesn't have our parent - $parentid"); +ok( $has{$childid}, "The collection has our child - $childid"); + + + +# Now we find a collection of all the tickets which are not members of anything. they should have no parents. +$Collection = RT::Tickets->new($CurrentUser); +$Collection->FromSQL("MemberOf IS NULL"); +# must not contain parent; must contain parent +%has = (); +while (my $t = $Collection->Next) { + ++$has{$t->id}; +} +ok ($has{$parentid} , "The collection has our parent - $parentid"); +ok(!$has{$childid}, "The collection doesn't have our child - $childid"); + + +# Now we find a collection of all the tickets which are not members of anything. they should have no parents. +$Collection = RT::Tickets->new($CurrentUser); +$Collection->FromSQL("MemberOf = ''"); +# must not contain parent; must contain parent +%has = (); +while (my $t = $Collection->Next) { + ++$has{$t->id}; +} +ok ($has{$parentid} , "The collection has our parent - $parentid"); +ok(!$has{$childid}, "The collection doesn't have our child - $childid"); + + + + +1; + + diff --git a/rt/lib/t/regression/02basic_web.t b/rt/lib/t/regression/02basic_web.t new file mode 100644 index 000000000..d3376d011 --- /dev/null +++ b/rt/lib/t/regression/02basic_web.t @@ -0,0 +1,150 @@ +#!/usr/bin/perl + +use strict; +use Test::More tests => 17; +use WWW::Mechanize; +use HTTP::Request::Common; +use HTTP::Cookies; +use LWP; +use Encode; + +my $cookie_jar = HTTP::Cookies->new; +my $agent = WWW::Mechanize->new(); + +# give the agent a place to stash the cookies + +$agent->cookie_jar($cookie_jar); + +use RT; +RT::LoadConfig; + +# get the top page +my $url = $RT::WebURL; +$agent->get($url); + +is ($agent->{'status'}, 200, "Loaded a page"); + + +# {{{ test a login + +# follow the link marked "Login" + +ok($agent->{form}->find_input('user')); + +ok($agent->{form}->find_input('pass')); +ok ($agent->{'content'} =~ /username:/i); +$agent->field( 'user' => 'root' ); +$agent->field( 'pass' => 'password' ); +# the field isn't named, so we have to click link 0 +$agent->click(0); +is($agent->{'status'}, 200, "Fetched the page ok"); +ok( $agent->{'content'} =~ /Logout/i, "Found a logout link"); + + + +$agent->get($url."Ticket/Create.html?Queue=1"); +is ($agent->{'status'}, 200, "Loaded Create.html"); +$agent->form(3); +# Start with a string containing characters in latin1 +my $string = "I18N Web Testing æøå"; +Encode::from_to($string, 'iso-8859-1', 'utf8'); +$agent->field('Subject' => "Ticket with utf8 body"); +$agent->field('Content' => $string); +ok($agent->submit(), "Created new ticket with $string as Content"); +ok( $agent->{'content'} =~ qr{$string} , "Found the content"); +$agent->get($url."Ticket/Create.html?Queue=1"); +is ($agent->{'status'}, 200, "Loaded Create.html"); +$agent->form(3); +# Start with a string containing characters in latin1 +my $string = "I18N Web Testing æøå"; +Encode::from_to($string, 'iso-8859-1', 'utf8'); +$agent->field('Subject' => $string); +$agent->field('Content' => "Ticket with utf8 subject"); +ok($agent->submit(), "Created new ticket with $string as Subject"); + +ok( $agent->{'content'} =~ qr{$string} , "Found the content"); + + + +# }}} + +# {{{ Query Builder tests + +my $response = $agent->get($url."Search/Build.html"); +ok( $response->is_success, "Fetched " . $url."Search/Build.html" ); + +# Parsing TicketSQL +# +# Adding items + +# set the first value +ok($agent->form_name('BuildQuery')); +$agent->field("AttachmentField", "Subject"); +$agent->field("AttachmentOp", "LIKE"); +$agent->field("ValueOfAttachment", "aaa"); +$agent->submit(); + +# set the next value +ok($agent->form_name('BuildQuery')); +$agent->field("AttachmentField", "Subject"); +$agent->field("AttachmentOp", "LIKE"); +$agent->field("ValueOfAttachment", "bbb"); +$agent->submit(); + +ok($agent->form_name('BuildQuery')); + +# get the query +my $query = $agent->current_form->find_input("Query")->value; +# strip whitespace from ends +$query =~ s/^\s*//g; +$query =~ s/\s*$//g; + +# collapse other whitespace +$query =~ s/\s+/ /g; + +is ($query, "Subject LIKE 'aaa' AND Subject LIKE 'bbb'"); + +# - new items go one level down +# - add items at currently selected level +# - if nothing is selected, add at end, one level down +# +# move left +# - error if nothing selected +# - same item should be selected after move +# - can't move left if you're at the top level +# +# move right +# - error if nothing selected +# - same item should be selected after move +# - can always move right (no max depth...should there be?) +# +# move up +# - error if nothing selected +# - same item should be selected after move +# - can't move up if you're first in the list +# +# move down +# - error if nothing selected +# - same item should be selected after move +# - can't move down if you're last in the list +# +# toggle +# - error if nothing selected +# - change all aggregators in the grouping +# - don't change any others +# +# delete +# - error if nothing selected +# - delete currently selected item +# - delete all children of a grouping +# - if delete leaves a node with no children, delete that, too +# - what should be selected? +# +# Clear +# - clears entire query +# - clears it from the session, too + +# }}} + + +1; diff --git a/rt/lib/t/03web.pl.in b/rt/lib/t/regression/03web_compiliation_errors.t index abe446eeb..f2e62c98d 100644 --- a/rt/lib/t/03web.pl.in +++ b/rt/lib/t/regression/03web_compiliation_errors.t @@ -1,10 +1,12 @@ -#!@PERL@ +#!/usr/bin/perl use strict; +use Test::More qw/no_plan/; use WWW::Mechanize; use HTTP::Request::Common; use HTTP::Cookies; use LWP; +use Encode; my $cookie_jar = HTTP::Cookies->new; my $agent = WWW::Mechanize->new(); @@ -13,9 +15,11 @@ my $agent = WWW::Mechanize->new(); $agent->cookie_jar($cookie_jar); +use RT; +RT::LoadConfig; # get the top page -my $url = "http://localhost/"; +my $url = $RT::WebURL; $agent->get($url); is ($agent->{'status'}, 200, "Loaded a page"); @@ -51,7 +55,7 @@ sub test_get { $file =~ s#^html/##; ok ($agent->get("$url/$file", "GET $url/$file")); is ($agent->{'status'}, 200, "Loaded $file"); - ok( $agent->{'content'} =~ /Logout/i, "Found a logout link on $file "); +# ok( $agent->{'content'} =~ /Logout/i, "Found a logout link on $file "); ok( $agent->{'content'} !~ /Not logged in/i, "Still logged in for $file"); ok( $agent->{'content'} !~ /System error/i, "Didn't get a Mason compilation error on $file"); diff --git a/rt/lib/t/04_send_email.pl.in b/rt/lib/t/regression/04send_email.t index e171cdc9b..09e6e6f84 100644 --- a/rt/lib/t/04_send_email.pl.in +++ b/rt/lib/t/regression/04send_email.t @@ -1,6 +1,10 @@ -#!@PERL@ -w +#!/usr/bin/perl -w use strict; +use Test::More tests => 137; +use RT; +RT::LoadConfig(); +RT::Init; use RT::EmailParser; use RT::Tickets; use RT::Action::SendEmail; @@ -33,6 +37,33 @@ sub RT::Action::SendEmail::SendMessage { # create a regular ticket my $parser = RT::EmailParser->new(); + + +# Let's test to make sure a multipart/report is processed correctly +my $content = `cat $RT::BasePath/lib/t/data/multipart-report` || die "couldn't find new content"; +# be as much like the mail gateway as possible. +use RT::Interface::Email; + +my %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); +my $tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +my $tick= $tickets->First(); +isa_ok($tick, "RT::Ticket", "got a ticket object"); +ok ($tick->Id, "found ticket ".$tick->Id); + +ok ($tick->Transactions->First->Content =~ /The original message was received/, "It's the bounce"); + + +# make sure it fires scrips. +is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation"); + +undef @scrips_fired; + + + + $parser->ParseMIMEEntityFromScalar('From: root@localhost To: rt@example.com Subject: This is a test of new ticket creation as an unknown user @@ -44,12 +75,12 @@ Foob!'); use Data::Dumper; my $ticket = RT::Ticket->new($RT::SystemUser); -my ($id, $tid, $msg ) = $ticket->Create(Requestor => ['root@localhost'], Queue => 'general', Subject => 'I18NTest', MIMEObj => $parser->Entity); +my ($id, undef, $msg ) = $ticket->Create(Requestor => ['root@localhost'], Queue => 'general', Subject => 'I18NTest', MIMEObj => $parser->Entity); ok ($id,$msg); -my $tickets = RT::Tickets->new($RT::SystemUser); +$tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); + $tick = $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); ok ($tick->Subject eq 'I18NTest', "failed to create the new ticket from an unprivileged account"); @@ -65,7 +96,7 @@ is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation"); # create an iso 8859-1 ticket @scrips_fired = (); -my $content = `cat ./lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; +$content = `cat $RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; @@ -74,12 +105,13 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. use RT::Interface::Email; - - RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); -my $tickets = RT::Tickets->new($RT::SystemUser); + + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); + $tick = $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); ok ($tick->Transactions->First->Content =~ /H\x{e5}vard/, "It's signed by havard. yay"); @@ -95,7 +127,7 @@ is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation"); # If we correspond, does it do the right thing to the outbound messages? $parser->ParseMIMEEntityFromScalar($content); -my ($id, $msg) = $tick->Comment(MIMEObj => $parser->Entity); + ($id, $msg) = $tick->Comment(MIMEObj => $parser->Entity); ok ($id, $msg); $parser->ParseMIMEEntityFromScalar($content); @@ -103,21 +135,25 @@ $parser->ParseMIMEEntityFromScalar($content); ok ($id, $msg); + + + # we need to swap out SendMessage to test the new things we care about; &iso8859_redef_sendmessage; $RT::EmailOutputEncoding = 'iso-8859-1'; # create an iso 8859-1 ticket @scrips_fired = (); -my $content = `cat ./lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; + $content = `cat $RT::BasePath/lib/t/data/new-ticket-from-iso-8859-1` || die "couldn't find new content"; # be as much like the mail gateway as possible. use RT::Interface::Email; - RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); -my $tickets = RT::Tickets->new($RT::SystemUser); + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); +$tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); + $tick = $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); ok ($tick->Transactions->First->Content =~ /H\x{e5}vard/, "It's signed by havard. yay"); @@ -134,7 +170,7 @@ is ($#scrips_fired, 1, "Fired 2 scrips on ticket creation"); # If we correspond, does it do the right thing to the outbound messages? $parser->ParseMIMEEntityFromScalar($content); -my ($id, $msg) = $tick->Comment(MIMEObj => $parser->Entity); + ($id, $msg) = $tick->Comment(MIMEObj => $parser->Entity); ok ($id, $msg); $parser->ParseMIMEEntityFromScalar($content); @@ -202,7 +238,7 @@ sub iso8859_redef_sendmessage { # {{{ test a multipart alternative containing a text-html part with an umlaut -my $content = `cat ./lib/t/data/multipart-alternative-with-umlaut` || die "couldn't find new content"; + $content = `cat $RT::BasePath/lib/t/data/multipart-alternative-with-umlaut` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); @@ -210,11 +246,12 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. ¨auts_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); -my $tickets = RT::Tickets->new($RT::SystemUser); + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); + $tick = $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); ok ($tick->Transactions->First->Content =~ /causes Error/, "We recorded the content right as text-plain"); @@ -229,7 +266,7 @@ sub umlauts_redef_sendmessage { # {{{ test a text-html message with an umlaut -my $content = `cat ./lib/t/data/text-html-with-umlaut` || die "couldn't find new content"; + $content = `cat $RT::BasePath/lib/t/data/text-html-with-umlaut` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); @@ -237,11 +274,12 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_html_umlauts_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); -my $tickets = RT::Tickets->new($RT::SystemUser); + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); + $tick = $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); ok ($tick->Transactions->First->Attachments->First->Content =~ /causes Error/, "We recorded the content as containing 'causes error'"); @@ -266,7 +304,7 @@ sub text_html_umlauts_redef_sendmessage { # {{{ test a text-html message with russian characters -my $content = `cat ./lib/t/data/text-html-in-russian` || die "couldn't find new content"; + $content = `cat $RT::BasePath/lib/t/data/text-html-in-russian` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); @@ -274,11 +312,12 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_html_russian_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); -my $tickets = RT::Tickets->new($RT::SystemUser); + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); + $tick = $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/html/, "We recorded the content right as text-html"); @@ -308,18 +347,19 @@ sub text_html_russian_redef_sendmessage { unshift (@RT::EmailInputEncodings, 'koi8-r'); $RT::EmailOutputEncoding = 'koi8-r'; -my $content = `cat ./lib/t/data/russian-subject-no-content-type` || die "couldn't find new content"; +$content = `cat $RT::BasePath/lib/t/data/russian-subject-no-content-type` || die "couldn't find new content"; $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_plain_russian_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); -my $tickets = RT::Tickets->new($RT::SystemUser); + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); +$tick= $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); ok ($tick->Transactions->First->Attachments->First->ContentType =~ /text\/plain/, "We recorded the content type right"); @@ -346,7 +386,7 @@ $RT::EmailOutputEncoding = 'utf-8'; # {{{ test a message containing a nested RFC 822 message -my $content = `cat ./lib/t/data/nested-rfc-822` || die "couldn't find new content"; + $content = `cat $RT::BasePath/lib/t/data/nested-rfc-822` || die "couldn't find new content"; ok ($content, "Loaded nested-rfc-822 to test"); $parser->ParseMIMEEntityFromScalar($content); @@ -354,11 +394,12 @@ $parser->ParseMIMEEntityFromScalar($content); # be as much like the mail gateway as possible. &text_plain_nested_redef_sendmessage; -RT::Interface::Email::Gateway(message => $content, queue => 1, action => 'correspond'); -my $tickets = RT::Tickets->new($RT::SystemUser); + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); $tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); $tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); -my $tick = $tickets->First(); +$tick= $tickets->First(); ok ($tick->Id, "found ticket ".$tick->Id); is ($tick->Subject, "[Jonas Liljegren] Re: [Para] Niv\x{e5}er?"); ok ($tick->Transactions->First->Attachments->First->ContentType =~ /multipart\/mixed/, "We recorded the content type right"); @@ -382,7 +423,88 @@ sub text_plain_nested_redef_sendmessage { # }}} +# {{{ test a multipart alternative containing a uuencoded mesage generated by lotus notes + + $content = `cat $RT::BasePath/lib/t/data/notes-uuencoded` || die "couldn't find new content"; + +$parser->ParseMIMEEntityFromScalar($content); + + +# be as much like the mail gateway as possible. +¬es_redef_sendmessage; + + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); +$tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +$tick= $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); + +ok ($tick->Transactions->First->Content =~ /from Lotus Notes/, "We recorded the content right"); +is ($tick->Transactions->First->Attachments->Count , 3 , "Has three attachments"); + +sub notes_redef_sendmessage { + no warnings qw/redefine/; + eval 'sub RT::Action::SendEmail::SendMessage { }'; +} + +# }}} + +# {{{ test a multipart that crashes the file-based mime-parser works + + $content = `cat $RT::BasePath/lib/t/data/crashes-file-based-parser` || die "couldn't find new content"; + +$parser->ParseMIMEEntityFromScalar($content); + + +# be as much like the mail gateway as possible. +&crashes_redef_sendmessage; + + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +$tick= $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); + +ok ($tick->Transactions->First->Content =~ /FYI/, "We recorded the content right"); +is ($tick->Transactions->First->Attachments->Count , 5 , "Has three attachments"); + +sub crashes_redef_sendmessage { + no warnings qw/redefine/; + eval 'sub RT::Action::SendEmail::SendMessage { }'; +} + + + +# }}} + +# {{{ test a multi-line RT-Send-CC header + + $content = `cat $RT::BasePath/lib/t/data/rt-send-cc` || die "couldn't find new content"; +$parser->ParseMIMEEntityFromScalar($content); + + + + %args = (message => $content, queue => 1, action => 'correspond'); + RT::Interface::Email::Gateway(\%args); + $tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +$tick= $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); + +my $cc = $tick->Transactions->First->Attachments->First->GetHeader('RT-Send-Cc'); +ok ($cc =~ /test1/, "Found test 1"); +ok ($cc =~ /test2/, "Found test 2"); +ok ($cc =~ /test3/, "Found test 3"); +ok ($cc =~ /test4/, "Found test 4"); +ok ($cc =~ /test5/, "Found test 5"); + +# }}} # Don't taint the environment $everyone->PrincipalObj->RevokeRight(Right =>'SuperUser'); diff --git a/rt/lib/t/regression/05cronsupport.t b/rt/lib/t/regression/05cronsupport.t new file mode 100644 index 000000000..8e5bd7516 --- /dev/null +++ b/rt/lib/t/regression/05cronsupport.t @@ -0,0 +1,91 @@ +#!/usr/bin/perl -w + +use strict; +use Test::More qw/no_plan/; + +use RT; +RT::LoadConfig(); +RT::Init(); + +### Set up some testing data. Test the testing data because why not? + +# Create a user with rights, a queue, and some tickets. +my $user_obj = RT::User->new($RT::SystemUser); +my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('tara@example.com'); +ok($ret, 'record test user creation'); +$user_obj->SetName('tara'); +$user_obj->PrincipalObj->GrantRight(Right => 'SuperUser'); +my $CurrentUser = RT::CurrentUser->new('tara'); + +# Create our template, which will be used for tests of RT::Action::Record*. + +my $template_content = 'RT-Send-Cc: tla@example.com +RT-Send-Bcc: jesse@example.com + +This is a content string with no content.'; + +my $template_obj = RT::Template->new($CurrentUser); +$template_obj->Create(Queue => '0', + Name => 'recordtest', + Description => 'testing Record actions', + Content => $template_content, + ); + +# Create a queue and some tickets. + +my $queue_obj = RT::Queue->new($CurrentUser); +($ret, $msg) = $queue_obj->Create(Name => 'recordtest', Description => 'queue for Action::Record testing'); +ok($ret, 'record test queue creation'); + +my $ticket1 = RT::Ticket->new($CurrentUser); +my ($id, $tobj, $msg2) = $ticket1->Create(Queue => $queue_obj, + Requestor => ['tara@example.com'], + Subject => 'bork bork bork', + Priority => 22, + ); +ok($id, 'record test ticket creation 1'); +my $ticket2 = RT::Ticket->new($CurrentUser); +($id, $tobj, $msg2) = $ticket2->Create(Queue => $queue_obj, + Requestor => ['root@localhost'], + Subject => 'hurdy gurdy' + ); +ok($id, 'record test ticket creation 2'); + + +### OK. Have data, will travel. + +# First test the search. + +ok(require RT::Search::FromSQL, "Search::FromSQL loaded"); +my $ticketsqlstr = "Requestor.EmailAddress = '" . $CurrentUser->EmailAddress . + "' AND Priority > '20'"; +my $search = RT::Search::FromSQL->new(Argument => $ticketsqlstr, TicketsObj => RT::Tickets->new($CurrentUser), + ); +is(ref($search), 'RT::Search::FromSQL', "search created"); +ok($search->Prepare(), "fromsql search run"); +my $counter = 0; +while(my $t = $search->TicketsObj->Next() ) { + is($t->Id(), $ticket1->Id(), "fromsql search results 1"); + $counter++; +} +is ($counter, 1, "fromsql search results 2"); + +# Right. Now test the actions. + +ok(require RT::Action::RecordComment); +ok(require RT::Action::RecordCorrespondence); + +my ($comment_act, $correspond_act); +ok($comment_act = RT::Action::RecordComment->new(TicketObj => $ticket1, TemplateObj => $template_obj, CurrentUser => $CurrentUser), "RecordComment created"); +ok($correspond_act = RT::Action::RecordCorrespondence->new(TicketObj => $ticket2, TemplateObj => $template_obj, CurrentUser => $CurrentUser), "RecordCorrespondence created"); +ok($comment_act->Prepare(), "Comment prepared"); +ok($correspond_act->Prepare(), "Correspond prepared"); +ok($comment_act->Commit(), "Comment committed"); +ok($correspond_act->Commit(), "Correspondence committed"); + +# Now test for loop suppression. +my ($trans, $desc, $transaction) = $ticket2->Comment(MIMEObj => $template_obj->MIMEObj); +my $bogus_action = RT::Action::RecordComment->new(TicketObj => $ticket1, TemplateObj => $template_obj, TransactionObj => $transaction, CurrentUser => $CurrentUser); +ok(!$bogus_action->Prepare(), "Comment aborted to prevent loop"); + +1; diff --git a/rt/lib/t/regression/06mailgateway.t b/rt/lib/t/regression/06mailgateway.t new file mode 100644 index 000000000..8486aea9e --- /dev/null +++ b/rt/lib/t/regression/06mailgateway.t @@ -0,0 +1,504 @@ +#!/usr/bin/perl -w +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# <jesse.com> +# +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: +# +# This work is made available to you under the terms of Version 2 of +# the GNU General Public License. A copy of that license should have +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +=head1 NAME + +rt-mailgate - Mail interface to RT3. + +=cut + +use strict; +use Test::More tests => 57; +use RT; +RT::LoadConfig(); +RT::Init(); +use RT::I18N; +# 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 +To: rt\@example.com +Subject: This is a test of new ticket creation + +Foob! +EOF +close (MAIL); + +# Check the return value +is ( $? >> 8, 75, "The error message above is expected The mail gateway exited with a failure. yay"); + + +# {{{ 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 - $@"); +print MAIL <<EOF; +From: root\@localhost +To: rt\@example.com +Subject: This is a test of new ticket creation + +Blah! +Foob! +EOF +close (MAIL); + +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +use RT::Tickets; +my $tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); +my $tick = $tickets->First(); +ok (UNIVERSAL::isa($tick,'RT::Ticket')); +ok ($tick->Id, "found ticket ".$tick->Id); +ok ($tick->Subject eq 'This is a test of new ticket creation', "Created the ticket"); + +# }}} + + +# {{{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 - $@"); +print MAIL <<EOF; +From: doesnotexist\@example.com +To: rt\@example.com +Subject: This is a test of new ticket creation as an unknown user + +Blah! +Foob! +EOF +close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +$tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +$tick = $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); +ok ($tick->Subject ne 'This is a test of new ticket creation as an unknown user', "failed to create the new ticket from an unprivileged account"); +my $u = RT::User->new($RT::SystemUser); +$u->Load('doesnotexist@example.com'); +ok( $u->Id == 0, " user does not exist and was not created by failed ticket submission"); + + +# }}} + +# {{{ now everybody can create tickets. can a random unkown user create tickets? + +my $g = RT::Group->new($RT::SystemUser); +$g->LoadSystemInternalGroup('Everyone'); +ok( $g->Id, "Found 'everybody'"); + +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 - $@"); +print MAIL <<EOF; +From: doesnotexist\@example.com +To: rt\@example.com +Subject: This is a test of new ticket creation as an unknown user + +Blah! +Foob! +EOF +close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + + +$tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id' ,OPERATOR => '>', VALUE => '0'); +$tick = $tickets->First(); +ok ($tick->Id, "found ticket ".$tick->Id); +ok ($tick->Subject eq 'This is a test of new ticket creation as an unknown user', "failed to create the new ticket from an unprivileged account"); + $u = RT::User->new($RT::SystemUser); +$u->Load('doesnotexist@example.com'); +ok( $u->Id != 0, " user does not exist and was created by ticket submission"); + +# }}} + + +# {{{ can another random reply to a ticket without being granted privs? answer should be no. + + +#($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 - $@"); +print MAIL <<EOF; +From: doesnotexist-2\@example.com +To: rt\@example.com +Subject: [example.com #@{[$tick->Id]}] This is a test of a reply as an unknown user + +Blah! (Should not work.) +Foob! +EOF +close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +$u = RT::User->new($RT::SystemUser); +$u->Load('doesnotexist-2@example.com'); +ok( $u->Id == 0, " user does not exist and was not created by ticket correspondence submission"); +# }}} + + +# {{{ can another random reply to a ticket after being granted privs? answer should be yes + + +($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 - $@"); +print MAIL <<EOF; +From: doesnotexist-2\@example.com +To: rt\@example.com +Subject: [example.com #@{[$tick->Id]}] This is a test of a reply as an unknown user + +Blah! +Foob! +EOF +close (MAIL); +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + + +$u = RT::User->new($RT::SystemUser); +$u->Load('doesnotexist-2@example.com'); +ok( $u->Id != 0, " user exists and was created by ticket correspondence submission"); + +# }}} + +# {{{ can another random comment on a ticket without being granted privs? answer should be no. + + +#($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 - $@"); +print MAIL <<EOF; +From: doesnotexist-3\@example.com +To: rt\@example.com +Subject: [example.com #@{[$tick->Id]}] This is a test of a comment as an unknown user + +Blah! (Should not work.) +Foob! +EOF +close (MAIL); + +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +$u = RT::User->new($RT::SystemUser); +$u->Load('doesnotexist-3@example.com'); +ok( $u->Id == 0, " user does not exist and was not created by ticket comment submission"); + +# }}} +# {{{ can another random reply to a ticket after being granted privs? answer should be yes + + +($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 - $@"); +print MAIL <<EOF; +From: doesnotexist-3\@example.com +To: rt\@example.com +Subject: [example.com #@{[$tick->Id]}] This is a test of a comment as an unknown user + +Blah! +Foob! +EOF +close (MAIL); + +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +$u = RT::User->new($RT::SystemUser); +$u->Load('doesnotexist-3@example.com'); +ok( $u->Id != 0, " user exists and was created by ticket comment submission"); + +# }}} + +# {{{ Testing preservation of binary attachments + +# Get a binary blob (Best Practical logo) + +# Create a mime entity with an attachment + +use MIME::Entity; +my $entity = MIME::Entity->build( From => 'root@localhost', + To => 'rt@localhost', + Subject => 'binary attachment test', + Data => ['This is a test of a binary attachment']); + +# currently in lib/t/autogen + +my $LOGO_FILE = $RT::MasonComponentRoot.'/NoAuth/images/bplogo.gif'; + +$entity->attach(Path => $LOGO_FILE, + Type => 'image/gif', + 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 - $@"); + +$entity->print(\*MAIL); + +close (MAIL); + +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +$tickets = RT::Tickets->new($RT::SystemUser); +$tickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); + $tick = $tickets->First(); +ok (UNIVERSAL::isa($tick,'RT::Ticket')); +ok ($tick->Id, "found ticket ".$tick->Id); +ok ($tick->Subject eq 'binary attachment test', "Created the ticket - ".$tick->Id); + +my $file = `cat $LOGO_FILE`; +ok ($file, "Read in the logo image"); + + + use Digest::MD5; +warn "for the raw file the content is ".Digest::MD5::md5_base64($file); + + + +# Verify that the binary attachment is valid in the database +my $attachments = RT::Attachments->new($RT::SystemUser); +$attachments->Limit(FIELD => 'ContentType', VALUE => 'image/gif'); +ok ($attachments->Count == 1, 'Found only one gif in the database'); +my $attachment = $attachments->First; +ok($attachment->Id); +my $acontent = $attachment->Content; + + warn "coming from the database, the content is ".Digest::MD5::md5_base64($acontent); + +is( $acontent, $file, 'The attachment isn\'t screwed up in the database.'); +# Log in as root +use Getopt::Long; +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 $r = $ua->get( $full_url); + + +# Verify that the downloaded attachment is the same as what we uploaded. +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 - $@"); + +print MAIL <<EOF; +From: root\@localhost +To: rtemail\@example.com +Subject: This is a test of I18N ticket creation +Content-Type: text/plain; charset="utf-8" + +2 accented lines +\303\242\303\252\303\256\303\264\303\273 +\303\241\303\251\303\255\303\263\303\272 +bye +EOF +close (MAIL); + +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +my $unitickets = RT::Tickets->new($RT::SystemUser); +$unitickets->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$unitickets->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); +my $unitick = $unitickets->First(); +ok (UNIVERSAL::isa($unitick,'RT::Ticket')); +ok ($unitick->Id, "found ticket ".$unitick->Id); +ok ($unitick->Subject eq 'This is a test of I18N ticket creation', "Created the ticket - ". $unitick->Subject); + + + +my $unistring = "\303\241\303\251\303\255\303\263\303\272"; +Encode::_utf8_on($unistring); +is ($unitick->Transactions->First->Content, $unitick->Transactions->First->Attachments->First->Content, "Content is ". $unitick->Transactions->First->Attachments->First->Content); +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 - $@"); + +print MAIL <<EOF; +From: root\@localhost +To: rtemail\@example.com +Subject: This is a test of I18N ticket creation +Content-Type: text/plain; charset="utf-8" + +2 accented lines +\303\242\303\252\303\256\303\264\303\273 +\303\241\303\251\303\255\303\263\303\272 +bye +EOF +close (MAIL); + +#Check the return value +is ($? >> 8, 0, "The mail gateway exited normally. yay"); + +my $tickets2 = RT::Tickets->new($RT::SystemUser); +$tickets2->OrderBy(FIELD => 'id', ORDER => 'DESC'); +$tickets2->Limit(FIELD => 'id', OPERATOR => '>', VALUE => '0'); +my $tick2 = $tickets2->First(); +ok (UNIVERSAL::isa($tick2,'RT::Ticket')); +ok ($tick2->Id, "found ticket ".$tick2->Id); +ok ($tick2->Subject eq 'This is a test of I18N ticket creation', "Created the ticket"); + + + +$unistring = "\303\241\303\251\303\255\303\263\303\272"; +Encode::_utf8_on($unistring); + +ok ($tick2->Transactions->First->Content =~ $unistring, "It appears to be unicode - ".$tick2->Transactions->First->Content); + +# }}} + + +($val,$msg) = $g->PrincipalObj->RevokeRight(Right => 'CreateTicket'); +ok ($val, $msg); + +=for later + +TODO: { + +# {{{ 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'); +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 - $@"); +print MAIL <<EOF; +From: root\@localhost +Subject: [example.com \#$id] test + +EOF +close (MAIL); +is ($? >> 8, 0, "The mail gateway exited normally"); + +$tick = RT::Ticket->new($RT::SystemUser); +$tick->Load( $id ); +is( $tick->Id, $id, 'load correct ticket'); +is( $tick->OwnerObj->EmailAddress, 'root@localhost', 'successfuly take ticket via email'); + +# check that there is no text transactions writen +is( $tick->Transactions->Count, 2, 'no superfluous transactions'); + +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 - $@"); +print MAIL <<EOF; +From: root\@localhost +Subject: [example.com \#$id] correspondence + +test +EOF +close (MAIL); +is ($? >> 8, 0, "The mail gateway exited normally"); + +$tick = RT::Ticket->new($RT::SystemUser); +$tick->Load( $id ); +is( $tick->Id, $id, 'load correct ticket'); +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, "[example.com \#$id] correspondence", 'successfuly add correspond within take via email' ); +# +1 because of auto open +is( $tick->Transactions->Count, 6, 'no superfluous transactions'); + +ok(open(MAIL, "|$RT::BinPath/rt-mailgate --url $RT::WebURL --queue general --action resolve"), "Opened the mailgate - $@"); +print MAIL <<EOF; +From: root\@localhost +Subject: [example.com \#$id] test + +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->Status, 'resolved', 'successfuly resolved ticket via email'); +is( $tick->Transactions->Count, 7, 'no superfluous transactions'); + +}; + +=cut + +# }}} + +1; diff --git a/rt/lib/t/regression/07acl.t b/rt/lib/t/regression/07acl.t new file mode 100644 index 000000000..bb1ccdc0b --- /dev/null +++ b/rt/lib/t/regression/07acl.t @@ -0,0 +1,120 @@ +#!/usr/bin/perl -w + +use WWW::Mechanize; +use HTTP::Cookies; + +use Test::More qw/no_plan/; +use RT; +RT::LoadConfig(); +RT::Init(); + +# Create a user with basically no rights, to start. +my $user_obj = RT::User->new($RT::SystemUser); +my ($ret, $msg) = $user_obj->LoadOrCreateByEmail('customer-'.$$.'@example.com'); +ok($ret, 'ACL test user creation'); +$user_obj->SetName('customer-'.$$); +$user_obj->SetPrivileged(1); +($ret, $msg) = $user_obj->SetPassword('customer'); +ok($ret, "ACL test password set. $msg"); + +# Now test the web interface, making sure objects come and go as +# required. + +my $cookie_jar = HTTP::Cookies->new; +my $agent = WWW::Mechanize->new(); + +# give the agent a place to stash the cookies + +$agent->cookie_jar($cookie_jar); + + +# get the top page +my $url = $RT::WebURL; +$agent->get($url); + +is ($agent->{'status'}, 200, "Loaded a page - $RT::WebURL"); +# {{{ test a login + +# follow the link marked "Login" + +ok($agent->{form}->find_input('user')); + +ok($agent->{form}->find_input('pass')); +ok ($agent->{'content'} =~ /username:/i); +$agent->field( 'user' => 'customer-'.$$ ); +$agent->field( 'pass' => 'customer' ); +# the field isn't named, so we have to click link 0 +$agent->click(0); +is($agent->{'status'}, 200, "Fetched the page ok"); +ok($agent->{'content'} =~ /Logout/i, "Found a logout link"); + +# Test for absence of Configure and Preferences tabs. +ok(!$agent->find_link( url => '/Admin/', + text => 'Configuration'), "No config tab" ); +ok(!$agent->find_link( url => '/User/Prefs.html', + text => 'Preferences'), "No prefs pane" ); + +# Now test for their presence, one at a time. Sleep for a bit after +# ACL changes, thanks to the 10s ACL cache. +$user_obj->PrincipalObj->GrantRight(Right => 'ShowConfigTab'); +$agent->reload(); +ok($agent->{'content'} =~ /Logout/i, "Reloaded page successfully"); +ok($agent->find_link( url => '/Admin/', + text => 'Configuration'), "Found config tab" ); +$user_obj->PrincipalObj->RevokeRight(Right => 'ShowConfigTab'); +$user_obj->PrincipalObj->GrantRight(Right => 'ModifySelf'); +$agent->reload(); +ok($agent->{'content'} =~ /Logout/i, "Reloaded page successfully"); +ok($agent->find_link( url => '/User/Prefs.html', + text => 'Preferences'), "Found prefs pane" ); +$user_obj->PrincipalObj->RevokeRight(Right => 'ModifySelf'); + +# Good. Now load the search page and test Load/Save Search. +$agent->follow_link( url => '/Search/Build.html', + text => 'Tickets'); +is($agent->{'status'}, 200, "Fetched search builder page"); +ok($agent->{'content'} !~ /Load saved search/i, "No search loading box"); +ok($agent->{'content'} !~ /Saved searches/i, "No saved searches box"); + +$user_obj->PrincipalObj->GrantRight(Right => 'LoadSavedSearch'); +$agent->reload(); +ok($agent->{'content'} =~ /Load saved search/i, "Search loading box exists"); +ok($agent->{'content'} !~ /input\s+type=.submit.\s+name=.Save./i, + "Still no saved searches box"); + +$user_obj->PrincipalObj->GrantRight(Right => 'CreateSavedSearch'); +$agent->reload(); +ok($agent->{'content'} =~ /Load saved search/i, + "Search loading box still exists"); +ok($agent->{'content'} =~ /input\s+type=.submit.\s+name=.Save./i, + "Saved searches box exists"); + +# Create a group, and a queue, so we can test limited user visibility +# via SelectOwner. + +my $queue_obj = RT::Queue->new($RT::SystemUser); +($ret, $msg) = $queue_obj->Create(Name => 'CustomerQueue', + Description => 'queue for SelectOwner testing'); +ok($ret, "SelectOwner test queue creation. $msg"); +my $group_obj = RT::Group->new($RT::SystemUser); +($ret, $msg) = $group_obj->CreateUserDefinedGroup(Name => 'CustomerGroup', + Description => 'group for SelectOwner testing'); +ok($ret, "SelectOwner test group creation. $msg"); + +# Add our customer to the customer group, and give it queue rights. +($ret, $msg) = $group_obj->AddMember($user_obj->PrincipalObj->Id()); +ok($ret, "Added customer to its group. $msg"); +$group_obj->PrincipalObj->GrantRight(Right => 'OwnTicket', + Object => $queue_obj); +$group_obj->PrincipalObj->GrantRight(Right => 'SeeQueue', + Object => $queue_obj); + +# Now. When we look at the search page we should be able to see +# ourself in the list of possible owners. + +$agent->reload(); +ok($agent->form_name('BuildQuery'), "Yep, form is still there"); +my $input = $agent->current_form->find_input('ValueOfActor'); +ok(grep(/customer-$$/, $input->value_names()), "Found self in the actor listing"); + +1; diff --git a/rt/lib/t/regression/07rights.t b/rt/lib/t/regression/07rights.t new file mode 100644 index 000000000..4764b49d4 --- /dev/null +++ b/rt/lib/t/regression/07rights.t @@ -0,0 +1,110 @@ +#!/usr/bin/perl -w +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse.com> +# +# (Except where explicitly superseded by other copyright notices) +# +# +# LICENSE: +# +# This work is made available to you under the terms of Version 2 of +# the GNU General Public License. A copy of that license should have +# been provided with this software, but in any event can be snarfed +# from www.gnu.org. +# +# This work is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} + +use Test::More tests => 14; +use RT; +RT::LoadConfig(); +RT::Init(); +use RT::I18N; +use strict; +no warnings 'once'; + +use RT::Queue; +use RT::ACE; +use RT::User; +use RT::Group; +use RT::Ticket; + + +# clear all global right +my $acl = RT::ACL->new($RT::SystemUser); +$acl->Limit( FIELD => 'RightName', OPERATOR => '!=', VALUE => 'SuperUser' ); +$acl->LimitToObject( $RT::System ); +while( my $ace = $acl->Next ) { + $ace->Delete; +} + +# create new queue to be shure we don't mess with rights +my $queue = RT::Queue->new($RT::SystemUser); +my ($queue_id) = $queue->Create( Name => 'rights'); +ok( $queue_id, 'queue created for rights tests' ); + +# new privileged user to check rights +my $user = RT::User->new( $RT::SystemUser ); +my ($user_id) = $user->Create( Name => 'rights', + EmailAddress => 'rights@localhost', + Privileged => 1, + Password => 'qwe123', + ); +ok( !$user->HasRight( Right => 'OwnTicket', Object => $queue ), "user can't own ticket" ); +ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $queue ), "user can't reply to ticket" ); + +my $group = RT::Group->new( $RT::SystemUser ); +ok( $group->LoadQueueRoleGroup( Queue => $queue_id, Type=> 'Owner' ), "load queue owners role group" ); +my $ace = RT::ACE->new( $RT::SystemUser ); +my ($ace_id, $msg) = $group->PrincipalObj->GrantRight( Right => 'ReplyToTicket', Object => $queue ); +ok( $ace_id, "Granted queue owners role group with ReplyToTicket right: $msg" ); +ok( $group->PrincipalObj->HasRight( Right => 'ReplyToTicket', Object => $queue ), "role group can reply to ticket" ); +ok( !$user->HasRight( Right => 'ReplyToTicket', Object => $queue ), "user can't reply to ticket" ); + +# new ticket +my $ticket = RT::Ticket->new($RT::SystemUser); +my ($ticket_id) = $ticket->Create( Queue => $queue_id, Subject => 'test'); +ok( $ticket_id, 'new ticket created' ); +is( $ticket->Owner, $RT::Nobody->Id, 'owner of the new ticket is nobody' ); + +my $status; +($status, $msg) = $user->PrincipalObj->GrantRight( Object => $queue, Right => 'OwnTicket' ); +ok( $status, "successfuly granted right: $msg" ); +ok( $user->HasRight( Right => 'OwnTicket', Object => $queue ), "user can own ticket" ); + +($status, $msg) = $ticket->SetOwner( $user_id ); +ok( $status, "successfuly set owner: $msg" ); +is( $ticket->Owner, $user_id, "set correct owner" ); + +ok( $user->HasRight( Right => 'ReplyToTicket', Object => $ticket ), "user is owner and can reply to ticket" ); + diff --git a/rt/lib/t/regression/08web_cf_access.t b/rt/lib/t/regression/08web_cf_access.t new file mode 100644 index 000000000..012d73381 --- /dev/null +++ b/rt/lib/t/regression/08web_cf_access.t @@ -0,0 +1,118 @@ +#!/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 ImageFile => $RT::MasonComponentRoot .'/NoAuth/images/bplogo.gif'; +use constant ImageFileContent => do { + local $/; + open my $fh, '<', ImageFile or die $!; + binmode($fh); + scalar <$fh>; +}; + +my $m = Test::WWW::Mechanize->new; +isa_ok($m, 'Test::WWW::Mechanize'); + +$m->get( $BaseURL."?user=root;pass=password" ); +$m->content_like(qr/Logout/, 'we did log in'); +$m->follow_link( text => 'Configuration' ); +$m->title_is(q/RT Administration/, 'admin screen'); +$m->follow_link( text => 'Custom Fields' ); +$m->title_is(q/Select a Custom Field/, 'admin-cf screen'); +$m->follow_link( text => 'New custom field' ); +$m->submit_form( + form_name => "ModifyCustomField", + fields => { + TypeComposite => 'Image-0', + LookupType => 'RT::Queue-RT::Ticket', + Name => 'img', + Description => 'img', + }, +); +$m->title_is(q/Created CustomField img/, 'admin-cf created'); +$m->follow_link( text => 'Queues' ); +$m->title_is(q/Admin queues/, 'admin-queues screen'); +$m->follow_link( text => 'General' ); +$m->title_is(q/Editing Configuration for queue General/, 'admin-queue: general'); +$m->follow_link( text => 'Ticket Custom Fields' ); + +$m->title_is(q/Edit Custom Fields for General/, 'admin-queue: general tcf'); +$m->form_name('EditCustomFields'); + +# Sort by numeric IDs in names +my @names = map { $_->[1] } + sort { $a->[0] <=> $b->[0] } + map { /Object-1-CF-(\d+)/ ? [ $1 => $_ ] : () } + map $_->name, $m->current_form->inputs; +my $tcf = pop(@names); +$m->field( $tcf => 1 ); # Associate the new CF with this queue +$m->field( $_ => undef ) for @names; # ...and not any other. ;-) +$m->submit; + +$m->content_like( qr/Object created/, 'TCF added to the queue' ); + +$m->submit_form( + form_name => "CreateTicketInQueue", + fields => { Queue => 'General' }, +); + +$m->content_like(qr/Upload multiple images/, 'has a upload image field'); + +$tcf =~ /(\d+)$/ or die "Hey this is impossible dude"; +my $upload_field = "Object-RT::Ticket--CustomField-$1-Upload"; + +$m->submit_form( + form_name => "TicketCreate", + fields => { + $upload_field => ImageFile, + Subject => 'testing img cf creation', + }, +); + +$m->content_like(qr/Ticket \d+ created/, "a ticket is created succesfully"); + +my $id = $1 if $m->content =~ /Ticket (\d+) created/; + +$m->title_like(qr/testing img cf creation/, "its title is the Subject"); + +$m->follow_link( text => 'bplogo.gif' ); +$m->content_is(ImageFileContent, "it links to the uploaded image"); + +$m->get( $BaseURL ); + +$m->follow_link( text => 'Tickets' ); +$m->follow_link( text => 'New Query' ); + +$m->title_is(q/Query Builder/, 'Query building'); +$m->submit_form( + form_name => "BuildQuery", + fields => { + idOp => '=', + ValueOfid => $id, + ValueOfQueue => 'General', + }, + button => 'AddClause', +); + +$m->form_name('BuildQuery'); + +my $col = ($m->current_form->find_input('SelectDisplayColumns'))[-1]; +$col->value( ($col->possible_values)[-1] ); + +$m->click('AddCol'); + +$m->form_name('BuildQuery'); +$m->click('DoSearch'); + +$m->follow_link( text_regex => qr/bplogo\.gif/ ); +$m->content_is(ImageFileContent, "it links to the uploaded image"); + +__END__ +[FC] Bulk Update does not have custom fields. diff --git a/rt/lib/t/regression/09record_cf_api.t b/rt/lib/t/regression/09record_cf_api.t new file mode 100644 index 000000000..1428a28db --- /dev/null +++ b/rt/lib/t/regression/09record_cf_api.t @@ -0,0 +1,188 @@ +#!/usr/bin/perl + +use strict; +use warnings FATAL => 'all'; +use Test::More tests => 131; + +use RT; +RT::LoadConfig(); +RT::Init(); + +# Before we get going, ditch all object_cfs; this will remove +# all custom fields systemwide; +my $object_cfs = RT::ObjectCustomFields->new($RT::SystemUser); +$object_cfs->UnLimit(); +while (my $ocf = $object_cfs->Next) { + $ocf->Delete(); +} + + +my $queue = RT::Queue->new( $RT::SystemUser ); +$queue->Create( Name => 'RecordCustomFields-'.$$ ); +ok ($queue->id, "Created the queue"); + +my $ticket = RT::Ticket->new( $RT::SystemUser ); +$ticket->Create( + Queue => $queue->Id, + Requestor => 'root@localhost', + Subject => 'RecordCustomFields1', +); + +my $cfs = $ticket->CustomFields; +is( $cfs->Count, 0 ); + +# Check that record has no any CF values yet {{{ +my $cfvs = $ticket->CustomFieldValues; +is( $cfvs->Count, 0 ); +is( $ticket->FirstCustomFieldValue, undef ); + +my $local_cf1 = RT::CustomField->new( $RT::SystemUser ); +$local_cf1->Create( Name => 'RecordCustomFields1-'.$$, Type => 'SelectSingle', Queue => $queue->id ); +$local_cf1->AddValue( Name => 'RecordCustomFieldValues11' ); +$local_cf1->AddValue( Name => 'RecordCustomFieldValues12' ); + +my $local_cf2 = RT::CustomField->new( $RT::SystemUser ); +$local_cf2->Create( Name => 'RecordCustomFields2-'.$$, Type => 'SelectSingle', Queue => $queue->id ); +$local_cf2->AddValue( Name => 'RecordCustomFieldValues21' ); +$local_cf2->AddValue( Name => 'RecordCustomFieldValues22' ); + +my $global_cf3 = RT::CustomField->new( $RT::SystemUser ); +$global_cf3->Create( Name => 'RecordCustomFields3-'.$$, Type => 'SelectSingle', Queue => 0 ); +$global_cf3->AddValue( Name => 'RecordCustomFieldValues31' ); +$global_cf3->AddValue( Name => 'RecordCustomFieldValues32' ); + + +my @custom_fields = ($local_cf1, $local_cf2, $global_cf3); + + +$cfs = $ticket->CustomFields; +is( $cfs->Count, 3 ); + +# Check that record has no any CF values yet {{{ +$cfvs = $ticket->CustomFieldValues; +is( $cfvs->Count, 0 ); +is( $ticket->FirstCustomFieldValue, undef ); + +# CF with ID -1 shouldnt exist at all +$cfvs = $ticket->CustomFieldValues( -1 ); +is( $cfvs->Count, 0 ); +is( $ticket->FirstCustomFieldValue( -1 ), undef ); + +$cfvs = $ticket->CustomFieldValues( 'SomeUnexpedCustomFieldName' ); +is( $cfvs->Count, 0 ); +is( $ticket->FirstCustomFieldValue( 'SomeUnexpedCustomFieldName' ), undef ); + +for (@custom_fields) { + $cfvs = $ticket->CustomFieldValues( $_->id ); + is( $cfvs->Count, 0 ); + + $cfvs = $ticket->CustomFieldValues( $_->Name ); + is( $cfvs->Count, 0 ); + is( $ticket->FirstCustomFieldValue( $_->id ), undef ); + is( $ticket->FirstCustomFieldValue( $_->Name ), undef ); +} +# }}} + +# try to add field value with fields that do not exist {{{ +my ($status, $msg) = $ticket->AddCustomFieldValue( Field => -1 , Value => 'foo' ); +ok(!$status, "shouldn't add value" ); +($status, $msg) = $ticket->AddCustomFieldValue( Field => 'SomeUnexpedCustomFieldName' , Value => 'foo' ); +ok(!$status, "shouldn't add value" ); +# }}} + +# {{{ +SKIP: { + + skip "TODO: We want fields that are not allowed to set unexpected values", 10; + for (@custom_fields) { + ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_ , Value => 'SomeUnexpectedCFValue' ); + ok( !$status, 'value doesn\'t exist'); + + ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_->id , Value => 'SomeUnexpectedCFValue' ); + ok( !$status, 'value doesn\'t exist'); + + ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_->Name , Value => 'SomeUnexpectedCFValue' ); + ok( !$status, 'value doesn\'t exist'); + } + + # Let check that we did not add value to be sure + # using only FirstCustomFieldValue sub because + # we checked other variants allready + for (@custom_fields) { + is( $ticket->FirstCustomFieldValue( $_->id ), undef ); + } + +} +# Add some values to our custom fields +for (@custom_fields) { + # this should be tested elsewhere + $_->AddValue( Name => 'Foo' ); + $_->AddValue( Name => 'Bar' ); +} + +my $test_add_delete_cycle = sub { + my $cb = shift; + for (@custom_fields) { + ($status, $msg) = $ticket->AddCustomFieldValue( Field => $cb->($_) , Value => 'Foo' ); + ok( $status, "message: $msg"); + } + + # does it exist? + $cfvs = $ticket->CustomFieldValues; + is( $cfvs->Count, 3, "We found all three custom fields on our ticket" ); + for (@custom_fields) { + $cfvs = $ticket->CustomFieldValues( $_->id ); + is( $cfvs->Count, 1 , "we found one custom field when searching by id"); + + $cfvs = $ticket->CustomFieldValues( $_->Name ); + is( $cfvs->Count, 1 , " We found one custom field when searching by name for " . $_->Name); + is( $ticket->FirstCustomFieldValue( $_->id ), 'Foo' , "first value by id is foo"); + is( $ticket->FirstCustomFieldValue( $_->Name ), 'Foo' , "first value by name is foo"); + } + # because our CFs are SingleValue then new value addition should override + for (@custom_fields) { + ($status, $msg) = $ticket->AddCustomFieldValue( Field => $_ , Value => 'Bar' ); + ok( $status, "message: $msg"); + } + $cfvs = $ticket->CustomFieldValues; + is( $cfvs->Count, 3 ); + for (@custom_fields) { + $cfvs = $ticket->CustomFieldValues( $_->id ); + is( $cfvs->Count, 1 ); + + $cfvs = $ticket->CustomFieldValues( $_->Name ); + is( $cfvs->Count, 1 ); + is( $ticket->FirstCustomFieldValue( $_->id ), 'Bar' ); + is( $ticket->FirstCustomFieldValue( $_->Name ), 'Bar' ); + } + # delete it + for (@custom_fields ) { + ($status, $msg) = $ticket->DeleteCustomFieldValue( Field => $_ , Value => 'Bar' ); + ok( $status, "Deleted a custom field value 'Bar' for field ".$_->id.": $msg"); + } + $cfvs = $ticket->CustomFieldValues; + is( $cfvs->Count, 0, "The ticket (".$ticket->id.") no longer has any custom field values" ); + for (@custom_fields) { + $cfvs = $ticket->CustomFieldValues( $_->id ); + is( $cfvs->Count, 0, $ticket->id." has no values for cf ".$_->id ); + + $cfvs = $ticket->CustomFieldValues( $_->Name ); + is( $cfvs->Count, 0 , $ticket->id." has no values for cf '".$_->Name. "'" ); + is( $ticket->FirstCustomFieldValue( $_->id ), undef , "There is no first custom field value when loading by id" ); + is( $ticket->FirstCustomFieldValue( $_->Name ), undef, "There is no first custom field value when loading by Name" ); + } +}; + +# lets test cycle via CF id +$test_add_delete_cycle->( sub { return $_[0]->id } ); +# lets test cycle via CF object reference +$test_add_delete_cycle->( sub { return $_[0] } ); + +#SKIP: { +# skip "TODO: should we add CF values to objects via CF Name?", 48; +# names are not unique + # lets test cycle via CF Name +# $test_add_delete_cycle->( sub { return $_[0]->Name } ); +#} + + diff --git a/rt/lib/t/regression/10merge.t b/rt/lib/t/regression/10merge.t new file mode 100644 index 000000000..8bca9526a --- /dev/null +++ b/rt/lib/t/regression/10merge.t @@ -0,0 +1,72 @@ +#!/usr/bin/perl + +use warnings; +use strict; + + +# +# This test script validates that when merging two tickets, the comments from both tickets +# are integrated into the new ticket + +use Test::More tests => 13; +use RT; +RT::LoadConfig; +RT::Init; + +use_ok('RT::Ticket'); +use_ok('RT::Queue'); + +my $queue = RT::Queue->new($RT::SystemUser); +my ($id,$msg) = $queue->Create(Name => 'MergeTest-'.rand(25)); +ok ($id,$msg); + +my $t1 = RT::Ticket->new($RT::SystemUser); +my ($tid,$transid, $t1msg) =$t1->Create ( Queue => $queue->Name, Subject => 'Merge test. orig'); +ok ($tid, $t1msg); +($id, $msg) = $t1->Comment(Content => 'This is a Comment on the original'); +ok($id,$msg); + +my $txns = $t1->Transactions; +my $Comments = 0; +while (my $txn = $txns->Next) { +$Comments++ if ($txn->Type eq 'Comment'); +} +is($Comments,1, "our first ticket has only one Comment"); + +my $t2 = RT::Ticket->new($RT::SystemUser); +my ($t2id,$t2transid, $t2msg) =$t2->Create ( Queue => $queue->Name, Subject => 'Merge test. duplicate'); +ok ($t2id, $t2msg); + + + +($id, $msg) = $t2->Comment(Content => 'This is a commet on the duplicate'); +ok($id,$msg); + + +$txns = $t2->Transactions; + $Comments = 0; +while (my $txn = $txns->Next) { + $Comments++ if ($txn->Type eq 'Comment'); +} +is($Comments,1, "our second ticket has only one Comment"); + +($id, $msg) = $t1->Comment(Content => 'This is a second Comment on the original'); +ok($id,$msg); + +$txns = $t1->Transactions; +$Comments = 0; +while (my $txn = $txns->Next) { + $Comments++ if ($txn->Type eq 'Comment'); +} +is($Comments,2, "our first ticket now has two Comments"); + +($id,$msg) = $t2->MergeInto($t1->id); + +ok($id,$msg); +$txns = $t1->Transactions; +$Comments = 0; +while (my $txn = $txns->Next) { + $Comments++ if ($txn->Type eq 'Comment'); +} +is($Comments,3, "our first ticket now has three Comments - we merged safely"); + diff --git a/rt/lib/t/regression/11-template-insert.t b/rt/lib/t/regression/11-template-insert.t new file mode 100644 index 000000000..8681ce67d --- /dev/null +++ b/rt/lib/t/regression/11-template-insert.t @@ -0,0 +1,27 @@ +#!/usr/bin/perl + +use warnings; +use strict; + +use Test::More tests => 7; + +use RT; +RT::LoadConfig(); +RT::Init; + + +# This tiny little test script triggers an interaction bug between DBD::Oracle 1.16, SB 1.15 and RT 3.4 + +use_ok('RT::Template'); +my $template = RT::Template->new($RT::SystemUser); + +isa_ok($template, 'RT::Template'); +my ($val,$msg) = $template->Create(Queue => 1, + Name => 'InsertTest', + Content => 'This is template content'); +ok($val,$msg); +is($template->Name, 'InsertTest'); +is($template->Content, 'This is template content', "We created the object right"); +($val, $msg) = $template->SetContent( 'This is new template content'); +ok($val,$msg); +is($template->Content, 'This is new template content', "We managed to _Set_ the content"); diff --git a/rt/lib/t/regression/12-search.t b/rt/lib/t/regression/12-search.t new file mode 100644 index 000000000..9cc4aa441 --- /dev/null +++ b/rt/lib/t/regression/12-search.t @@ -0,0 +1,235 @@ +#!/opt/perl/bin/perl -w + +# tests relating to searching. Especially around custom fields, and +# corner cases. + +use strict; +use warnings; + +use Test::More tests => 35; +use_ok('RT'); +RT::LoadConfig(); +RT::Init(); + +# setup the queue + +my $q = RT::Queue->new($RT::SystemUser); +my $queue = 'SearchTests-'.$$; +$q->Create(Name => $queue); +ok ($q->id, "Created the queue"); + + +# and setup the CFs +# we believe the Type shouldn't matter. + +my $cf = RT::CustomField->new($RT::SystemUser); +$cf->Create(Name => 'SearchTest', Type => 'Freeform', MaxValues => 0, Queue => $q->id); +ok($cf->id, "Created the SearchTest CF"); +my $cflabel = "CustomField-".$cf->id; + +my $cf2 = RT::CustomField->new($RT::SystemUser); +$cf2->Create(Name => 'SearchTest2', Type => 'Freeform', MaxValues => 0, Queue => $q->id); +ok($cf2->id, "Created the SearchTest2 CF"); +my $cflabel2 = "CustomField-".$cf2->id; + +my $cf3 = RT::CustomField->new($RT::SystemUser); +$cf3->Create(Name => 'SearchTest3', Type => 'Freeform', MaxValues => 0, Queue => $q->id); +ok($cf3->id, "Created the SearchTest3 CF"); +my $cflabel3 = "CustomField-".$cf3->id; + + +# setup some tickets +# we'll need a small pile of them, to test various combinations and nulls. +# there's probably a way to think harder and do this with fewer + + +my $t1 = RT::Ticket->new($RT::SystemUser); +my ( $id, undef $msg ) = $t1->Create( + Queue => $q->id, + Subject => 'SearchTest1', + Requestor => ['search1@example.com'], + $cflabel => 'foo1', + $cflabel2 => 'bar1', + $cflabel3 => 'qux1', +); +ok( $id, $msg ); + + +my $t2 = RT::Ticket->new($RT::SystemUser); +( $id, undef, $msg ) = $t2->Create( + Queue => $q->id, + Subject => 'SearchTest2', + Requestor => ['search2@example.com'], +# $cflabel => 'foo2', + $cflabel2 => 'bar2', + $cflabel3 => 'qux2', +); +ok( $id, $msg ); + +my $t3 = RT::Ticket->new($RT::SystemUser); +( $id, undef, $msg ) = $t3->Create( + Queue => $q->id, + Subject => 'SearchTest3', + Requestor => ['search3@example.com'], + $cflabel => 'foo3', +# $cflabel2 => 'bar3', + $cflabel3 => 'qux3', +); +ok( $id, $msg ); + +my $t4 = RT::Ticket->new($RT::SystemUser); +( $id, undef, $msg ) = $t4->Create( + Queue => $q->id, + Subject => 'SearchTest4', + Requestor => ['search4@example.com'], + $cflabel => 'foo4', + $cflabel2 => 'bar4', +# $cflabel3 => 'qux4', +); +ok( $id, $msg ); + +my $t5 = RT::Ticket->new($RT::SystemUser); +( $id, undef, $msg ) = $t5->Create( + Queue => $q->id, +# Subject => 'SearchTest5', + Requestor => ['search5@example.com'], + $cflabel => 'foo5', + $cflabel2 => 'bar5', + $cflabel3 => 'qux5', +); +ok( $id, $msg ); + +my $t6 = RT::Ticket->new($RT::SystemUser); +( $id, undef, $msg ) = $t6->Create( + Queue => $q->id, + Subject => 'SearchTest6', +# Requestor => ['search6@example.com'], + $cflabel => 'foo6', + $cflabel2 => 'bar6', + $cflabel3 => 'qux6', +); +ok( $id, $msg ); + +my $t7 = RT::Ticket->new($RT::SystemUser); +( $id, undef, $msg ) = $t7->Create( + Queue => $q->id, + Subject => 'SearchTest7', + Requestor => ['search7@example.com'], +# $cflabel => 'foo7', +# $cflabel2 => 'bar7', + $cflabel3 => 'qux7', +); +ok( $id, $msg ); + +# we have tickets. start searching +my $tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue'"); +is($tix->Count, 7, "found all the tickets"); + + +# very simple searches. both CF and normal + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND CF.SearchTest = 'foo1'"); +is($tix->Count, 1, "matched identical subject"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND CF.SearchTest LIKE 'foo1'"); +is($tix->Count, 1, "matched LIKE subject"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND CF.SearchTest = 'foo'"); +is($tix->Count, 0, "IS a regexp match"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND CF.SearchTest LIKE 'foo'"); +is($tix->Count, 5, "matched LIKE subject"); + + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND CF.SearchTest IS NULL"); + + is($tix->Count, 2, "IS null CF"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Requestors LIKE 'search1'"); +is($tix->Count, 1, "LIKE requestor"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Requestors = 'search1\@example.com'"); +is($tix->Count, 1, "IS requestor"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Requestors LIKE 'search'"); +is($tix->Count, 6, "LIKE requestor"); + +TODO: { + + local $TODO = "Can't search for 'no requestor"; + $tix = RT::Tickets->new($RT::SystemUser); + $tix->FromSQL("Queue = '$queue' AND Requestors IS NULL"); + is($tix->Count, 1, "Search for no requestor"); + +}; + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Subject = 'SearchTest1'"); +is($tix->Count, 1, "IS subject"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Subject LIKE 'SearchTest1'"); +is($tix->Count, 1, "LIKE subject"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Subject = ''"); +is($tix->Count, 1, "found one ticket"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Subject LIKE 'SearchTest'"); +is($tix->Count, 6, "found two ticket"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND Subject LIKE 'qwerty'"); +is($tix->Count, 0, "found zero ticket"); + + + + +# various combinations + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("CF.SearchTest LIKE 'foo' AND CF.SearchTest2 LIKE 'bar1'"); +is($tix->Count, 1, "LIKE cf and LIKE cf"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("CF.SearchTest = 'foo1' AND CF.SearchTest2 = 'bar1'"); +is($tix->Count, 1, "is cf and is cf"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("CF.SearchTest = 'foo' AND CF.SearchTest2 LIKE 'bar1'"); +is($tix->Count, 0, "is cf and like cf"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("CF.SearchTest LIKE 'foo' AND CF.SearchTest2 LIKE 'bar' AND CF.SearchTest3 LIKE 'qux'"); +is($tix->Count, 3, "like cf and like cf and like cf"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("CF.SearchTest LIKE 'foo' AND CF.SearchTest2 LIKE 'bar' AND CF.SearchTest3 LIKE 'qux6'"); +is($tix->Count, 1, "like cf and like cf and is cf"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("CF.SearchTest LIKE 'foo' AND Subject LIKE 'SearchTest'"); +is($tix->Count, 4, "like cf and like subject"); + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("CF.SearchTest IS NULL AND CF.SearchTest2 = 'bar2'"); + + is($tix->Count, 1, "null cf and is cf"); + + +$tix = RT::Tickets->new($RT::SystemUser); +$tix->FromSQL("Queue = '$queue' AND CF.SearchTest IS NULL AND CF.SearchTest2 IS NULL"); + + is($tix->Count, 1, "null cf and null cf"); + + diff --git a/rt/lib/t/regression/13-attribute-tests.t b/rt/lib/t/regression/13-attribute-tests.t new file mode 100644 index 000000000..945bbcfb0 --- /dev/null +++ b/rt/lib/t/regression/13-attribute-tests.t @@ -0,0 +1,67 @@ + +use Test::More tests => 24; +use RT; +RT::LoadConfig(); +RT::Init(); + + +my $runid = rand(200); + +my $attribute = "squelch-$runid"; + +ok(require RT::Attributes); + +my $user = RT::User->new($RT::SystemUser); +ok (UNIVERSAL::isa($user, 'RT::User')); +my ($id,$msg) = $user->Create(Name => 'attrtest-'.$runid); +ok ($id, $msg); +ok($user->id, "Created a test user"); + +ok(1, $user->Attributes->BuildSelectQuery); +my $attr = $user->Attributes; + +ok(1, $attr->BuildSelectQuery); + + +ok (UNIVERSAL::isa($attr,'RT::Attributes'), 'got the attributes object'); + +($id, $msg) = $user->AddAttribute(Name => 'TestAttr', Content => 'The attribute has content'); +ok ($id, $msg); +is ($attr->Count,1, " One attr after adidng a first one"); +($id, $msg) = $attr->DeleteEntry(Name => $runid); +ok(!$id, "Deleted non-existant entry - $msg"); +is ($attr->Count,1, "1 attr after deleting an empty attr"); + +my @names = $attr->Names; +is ("@names", "TestAttr"); + + +($id, $msg) = $user->AddAttribute(Name => $runid, Content => "First"); + +is ($attr->Count,2, " Two attrs after adding an attribute named $runid"); +($id, $msg) = $user->AddAttribute(Name => $runid, Content => "Second"); +ok($id, $msg); + +is ($attr->Count,3, " Three attrs after adding a secondvalue to $runid"); +($id, $msg) = $attr->DeleteEntry(Name => $runid, Content => "First"); +ok($id, $msg); +is ($attr->Count,2); + +#$attr->_DoSearch(); +($id, $msg) = $attr->DeleteEntry(Name => $runid, Content => "Second"); +ok($id, $msg); +is ($attr->Count,1); + +#$attr->_DoSearch(); +ok(1, $attr->BuildSelectQuery); +($id, $msg) = $attr->DeleteEntry(Name => "moose"); +ok(!$id, "Deleted non-existant entry - $msg"); +is ($attr->Count,1); + +ok(1, $attr->BuildSelectQuery); +@names = $attr->Names; +is("@names", "TestAttr"); + + + +1; diff --git a/rt/lib/t/regression/14merge.t b/rt/lib/t/regression/14merge.t new file mode 100644 index 000000000..c9162510b --- /dev/null +++ b/rt/lib/t/regression/14merge.t @@ -0,0 +1,31 @@ + +use Test::More tests => '6'; +use RT; +RT::LoadConfig(); +RT::Init(); + +# when you try to merge duplicate links on postgres, eveyrything goes to hell due to referential integrity constraints. + + +my $t = RT::Ticket->new($RT::SystemUser); +$t->Create(Subject => 'Main', Queue => 'general'); + +ok ($t->id); +my $t2 = RT::Ticket->new($RT::SystemUser); +$t2->Create(Subject => 'Second', Queue => 'general'); +ok ($t2->id); + +my $t3 = RT::Ticket->new($RT::SystemUser); +$t3->Create(Subject => 'Third', Queue => 'general'); + +ok ($t3->id); + +my ($id,$val); +($id,$val) = $t->AddLink(Type => 'DependsOn', Target => $t3->id); +ok($id,$val); +($id,$val) = $t2->AddLink(Type => 'DependsOn', Target => $t3->id); +ok($id,$val); + + +($id,$val) = $t->MergeInto($t2->id); +ok($id,$val); diff --git a/rt/lib/t/regression/15cf_single_values_are_single.t b/rt/lib/t/regression/15cf_single_values_are_single.t new file mode 100644 index 000000000..dcfa2e5b3 --- /dev/null +++ b/rt/lib/t/regression/15cf_single_values_are_single.t @@ -0,0 +1,39 @@ +#!/usr/bin/perl +use warnings; +use strict; +use Test::More tests => 8; + +use RT; +RT::LoadConfig(); +RT::Init(); + + +my $q = RT::Queue->new($RT::SystemUser); +my ($id,$msg) =$q->Create(Name => "CF-Single-".$$); +ok($id,$msg); + +my $cf = RT::CustomField->new($RT::SystemUser); +($id,$msg) = $cf->Create(Name => 'Single-'.$$, Type => 'Select', MaxValues => '1', Queue => $q->id); +ok($id,$msg); + + +($id,$msg) =$cf->AddValue(Name => 'First'); +ok($id,$msg); + +($id,$msg) =$cf->AddValue(Name => 'Second'); +ok($id,$msg); + + +my $t = RT::Ticket->new($RT::SystemUser); +($id,undef,$msg) = $t->Create(Queue => $q->id, + Subject => 'CF Test'); + +ok($id,$msg); +is($t->CustomFieldValues($cf->id)->Count, 0, "No values yet"); +$t->AddCustomFieldValue(Field => $cf->id, Value => 'First'); +is($t->CustomFieldValues($cf->id)->Count, 1, "One now"); + +$t->AddCustomFieldValue(Field => $cf->id, Value => 'Second'); +is($t->CustomFieldValues($cf->id)->Count, 1, "Still one"); + +1; diff --git a/rt/lib/t/regression/16-transaction_cf_tests.t b/rt/lib/t/regression/16-transaction_cf_tests.t new file mode 100644 index 000000000..9e1e86ca4 --- /dev/null +++ b/rt/lib/t/regression/16-transaction_cf_tests.t @@ -0,0 +1,61 @@ +#!/usr/bin/perl + +use warnings; +use strict; +use Data::Dumper; +use Test::More qw/no_plan/; + +use_ok('RT'); +use_ok('RT::Transactions'); +RT::LoadConfig(); +RT::Init(); + +my $q = RT::Queue->new($RT::SystemUser); +my ($id,$msg) = $q->Create( Name => 'TxnCFTest'.$$); +ok($id,$msg); + +my $cf = RT::CustomField->new($RT::SystemUser); +($id,$msg) = $cf->Create(Name => 'Txnfreeform-'.$$, Type => 'Freeform', MaxValues => '0', LookupType => RT::Transaction->CustomFieldLookupType ); + +ok($id,$msg); + +($id,$msg) = $cf->AddToObject($q); + +ok($id,$msg); + + +my $ticket = RT::Ticket->new($RT::SystemUser); + +my $transid; +($id,$transid, $msg) = $ticket->Create(Queue => $q->id, + Subject => 'TxnCF test', + ); +ok($id,$msg); + +my $trans = RT::Transaction->new($RT::SystemUser); +$trans->Load($transid); + +is($trans->ObjectId,$id); +is ($trans->ObjectType, 'RT::Ticket'); +is ($trans->Type, 'Create'); +my $txncfs = $trans->CustomFields; +is ($txncfs->Count, 1, "We have one custom field"); +my $txn_cf = $txncfs->First; +is ($txn_cf->id, $cf->id, "It's the right custom field"); +my $values = $trans->CustomFieldValues($txn_cf->id); +is ($values->Count, 0, "It has no values"); + +# Old API +my %cf_updates = ( 'CustomField-'.$cf->id => 'Testing'); +$trans->UpdateCustomFields( ARGSRef => \%cf_updates); + + $values = $trans->CustomFieldValues($txn_cf->id); +is ($values->Count, 1, "It has one value"); + +# New API + +$trans->UpdateCustomFields( 'CustomField-'.$cf->id => 'Test two'); + $values = $trans->CustomFieldValues($txn_cf->id); +is ($values->Count, 2, "it has two values"); + +# TODO ok(0, "Should updating custom field values remove old values?"); diff --git a/rt/lib/t/regression/17multiple_deleg_revocation.t b/rt/lib/t/regression/17multiple_deleg_revocation.t new file mode 100644 index 000000000..1ed040406 --- /dev/null +++ b/rt/lib/t/regression/17multiple_deleg_revocation.t @@ -0,0 +1,135 @@ +#!/usr/bin/perl -w + +use Test::More qw(no_plan); + +use RT; + +ok( RT::LoadConfig, "Locating config files" ); +ok( RT::Init, "Basic initialization and DB connectivity" ); + +my ($u1, $g1, $pg1, $pg2, $ace, @groups, @users, @principals); +@groups = (\$g1, \$pg1, \$pg2); +@users = (\$u1); +@principals = (@groups, @users); + +my($ret, $msg); + +$u1 = RT::User->new($RT::SystemUser); +( $ret, $msg ) = $u1->LoadOrCreateByEmail('delegtest1@example.com'); +ok( $ret, "Load / Create test user 1: $msg" ); +$u1->SetPrivileged(1); + +$g1 = RT::Group->new($RT::SystemUser); +( $ret, $msg) = $g1->LoadUserDefinedGroup('dg1'); +unless ($ret) { + ( $ret, $msg ) = $g1->CreateUserDefinedGroup( Name => 'dg1' ); +} +$pg1 = RT::Group->new($RT::SystemUser); +( $ret, $msg ) = $pg1->LoadPersonalGroup( Name => 'dpg1', + User => $u1->PrincipalId ); +unless ($ret) { + ( $ret, $msg ) = $pg1->CreatePersonalGroup( Name => 'dpg1', + PrincipalId => $u1->PrincipalId ); +} +ok( $ret, "Load / Create test personal group 1: $msg" ); +$pg2 = RT::Group->new($RT::SystemUser); +( $ret, $msg ) = $pg2->LoadPersonalGroup( Name => 'dpg2', + User => $u1->PrincipalId ); +unless ($ret) { + ( $ret, $msg ) = $pg2->CreatePersonalGroup( Name => 'dpg2', + PrincipalId => $u1->PrincipalId ); +} +ok( $ret, "Load / Create test personal group 2: $msg" ); + +clear_acls_and_groups(); + +( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights' ); +ok( $ret, "Grant DelegateRights to u1: $msg" ); +( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'ShowConfigTab' ); +ok( $ret, "Grant ShowConfigTab to g1: $msg" ); +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); + +$ace = RT::ACE->new($u1); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'ShowConfigTab', + Object => $RT::System, + PrincipalType => 'Group', + PrincipalId => $g1->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg1: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg2: $msg" ); + +ok(( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System ) and + $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System )), + "Test personal groups have ShowConfigTab right after delegation" ); + +( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId ); +ok( $ret, "Delete test user 1 from g1: $msg" ); + +ok( not( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System )), + "Test personal group 1 lacks ShowConfigTab after user removed from g1" ); +ok( not( $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System )), + "Test personal group 2 lacks ShowConfigTab after user removed from g1" ); + +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg1: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg2: $msg" ); + +ok(( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System ) and + $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System )), + "Test personal groups have ShowConfigTab right after delegation" ); + +( $ret, $msg ) = $g1->PrincipalObj->RevokeRight( Right => 'ShowConfigTab' ); +ok( $ret, "Revoke ShowConfigTab from g1: $msg" ); + +ok( not( $pg1->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System )), + "Test personal group 1 lacks ShowConfigTab after user removed from g1" ); +ok( not( $pg2->PrincipalObj->HasRight( Right => 'ShowConfigTab', + Object => $RT::System )), + "Test personal group 2 lacks ShowConfigTab after user removed from g1" ); + + + +####### + +sub clear_acls_and_groups { + # Revoke all rights granted to our cast + my $acl = RT::ACL->new($RT::SystemUser); + foreach (@principals) { + $acl->LimitToPrincipal(Type => $$_->PrincipalObj->PrincipalType, + Id => $$_->PrincipalObj->Id); + } + while (my $ace = $acl->Next()) { + $ace->Delete(); + } + + # Remove all group memberships + my $members = RT::GroupMembers->new($RT::SystemUser); + foreach (@groups) { + $members->LimitToMembersOfGroup( $$_->PrincipalId ); + } + while (my $member = $members->Next()) { + $member->Delete(); + } + + $acl->RedoSearch(); + ok( $acl->Count() == 0, + "All principals have no rights after clearing ACLs" ); + $members->RedoSearch(); + ok( $members->Count() == 0, + "All groups have no members after clearing groups" ); +} diff --git a/rt/lib/t/regression/18stale_delegations_cleanup.t b/rt/lib/t/regression/18stale_delegations_cleanup.t new file mode 100644 index 000000000..84e666eee --- /dev/null +++ b/rt/lib/t/regression/18stale_delegations_cleanup.t @@ -0,0 +1,458 @@ +#!/usr/bin/perl -w + +# Regression test suite for http://rt3.fsck.com/Ticket/Display.html?id=6184 +# and related corner cases related to cleanup of delegated ACEs when +# the delegator loses the right to delegate. This causes complexities +# due to the fact that multiple ACEs can grant different delegation +# rights to a principal, and because DelegateRights and SuperUser can +# themselves be delegated. + +# The case where the "parent" delegated ACE is removed is handled in +# the embedded regression tests in lib/RT/ACE_Overlay.pm . + +use Test::More qw(no_plan); + +use RT; + +ok( RT::LoadConfig, "Locating config files" ); +ok( RT::Init, "Basic initialization and DB connectivity" ); + +my ($u1, $u2, $g1, $g2, $g3, $pg1, $pg2, $ace, @groups, @users, @principals); +@groups = (\$g1, \$g2, \$g3, \$pg1, \$pg2); +@users = (\$u1, \$u2); +@principals = (@groups, @users); + +my($ret, $msg); + +$u1 = RT::User->new($RT::SystemUser); +( $ret, $msg ) = $u1->LoadOrCreateByEmail('delegtest1@example.com'); +ok( $ret, "Load / Create test user 1: $msg" ); +$u1->SetPrivileged(1); +$u2 = RT::User->new($RT::SystemUser); +( $ret, $msg ) = $u2->LoadOrCreateByEmail('delegtest2@example.com'); +ok( $ret, "Load / Create test user 2: $msg" ); +$u2->SetPrivileged(1); +$g1 = RT::Group->new($RT::SystemUser); +( $ret, $msg) = $g1->LoadUserDefinedGroup('dg1'); +unless ($ret) { + ( $ret, $msg ) = $g1->CreateUserDefinedGroup( Name => 'dg1' ); +} +ok( $ret, "Load / Create test group 1: $msg" ); +$g2 = RT::Group->new($RT::SystemUser); +( $ret, $msg) = $g2->LoadUserDefinedGroup('dg2'); +unless ($ret) { + ( $ret, $msg ) = $g2->CreateUserDefinedGroup( Name => 'dg2' ); +} +ok( $ret, "Load / Create test group 2: $msg" ); +$g3 = RT::Group->new($RT::SystemUser); +( $ret, $msg) = $g3->LoadUserDefinedGroup('dg3'); +unless ($ret) { + ( $ret, $msg ) = $g3->CreateUserDefinedGroup( Name => 'dg3' ); +} +ok( $ret, "Load / Create test group 3: $msg" ); +$pg1 = RT::Group->new($RT::SystemUser); +( $ret, $msg ) = $pg1->LoadPersonalGroup( Name => 'dpg1', + User => $u1->PrincipalId ); +unless ($ret) { + ( $ret, $msg ) = $pg1->CreatePersonalGroup( Name => 'dpg1', + PrincipalId => $u1->PrincipalId ); +} +ok( $ret, "Load / Create test personal group 1: $msg" ); +$pg2 = RT::Group->new($RT::SystemUser); +( $ret, $msg ) = $pg2->LoadPersonalGroup( Name => 'dpg2', + User => $u2->PrincipalId ); +unless ($ret) { + ( $ret, $msg ) = $pg2->CreatePersonalGroup( Name => 'dpg2', + PrincipalId => $u2->PrincipalId ); +} +ok( $ret, "Load / Create test personal group 2: $msg" ); + + + +# Basic case: u has global DelegateRights through g1 and ShowConfigTab +# through g2; then u is removed from g1. + +clear_acls_and_groups(); + +( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights' ); +ok( $ret, "Grant DelegateRights to g1: $msg" ); +( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'ShowConfigTab' ); +ok( $ret, "Grant ShowConfigTab to g2: $msg" ); +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); +ok( + $u1->PrincipalObj->HasRight( + Right => 'DelegateRights', + Object => $RT::System + ), + "test user 1 has DelegateRights after joining g1" +); +( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g2: $msg" ); +ok( + $u1->PrincipalObj->HasRight( + Right => 'ShowConfigTab', + Object => $RT::System + ), + "test user 1 has ShowConfigTab after joining g2" +); + +$ace = RT::ACE->new($u1); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'ShowConfigTab', + Object => $RT::System, + PrincipalType => 'Group', + PrincipalId => $g2->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg1: $msg" ); +ok( + $pg1->PrincipalObj->HasRight( + Right => 'ShowConfigTab', + Object => $RT::System + ), + "Test personal group 1 has ShowConfigTab right after delegation" +); + +( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId ); +ok( $ret, "Delete test user 1 from g1: $msg" ); +ok( + not( + $pg1->PrincipalObj->HasRight( + Right => 'ShowConfigTab', + Object => $RT::System + ) + ), + "Test personal group 1 lacks ShowConfigTab right after user removed from g1" +); + +# Basic case: u has global DelegateRights through g1 and ShowConfigTab +# through g2; then DelegateRights revoked from g1. + +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg1: $msg" ); +( $ret, $msg ) = $g1->PrincipalObj->RevokeRight( Right => 'DelegateRights' ); +ok( $ret, "Revoke DelegateRights from g1: $msg" ); +ok( + not( + $pg1->PrincipalObj->HasRight( + Right => 'ShowConfigTab', + Object => $RT::System + ) + ), + "Test personal group 1 lacks ShowConfigTab right after DelegateRights revoked from g1" +); + + + +# Corner case - restricted delegation: u has DelegateRights on pg1 +# through g1 and AdminGroup on pg1 through g2; then DelegateRights +# revoked from g1. + +clear_acls_and_groups(); + +( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights', + Object => $pg1); +ok( $ret, "Grant DelegateRights on pg1 to g1: $msg" ); +( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'AdminGroup', + Object => $pg1); +ok( $ret, "Grant AdminGroup on pg1 to g2: $msg" ); +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); +( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g2: $msg" ); +ok( $u1->PrincipalObj->HasRight( + Right => 'DelegateRights', + Object => $pg1 ), + "test user 1 has DelegateRights on pg1 after joining g1" ); +ok( not( $u1->PrincipalObj->HasRight( + Right => 'DelegateRights', + Object => $RT::System )), + "Test personal group 1 lacks global DelegateRights after joining g1" ); +$ace = RT::ACE->new($u1); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'AdminGroup', + Object => $pg1, + PrincipalType => 'Group', + PrincipalId => $g2->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" ); +ok( $pg1->PrincipalObj->HasRight( + Right => 'AdminGroup', + Object => $pg1 ), + "Test personal group 1 has AdminGroup right on pg1 after delegation" ); +( $ret, $msg ) = $g1->PrincipalObj->RevokeRight ( Right => 'DelegateRights', + Object => $pg1 ); +ok( $ret, "Revoke DelegateRights on pg1 from g1: $msg" ); +ok( not( $pg1->PrincipalObj->HasRight( + Right => 'AdminGroup', + Object => $pg1 )), + "Test personal group 1 lacks AdminGroup right on pg1 after DelegateRights revoked from g1" ); +( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights', + Object => $pg1); + +# Corner case - restricted delegation: u has DelegateRights on pg1 +# through g1 and AdminGroup on pg1 through g2; then u removed from g1. + +ok( $ret, "Grant DelegateRights on pg1 to g1: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" ); +ok( $pg1->PrincipalObj->HasRight( + Right => 'AdminGroup', + Object => $pg1 ), + "Test personal group 1 has AdminGroup right on pg1 after delegation" ); +( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId ); +ok( $ret, "Delete test user 1 from g1: $msg" ); +ok( not( $pg1->PrincipalObj->HasRight( + Right => 'AdminGroup', + Object => $pg1 )), + "Test personal group 1 lacks AdminGroup right on pg1 after user removed from g1" ); + +clear_acls_and_groups(); + + + +# Corner case - multiple delegation rights: u has global +# DelegateRights directly and DelegateRights on pg1 through g1, and +# AdminGroup on pg1 through g2; then u removed from g1 (delegation +# should remain); then DelegateRights revoked from u (delegation +# should not remain). + +( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights', + Object => $pg1); +ok( $ret, "Grant DelegateRights on pg1 to g1: $msg" ); +( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'AdminGroup', + Object => $pg1); +ok( $ret, "Grant AdminGroup on pg1 to g2: $msg" ); +( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights', + Object => $RT::System); +ok( $ret, "Grant DelegateRights to user: $msg" ); +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); +( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g2: $msg" ); +$ace = RT::ACE->new($u1); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'AdminGroup', + Object => $pg1, + PrincipalType => 'Group', + PrincipalId => $g2->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" ); +( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId ); +ok( $ret, "Delete test user 1 from g1: $msg" ); +ok( $pg1->PrincipalObj->HasRight(Right => 'AdminGroup', + Object => $pg1), + "Test personal group 1 retains AdminGroup right on pg1 after user removed from g1" ); +( $ret, $msg ) = $u1->PrincipalObj->RevokeRight( Right => 'DelegateRights', + Object => $RT::System ); +ok( not ($pg1->PrincipalObj->HasRight(Right => 'AdminGroup', + Object => $pg1)), + "Test personal group 1 lacks AdminGroup right on pg1 after DelegateRights revoked"); + +# Corner case - multiple delegation rights and selectivity: u has +# DelegateRights globally and on g2 directly and DelegateRights on pg1 +# through g1, and AdminGroup on pg1 through g2; then global +# DelegateRights revoked from u (delegation should remain), +# DelegateRights on g2 revoked from u (delegation should remain), and +# u removed from g1 (delegation should not remain). + +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); +( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights', + Object => $RT::System); +ok( $ret, "Grant DelegateRights to user: $msg" ); +( $ret, $msg ) = $u1->PrincipalObj->GrantRight( Right => 'DelegateRights', + Object => $g2); +ok( $ret, "Grant DelegateRights on g2 to user: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate AdminGroup on pg1 to pg1: $msg" ); +( $ret, $msg ) = $u1->PrincipalObj->RevokeRight( Right => 'DelegateRights', + Object => $RT::System ); +ok( $pg1->PrincipalObj->HasRight(Right => 'AdminGroup', + Object => $pg1), + "Test personal group 1 retains AdminGroup right on pg1 after global DelegateRights revoked" ); +( $ret, $msg ) = $u1->PrincipalObj->RevokeRight( Right => 'DelegateRights', + Object => $g2 ); +ok( $pg1->PrincipalObj->HasRight(Right => 'AdminGroup', + Object => $pg1), + "Test personal group 1 retains AdminGroup right on pg1 after DelegateRights on g2 revoked" ); +( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId ); +ok( $ret, "Delete test user 1 from g1: $msg" ); +ok( not ($pg1->PrincipalObj->HasRight(Right => 'AdminGroup', + Object => $pg1)), + "Test personal group 1 lacks AdminGroup right on pg1 after user removed from g1"); + + + +# Corner case - indirect delegation rights: u has DelegateRights +# through g1 via g3, and ShowConfigTab via g2; then g3 removed from +# g1. + +clear_acls_and_groups(); + +( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights' ); +ok( $ret, "Grant DelegateRights to g1: $msg" ); +( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'ShowConfigTab' ); +ok( $ret, "Grant ShowConfigTab to g2: $msg" ); +( $ret, $msg ) = $g1->AddMember( $g3->PrincipalId ); +ok( $ret, "Add g3 to g1: $msg" ); +( $ret, $msg ) = $g3->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g3: $msg" ); +( $ret, $msg ) = $g2->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g2: $msg" ); + +$ace = RT::ACE->new($u1); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'ShowConfigTab', + Object => $RT::System, + PrincipalType => 'Group', + PrincipalId => $g2->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg1: $msg" ); + +( $ret, $msg ) = $g1->DeleteMember( $g3->PrincipalId ); +ok( $ret, "Delete g3 from g1: $msg" ); +ok( not ($pg1->PrincipalObj->HasRight(Right => 'ShowConfigTab', + Object => $RT::System)), + "Test personal group 1 lacks ShowConfigTab right after g3 removed from g1"); + +# Corner case - indirect delegation rights: u has DelegateRights +# through g1 via g3, and ShowConfigTab via g2; then DelegateRights +# revoked from g1. + +( $ret, $msg ) = $g1->AddMember( $g3->PrincipalId ); +ok( $ret, "Add g3 to g1: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg1: $msg" ); +( $ret, $msg ) = $g1->PrincipalObj->RevokeRight ( Right => 'DelegateRights' ); +ok( $ret, "Revoke DelegateRights from g1: $msg" ); + +ok( not ($pg1->PrincipalObj->HasRight(Right => 'ShowConfigTab', + Object => $RT::System)), + "Test personal group 1 lacks ShowConfigTab right after DelegateRights revoked from g1"); + + + +# Corner case - delegation of DelegateRights: u1 has DelegateRights +# via g1 and delegates DelegateRights to pg1; u2 has DelegateRights +# via pg1 and ShowConfigTab via g2; then u1 removed from g1. + +clear_acls_and_groups(); + +( $ret, $msg ) = $g1->PrincipalObj->GrantRight( Right => 'DelegateRights' ); +ok( $ret, "Grant DelegateRights to g1: $msg" ); +( $ret, $msg ) = $g2->PrincipalObj->GrantRight( Right => 'ShowConfigTab' ); +ok( $ret, "Grant ShowConfigTab to g2: $msg" ); +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add test user 1 to g1: $msg" ); +$ace = RT::ACE->new($u1); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'DelegateRights', + Object => $RT::System, + PrincipalType => 'Group', + PrincipalId => $g1->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate DelegateRights to pg1: $msg" ); + +( $ret, $msg ) = $pg1->AddMember( $u2->PrincipalId ); +ok( $ret, "Add test user 2 to pg1: $msg" ); +( $ret, $msg ) = $g2->AddMember( $u2->PrincipalId ); +ok( $ret, "Add test user 2 to g2: $msg" ); +$ace = RT::ACE->new($u2); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'ShowConfigTab', + Object => $RT::System, + PrincipalType => 'Group', + PrincipalId => $g2->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg2: $msg" ); + +ok( $pg2->PrincipalObj->HasRight(Right => 'ShowConfigTab', + Object => $RT::System), + "Test personal group 2 has ShowConfigTab right after delegation"); +( $ret, $msg ) = $g1->DeleteMember( $u1->PrincipalId ); +ok( $ret, "Delete u1 from g1: $msg" ); +ok( not ($pg2->PrincipalObj->HasRight(Right => 'ShowConfigTab', + Object => $RT::System)), + "Test personal group 2 lacks ShowConfigTab right after u1 removed from g1"); + +# Corner case - delegation of DelegateRights: u1 has DelegateRights +# via g1 and delegates DelegateRights to pg1; u2 has DelegateRights +# via pg1 and ShowConfigTab via g2; then DelegateRights revoked from +# g1. + +( $ret, $msg ) = $g1->AddMember( $u1->PrincipalId ); +ok( $ret, "Add u1 to g1: $msg" ); +$ace = RT::ACE->new($u1); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'DelegateRights', + Object => $RT::System, + PrincipalType => 'Group', + PrincipalId => $g1->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg1->PrincipalId ); +ok( $ret, "Delegate DelegateRights to pg1: $msg" ); +$ace = RT::ACE->new($u2); +( $ret, $msg ) = $ace->LoadByValues( + RightName => 'ShowConfigTab', + Object => $RT::System, + PrincipalType => 'Group', + PrincipalId => $g2->PrincipalId +); +ok( $ret, "Look up ACE to be delegated: $msg" ); +( $ret, $msg ) = $ace->Delegate( PrincipalId => $pg2->PrincipalId ); +ok( $ret, "Delegate ShowConfigTab to pg2: $msg" ); + +( $ret, $msg ) = $g1->PrincipalObj->RevokeRight ( Right => 'DelegateRights' ); +ok( $ret, "Revoke DelegateRights from g1: $msg" ); +ok( not ($pg2->PrincipalObj->HasRight(Right => 'ShowConfigTab', + Object => $RT::System)), + "Test personal group 2 lacks ShowConfigTab right after DelegateRights revoked from g1"); + + + + +####### + +sub clear_acls_and_groups { + # Revoke all rights granted to our cast + my $acl = RT::ACL->new($RT::SystemUser); + foreach (@principals) { + $acl->LimitToPrincipal(Type => $$_->PrincipalObj->PrincipalType, + Id => $$_->PrincipalObj->Id); + } + while (my $ace = $acl->Next()) { + $ace->Delete(); + } + + # Remove all group memberships + my $members = RT::GroupMembers->new($RT::SystemUser); + foreach (@groups) { + $members->LimitToMembersOfGroup( $$_->PrincipalId ); + } + while (my $member = $members->Next()) { + $member->Delete(); + } + + $acl->RedoSearch(); + ok( $acl->Count() == 0, + "All principals have no rights after clearing ACLs" ); + $members->RedoSearch(); + ok( $members->Count() == 0, + "All groups have no members after clearing groups" ); +} diff --git a/rt/lib/t/regression/19-rtname.t b/rt/lib/t/regression/19-rtname.t new file mode 100644 index 000000000..b654df2bd --- /dev/null +++ b/rt/lib/t/regression/19-rtname.t @@ -0,0 +1,38 @@ +#!/usr/bin/perl +use strict; +use warnings; +use Test::More qw/no_plan/; + +use_ok("RT"); + +RT::LoadConfig(); +RT::Init(); + +use RT::Interface::Email; + +# normal use case, regexp set to rtname +$RT::rtname = "site"; +$RT::EmailSubjectTagRegex = qr/$RT::rtname/ ; +$RT::rtname = undef; +is(RT::Interface::Email::ParseTicketId("[site #123] test"), 123); +is(RT::Interface::Email::ParseTicketId("[othersite #123] test"), undef); + +# oops usecase, where the regexp is scragged +$RT::rtname = "site"; +$RT::EmailSubjectTagRegex = undef; +is(RT::Interface::Email::ParseTicketId("[site #123] test"), 123); +is(RT::Interface::Email::ParseTicketId("[othersite #123] test"), undef); + +# set to a simple regexp. NOTE: we no longer match "site" +$RT::rtname = "site"; +$RT::EmailSubjectTagRegex = qr/newsite/; +is(RT::Interface::Email::ParseTicketId("[site #123] test"), undef); +is(RT::Interface::Email::ParseTicketId("[newsite #123] test"), 123); + +# set to a more complex regexp +$RT::rtname = "site"; +$RT::EmailSubjectTagRegex = qr/newsite||site/; +is(RT::Interface::Email::ParseTicketId("[site #123] test"), 123); +is(RT::Interface::Email::ParseTicketId("[newsite #123] test"), 123); +is(RT::Interface::Email::ParseTicketId("[othersite #123] test"), undef); + diff --git a/rt/lib/t/regression/20savedsearch.t b/rt/lib/t/regression/20savedsearch.t new file mode 100644 index 000000000..f4439f94e --- /dev/null +++ b/rt/lib/t/regression/20savedsearch.t @@ -0,0 +1,180 @@ +use RT; +use Test::More tests => 26; +use RT::User; +use RT::Group; +use RT::Ticket; +use RT::Queue; + +use_ok(RT::SavedSearch); +use_ok(RT::SavedSearches); + +RT::LoadConfig(); +RT::Init(); + +# Set up some infrastructure. These calls are tested elsewhere. + +my $searchuser = RT::User->new($RT::SystemUser); +my ($ret, $msg) = $searchuser->Create(Name => 'searchuser'.$$, + Privileged => 1, + EmailAddress => "searchuser\@p$$.example.com", + RealName => 'Search user'); +ok($ret, "created searchuser: $msg"); +$searchuser->PrincipalObj->GrantRight(Right => 'LoadSavedSearch'); +$searchuser->PrincipalObj->GrantRight(Right => 'CreateSavedSearch'); +$searchuser->PrincipalObj->GrantRight(Right => 'ModifySelf'); + +# This is the group whose searches searchuser should be able to see. +my $ingroup = RT::Group->new($RT::SystemUser); +$ingroup->CreateUserDefinedGroup(Name => 'searchgroup1'.$$); +$ingroup->AddMember($searchuser->Id); +$searchuser->PrincipalObj->GrantRight(Right => 'EditSavedSearches', + Object => $ingroup); +$searchuser->PrincipalObj->GrantRight(Right => 'ShowSavedSearches', + Object => $ingroup); + +# This is the group whose searches searchuser should not be able to see. +my $outgroup = RT::Group->new($RT::SystemUser); +$outgroup->CreateUserDefinedGroup(Name => 'searchgroup2'.$$); +$outgroup->AddMember($RT::SystemUser->Id); + +my $queue = RT::Queue->new($RT::SystemUser); +$queue->Create(Name => 'SearchQueue'.$$); +$searchuser->PrincipalObj->GrantRight(Right => 'SeeQueue', Object => $queue); +$searchuser->PrincipalObj->GrantRight(Right => 'ShowTicket', Object => $queue); +$searchuser->PrincipalObj->GrantRight(Right => 'OwnTicket', Object => $queue); + + +my $ticket = RT::Ticket->new($RT::SystemUser); +$ticket->Create(Queue => $queue->Id, + Requestor => [ $searchuser->Name ], + Owner => $searchuser, + Subject => 'saved search test'); + + +# Now start the search madness. +my $curruser = RT::CurrentUser->new($searchuser); +my $format = '\' <b><a href="/Ticket/Display.html?id=__id__">__id__</a></b>/TITLE:#\', +\'<b><a href="/Ticket/Display.html?id=__id__">__Subject__</a></b>/TITLE:Subject\', +\'__Status__\', +\'__QueueName__\', +\'__OwnerName__\', +\'__Priority__\', +\'__NEWLINE__\', +\'\', +\'<small>__Requestors__</small>\', +\'<small>__CreatedRelative__</small>\', +\'<small>__ToldRelative__</small>\', +\'<small>__LastUpdatedRelative__</small>\', +\'<small>__TimeLeft__</small>\''; + +my ($ret, $msg); +my $mysearch = RT::SavedSearch->new($curruser); +($ret, $msg) = $mysearch->Save(Privacy => 'RT::User-' . $searchuser->Id, + Type => 'Ticket', + Name => 'owned by me', + SearchParams => {'Format' => $format, + 'Query' => "Owner = '" + . $searchuser->Name + . "'"}); +ok($ret, "mysearch was created"); + + +my $groupsearch = RT::SavedSearch->new($curruser); +($ret, $msg) = $groupsearch->Save(Privacy => 'RT::Group-' . $ingroup->Id, + Type => 'Ticket', + Name => 'search queue', + SearchParams => {'Format' => $format, + 'Query' => "Queue = '" + . $queue->Name . "'"}); +ok($ret, "groupsearch was created"); + +my $othersearch = RT::SavedSearch->new($curruser); +($ret, $msg) = $othersearch->Save(Privacy => 'RT::Group-' . $outgroup->Id, + Type => 'Ticket', + Name => 'searchuser requested', + SearchParams => {'Format' => $format, + 'Query' => + "Requestor.Name LIKE 'search'"}); +ok(!$ret, "othersearch NOT created"); +like($msg, qr/Failed to load object for/, "...for the right reason"); + +$othersearch = RT::SavedSearch->new($RT::SystemUser); +($ret, $msg) = $othersearch->Save(Privacy => 'RT::Group-' . $outgroup->Id, + Type => 'Ticket', + Name => 'searchuser requested', + SearchParams => {'Format' => $format, + 'Query' => + "Requestor.Name LIKE 'search'"}); +ok($ret, "othersearch created by systemuser"); + +# Now try to load some searches. + +# This should work. +my $loadedsearch1 = RT::SavedSearch->new($curruser); +$loadedsearch1->Load('RT::User-'.$curruser->Id, $mysearch->Id); +is($loadedsearch1->Id, $mysearch->Id, "Loaded mysearch"); +like($loadedsearch1->GetParameter('Query'), qr/Owner/, + "Retrieved query of mysearch"); +# Check through the other accessor methods. +is($loadedsearch1->Privacy, 'RT::User-' . $curruser->Id, + "Privacy of mysearch correct"); +is($loadedsearch1->Name, 'owned by me', "Name of mysearch correct"); +is($loadedsearch1->Type, 'Ticket', "Type of mysearch correct"); + +# See if it can be used to search for tickets. +my $tickets = RT::Tickets->new($curruser); +$tickets->FromSQL($loadedsearch1->GetParameter('Query')); +is($tickets->Count, 1, "Found a ticket"); + +# This should fail -- wrong object. +# my $loadedsearch2 = RT::SavedSearch->new($curruser); +# $loadedsearch2->Load('RT::User-'.$curruser->Id, $groupsearch->Id); +# isnt($loadedsearch2->Id, $othersearch->Id, "Didn't load groupsearch as mine"); +# ...but this should succeed. +my $loadedsearch3 = RT::SavedSearch->new($curruser); +$loadedsearch3->Load('RT::Group-'.$ingroup->Id, $groupsearch->Id); +is($loadedsearch3->Id, $groupsearch->Id, "Loaded groupsearch"); +like($loadedsearch3->GetParameter('Query'), qr/Queue/, + "Retrieved query of groupsearch"); +# Can it get tickets? +$tickets = RT::Tickets->new($curruser); +$tickets->FromSQL($loadedsearch3->GetParameter('Query')); +is($tickets->Count, 1, "Found a ticket"); + +# This should fail -- no permission. +my $loadedsearch4 = RT::SavedSearch->new($curruser); +$loadedsearch4->Load($othersearch->Privacy, $othersearch->Id); +isnt($loadedsearch4->Id, $othersearch->Id, "Did not load othersearch"); + +# Try to update an existing search. +$loadedsearch1->Update( SearchParams => {'Format' => $format, + 'Query' => "Queue = '" . $queue->Name . "'" } ); +like($loadedsearch1->GetParameter('Query'), qr/Queue/, + "Updated mysearch parameter"); +is($loadedsearch1->Type, 'Ticket', "mysearch is still for tickets"); +is($loadedsearch1->Privacy, 'RT::User-'.$curruser->Id, + "mysearch still belongs to searchuser"); +like($mysearch->GetParameter('Query'), qr/Queue/, "other mysearch object updated"); + + +## Right ho. Test the pseudo-collection object. + +my $genericsearch = RT::SavedSearch->new($curruser); +$genericsearch->Save(Name => 'generic search', + Type => 'all', + SearchParams => {'Query' => "Queue = 'General'"}); + +my $ticketsearches = RT::SavedSearches->new($curruser); +$ticketsearches->LimitToPrivacy('RT::User-'.$curruser->Id, 'Ticket'); +is($ticketsearches->Count, 1, "Found searchuser's ticket searches"); + +my $allsearches = RT::SavedSearches->new($curruser); +$allsearches->LimitToPrivacy('RT::User-'.$curruser->Id); +is($allsearches->Count, 2, "Found all searchuser's searches"); + +# Delete a search. +($ret, $msg) = $genericsearch->Delete; +ok($ret, "Deleted genericsearch"); +$allsearches->LimitToPrivacy('RT::User-'.$curruser->Id); +is($allsearches->Count, 1, "Found all searchuser's searches after deletion"); + diff --git a/rt/lib/t/regression/21query-builder.t b/rt/lib/t/regression/21query-builder.t new file mode 100644 index 000000000..be04599bc --- /dev/null +++ b/rt/lib/t/regression/21query-builder.t @@ -0,0 +1,204 @@ +#!/usr/bin/perl + +use strict; +use Test::More tests => 31; +use Test::WWW::Mechanize; +use HTTP::Request::Common; +use HTTP::Cookies; +use LWP; +use Encode; + +my $cookie_jar = HTTP::Cookies->new; +my $agent = Test::WWW::Mechanize->new(); + +# give the agent a place to stash the cookies + +$agent->cookie_jar($cookie_jar); + +use RT; +RT::LoadConfig; + +# get the top page +my $url = $RT::WebURL; +$agent->get($url); + +is ($agent->{'status'}, 200, "Loaded a page"); + + +# {{{ test a login + +# follow the link marked "Login" + +ok($agent->{form}->find_input('user')); + +ok($agent->{form}->find_input('pass')); +ok ($agent->{'content'} =~ /username:/i); +$agent->field( 'user' => 'root' ); +$agent->field( 'pass' => 'password' ); +# the field isn't named, so we have to click link 0 +$agent->click(0); +is($agent->{'status'}, 200, "Fetched the page ok"); +ok( $agent->{'content'} =~ /Logout/i, "Found a logout link"); + +# }}} + +# {{{ Query Builder tests + +my $response = $agent->get($url."Search/Build.html"); +ok( $response->is_success, "Fetched " . $url."Search/Build.html" ); + +# Adding items + +# set the first value +ok($agent->form_name('BuildQuery'), "found the form once"); +$agent->field("ActorField", "Owner"); +$agent->field("ActorOp", "="); +$agent->field("ValueOfActor", "Nobody"); +$agent->submit(); + +# set the next value +ok($agent->form_name('BuildQuery'), "found the form again"); +$agent->field("QueueOp", "!="); +$agent->field("ValueOfQueue", "Regression"); +$agent->submit(); + +ok($agent->form_name('BuildQuery'), "found the form a third time"); + +sub getQueryFromForm { + # This pulls out the "hidden input" query from the page + my $q = $agent->current_form->find_input("Query")->value; + $q =~ s/^\s+//g; + $q =~ s/\s+$//g; + $q =~ s/\s+/ /g; + return $q; +} + +is (getQueryFromForm, "Owner = 'Nobody' AND Queue != 'Regression'"); + +# We're going to delete the owner + +$agent->select("clauses", ["0"] ); + +$agent->click("DeleteClause"); + +ok($agent->form_name('BuildQuery'), "found the form a fourth time"); + +is (getQueryFromForm, "Queue != 'Regression'"); + +$agent->field("AndOr", "OR"); + +$agent->select("idOp", ">"); + +$agent->field("ValueOfid" => "1234"); + +$agent->click("AddClause"); + +ok($agent->form_name('BuildQuery'), "found the form again"); +TODO: { + local $TODO = "query builder incorrectly quotes numbers"; + is(getQueryFromForm, "Queue != 'Regression' OR id > 1234", "added something as OR, and number not quoted"); +} + +sub selectedClauses { + my @clauses = grep { defined } map { $_->value } $agent->current_form->find_input("clauses"); + return [ @clauses ]; +} + + +is_deeply(selectedClauses, ["1"], 'the id that we just entered is still selected'); + +# Move the second one up a level +$agent->click("Up"); + +ok($agent->form_name('BuildQuery'), "found the form again"); +is(getQueryFromForm, "id > 1234 OR Queue != 'Regression'", "moved up one"); + +is_deeply(selectedClauses, ["0"], 'the one we moved up is selected'); + +$agent->click("Right"); + +ok($agent->form_name('BuildQuery'), "found the form again"); +is(getQueryFromForm, "Queue != 'Regression' OR ( id > 1234 )", "moved over to the right (and down)"); +is_deeply(selectedClauses, ["2"], 'the one we moved right is selected'); + +$agent->select("clauses", ["1"]); + +$agent->click("Up"); + +ok($agent->form_name('BuildQuery'), "found the form again"); +TODO: { + local $TODO = "query builder incorrectly changes OR to AND"; + is(getQueryFromForm, "( id > 1234 ) OR Queue != 'Regression'", "moved up"); +} + +$agent->select("clauses", ["0"]); # this is a null clause + +$agent->click("Up"); + +ok($agent->form_name('BuildQuery'), "found the form again"); + +$agent->content_like(qr/error: can\S+t move up/, "i shouldn't have been able to hit up"); + +$agent->click("Left"); + +ok($agent->form_name('BuildQuery'), "found the form again"); + +$agent->content_like(qr/error: can\S+t move left/, "i shouldn't have been able to hit left"); + +$agent->select("clauses", ["1"]); +$agent->select("ValueOfStatus" => "stalled"); + +$agent->submit; +ok($agent->form_name('BuildQuery'), "found the form again"); +is_deeply(selectedClauses, ["2"], 'the one we added is selected'); +TODO: { + local $TODO = "query builder incorrectly changes OR to AND"; + is(getQueryFromForm, "( id > 1234 AND Status = 'stalled' ) OR Queue != 'Regression'", "added new one"); +} + + + +# - new items go one level down +# - add items at currently selected level +# - if nothing is selected, add at end, one level down +# +# move left +# - error if nothing selected +# - same item should be selected after move +# - can't move left if you're at the top level +# +# move right +# - error if nothing selected +# - same item should be selected after move +# - can always move right (no max depth...should there be?) +# +# move up +# - error if nothing selected +# - same item should be selected after move +# - can't move up if you're first in the list +# +# move down +# - error if nothing selected +# - same item should be selected after move +# - can't move down if you're last in the list +# +# toggle +# - error if nothing selected +# - change all aggregators in the grouping +# - don't change any others +# +# delete +# - error if nothing selected +# - delete currently selected item +# - delete all children of a grouping +# - if delete leaves a node with no children, delete that, too +# - what should be selected? +# +# Clear +# - clears entire query +# - clears it from the session, too + +# }}} + + +1; diff --git a/rt/lib/t/regression/22search_tix_by_txn.t b/rt/lib/t/regression/22search_tix_by_txn.t new file mode 100644 index 000000000..54dad9860 --- /dev/null +++ b/rt/lib/t/regression/22search_tix_by_txn.t @@ -0,0 +1,32 @@ +#use Test::More tests => 26; +use Test::More qw/no_plan/; + +use RT; +RT::LoadConfig(); +RT::Init(); + +my $SUBJECT = "Search test - ".$$; + +use_ok('RT::Tickets'); +my $tix = RT::Tickets->new($RT::SystemUser); +can_ok($tix, 'FromSQL'); +$tix->FromSQL('Updated = "2005-08-05" AND Subject = "$SUBJECT"'); + +ok(! $tix->Count, "Searching for tickets updated on a random date finds nothing" . $tix->Count); + +my $ticket = RT::Ticket->new($RT::SystemUser); +$ticket->Create(Queue => 'General', Subject => $SUBJECT); +ok ($ticket->id, "We created a ticket"); +my ($id, $txnid, $txnobj) = $ticket->Comment( Content => 'A comment that happend on 2004-01-01'); + +isa_ok($txnobj, 'RT::Transaction'); + +ok($txnobj->CreatedObj->ISO); +my ( $sid,$smsg) = $txnobj->__Set(Field => 'Created', Value => '2005-08-05 20:00:56'); +ok($sid,$smsg); +is($txnobj->Created,'2005-08-05 20:00:56'); +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; diff --git a/rt/lib/t/02regression.t.in b/rt/lib/t/setup_regression.t index 51cd7e378..36f809b65 100644 --- a/rt/lib/t/02regression.t.in +++ b/rt/lib/t/setup_regression.t @@ -1,8 +1,7 @@ -#!@PERL@ +#!/usr/bin/perl use Test::More qw(no_plan); -use lib "@RT_LIB_PATH@"; use RT; ok(RT::LoadConfig); ok(RT::Init, "Basic initialization and DB connectivity"); @@ -33,12 +32,3 @@ is($q2->CorrespondAddress, 'correspond@a'); is($q2->CommentAddress, 'comment@a'); -use File::Find; -File::Find::find({wanted => \&wanted_autogen}, 'lib/t/autogen'); -sub wanted_autogen { /^autogen.*\.t\z/s && require $_; } - -File::Find::find({wanted => \&wanted_regression}, 'lib/t/regression'); -sub wanted_regression { /^*\.t\z/s && require $_; } - -require "lib/t/03web.pl"; -require "lib/t/04_send_email.pl"; diff --git a/rt/m4/rt_layout.m4 b/rt/m4/rt_layout.m4 index 393b32175..c92a108ca 100644 --- a/rt/m4/rt_layout.m4 +++ b/rt/m4/rt_layout.m4 @@ -21,14 +21,15 @@ AC_DEFUN([RT_LAYOUT],[ pldconf=./config.pld $PERL -0777 -p -e "\$layout = '$2';" -e ' s/.*<Layout\s+$layout>//gims; - s/\<\/Layout\>.*//s; - s/^#.*$//m; + s/<\/Layout>.*//s; + s/^#.*$//gm; s/^\s+//gim; s/\s+$/\n/gim; s/\+$/\/rt3/gim; # m4 will not let us just use $1, we need @S|@1 - s/^\s*((?:bin|sbin|libexec|data|sysconf|sharedstate|localstate|lib|include|oldinclude|info|man)dir)\s*:\s*(.*)$/@S|@1=@S|@2/gim; - s/^\s*(.*?)\s*:\s*(.*)$/\(test "x\@S|@@S|@1" = "xNONE" || test "x\@S|@@S|@1" = "x") && @S|@1=@S|@2/gim; +# s/^((?:bin|sbin|libexec|data|sysconf|sharedstate|localstate|lib|include|oldinclude|info|man)dir)\s*:\s*(.*)$/@S|@1=@S|@2/gim; + # uh, should be [:=], but m4 apparently substitutes something... + s/^(.*?)\s*(?::|=)\s*(.*)$/\(test "x\@S|@@S|@1" = "xNONE" || test "x\@S|@@S|@1" = "x") && @S|@1=@S|@2/gim; ' < $1 > $pldconf if test -s $pldconf; then diff --git a/rt/sbin/extract-message-catalog b/rt/sbin/extract-message-catalog index af7b2c733..3552afb81 100644 --- a/rt/sbin/extract-message-catalog +++ b/rt/sbin/extract-message-catalog @@ -1,9 +1,15 @@ #!/usr/bin/perl -w -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,14 +21,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} # Portions Copyright 2002 Autrijus Tang <autrijus@autrijus.org> use strict; @@ -41,7 +62,7 @@ $DEBUG = 1; $FILECAT = {}; # extract all strings and stuff them into $FILECAT -File::Find::find( { wanted => \&extract_strings_from_code, follow => 0 }, '.' ); +File::Find::find( { wanted => \&extract_strings_from_code, follow => 1 }, '.' ); # ensure proper escaping and [_1] => %1 transformation foreach my $str ( sort keys %{$FILECAT} ) { @@ -77,7 +98,7 @@ sub extract_strings_from_code { local $/; return if ( -d $_ ); - return if ( $File::Find::dir =~ 'lib/blib|lib/t/autogen|var|m4|local' ); + return if ( $File::Find::dir =~ 'lib/blib|lib/t/autogen|var|m4|local|\.svn' ); return if ( /\.po$|\.bak$|~|,D|,B$|extract-message-catalog$/ ); return if ( /^[\.#]/ ); return if ( -f "$_.in" ); @@ -174,6 +195,7 @@ sub update { while (@lines) { my $msghdr = ""; $msghdr .= shift @lines while ( $lines[0] && $lines[0] !~ /^msgid/ ); + my $msgid = shift @lines; my $msgstr = ""; $msgstr .= shift @lines while ( $lines[0] && $lines[0] =~ /^(msgstr|")/ ); @@ -182,8 +204,8 @@ sub update { chomp $msgid; chomp $msgstr; - $msgid =~ s/^msgid "(.*)"$/$1/ or warn $msgid; - $msgstr =~ s/^msgstr "(.*)"$/$1/ms or warn $msgstr; + $msgid =~ s/^msgid "(.*)"\s*?$/$1/ms or warn "$msgid in $file"; + $msgstr =~ s/^msgstr "(.*)"\s*?$/$1/ms or warn "$msgstr in $file"; $Lexicon{$msgid} = $msgstr; $Header{$msgid} = $msghdr; @@ -208,6 +230,10 @@ sub update { my %seen; $out .= $Header{$_} if exists $Header{$_}; + + + + next if (!$f && $_ && !$Lexicon{$_}); if ( $f && $f !~ /^\s+$/ ) { $out .= "#: $f\n"; diff --git a/rt/sbin/extract_pod_tests b/rt/sbin/extract_pod_tests index ed01c7dc2..4d9d7bd6c 100644 --- a/rt/sbin/extract_pod_tests +++ b/rt/sbin/extract_pod_tests @@ -1,9 +1,15 @@ #!/usr/bin/perl -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,14 +21,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} use strict; use vars qw($VERSION); $VERSION = '0.06'; @@ -100,7 +121,14 @@ else { } +print $outfh <<EOF; + +use Test::More qw/no_plan/; +use RT; +RT::LoadConfig(); +RT::Init(); +EOF foreach my $test (@tests, @examples) { print $outfh "$test\n"; } diff --git a/rt/sbin/factory b/rt/sbin/factory index 8abb1922f..743d8b90e 100644 --- a/rt/sbin/factory +++ b/rt/sbin/factory @@ -1,9 +1,15 @@ -#!/usr/bin/perl -# BEGIN LICENSE BLOCK +#!/usr/bin/perl -w +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,14 +21,30 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +use strict; use DBI; my $database = shift; @@ -38,11 +60,17 @@ my $password = ''; my $LicenseBlock = << '.'; -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# (Except where explicitly superseded by other copyright notices) # -# (Except where explictly superceded 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 @@ -54,13 +82,29 @@ my $LicenseBlock = << '.'; # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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: # -# END LICENSE BLOCK +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} . my $Attribution = << '.'; @@ -83,7 +127,17 @@ my @tables = $dbh->tables(); my ( %tablemap, $typemap, %modulemap ); foreach my $table (@tables) { + $table =~ s/\`//g; next if ($table eq 'sessions'); + $table = ucfirst($table); + $table =~ s/field/Field/; + $table =~ s/group/Group/; + $table =~ s/custom/Custom/; + $table =~ s/member/Member/; + $table =~ s/Scripaction/ScripAction/g; + $table =~ s/condition/Condition/g; + $table =~ s/value/Value/; + $table =~ s/Acl/ACL/g; $tablemap{$table} = $table; $modulemap{$table} = $table; if ( $table =~ /^(.*)s$/ ) { @@ -94,6 +148,7 @@ foreach my $table (@tables) { $tablemap{'CreatedBy'} = 'User'; $tablemap{'UpdatedBy'} = 'User'; +my %typemap; $typemap{'id'} = 'ro'; $typemap{'Creator'} = 'auto'; $typemap{'Created'} = 'auto'; @@ -130,7 +185,27 @@ foreach my $table (@tables) { my $ClassAccessible = ""; my $FieldsPod = ""; my $CreatePod = ""; + my $RecordInit = ""; my %fields; + + + my $introspection = $dbh->prepare("SELECT * from $table where id is null"); + $introspection->execute(); + my @names =@{ $introspection->{'NAME'}}; + my @types = @{$introspection->{'TYPE'}}; + my @is_blob = @{$introspection->{'mysql_is_blob'}}; + my @is_num = @{$introspection->{'mysql_is_num'}}; + + my %blobness = (); + my %sqltypes = (); + my %numeric = (); + foreach my $name (@names) { + $sqltypes{$name} = shift @types; + $blobness{$name} = (shift @is_blob || "0"); + $numeric{$name} = (shift @is_num || "0"); + } + + my $sth = $dbh->prepare("DESCRIBE $table"); $sth->execute; @@ -138,10 +213,16 @@ foreach my $table (@tables) { my $field = $row->{'Field'}; my $type = $row->{'Type'}; my $default = $row->{'Default'}; + my $length = 0; + if ($type =~ /^(?:.*?)\((\d+)\)$/) { + $length = $1; + } $fields{$field} = 1; #generate the 'accessible' datastructure + no warnings 'uninitialized'; + if ( $typemap{$field} eq 'auto' ) { $ClassAccessible .= " $field => {read => 1, auto => 1,"; @@ -155,7 +236,7 @@ foreach my $table (@tables) { {read => 1, write => 1,"; } - + $ClassAccessible .= " sql_type => $sqltypes{$field}, length => $length, is_blob => $blobness{$field}, is_numeric => $numeric{$field}, "; $ClassAccessible .= " type => '$type', default => '$default'},\n"; #generate pod for the accessible fields @@ -167,7 +248,7 @@ Returns the current value of $field. "; - unless ( $typemap{$field} eq 'auto' || $typemap{$field} eq 'ro' ) { + unless ( exists $typemap{$field} && ( $typemap{$field} eq 'auto' || $typemap{$field} eq 'ro' )) { $FieldsPod .= " =head2 Set$field VALUE @@ -222,7 +303,7 @@ sub ${field}Obj { } - $Create = " + my $Create = " sub Create { my \$self = shift; my \%args = ( @@ -274,10 +355,15 @@ sub _Init { $CollectionClass .= " - # By default, order by name - \$self->OrderBy( ALIAS => 'main', - FIELD => 'SortOrder', - ORDER => 'ASC'); + # By default, order by SortOrder + \$self->OrderByCols( + { ALIAS => 'main', + FIELD => 'SortOrder', + ORDER => 'ASC' }, + { ALIAS => 'main', + FIELD => 'id', + ORDER => 'ASC' }, + ); "; } $CollectionClass .= " @@ -347,7 +433,7 @@ $Create $FieldsPod -sub _ClassAccessible { +sub _CoreAccessible { { $ClassAccessible @@ -365,7 +451,7 @@ $ClassAccessible open( COL, ">$CollectionClassPath" ); print COL $CollectionClass; - close($COL); + close(COL); } @@ -406,7 +492,7 @@ _Vendor is for 3rd-party vendor add-ons, while _Local is for site-local customiz These overlay files can contain new subs or subs to replace existing subs in this module. -If you'll be working with perl 5.6.0 or greater, each of these files should begin with the line +Each of these files should begin with the line no warnings qw(redefine); diff --git a/rt/sbin/license_tag b/rt/sbin/license_tag index 33da2e026..906d34924 100644 --- a/rt/sbin/license_tag +++ b/rt/sbin/license_tag @@ -1,11 +1,17 @@ #!/usr/bin/perl -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -17,19 +23,40 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) # +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. # -# END LICENSE BLOCK +# END BPS TAGGED BLOCK }}} +my $LICENSE = <<'EOL'; -my $LICENSE = <<EOL; +COPYRIGHT: + +This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC + <jesse@bestpractical.com> -Copyright (c) 1996-2003 Jesse Vincent <jesse\@bestpractical.com> +(Except where explicitly superseded by other copyright notices) -(Except where explictly superceded 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 @@ -41,11 +68,27 @@ 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. -Unless otherwise specified, all modifications, corrections or -extensions to this work which alter its source code become the -property of Best Practical Solutions, LLC when submitted for -inclusion in the work. +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +CONTRIBUTION SUBMISSION POLICY: + +(The following paragraph is not intended to limit the rights granted +to you to modify and distribute this software under the terms of +the GNU General Public License and is only of importance to you if +you choose to contribute your changes and enhancements to the +community by submitting them to Best Practical Solutions, LLC.) +By intentionally submitting any modifications, corrections or +derivatives to this work, or any other work intended for use with +Request Tracker, to Best Practical Solutions, LLC, you confirm that +you are the copyright holder for those contributions and you grant +Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +royalty-free, perpetual, license to use, copy, create derivative +works based on those contributions, and sublicense and distribute +those contributions and any derivatives thereof. EOL @@ -57,7 +100,7 @@ File::Find::find({ no_chdir => 1, wanted => \&tag_pm}, 'lib'); File::Find::find({ no_chdir => 1, wanted => \&tag_mason}, 'html'); File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'sbin'); File::Find::find({ no_chdir => 1, wanted => \&tag_script}, 'bin'); -tag_makefile ('Makefile'); +tag_makefile ('Makefile.in'); tag_makefile ('README'); @@ -73,16 +116,16 @@ sub tag_mason { print "$pm - "; - if ($file =~ /^%# BEGIN LICENSE BLOCK/ms) { + if ($file =~ /^%# BEGIN BPS TAGGED BLOCK {{{/ms) { print "has license section"; - $file =~ s/^%# BEGIN LICENSE BLOCK(.*?)%# END LICENSE BLOCK/%# BEGIN LICENSE BLOCK\n$pmlic%# END LICENSE BLOCK/ms; + $file =~ s/^%# BEGIN BPS TAGGED BLOCK {{{(.*?)%# END BPS TAGGED BLOCK }}}/%# BEGIN BPS TAGGED BLOCK {{{\n$pmlic%# END BPS TAGGED BLOCK }}}/ms; } else { print "no license section"; - $file ="%# BEGIN LICENSE BLOCK\n$pmlic%# END LICENSE BLOCK\n". $file; + $file ="%# BEGIN BPS TAGGED BLOCK {{{\n$pmlic%# END BPS TAGGED BLOCK }}}\n". $file; } - $file =~ s/%# END LICENSE BLOCK(\n+)/%# END LICENSE BLOCK\n/mg; + $file =~ s/%# END BPS TAGGED BLOCK }}}(\n+)/%# END BPS TAGGED BLOCK }}}\n/mg; print "\n"; @@ -105,16 +148,16 @@ sub tag_makefile { print "$pm - "; - if ($file =~ /^# BEGIN LICENSE BLOCK/ms) { + if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) { print "has license section"; - $file =~ s/^# BEGIN LICENSE BLOCK(.*?)# END LICENSE BLOCK/# BEGIN LICENSE BLOCK\n$pmlic# END LICENSE BLOCK/ms; + $file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}/ms; } else { print "no license section"; - $file ="# BEGIN LICENSE BLOCK\n$pmlic# END LICENSE BLOCK\n". $file; + $file ="# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}\n". $file; } - $file =~ s/# END LICENSE BLOCK(\n+)/# END LICENSE BLOCK\n/mg; + $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n/mg; print "\n"; @@ -129,7 +172,7 @@ sub tag_makefile { sub tag_pm { my $pm = $_; - next unless $pm =~ /\.pm\z/s; + next unless $pm =~ /\.pm/s; open(FILE,"<$pm") || die "Failed to open $pm"; my $file = (join "", <FILE>); close (FILE); @@ -138,16 +181,16 @@ sub tag_pm { print "$pm - "; - if ($file =~ /^# BEGIN LICENSE BLOCK/ms) { + if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) { print "has license section"; - $file =~ s/^# BEGIN LICENSE BLOCK(.*?)# END LICENSE BLOCK/# BEGIN LICENSE BLOCK\n$pmlic# END LICENSE BLOCK/ms; + $file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}/ms; } else { print "no license section"; - $file ="# BEGIN LICENSE BLOCK\n$pmlic# END LICENSE BLOCK\n". $file; + $file ="# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}\n". $file; } - $file =~ s/# END LICENSE BLOCK(\n+)/# END LICENSE BLOCK\n/mg; + $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n/mg; print "\n"; @@ -170,21 +213,21 @@ sub tag_script { $pmlic =~ s/^/# /msg; print "$pm - "; - if ($file =~ /^# BEGIN LICENSE BLOCK/ms) { + if ($file =~ /^# BEGIN BPS TAGGED BLOCK {{{/ms) { print "has license section"; - $file =~ s/^# BEGIN LICENSE BLOCK(.*?)# END LICENSE BLOCK/# BEGIN LICENSE BLOCK\n$pmlic# END LICENSE BLOCK/ms; + $file =~ s/^# BEGIN BPS TAGGED BLOCK {{{(.*?)# END BPS TAGGED BLOCK }}}/# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}/ms; } else { print "no license section"; if ($file =~ /^(#!.*?)\n/) { - my $lic ="# BEGIN LICENSE BLOCK\n$pmlic# END LICENSE BLOCK\n"; + my $lic ="# BEGIN BPS TAGGED BLOCK {{{\n$pmlic# END BPS TAGGED BLOCK }}}\n"; $file =~ s/^(#!.*?)\n/$1\n$lic/; } } - $file =~ s/# END LICENSE BLOCK(\n+)/# END LICENSE BLOCK\n\n/mg; + $file =~ s/# END BPS TAGGED BLOCK }}}(\n+)/# END BPS TAGGED BLOCK }}}\n/mg; print "\n"; diff --git a/rt/sbin/regression_harness b/rt/sbin/regression_harness index fc1e29304..d98e462c7 100644 --- a/rt/sbin/regression_harness +++ b/rt/sbin/regression_harness @@ -1,9 +1,15 @@ #!/usr/bin/perl -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,14 +21,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} open (FH,"make regression|"); my $skip_frontmatter = 1; diff --git a/rt/sbin/rt-dump-database.in b/rt/sbin/rt-dump-database.in new file mode 100755 index 000000000..bcc7bb713 --- /dev/null +++ b/rt/sbin/rt-dump-database.in @@ -0,0 +1,168 @@ +#!@PERL@ -w +# BEGIN BPS TAGGED BLOCK {{{ +# +# COPYRIGHT: +# +# 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 +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} +use strict; +use lib "@RT_LIB_PATH@"; +use RT; +use XML::Simple; + +RT::LoadConfig(); +RT::Init(); + +my $LocalOnly = @ARGV ? shift(@ARGV) : 1; + +my %RV; +my %Ignore = ( + All => [qw( + id Created Creator LastUpdated LastUpdatedBy + )], + Templates => [qw( + TranslationOf + )], +); + +my $SystemUserId = $RT::SystemUser->Id; +my @classes = qw( + Users Groups Queues ScripActions ScripConditions + Templates Scrips ACL CustomFields +); +foreach my $class (@classes) { + require "RT/$class.pm"; + my $objects = "RT::$class"->new($RT::SystemUser); + $objects->{find_disabled_rows} = 1; + $objects->UnLimit; + + if ($class eq 'CustomFields') { + $objects->OrderByCols( + { FIELD => 'LookupType' }, + { FIELD => 'SortOrder' }, + { FIELD => 'Id' }, + ); + } + else { + $objects->OrderBy( FIELD => 'Id' ); + } + + if ($LocalOnly) { + next if $class eq 'ACL'; # XXX - would go into infinite loop - XXX + $objects->Limit( FIELD => 'LastUpdatedBy', OPERATOR => '!=', VALUE => $SystemUserId ) + unless $class eq 'Groups'; + $objects->Limit( FIELD => 'Id', OPERATOR => '!=', VALUE => $SystemUserId ) + if $class eq 'Users'; + $objects->Limit( FIELD => 'Domain', OPERATOR => '=', VALUE => 'UserDefined' ) + if $class eq 'Groups'; + } + + my %fields; + while (my $obj = $objects->Next) { + next if $obj->can('LastUpdatedBy') and $obj->LastUpdatedBy == $SystemUserId; + + if (!%fields) { + %fields = map { $_ => 1 } keys %{$obj->_ClassAccessible}; + delete @fields{ + @{$Ignore{$class}||=[]}, + @{$Ignore{All}||=[]}, + }; + } + + my $rv; + # next if $obj-> # skip default names + foreach my $field (sort keys %fields) { + my $value = $obj->__Value($field); + $rv->{$field} = $value if length($value); + } + delete $rv->{Disabled} unless $rv->{Disabled}; + + foreach my $record (map { /ACL/ ? 'ACE' : substr($_, 0, -1) } @classes) { + foreach my $key (map "$record$_", ('', 'Id')) { + next unless exists $rv->{$key}; + my $id = $rv->{$key} or next; + my $obj = "RT::$record"->new($RT::SystemUser); + $obj->LoadByCols( Id => $id ) or next; + $rv->{$key} = $obj->__Value('Name') || 0; + } + } + + if ($class eq 'Users' and defined $obj->Privileged) { + $rv->{Privileged} = int($obj->Privileged); + } + elsif ($class eq 'CustomFields') { + my $values = $obj->Values; + while (my $value = $values->Next) { + push @{$rv->{Values}}, { + map { ($_ => $value->__Value($_)) } qw( + Name Description SortOrder + ), + }; + } + } + + if (eval { require RT::Attributes; 1 }) { + my $attributes = $obj->Attributes; + while (my $attribute = $attributes->Next) { + my $content = $attribute->Content; + $rv->{Attributes}{$attribute->Name} = $content if length($content); + } + } + + push @{$RV{$class}}, $rv; + } +} + +print(<< "."); +no strict; use XML::Simple; *_ = XMLin(do { local \$/; readline(DATA) }, ForceArray => [qw( + @classes Values +)], NoAttr => 1, SuppressEmpty => ''); *\$_ = (\$_{\$_} || []) for keys \%_; 1; # vim: ft=xml +__DATA__ +. + +print XMLout( + { map { ($_ => ($RV{$_} || [])) } @classes }, + RootName => 'InitialData', + NoAttr => 1, + SuppressEmpty => '', + XMLDecl => '<?xml version="1.0" encoding="UTF-8"?>', +); diff --git a/rt/sbin/rt-setup-database b/rt/sbin/rt-setup-database deleted file mode 100644 index f84f290b7..000000000 --- a/rt/sbin/rt-setup-database +++ /dev/null @@ -1,585 +0,0 @@ -#!/usr/bin/perl -w -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK - -use strict; -use vars qw($PROMPT $VERSION $Handle $Nobody $SystemUser $item); -use vars - qw(@Groups @Users @ACL @Queues @ScripActions @ScripConditions @Templates @CustomFields @Scrips); - -use lib "/opt/rt3/lib"; - -#This drags in RT's config.pm -# We do it in a begin block because RT::Handle needs to know the type to do its -# inheritance -use RT; -use Carp; -use RT::User; -use RT::CurrentUser; -use RT::Template; -use RT::ScripAction; -use RT::ACE; -use RT::Group; -use RT::User; -use RT::Queue; -use RT::ScripCondition; -use RT::CustomField; -use RT::Scrip; - -RT::LoadConfig(); -use Term::ReadKey; -use Getopt::Long; - -my %args; - -GetOptions( - \%args, - 'prompt-for-dba-password', 'force', 'debug', - 'action=s', 'dba=s', 'dba-password=s', 'datafile=s', - 'datadir=s' -); - -$| = 1; #unbuffer that output. - -require RT::Handle; -my $Handle = RT::Handle->new($RT::DatabaseType); -$Handle->BuildDSN; -my $dbh; - -if ( $args{'prompt-for-dba-password'} ) { - $args{'dba-password'} = get_dba_password(); - chomp( $args{'dba-password'} ); -} - -unless ( $args{'action'} ) { - help(); - die; -} -if ( $args{'action'} eq 'init' ) { - $dbh = DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) - || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr"; - print "Now creating a database for RT.\n"; - create_db(); - - $dbh->disconnect; - $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) - || die $DBI::errstr; - - print "Now populating database schema.\n"; - insert_schema(); - print "Now inserting database ACLs\n"; - insert_acl(); - print "Now inserting RT core system objects\n"; - insert_initial_data(); - print "Now inserting RT data\n"; - insert_data( $RT::EtcPath . "/initialdata" ); -} -elsif ( $args{'action'} eq 'drop' ) { - unless ( $dbh = - DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) ) - { - warn $DBI::errstr; - warn "Database doesn't appear to exist. Aborting database drop."; - exit(0); - } - drop_db(); -} -elsif ( $args{'action'} eq 'insert' ) { - insert_data( $args{'datafile'} ); -} -elsif ($args{'action'} eq 'acl') { - $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) - || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr"; - insert_acl($args{'datadir'}); -} -elsif ($args{'action'} eq 'schema') { - $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) - || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr"; - insert_schema($args{'datadir'}); -} - -else { - print STDERR '$0 called with an invalid --action parameter'; - exit(-1); -} - -# {{{ sub insert_schema -sub insert_schema { - my $base_path = (shift || $RT::EtcPath); - my (@schema); - print "Creating database schema.\n"; - - if ( -f $base_path . "/schema." . $RT::DatabaseType ) { - no warnings 'unopened'; - - open( SCHEMA, "<" . $base_path . "/schema." . $RT::DatabaseType ); - open( SCHEMA_LOCAL, "<" . $RT::LocalEtcPath . "/schema." . $RT::DatabaseType ); - - my $statement = ""; - foreach my $line (<SCHEMA>, <SCHEMA_LOCAL>) { - $line =~ s/\#.*//g; - $statement .= $line; - if ( $line =~ /;(\s*)$/ ) { - $statement =~ s/;(\s*)$//g; - push @schema, $statement; - $statement = ""; - } - } - - foreach my $statement (@schema) { - print STDERR $statement if $args{'debug'}; - my $sth = $dbh->prepare($statement) or die $dbh->errstr; - unless ( $sth->execute ) { - die "Problem with statement:\n $statement\n" . $sth->errstr; - } - } - - } - else { - die "Couldn't find schema file for " . $RT::DatabaseType . "\n"; - } - print "schema sucessfully inserted\n"; - -} - -# }}} - -# {{{ sub drop_db -sub drop_db { - return if ( $RT::DatabaseType eq 'SQLite' ); - unless ( $args{'force'} ) { - print <<END; - -About to drop $RT::DatabaseType database $RT::DatabaseName on $RT::DatabaseHost. -WARNING: This will erase all data in $RT::DatabaseName. - -END - exit unless _yesno(); - - } - - print "Dropping $RT::DatabaseType database $RT::DatabaseName.\n"; - - $dbh->do("Drop DATABASE $RT::DatabaseName") or warn $DBI::errstr; -} - -# }}} - -# {{{ sub create_db -sub create_db { - print "Creating $RT::DatabaseType database $RT::DatabaseName.\n"; - if ( $RT::DatabaseType eq 'SQLite' ) { - return; - } - elsif ( $RT::DatabaseType eq 'Pg' ) { - $dbh->do("CREATE DATABASE $RT::DatabaseName WITH ENCODING='UNICODE'"); - if ($DBI::errstr) { - $dbh->do("CREATE DATABASE $RT::DatabaseName") || die $DBI::errstr; - } - } - else { - $dbh->do("CREATE DATABASE $RT::DatabaseName") or die $DBI::errstr; - } -} - -# }}} - -sub get_dba_password { - print -"In order to create a new database and grant RT access to that database,\n"; - print "this script needs to connect to your " - . $RT::DatabaseType - . " instance on " - . $RT::DatabaseHost . " as " - . $args{'dba'} . ".\n"; - print -"Please specify that user's database password below. If the user has no database\n"; - print "password, just press return.\n\n"; - print "Password: "; - ReadMode('noecho'); - my $password = ReadLine(0); - ReadMode('normal'); - return ($password); -} - -# {{{ sub _yesno -sub _yesno { - print "Proceed [y/N]:"; - my $x = scalar(<STDIN>); - $x =~ /^y/i; -} - -# }}} - -# {{{ insert_acls -sub insert_acl { - - my $base_path = (shift || $RT::EtcPath); - - if ( $RT::DatabaseType =~ /^oracle$/i ) { - do $base_path . "/acl.Oracle" - || die "Couldn't find ACLS for Oracle\n" . $@; - } - elsif ( $RT::DatabaseType =~ /^pg$/i ) { - do $base_path . "/acl.Pg" || die "Couldn't find ACLS for Pg\n" . $@; - } - elsif ( $RT::DatabaseType =~ /^mysql$/i ) { - do $base_path . "/acl.mysql" - || die "Couldn't find ACLS for mysql in " . $RT::EtcPath . "\n" . $@; - } - elsif ( $RT::DatabaseType =~ /^SQLite$/i ) { - return; - } - else { - die "Unknown RT database type"; - } - - my @acl = acl($dbh); - foreach my $statement (@acl) { - print STDERR $statement if $args{'debug'}; - my $sth = $dbh->prepare($statement) or die $dbh->errstr; - unless ( $sth->execute ) { - die "Problem with statement:\n $statement\n" . $sth->errstr; - } - } -} - -# }}} - -=head2 get_system_dsn - -Returns a dsn suitable for database creates and drops -and user creates and drops - -=cut - -sub get_system_dsn { - - my $dsn = $Handle->DSN; - - #with mysql, you want to connect sans database to funge things - if ( $RT::DatabaseType eq 'mysql' ) { - $dsn =~ s/dbname=$RT::DatabaseName//; - - # with postgres, you want to connect to database1 - } - elsif ( $RT::DatabaseType eq 'Pg' ) { - $dsn =~ s/dbname=$RT::DatabaseName/dbname=template1/; - } - return $dsn; -} - -sub insert_initial_data { - - RT::InitLogging(); - - #connect to the db, for actual RT work - require RT::Handle; - $RT::Handle = RT::Handle->new(); - $RT::Handle->Connect(); - - #Put together a current user object so we can create a User object - my $CurrentUser = new RT::CurrentUser(); - - print "Checking for existing system user..."; - my $test_user = RT::User->new($CurrentUser); - $test_user->Load('RT_System'); - if ( $test_user->id ) { - print "found!\n\nYou appear to have a functional RT database.\n" - . "Exiting, so as not to clobber your existing data.\n"; - exit(-1); - - } - else { - print "not found. This appears to be a new installation.\n"; - } - - print "Creating system user..."; - my $RT_System = new RT::User($CurrentUser); - - my ( $val, $msg ) = $RT_System->_BootstrapCreate( - Name => 'RT_System', - RealName => 'The RT System itself', - Comments => -'Do not delete or modify this user. It is integral to RT\'s internal database structures', - Creator => '1' ); - - unless ($val) { - print "$msg\n"; - exit(1); - } - print "done.\n"; - $RT::Handle->dbh->disconnect(); - -} - -# load some sort of data into the database - -sub insert_data { - my $datafile = shift; - - #Connect to the database and get RT::SystemUser and RT::Nobody loaded - RT::Init; - - my $CurrentUser = RT::CurrentUser->new(); - $CurrentUser->LoadByName('RT_System'); - - if ( $datafile eq $RT::EtcPath . "/initialdata" ) { - - print "Creating Superuser ACL..."; - - my $superuser_ace = RT::ACE->new($CurrentUser); - $superuser_ace->_BootstrapCreate( - PrincipalId => ACLEquivGroupId( $CurrentUser->Id ), - PrincipalType => 'Group', - RightName => 'SuperUser', - ObjectType => 'RT::System', - ObjectId => '1' ); - - } - - # Slurp in stuff to insert from the datafile. Possible things to go in here:- - # @groups, @users, @acl, @queues, @ScripActions, @ScripConditions, @templates - - require $datafile - || die "Couldn't find initial data for import\n" . $@; - - if (@Groups) { - print "Creating groups..."; - foreach $item (@Groups) { - my $new_entry = RT::Group->new($CurrentUser); - my ( $return, $msg ) = $new_entry->_Create(%$item); - print "(Error: $msg)" unless ($return); - print $return. "."; - } - print "done.\n"; - } - if (@Users) { - print "Creating users..."; - foreach $item (@Users) { - my $new_entry = new RT::User($CurrentUser); - my ( $return, $msg ) = $new_entry->Create(%$item); - print "(Error: $msg)" unless ($return); - print $return. "."; - } - print "done.\n"; - } - if (@Queues) { - print "Creating queues..."; - for $item (@Queues) { - my $new_entry = new RT::Queue($CurrentUser); - my ( $return, $msg ) = $new_entry->Create(%$item); - print "(Error: $msg)" unless ($return); - print $return. "."; - } - print "done.\n"; - } - if (@ACL) { - print "Creating ACL..."; - for my $item (@ACL) { - - my ($princ, $object); - - # Global rights or Queue rights? - if ($item->{'Queue'}) { - $object = RT::Queue->new($CurrentUser); - $object->Load( $item->{'Queue'} ); - } else { - $object = $RT::System; - } - - # Group rights or user rights? - if ($item->{'GroupDomain'}) { - $princ = RT::Group->new($CurrentUser); - if ($item->{'GroupDomain'} eq 'UserDefined') { - $princ->LoadUserDefinedGroup( $item->{'GroupId'} ); - } elsif ($item->{'GroupDomain'} eq 'SystemInternal') { - $princ->LoadSystemInternalGroup( $item->{'GroupType'} ); - } elsif ($item->{'GroupDomain'} eq 'RT::Queue-Role' && - $item->{'Queue'}) { - $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'}, - Queue => $object->id); - } else { - $princ->Load( $item->{'GroupId'} ); - } - } else { - $princ = RT::User->new($CurrentUser); - $princ->Load( $item->{'UserId'} ); - } - - # Grant it - my ( $return, $msg ) = $princ->PrincipalObj->GrantRight( - Right => $item->{'Right'}, - Object => $object ); - - if ($return) { - print $return. "."; - } - else { - print $msg . "."; - - } - - } - print "done.\n"; - } - if (@CustomFields) { - print "Creating custom fields..."; - for $item (@CustomFields) { - my $new_entry = new RT::CustomField($CurrentUser); - my $values = $item->{'Values'}; - delete $item->{'Values'}; - my $q = $item->{'Queue'}; - my $q_obj = RT::Queue->new($CurrentUser); - $q_obj->Load($q); - if ( $q_obj->Id ) { - $item->{'Queue'} = $q_obj->Id; - } - elsif ( $q == 0 ) { - $item->{'Queue'} = 0; - } - else { - print "(Error: Could not find queue " . $q . ")\n" - unless ( $q_obj->Id ); - next; - } - my ( $return, $msg ) = $new_entry->Create(%$item); - - foreach my $value ( @{$values} ) { - my ( $eval, $emsg ) = $new_entry->AddValue(%$value); - print "(Error: $emsg)\n" unless ($eval); - } - - print "(Error: $msg)\n" unless ($return); - print $return. "."; - } - - print "done.\n"; - } - - if (@ScripActions) { - print "Creating ScripActions..."; - - for $item (@ScripActions) { - my $new_entry = RT::ScripAction->new($CurrentUser); - my $return = $new_entry->Create(%$item); - print $return. "."; - } - - print "done.\n"; - } - - if (@ScripConditions) { - print "Creating ScripConditions..."; - - for $item (@ScripConditions) { - my $new_entry = RT::ScripCondition->new($CurrentUser); - my $return = $new_entry->Create(%$item); - print $return. "."; - } - - print "done.\n"; - } - - if (@Templates) { - print "Creating templates..."; - - for $item (@Templates) { - my $new_entry = new RT::Template($CurrentUser); - my $return = $new_entry->Create(%$item); - print $return. "."; - } - print "done.\n"; - } - if (@Scrips) { - print "Creating scrips..."; - - for $item (@Scrips) { - my $new_entry = new RT::Scrip($CurrentUser); - my ( $return, $msg ) = $new_entry->Create(%$item); - if ($return) { - print $return. "."; - } - else { - print "(Error: $msg)\n"; - } - } - print "done.\n"; - } - $RT::Handle->Disconnect(); - -} - -=head2 ACLEquivGroupId - -Given a userid, return that user's acl equivalence group - -=cut - -sub ACLEquivGroupId { - my $username = shift; - my $user = RT::User->new($RT::SystemUser); - $user->Load($username); - my $equiv_group = RT::Group->new($RT::SystemUser); - $equiv_group->LoadACLEquivalenceGroup($user); - return ( $equiv_group->Id ); -} - -sub help { - - print <<EOF; - -$0: Set up RT's database - ---action init Initialize the database - drop Drop the database. - This will ERASE ALL YOUR DATA - insert Insert data into RT's database. - By default, will use RT's installation data. - To use a local or supplementary datafile, specify it - using the '--datafile' option below. - - acl Initialize only the database ACLs - To use a local or supplementary datafile, specify it - using the '--datadir' option below. - - schema Initialize only the database schema - To use a local or supplementary datafile, specify it - using the '--datadir' option below. - ---datafile /path/to/datafile ---datadir /path/to/ Used to specify a path to find the local - database schema and acls to be installed. - - ---dba dba's username ---dba-password dba's password ---prompt-for-dba-password Ask for the database administrator's password interactively - - -EOF - -} - -1; diff --git a/rt/sbin/rt-setup-database.in b/rt/sbin/rt-setup-database.in index e49a32ed9..49feba845 100644 --- a/rt/sbin/rt-setup-database.in +++ b/rt/sbin/rt-setup-database.in @@ -1,9 +1,15 @@ #!@PERL@ -w -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,14 +21,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} use strict; use vars qw($PROMPT $VERSION $Handle $Nobody $SystemUser $item); use vars @@ -80,16 +101,41 @@ if ( $args{'action'} eq 'init' ) { $dbh = DBI->connect( get_system_dsn(), $args{'dba'}, $args{'dba-password'} ) || die "Failed to connect to " . get_system_dsn() . " as $args{'dba'}: $DBI::errstr"; print "Now creating a database for RT.\n"; + if ($RT::DatabaseType ne 'Oracle' || + $args{'dba'} ne $RT::DatabaseUser) { create_db(); + } else { + print "...skipped as ".$args{'dba'} ." is not " . $RT::DatabaseUser . " or we're working with Oracle.\n"; + } - $dbh->disconnect; - $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) - || die $DBI::errstr; + if ($RT::DatabaseType eq "mysql") { + # Check which version we're running + my ($version) = $dbh->selectrow_hashref("show variables like 'version'")->{Value} =~ /^(\d\.\d+)/; + print "*** Warning: RT is unsupported on MySQL versions before 4.0.x\n" if $version < 4; + + # MySQL must have InnoDB support + my $innodb = $dbh->selectrow_hashref("show variables like 'have_innodb'")->{Value}; + if ($innodb eq "NO") { + die "RT requires that MySQL be compiled with InnoDB table support.\n". + "See http://dev.mysql.com/doc/mysql/en/InnoDB.html\n"; + } elsif ($innodb eq "DISABLED") { + die "RT requires that MySQL InnoDB table support be enabled.\n". + ($version < 4 + ? "Add 'innodb_data_file_path=ibdata1:10M:autoextend' to the [mysqld] section of my.cnf\n" + : "Remove the 'skip-innodb' line from your my.cnf file, restart MySQL, and try again.\n"); + } + } + + # SQLite can't deal with the disconnect/reconnect + unless ($RT::DatabaseType eq 'SQLite') { + $dbh->disconnect; + $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) || die $DBI::errstr; + } print "Now populating database schema.\n"; insert_schema(); print "Now inserting database ACLs\n"; - insert_acl(); + insert_acl() unless ($RT::DatabaseType eq 'Oracle'); print "Now inserting RT core system objects\n"; insert_initial_data(); print "Now inserting RT data\n"; @@ -105,8 +151,11 @@ elsif ( $args{'action'} eq 'drop' ) { } drop_db(); } +elsif ( $args{'action'} eq 'insert_initial' ) { + insert_initial_data(); +} elsif ( $args{'action'} eq 'insert' ) { - insert_data( $args{'datafile'} ); + insert_data( $args{'datafile'} || ($args{'datadir'}."/content")); } elsif ($args{'action'} eq 'acl') { $dbh = DBI->connect( $Handle->DSN, $args{'dba'}, $args{'dba-password'} ) @@ -137,8 +186,9 @@ sub insert_schema { open( SCHEMA_LOCAL, "<" . $RT::LocalEtcPath . "/schema." . $RT::DatabaseType ); my $statement = ""; - foreach my $line (<SCHEMA>, <SCHEMA_LOCAL>) { + foreach my $line (<SCHEMA>, ($_ = ';;'), <SCHEMA_LOCAL>) { $line =~ s/\#.*//g; + $line =~ s/--.*//g; $statement .= $line; if ( $line =~ /;(\s*)$/ ) { $statement =~ s/;(\s*)$//g; @@ -147,19 +197,24 @@ sub insert_schema { } } + local $SIG{__WARN__} = sub {}; + my $is_local = 0; # local/etc/schema needs to be nonfatal. + $dbh->begin_work or die $dbh->errstr; foreach my $statement (@schema) { - print STDERR $statement if $args{'debug'}; + if ($statement =~ /^\s*;$/) { $is_local = 1; next; } + print STDERR "SQL: $statement\n" if defined $args{'debug'}; my $sth = $dbh->prepare($statement) or die $dbh->errstr; - unless ( $sth->execute ) { + unless ( $sth->execute or $is_local ) { die "Problem with statement:\n $statement\n" . $sth->errstr; } } + $dbh->commit or die $dbh->errstr; } else { die "Couldn't find schema file for " . $RT::DatabaseType . "\n"; } - print "schema sucessfully inserted\n"; + print "Done setting up database schema.\n"; } @@ -167,7 +222,16 @@ sub insert_schema { # {{{ sub drop_db sub drop_db { - return if ( $RT::DatabaseType eq 'SQLite' ); + if ( $RT::DatabaseType eq 'Oracle' ) { + print <<END; + +To delete the tables and sequences of the RT Oracle database by running + \@etc/drop.Oracle +through SQLPlus. + +END + return; + } unless ( $args{'force'} ) { print <<END; @@ -181,6 +245,10 @@ END print "Dropping $RT::DatabaseType database $RT::DatabaseName.\n"; + if ( $RT::DatabaseType eq 'SQLite' ) { + unlink $RT::DatabaseName or warn $!; + return; + } $dbh->do("Drop DATABASE $RT::DatabaseName") or warn $DBI::errstr; } @@ -198,6 +266,13 @@ sub create_db { $dbh->do("CREATE DATABASE $RT::DatabaseName") || die $DBI::errstr; } } + elsif ($RT::DatabaseType eq 'Oracle') { + insert_acl(); + } + elsif ( $RT::DatabaseType eq 'Informix' ) { + $ENV{DB_LOCALE} = 'en_us.utf8'; + $dbh->do("CREATE DATABASE $RT::DatabaseName WITH BUFFERED LOG"); + } else { $dbh->do("CREATE DATABASE $RT::DatabaseName") or die $DBI::errstr; } @@ -206,20 +281,19 @@ sub create_db { # }}} sub get_dba_password { - print -"In order to create a new database and grant RT access to that database,\n"; + print "In order to create or update your RT database,"; print "this script needs to connect to your " . $RT::DatabaseType . " instance on " . $RT::DatabaseHost . " as " . $args{'dba'} . ".\n"; - print -"Please specify that user's database password below. If the user has no database\n"; + print "Please specify that user's database password below. If the user has no database\n"; print "password, just press return.\n\n"; print "Password: "; ReadMode('noecho'); my $password = ReadLine(0); ReadMode('normal'); + print "\n"; return ($password); } @@ -246,7 +320,15 @@ sub insert_acl { } elsif ( $RT::DatabaseType =~ /^mysql$/i ) { do $base_path . "/acl.mysql" - || die "Couldn't find ACLS for mysql in " . $RT::EtcPath . "\n" . $@; + || die "Couldn't find ACLS for mysql in $base_path\n" . $@; + } + elsif ( $RT::DatabaseType =~ /^Sybase$/i ) { + do $base_path . "/acl.Sybase" + || die "Couldn't find ACLS for Sybase in $base_path\n" . $@; + } + elsif ( $RT::DatabaseType =~ /^informix$/i ) { + do $base_path . "/acl.Informix" + || die "Couldn't find ACLS for Informix in $base_path\n" . $@; } elsif ( $RT::DatabaseType =~ /^SQLite$/i ) { return; @@ -263,6 +345,7 @@ sub insert_acl { die "Problem with statement:\n $statement\n" . $sth->errstr; } } + print "Done setting up database ACLs.\n"; } # }}} @@ -287,6 +370,10 @@ sub get_system_dsn { elsif ( $RT::DatabaseType eq 'Pg' ) { $dsn =~ s/dbname=$RT::DatabaseName/dbname=template1/; } + elsif ( $RT::DatabaseType eq 'Informix' ) { + # with Informix, you want to connect sans database: + $dsn =~ s/Informix:$RT::DatabaseName/Informix:/; + } return $dsn; } @@ -323,14 +410,15 @@ sub insert_initial_data { RealName => 'The RT System itself', Comments => 'Do not delete or modify this user. It is integral to RT\'s internal database structures', - Creator => '1' ); + Creator => '1', + LastUpdatedBy => '1' ); unless ($val) { print "$msg\n"; exit(1); } print "done.\n"; - $RT::Handle->dbh->disconnect(); + $RT::Handle->Disconnect() unless ($RT::DatabaseType eq 'SQLite'); } @@ -357,6 +445,7 @@ sub insert_data { ObjectType => 'RT::System', ObjectId => '1' ); + print "done.\n"; } # Slurp in stuff to insert from the datafile. Possible things to go in here:- @@ -416,6 +505,8 @@ sub insert_data { $princ->LoadUserDefinedGroup( $item->{'GroupId'} ); } elsif ($item->{'GroupDomain'} eq 'SystemInternal') { $princ->LoadSystemInternalGroup( $item->{'GroupType'} ); + } elsif ($item->{'GroupDomain'} eq 'RT::System-Role') { + $princ->LoadSystemRoleGroup( $item->{'GroupType'} ); } elsif ($item->{'GroupDomain'} eq 'RT::Queue-Role' && $item->{'Queue'}) { $princ->LoadQueueRoleGroup( Type => $item->{'GroupType'}, @@ -527,8 +618,8 @@ sub insert_data { } print "done.\n"; } - $RT::Handle->Disconnect(); - + $RT::Handle->Disconnect() unless ($RT::DatabaseType eq 'SQLite'); + print "Done setting up database content.\n"; } =head2 ACLEquivGroupId @@ -555,6 +646,8 @@ $0: Set up RT's database --action init Initialize the database drop Drop the database. This will ERASE ALL YOUR DATA + insert_initial + Insert RT's core system objects insert Insert data into RT's database. By default, will use RT's installation data. To use a local or supplementary datafile, specify it diff --git a/rt/sbin/rt-test-dependencies b/rt/sbin/rt-test-dependencies deleted file mode 100644 index 637d33a32..000000000 --- a/rt/sbin/rt-test-dependencies +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/perl -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK - -# -# This is just a basic script that checks to make sure that all -# the modules needed by RT before you can install it. -# - -use strict; -no warnings qw(numeric redefine); -use Getopt::Long; -use CPAN; -my %args; -my %deps; -GetOptions(\%args,'install', 'with-MYSQL', 'with-POSTGRESQL|with-pg|with-pgsql', 'with-SQLITE', 'with-ORACLE', 'with-FASTCGI', 'with-SPEEDYCGI', 'with-MODPERL1', 'with-MODPERL2' ,'with-DEV'); - -if (!keys %args) { -help(); -exit(0); -} -$args{'with-MASON'} = 1; -$args{'with-CORE'} = 1; -$args{'with-DEV'} =1; -$args{'with-CLI'} =1; -$args{'with-MAILGATE'} =1; -if ($] < 5.007) { -$args{'with-I18N-COMPAT'} = 1; -} - - -sub help { - -print <<'.' - -By default, testdeps determine whether you have -installed all the perl modules RT needs to run. - - --install Install missing modules - -The following switches will tell the tool to check for specific dependencies - - --with-mysql Database interface for MySQL - --with-postgresql Database interface for PostgreSQL - --with-sqlite Database interface and driver for SQLite (unsupported) - --with-oracle Database interface for oracle (unsupported) - - --with-fastcgi Libraries needed to support the fastcgi handler - --with-speedycgi Libraries needed to support the speedycgi handler - --with-modperl1 Libraries needed to support the modperl 1 handler - --with-modperl2 Libraries needed to support the modperl 2 handler - - --with-dev Tools needed for RT development -. -} - - -sub _ { - map { /(\S+)\s*(\S*)/; $1 => ($2 ? $2 :'') } split ( /\n/, $_[0] ); -} - -$deps{'CORE'} = [ _( << '.') ]; -Digest::MD5 -DBI 1.18 -Test::Inline -Class::ReturnValue 0.40 -DBIx::SearchBuilder 0.86 -Text::Template -File::Spec 0.8 -HTML::Entities -Net::Domain -Log::Dispatch 2.0 -Locale::Maketext 1.04 -Locale::Maketext::Lexicon 0.25 -Locale::Maketext::Fuzzy -MIME::Entity 5.108 -Mail::Mailer 1.57 -Net::SMTP -Text::Wrapper -Time::ParseDate -File::Temp -Term::ReadKey -Text::Autoformat -Text::Quoted -. - -$deps{'MASON'} = [ _( << '.') ]; -Params::Validate 0.02 -Cache::Cache -Exception::Class -HTML::Mason 1.16 -MLDBM -Errno -FreezeThaw -Digest::MD5 -CGI::Cookie 1.20 -Storable -Apache::Session 1.53 -. - -$deps{'MAILGATE'} = [ _( << '.') ]; -HTML::TreeBuilder -HTML::FormatText -Getopt::Long -LWP::UserAgent -. - -$deps{'CLI'} = [ _( << '.') ]; -Getopt::Long 2.24 -. - -$deps{'DEV'} = [ _( << '.') ]; -Regexp::Common -Time::HiRes -Test::Inline -WWW::Mechanize -. - -$deps{'FASTCGI'} = [ _( << '.') ]; -CGI -FCGI -CGI::Fast -. - -$deps{'SPEEDYCGI'} = [ _( << '.') ]; -CGI -CGI::SpeedyCGI -. - - -$deps{'MODPERL1'} = [ _( << '.') ]; -CGI -Apache::Request -Apache::DBI -. - -$deps{'MODPERL2'} = [ _( << '.') ]; -CGI 2.89 -Apache::DBI -. - -$deps{'I18N-COMPAT'} = [ _( << '.') ]; -Text::Iconv -Encode::compat 0.04 -. - -$deps{'MYSQL'} = [ _( << '.') ]; -DBD::mysql 2.1018 -. -$deps{'ORACLE'} = [ _( << '.') ]; -DBD::Oracle -. -$deps{'POSTGRESQL'} = [ _( << '.') ]; -DBD::Pg -. - - -foreach my $type (keys %args) { -next unless ($type =~ /^with-(.*?)$/); -my $type = $1; -print "$type dependencies:\n"; - my @deps = (@{$deps{$type}}); - while (@deps) { - my $module = shift @deps; - my $version = shift @deps; -my $ret; - $ret =test_dep($module, $version); - -if ($args{'install'} && !$ret) { - resolve_dep($module); -} -} -} -sub test_dep { - my $module = shift; - my $version = shift; - - print "\t$module $version"; - eval "use $module $version" ; - if ($@) { - my $error = $@; - $error =~ s/\n(.*)$//s; - print "...MISSING\n"; - print "\t\t$error\n" if $error =~ /this is only/; - - return undef; - } else { - print "...found\n"; -return 1; - } -} - -sub resolve_dep { - my $module = shift; - use CPAN; - CPAN::Shell->install($module); - -} - - -sub print_help { - print << "EOF"; - -$0 FLAG DBTYPE - - -$0 is a tool for RT that will tell you if you've got all -the modules RT depends on properly installed. - -Flags: (only one flag is valid for a given run) - --quiet will check to see if we've got everything we need - and will exit with a return code of (1) if we don't. - --warn will tell you what isn't properly installed - --fix will use CPANPLUS.pm or CPAN.pm to magically make everything better - -DBTYPE is one of: - oracle, pg, mysql - -EOF - - exit(0); -} diff --git a/rt/sbin/rt-test-dependencies.in b/rt/sbin/rt-test-dependencies.in index 6951290c4..f79e4e5c2 100644 --- a/rt/sbin/rt-test-dependencies.in +++ b/rt/sbin/rt-test-dependencies.in @@ -1,9 +1,15 @@ #!@PERL@ -# BEGIN LICENSE BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> +# COPYRIGHT: +# +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC +# <jesse@bestpractical.com> # -# (Except where explictly superceded by other copyright notices) +# (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 @@ -15,14 +21,29 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. +# 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. # # -# END LICENSE BLOCK - +# CONTRIBUTION SUBMISSION POLICY: +# +# (The following paragraph is not intended to limit the rights granted +# to you to modify and distribute this software under the terms of +# the GNU General Public License and is only of importance to you if +# you choose to contribute your changes and enhancements to the +# community by submitting them to Best Practical Solutions, LLC.) +# +# By intentionally submitting any modifications, corrections or +# derivatives to this work, or any other work intended for use with +# Request Tracker, to Best Practical Solutions, LLC, you confirm that +# you are the copyright holder for those contributions and you grant +# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, +# royalty-free, perpetual, license to use, copy, create derivative +# works based on those contributions, and sublicense and distribute +# those contributions and any derivatives thereof. +# +# END BPS TAGGED BLOCK }}} # # This is just a basic script that checks to make sure that all # the modules needed by RT before you can install it. @@ -31,28 +52,71 @@ use strict; no warnings qw(numeric redefine); use Getopt::Long; -use CPAN; my %args; my %deps; -GetOptions(\%args,'install', 'with-MYSQL', 'with-POSTGRESQL|with-pg|with-pgsql', 'with-SQLITE', 'with-ORACLE', 'with-FASTCGI', 'with-SPEEDYCGI', 'with-MODPERL1', 'with-MODPERL2' ,'with-DEV'); - -if (!keys %args) { -help(); -exit(0); +GetOptions( + \%args, 'v|verbose', + 'install', 'with-MYSQL', + 'with-POSTGRESQL|with-pg|with-pgsql', 'with-SQLITE', + 'with-ORACLE', 'with-FASTCGI', + 'with-SPEEDYCGI', 'with-MODPERL1', + 'with-MODPERL2', 'with-DEV', + 'download=s', + 'repository=s' +); + +unless (keys %args) { + help(); + exit(0); } + +# Set up defaults $args{'with-MASON'} = 1; $args{'with-CORE'} = 1; $args{'with-DEV'} =1; $args{'with-CLI'} =1; $args{'with-MAILGATE'} =1; -if ($] < 5.007) { -$args{'with-I18N-COMPAT'} = 1; +{ + my $section; + my %always_show_sections = ( + perl => 1, + users => 1, + ); + + sub section { + my $s = shift; + $section = $s; + print "$s:\n"; + } + + my $any_missing = 0; + sub found { + my $msg = shift; + my $test = shift; + my $extra = shift; + + $any_missing = 1 unless $test; + if ($args{'v'} or not $test or $always_show_sections{$section}) { + print "\t$msg..."; + print $test ? "found" : "MISSING"; + print "\n"; + } + + print "\t\t$extra\n" if defined $extra; + } + + sub conclude { + if ($any_missing) { + print "\nSOMETHING WAS MISSING!\n"; + } else { + print "\nEverything was found.\n"; + } + } } - sub help { -print <<'.' + print <<'.'; By default, testdeps determine whether you have installed all the perl modules RT needs to run. @@ -72,6 +136,9 @@ The following switches will tell the tool to check for specific dependencies --with-modperl2 Libraries needed to support the modperl 2 handler --with-dev Tools needed for RT development + +You can also specify -v or --verbose to list the status of all dependencies, +rather than just the missing ones. . } @@ -81,42 +148,54 @@ sub _ { } $deps{'CORE'} = [ _( << '.') ]; -Digest::MD5 -DBI 1.18 +Digest::base +Digest::MD5 2.27 +DBI 1.37 Test::Inline Class::ReturnValue 0.40 -DBIx::SearchBuilder 0.86 +DBIx::SearchBuilder 1.26 Text::Template File::Spec 0.8 HTML::Entities +HTML::Scrubber 0.08 Net::Domain Log::Dispatch 2.0 -Locale::Maketext 1.04 -Locale::Maketext::Lexicon 0.25 +Locale::Maketext 1.06 +Locale::Maketext::Lexicon 0.32 Locale::Maketext::Fuzzy MIME::Entity 5.108 Mail::Mailer 1.57 Net::SMTP Text::Wrapper Time::ParseDate +Time::HiRes File::Temp Term::ReadKey Text::Autoformat -Text::Quoted +Text::Quoted 1.3 +Tree::Simple 1.04 +Scalar::Util +Module::Versions::Report +Cache::Simple::TimedExpiry +XML::Simple . $deps{'MASON'} = [ _( << '.') ]; Params::Validate 0.02 Cache::Cache -Exception::Class -HTML::Mason 1.16 +Exception::Class 1.14 +HTML::Mason 1.23 MLDBM Errno FreezeThaw -Digest::MD5 +Digest::MD5 2.27 CGI::Cookie 1.20 -Storable +Storable 2.08 Apache::Session 1.53 +XML::RSS 1.05 +HTTP::Server::Simple 0.07 +HTTP::Server::Simple::Mason 0.09 +Text::WikiFormat . $deps{'MAILGATE'} = [ _( << '.') ]; @@ -132,37 +211,37 @@ Getopt::Long 2.24 $deps{'DEV'} = [ _( << '.') ]; Regexp::Common -Time::HiRes Test::Inline +Apache::Test +HTML::Form +HTML::TokeParser WWW::Mechanize +Test::WWW::Mechanize +Module::Refresh 0.03 . $deps{'FASTCGI'} = [ _( << '.') ]; -CGI +CGI 2.92 FCGI CGI::Fast . $deps{'SPEEDYCGI'} = [ _( << '.') ]; -CGI +CGI 2.92 CGI::SpeedyCGI . $deps{'MODPERL1'} = [ _( << '.') ]; -CGI +CGI 2.92 Apache::Request -Apache::DBI +Apache::DBI 0.92 . $deps{'MODPERL2'} = [ _( << '.') ]; -CGI 2.89 +CGI 2.92 Apache::DBI -. - -$deps{'I18N-COMPAT'} = [ _( << '.') ]; -Text::Iconv -Encode::compat 0.04 +HTML::Mason 1.31 . $deps{'MYSQL'} = [ _( << '.') ]; @@ -172,75 +251,127 @@ $deps{'ORACLE'} = [ _( << '.') ]; DBD::Oracle . $deps{'POSTGRESQL'} = [ _( << '.') ]; -DBD::Pg +DBD::Pg 1.41 . +$deps{'SQLITE'} = [ _( << '.') ]; +DBD::SQLite +. -foreach my $type (keys %args) { -next unless ($type =~ /^with-(.*?)$/); -my $type = $1; -print "$type dependencies:\n"; - my @deps = (@{$deps{$type}}); - while (@deps) { - my $module = shift @deps; - my $version = shift @deps; -my $ret; - $ret =test_dep($module, $version); +if ($args{'download'}) { -if ($args{'install'} && !$ret) { - resolve_dep($module); -} -} -} -sub test_dep { - my $module = shift; - my $version = shift; - - print "\t$module $version"; - eval "use $module $version" ; - if ($@) { - my $error = $@; - $error =~ s/\n(.*)$//s; - print "...MISSING\n"; - print "\t\t$error\n" if $error =~ /this is only/; - - return undef; - } else { - print "...found\n"; -return 1; - } + download_mods(); } -sub resolve_dep { - my $module = shift; - use CPAN; - CPAN::Shell->install($module); - -} +check_perl_version(); -sub print_help { - print << "EOF"; +check_users(); -$0 FLAG DBTYPE +foreach my $type (keys %args) { + next unless ($type =~ /^with-(.*?)$/); + my $type = $1; + section("$type dependencies"); + my @deps = (@{$deps{$type}}); + while (@deps) { + my $module = shift @deps; + my $version = shift @deps; + my $ret = test_dep($module, $version); -$0 is a tool for RT that will tell you if you've got all -the modules RT depends on properly installed. - -Flags: (only one flag is valid for a given run) + if ($args{'install'} && !$ret) { + resolve_dep($module); + } + } +} --quiet will check to see if we've got everything we need - and will exit with a return code of (1) if we don't. +conclude(); --warn will tell you what isn't properly installed +sub test_dep { + my $module = shift; + my $version = shift; + + eval "use $module $version ()"; + if ($@) { + my $error = $@; + $error =~ s/\n(.*)$//s; + undef $error unless $error =~ /this is only/; + found("$module $version", 0, $error); + + return undef; + } else { + found("$module $version", 1); + return 1; + } +} --fix will use CPANPLUS.pm or CPAN.pm to magically make everything better +sub resolve_dep { + my $module = shift; + system( qq[@PERL@ -MCPAN -e'install("$module")'] ); +} -DBTYPE is one of: - oracle, pg, mysql +sub download_mods { + my %modules; + use CPAN; + + foreach my $key (keys %deps) { + my @deps = (@{$deps{$key}}); + while (@deps) { + my $mod = shift @deps; + my $ver = shift @deps; + next if ($mod =~ /^(DBD-|Apache-Request)/); + $modules{$mod} = $ver; + } + } + my @mods = keys %modules; + CPAN::get(); + my $moddir = $args{'download'}; + foreach my $mod (@mods) { + $CPAN::Config->{'build_dir'} = $moddir; + CPAN::get($mod); + } + + opendir(DIR, $moddir); + while ( my $dir = readdir(DIR)) { + print "Dir is $dir\n"; + next if ( $dir =~ /^\.\.?$/); + + # Skip things we've previously tagged + my $out = `svn ls $args{'repository'}/tags/$dir`; + next if ($out); + + if ($dir =~ /^(.*)-(.*?)$/) { + `svn_load_dirs -no_user_input -t tags/$dir -v $args{'repository'} dists/$1 $moddir/$dir`; + `rm -rf $moddir/$dir`; + + } + + } + closedir(DIR); + exit; +} -EOF +sub check_perl_version { + section("perl"); + eval {require 5.008003}; + if ($@) { + found("5.8.3", 0, "RT is known to be non-functional on versions of perl older than 5.8.3. Please upgrade to 5.8.3 or newer."); + die; + } else { + found("5.8.3", 1); + } +} - exit(0); +sub check_users { + section("users"); + found("rt group (@RTGROUP@)", defined getgrnam("@RTGROUP@")); + found("bin owner (@BIN_OWNER@)", defined getpwnam("@BIN_OWNER@")); + found("libs owner (@LIBS_OWNER@)", defined getpwnam("@LIBS_OWNER@")); + found("libs group (@LIBS_GROUP@)", defined getgrnam("@LIBS_GROUP@")); + found("web owner (@WEB_USER@)", defined getpwnam("@WEB_USER@")); + found("web group (@WEB_GROUP@)", defined getgrnam("@WEB_GROUP@")); } + + + +1; |