ae1bc888db8fc2e859ef4fd077a3071b81774fbc
[freeside.git] / rt / etc / RT_Config.pm.in
1
2 package RT;
3
4 =head1 NAME
5
6 RT::Config
7
8 =for testing
9
10 use RT::Config;
11
12 =cut
13
14 =head1 WARNING
15
16 NEVER EDIT RT_Config.pm.
17
18 Instead, copy any sections you want to change to F<RT_SiteConfig.pm> and edit them there.
19
20 =cut
21
22 =head1 Base Configuration
23
24 =over 4
25
26 =item C<$rtname>
27
28 C<$rtname> is the string that RT will look for in mail messages to
29 figure out what ticket a new piece of mail belongs to.
30
31 Your domain name is recommended, so as not to pollute the namespace.
32 once you start using a given tag, you should probably never change it.
33 (otherwise, mail for existing tickets won't get put in the right place)
34
35 =cut
36
37 Set($rtname , "example.com");
38
39
40 =item C<$EmailSubjectTagRegex>
41
42 This regexp controls what subject tags RT recognizes as its own.
43 If you're not dealing with historical C<$rtname> values, you'll likely
44 never have to enable this feature.
45
46 Be VERY CAREFUL with it. Note that it overrides C<$rtname> for subject
47 token matching and that you should use only "non-capturing" parenthesis
48 grouping. For example:
49
50 C<Set($EmailSubjectTagRegex, qr/(?:example.com|example.org)/i );>
51
52 and NOT
53
54 C<Set($EmailSubjectTagRegex, qr/(example.com|example.org)/i );>
55
56 This setting would make RT behave exactly as it does without the 
57 setting enabled.
58
59 =cut
60
61 #Set($EmailSubjectTagRegex, qr/\Q$rtname\E/i );
62
63
64
65 =item C<$Organization>
66
67 You should set this to your organization's DNS domain. For example,
68 I<fsck.com> or I<asylum.arkham.ma.us>. It's used by the linking interface to
69 guarantee that ticket URIs are unique and easy to construct.
70
71 =cut
72
73 Set($Organization , "example.com");
74
75 =item C<$MinimumPasswordLength>
76
77 C<$MinimumPasswordLength> defines the minimum length for user
78 passwords. Setting it to 0 disables this check.
79
80 =cut
81
82 Set($MinimumPasswordLength , "5");
83
84 =item C<$Timezone>
85
86 C<$Timezone> is used to convert times entered by users into GMT and back again
87 It should be set to a timezone recognized by your local unix box.
88
89 =cut
90
91 Set($Timezone , 'US/Eastern');
92
93 =back
94
95 =head1 Database Configuration
96
97 =over 4
98
99 =item C<$DatabaseType>
100
101 Database driver being used; case matters.
102
103 Valid types are "mysql", "Oracle" and "Pg"
104
105 =cut
106
107 Set($DatabaseType , '@DB_TYPE@');
108
109 =item C<$DatabaseHost>, C<$DatabaseRTHost>
110
111 The domain name of your database server.
112
113 If you're running mysql and it's on localhost,
114 leave it blank for enhanced performance
115
116 =cut
117
118 Set($DatabaseHost   , '@DB_HOST@');
119 Set($DatabaseRTHost , '@DB_RT_HOST@');
120
121 =item C<$DatabasePort>
122
123 The port that your database server is running on.  Ignored unless it's
124 a positive integer. It's usually safe to leave this blank
125
126 =cut
127
128 Set($DatabasePort , '@DB_PORT@');
129
130 =item C<$DatabaseUser>
131
132 The name of the database user (inside the database)
133
134 =cut
135
136 Set($DatabaseUser , '@DB_RT_USER@');
137
138 =item C<$DatabasePassword>
139
140 Password the C<$DatabaseUser> should use to access the database
141
142 =cut
143
144 Set($DatabasePassword , '@DB_RT_PASS@');
145
146 =item C<$DatabaseName>
147
148 The name of the RT's database on your database server. For Oracle
149 it's SID, DB objects are created in L<$DatabaseUser>'s schema.
150
151 =cut
152
153 Set($DatabaseName , '@DB_DATABASE@');
154
155 =item C<$DatabaseRequireSSL>
156
157 If you're using Postgres and have compiled in SSL support,
158 set C<$DatabaseRequireSSL> to 1 to turn on SSL communication
159
160 =cut
161
162 Set($DatabaseRequireSSL , undef);
163
164 =item C<$UseSQLForACLChecks>
165
166 In RT for ages ACL are checked after search what in some situtations
167 result in empty search pages and wrong count of tickets.
168
169 Set C<$UseSQLForACLChecks> to 1 to use SQL and get rid of these problems.
170
171 However, this option is beta. In some cases it result in performance
172 improvements, but some setups can not handle it.
173
174 =cut
175
176 Set($UseSQLForACLChecks, undef);
177
178 =item C<$TicketsItemMapSize>
179
180 In RT at display page of a ticket and there is the current search,
181 then links for first, next, previous and last ticket are shown in
182 the menu.
183
184 To build full map RT has to fetch full result set out of DB what can
185 eat lots of resourses. Using this option it's possible to limit number
186 of tickets fetched.
187
188 Set C<$TicketsItemMapSize> to number of tickets you want RT to look
189 at to build the map. If full result set is bigger than that number
190 then there would be no 'last' link in the menu.
191
192 Set this to zero to return back to old behaviour.
193
194 =cut
195
196 Set($TicketsItemMapSize, 1000);
197
198 =back
199
200 =head1 Incoming Mail Gateway Configuration
201
202 =over 4
203
204 =item C<$OwnerEmail>
205
206 C<$OwnerEmail> is the address of a human who manages RT. RT will send
207 errors generated by the mail gateway to this address.  This address
208 should _not_ be an address that's managed by your RT instance.
209
210 =cut
211
212 Set($OwnerEmail , 'root');
213
214 =item C<$LoopsToRTOwner>
215
216 If C<$LoopsToRTOwner> is defined, RT will send mail that it believes
217 might be a loop to C<$OwnerEmail>
218
219 =cut
220
221 Set($LoopsToRTOwner , 1);
222
223 =item C<$StoreLoops>
224
225 If C<$StoreLoops> is defined, RT will record messages that it believes
226 to be part of mail loops.
227
228 As it does this, it will try to be careful not to send mail to the
229 sender of these messages
230
231 =cut
232
233 Set($StoreLoops , undef);
234
235 =item C<$MaxAttachmentSize>
236
237 C<$MaxAttachmentSize> sets the maximum size (in bytes) of attachments stored
238 in the database.
239
240 For mysql and oracle, we set this size at 10 megabytes.
241 If you're running a postgres version earlier than 7.1, you will need
242 to drop this to 8192. (8k)
243
244 =cut
245
246
247 Set($MaxAttachmentSize , 10000000);
248
249 =item C<$TruncateLongAttachments>
250
251 C<$TruncateLongAttachments>: if this is set to a non-undef value,
252 RT will truncate attachments longer than C<$MaxAttachmentSize>.
253
254 =cut
255
256 Set($TruncateLongAttachments , undef);
257
258 =item C<$DropLongAttachments>
259
260 C<$DropLongAttachments>: if this is set to a non-undef value,
261 RT will silently drop attachments longer than C<MaxAttachmentSize>.
262
263 =cut
264
265 Set($DropLongAttachments , undef);
266
267 =item C<$ParseNewMessageForTicketCcs>
268
269 If C<$ParseNewMessageForTicketCcs> is true, RT will attempt to divine
270 Ticket 'Cc' watchers from the To and Cc lines of incoming messages
271 Be forewarned that if you have _any_ addresses which forward mail to
272 RT automatically and you enable this option without modifying
273 C<$RTAddressRegexp> below, you will get yourself into a heap of trouble.
274
275 =cut
276
277 Set($ParseNewMessageForTicketCcs , undef);
278
279 =item C<$RTAddressRegexp> 
280
281 C<$RTAddressRegexp> is used to make sure RT doesn't add itself as a ticket CC if
282 the setting above is enabled.  It is important that you set this to a 
283 regular expression that matches all addresses used by your RT.  This lets RT
284 avoid sending mail to itself.  It will also hide RT addresses from the list of 
285 "One-time Cc" and Bcc lists on ticket reply.
286
287 If you have a number of addresses configured in your RT database already, you
288 can generate a naive first pass regexp by using
289
290     perl etc/upgrade/generate-rtaddressregexp
291
292 =cut
293
294 Set($RTAddressRegexp , undef);
295
296 =item C<$IgnoreCcRegexp>
297
298 C<$IgnoreCcRegexp> is a regexp to exclude addresses from automatic addition 
299 to the Cc list.  Use this for addresses that are I<not> received by RT but
300 are sometimes added to Cc lists by mistake.  Unlike C<$RTAddressRegexp>, 
301 these addresses can still receive email from RT otherwise.
302
303 =cut
304
305 Set($IgnoreCcRegexp, undef);
306
307 =item C<$CanonicalizeEmailAddressMatch>, C<$CanonicalizeEmailAddressReplace>
308
309 RT provides functionality which allows the system to rewrite
310 incoming email addresses.  In its simplest form,
311 you can substitute the value in $<CanonicalizeEmailAddressReplace>
312 for the value in $<CanonicalizeEmailAddressMatch>
313 (These values are passed to the $<CanonicalizeEmailAddress> subroutine in
314  F<RT/User.pm>)
315
316 By default, that routine performs a C<s/$Match/$Replace/gi> on any address
317 passed to it.
318
319 =cut
320
321 #Set($CanonicalizeEmailAddressMatch , '@subdomain\.example\.com$');
322 #Set($CanonicalizeEmailAddressReplace , '@example.com');
323
324 =item C<$CanonicalizeEmailAddressMatch>
325
326 Set this to true and the create new user page will use the values that you
327 enter in the form but use the function CanonicalizeUserInfo in
328 F<RT/User_Local.pm>
329
330 =cut
331
332 Set($CanonicalizeOnCreate, 0);
333
334 =item C<$ValidateUserEmailAddresses>
335
336 If C<$ValidateUserEmailAddresses> is true, RT will refuse to create users with
337 an invalid email address (as specified in RFC 2822) or with an email address
338 made of multiple email adresses.
339
340 =cut
341
342 Set($ValidateUserEmailAddresses, undef);
343
344 =item C<@MailPlugins>
345
346 C<@MailPlugins> is a list of auth plugins for L<RT::Interface::Email>
347 to use; see L<rt-mailgate>
348
349 =cut
350
351 =item C<$UnsafeEmailCommands>
352
353 C<$UnsafeEmailCommands>, if set to true, enables 'take' and 'resolve'
354 as possible actions via the mail gateway.  As its name implies, this
355 is very unsafe, as it allows email with a forged sender to possibly
356 resolve arbitrary tickets!
357
358 =cut
359
360 =item C<$ExtractSubjectTagMatch>, C<$ExtractSubjectTagNoMatch>
361
362 The default "extract remote tracking tags" scrip settings; these
363 detect when your RT is talking to another RT, and adjusts the
364 subject accordingly.
365
366 =cut
367
368 Set($ExtractSubjectTagMatch, qr/\[.+? #\d+\]/);
369 Set($ExtractSubjectTagNoMatch, ( ${RT::EmailSubjectTagRegex}
370        ? qr/\[(?:${RT::EmailSubjectTagRegex}) #\d+\]/
371        : qr/\[\Q$RT::rtname\E #\d+\]/));
372
373 =back
374
375 =head1 Outgoing Mail Configuration
376
377 =over 4
378
379 =item C<$MailCommand>
380
381 C<$MailCommand> defines which method RT will use to try to send mail.
382 We know that 'sendmailpipe' works fairly well.  If 'sendmailpipe'
383 doesn't work well for you, try 'sendmail'.  Other options are 'smtp'
384 or 'qmail'.
385
386 Note that you should remove the '-t' from C<$SendmailArguments>
387 if you use 'sendmail' rather than 'sendmailpipe'
388
389 For testing purposes, or to simply disable sending mail out into the world, you
390 can set C<$MailCommand> to 'testfile' which writes all mail to a temporary
391 file.  RT will log the location of the temporary file so you can extract mail
392 from it afterwards.
393
394 =cut
395
396 Set($MailCommand , 'sendmailpipe');
397
398 =item C<$SetOutgoingMailFrom>
399
400 C<$SetOutgoingMailFrom> tells RT to set the sender envelope with the correspond
401 mail address of the ticket's queue.
402
403 Warning: If you use this setting, bounced mails will appear to be incoming
404 mail to the system, thus creating new tickets.
405
406 =cut
407
408 Set($SetOutgoingMailFrom, 0);
409
410 =item C<$OverrideOutgoingMailFrom>
411
412 C<$OverrideOutgoingMailFrom> is used for overwriting the Correspond
413 address of the queue as it is handed to sendmail -f. This helps force
414 the From_ header away from www-data or other email addresses that show
415 up in the "Sent by" line in Outlook.
416
417 The option is a hash reference of queue name to email address.
418
419 If there is no ticket involved, then the value of the C<Default> key will be
420 used.
421
422 =cut
423
424 Set($OverrideOutgoingMailFrom, {
425 #    'Default' => 'admin@rt.example.com',
426 #    'General' => 'general@rt.example.com',
427 });
428
429 =back
430
431 =item C<$DefaultMailPrecedence>
432
433 C<$DefaultMailPrecedence> is used to control the default
434 Precedence level of outgoing mail where none is specified.
435 By default it is C<bulk>, but if you only send mail to
436 your staff, you may wish to change it.
437
438 Note that you can set the precedence of individual templates
439 by including an explicit Precedence header.
440
441 If you set this value to C<undef> then we do not set a default
442 Precedence header to outgoing mail. However, if there already is a
443 Precedence header it will be preserved.
444
445 =cut
446
447 Set($DefaultMailPrecedence, 'bulk');
448
449 =back
450
451 =item C<$DefaultErrorMailPrecedence>
452
453 C<$DefaultErrorMailPrecedence> is used to control the default
454 Precedence level of outgoing mail that indicates some kind of
455 error condition. By default it is C<bulk>, but if you only send
456 mail to your staff, you may wish to change it.
457
458 If you set this value to C<undef> then we do not add a Precedence
459 header to error mail.
460
461 =cut
462
463 Set($DefaultErrorMailPrecedence, 'bulk');
464
465 =back
466
467 =item C<$UseOriginatorHeader>
468
469 C<$UseOriginatorHeader> is used to control the insertion of an
470 RT-Originator Header in every outgoing mail, containing the
471 mail address of the transaction creator.
472
473 =cut
474
475 Set($UseOriginatorHeader, 1);
476
477 =back
478
479 =head1 Sendmail Configuration
480
481 These options only take effect if C<$MailCommand> is 'sendmail' or
482 'sendmailpipe'
483
484 =over 4
485
486 =item C<$SendmailArguments> 
487
488 C<$SendmailArguments> defines what flags to pass to C<$SendmailPath>
489 If you picked 'sendmailpipe', you MUST add a -t flag to C<$SendmailArguments>
490 These options are good for most sendmail wrappers and workalikes
491
492 These arguments are good for sendmail brand sendmail 8 and newer
493 C<Set($SendmailArguments,"-oi -t -ODeliveryMode=b -OErrorMode=m");>
494
495 =cut
496
497 Set($SendmailArguments , "-oi -t");
498
499
500 =item C<$SendmailBounceArguments>
501
502 C<$SendmailBounceArguments> defines what flags to pass to C<$Sendmail>
503 assuming RT needs to send an error (ie. bounce).
504
505 =cut
506
507 Set($SendmailBounceArguments , '-f "<>"');
508
509 =item C<$SendmailPath>
510
511 If you selected 'sendmailpipe' above, you MUST specify the path to
512 your sendmail binary in C<$SendmailPath>.
513
514 =cut
515
516 Set($SendmailPath , "/usr/sbin/sendmail");
517
518
519 =back
520
521 =head1 SMTP Configuration
522
523 These options only take effect if C<$MailCommand> is 'smtp'
524
525 =over 4
526
527 =item C<$SMTPServer>
528
529 C<$SMTPServer> should be set to the hostname of the SMTP server to use
530
531 =cut
532
533 Set($SMTPServer, undef);
534
535 =item C<$SMTPFrom>
536
537 C<$SMTPFrom> should be set to the 'From' address to use, if not the
538 email's 'From'
539
540 =cut
541
542 Set($SMTPFrom, undef);
543
544 =item C<$SMTPDebug> 
545
546 C<$SMTPDebug> should be set to true to debug SMTP mail sending
547
548 =cut
549
550 Set($SMTPDebug, 0);
551
552 =back
553
554 =head1 Other Mailer Configuration
555
556 =over 4
557
558 =item C<@MailParams>
559
560 C<@MailParams> defines a list of options passed to $MailCommand if it
561 is not 'sendmailpipe', 'sendmail', or 'smtp'
562
563 =cut
564
565 Set(@MailParams, ());
566
567 =item C<$CorrespondAddress>, C<$CommentAddress>
568
569 RT is designed such that any mail which already has a ticket-id associated
570 with it will get to the right place automatically.
571
572 C<$CorrespondAddress> and C<$CommentAddress> are the default addresses
573 that will be listed in From: and Reply-To: headers of correspondence
574 and comment mail tracked by RT, unless overridden by a queue-specific
575 address.
576
577 =cut
578
579 Set($CorrespondAddress , '');
580
581 Set($CommentAddress , '');
582
583 =item C<$DashboardAddress>
584
585 The email address from which RT will send dashboards. If none is set, then
586 C<$OwnerEmail> will be used.
587
588 =cut
589
590 Set($DashboardAddress, '');
591
592 =item C<$UseFriendlyFromLine>
593
594 By default, RT sets the outgoing mail's "From:" header to
595 "SenderName via RT".  Setting C<$UseFriendlyFromLine> to 0 disables it.
596
597 =cut
598
599 Set($UseFriendlyFromLine, 1);
600
601 =item C<$FriendlyFromLineFormat>
602
603 C<sprintf()> format of the friendly 'From:' header; its arguments
604 are SenderName and SenderEmailAddress.
605
606 =cut
607
608 Set($FriendlyFromLineFormat, "\"%s via RT\" <%s>");
609
610 =item C<$UseFriendlyToLine>
611
612 RT can optionally set a "Friendly" 'To:' header when sending messages to
613 Ccs or AdminCcs (rather than having a blank 'To:' header.
614
615 This feature DOES NOT WORK WITH SENDMAIL[tm] BRAND SENDMAIL
616 If you are using sendmail, rather than postfix, qmail, exim or some other MTA,
617 you _must_ disable this option.
618
619 =cut
620
621 Set($UseFriendlyToLine, 0);
622
623 =item C<$FriendlyToLineFormat>
624
625 C<sprintf()> format of the friendly 'To:' header; its arguments
626 are WatcherType and TicketId.
627
628 =cut
629
630 Set($FriendlyToLineFormat, "\"%s of ". RT->Config->Get('rtname') ." Ticket #%s\":;");
631
632 =item C<$NotifyActor>
633
634 By default, RT doesn't notify the person who performs an update, as they
635 already know what they've done. If you'd like to change this behaviour,
636 Set C<$NotifyActor> to 1
637
638 =cut
639
640 Set($NotifyActor, 0);
641
642 =item C<$RecordOutgoingEmail>
643
644 By default, RT records each message it sends out to its own internal database.
645 To change this behavior, set C<$RecordOutgoingEmail> to 0 
646
647 =cut
648
649 Set($RecordOutgoingEmail, 1);
650
651 =item C<$VERPPrefix>, C<$VERPPrefix>
652
653 VERP support (http://cr.yp.to/proto/verp.txt)
654
655 uncomment the following two directives to generate envelope senders
656 of the form C<${VERPPrefix}${originaladdress}@${VERPDomain}>
657 (i.e. rt-jesse=fsck.com@rt.example.com ).
658
659 This currently only works with sendmail and sendmailppie.
660
661 =cut
662
663 # Set($VERPPrefix, 'rt-');
664 # Set($VERPDomain, $RT::Organization);
665
666
667 =item C<$ForwardFromUser>
668
669 By default, RT forwards a message using queue's address and adds RT's tag into
670 subject of the outgoing message, so recipients' replies go into RT as correspondents.
671
672 To change this behavior, set C<$ForwardFromUser> to true value and RT will use
673 address of the current user and leave subject without RT's tag.
674
675 =cut
676
677 Set($ForwardFromUser, 0);
678
679 =item C<$ShowBccHeader>
680
681 By default RT hides from the web UI information about blind copies user sent on
682 reply or comment.
683
684 To change this set the following option to true value.
685
686 =cut
687
688 Set($ShowBccHeader, 0);
689
690 =item C<$DashboardSubject>
691
692 Lets you set the subject of dashboards. Arguments are the frequency (Daily,
693 Weekly, Monthly) of the dashboard and the dashboard's name. [_1] for the name
694 of the dashboard.
695
696 =cut
697
698 Set($DashboardSubject, '%s Dashboard: %s');
699
700 =back
701
702 =head1 GnuPG Configuration
703
704 A full description of the (somewhat extensive) GnuPG integration can be found 
705 by running the command `perldoc L<RT::Crypt::GnuPG>`  (or `perldoc
706         lib/RT/Crypt/GnuPG.pm` from your RT install directory).
707
708 =over 4
709
710 =item C<%GnuPG>
711
712 Set C<OutgoingMessagesFormat> to 'inline' to use inline encryption and
713 signatures instead of 'RFC' (GPG/MIME: RFC3156 and RFC1847) format.
714
715 If you want to allow people to encrypt attachments inside the DB then
716 set C<AllowEncryptDataInDB> to true
717
718 Set C<RejectOnMissingPrivateKey> to false if you don't want to reject
719 emails encrypted for key RT doesn't have and can not decrypt.
720
721 Set C<RejectOnBadData> to false if you don't want to reject letters
722 with incorrect GnuPG data.
723
724 =cut
725
726 Set( %GnuPG,
727     Enable => @RT_GPG@,
728     OutgoingMessagesFormat => 'RFC', # Inline
729     AllowEncryptDataInDB   => 0,
730
731     RejectOnMissingPrivateKey => 1,
732     RejectOnBadData           => 1,
733 );
734
735 =item C<%GnuPGOptions>
736
737 Options of GnuPG program.
738
739 If you override this in your RT_SiteConfig, you should be sure
740 to include a homedir setting.
741
742 NOTE that options with '-' character MUST be quoted.
743
744 =cut
745
746 Set(%GnuPGOptions,
747     homedir => '@RT_VAR_PATH@/data/gpg',
748
749 # URL of a keyserver
750 #    keyserver => 'hkp://subkeys.pgp.net',
751
752 # enables the automatic retrieving of keys when encrypting
753 #    'auto-key-locate' => 'keyserver',
754
755 # enables the automatic retrieving of keys when verifying signatures
756 #    'auto-key-retrieve' => undef,
757 );
758
759
760 =back
761
762 =head1 Logging Configuration
763
764 The default is to log anything except debugging
765 information to syslog.  Check the L<Log::Dispatch> POD for
766 information about how to get things by syslog, mail or anything
767 else, get debugging info in the log, etc.
768
769 It might generally make sense to send error and higher by email to
770 some administrator.  If you do this, be careful that this email
771 isn't sent to this RT instance.  Mail loops will generate a critical
772 log message.
773
774 =over 4
775
776 =item C<$LogToSyslog>, C<$LogToScreen>
777
778 The minimum level error that will be logged to the specific device.
779 From lowest to highest priority, the levels are:
780  debug info notice warning error critical alert emergency
781
782 =cut
783
784 Set($LogToSyslog    , 'info');
785 Set($LogToScreen    , 'info');
786
787 =item C<$LogToFile>, C<$LogDir>, C<$LogToFileNamed>
788
789 Logging to a standalone file is also possible, but note that the
790 file should needs to both exist and be writable by all direct users
791 of the RT API.  This generally include the web server, whoever
792 rt-crontool runs as.  Note that as rt-mailgate and the RT CLI go
793 through the webserver, so their users do not need to have write
794 permissions to this file. If you expect to have multiple users of
795 the direct API, Best Practical recommends using syslog instead of
796 direct file logging.
797
798 =cut
799
800 Set($LogToFile      , undef);
801 Set($LogDir, '@RT_LOG_PATH@');
802 Set($LogToFileNamed , "rt.log");    #log to rt.log
803
804 =item C<$LogStackTraces>
805
806 If set to a log level then logging will include stack traces for
807 messages with level equal to or greater than specified.
808
809 NOTICE: Stack traces include parameters supplied to functions or
810 methods. It is possible for stack trace logging to reveal sensitive
811 information such as passwords or ticket content in your logs.
812
813 =cut
814
815 Set($LogStackTraces, '');
816
817 =item C<@LogToSyslogConf>
818
819 On Solaris or UnixWare, set to ( socket => 'inet' ).  Options here
820 override any other options RT passes to L<Log::Dispatch::Syslog>.
821 Other interesting flags include facility and logopt.  (See the
822 L<Log::Dispatch::Syslog> documentation for more information.)  (Maybe
823 ident too, if you have multiple RT installations.)
824
825 =cut
826
827 Set(@LogToSyslogConf, ());
828
829 =item C<$StatementLog>,
830
831 RT has rudimentary SQL statement logging support if you have
832 DBIx-SearchBuilder 1.31_1 or higher; simply set C<$StatementLog> to be
833 the level that you wish SQL statements to be logged at.
834
835 =cut
836
837 Set($StatementLog, undef);
838
839 =back
840
841 =head1 Web Interface Configuration
842
843 =over 4
844
845 =item C<$WebDefaultStylesheet>
846
847 This determines the default stylesheet the RT web interface will use.
848 RT ships with several themes by default:
849
850   web2            The totally new, default layout for RT 3.8
851   3.5-default     RT 3.5 and 3.6 original layout
852   3.4-compat      A 3.4 compatibility stylesheet to make RT look
853                   (mostly) like 3.4
854
855 This bundled distibution of RT also includes (enabled by default):
856   freeside2.1     Integration with Freeside
857
858 This value actually specifies a directory in F<share/html/NoAuth/css/>
859 from which RT will try to load the file main.css (which should
860 @import any other files the stylesheet needs).  This allows you to
861 easily and cleanly create your own stylesheets to apply to RT.  This
862 option can be overridden by users in their preferences.
863
864 =cut
865
866 Set($WebDefaultStylesheet, 'freeside2.1');
867
868 =item C<$UsernameFormat>
869
870 This determines how user info is displayed. 'concise' will show one of 
871 either NickName, RealName, Name or EmailAddress, depending on what exists 
872 and whether the user is privileged or not. 'verbose' will show RealName and
873 EmailAddress.
874
875 =cut
876
877 Set($UsernameFormat, 'verbose');
878
879 =item C<$WebDomain>
880
881 Domain name of the RT server, eg 'www.example.com'. It should not contain
882 anything else, but server name.
883
884 =cut
885
886 Set( $WebDomain, 'localhost' );
887
888 =item C<$WebPort>
889
890 If we're running as a superuser, run on port 80
891 Otherwise, pick a high port for this user.
892
893 443 is default port for https protocol.
894
895 =cut
896
897 Set($WebPort, 80);# + ($< * 7274) % 32766 + ($< && 1024));
898
899 =item C<$WebPath>
900
901 If you're putting the web ui somewhere other than at the root of
902 your server, you should set C<$WebPath> to the path you'll be 
903 serving RT at.
904
905 C<$WebPath> requires a leading / but no trailing /, or it can be blank.
906
907 In most cases, you should leave C<$WebPath> set to '' (an empty value).
908
909 =cut
910
911 Set($WebPath, "");
912
913 =item C<$WebBaseURL>, C<$WebURL>
914
915 Usually you don't want to set these options. The only obviouse reason is
916 RT accessible via https protocol on non standard port, eg
917 'https://rt.example.com:9999'. In all other cases these options are computed
918 using C<$WebDomain>, C<$WebPort> and C<$WebPath>.
919
920 C<$WebBaseURL> is the scheme, server and port (eg 'http://rt.example.com')
921 for constructing urls to the web UI. C<$WebBaseURL> doesn't need a trailing /.
922
923 C<$WebURL> is the C<$WebBaseURL>, C<$WebPath> and trailing /, for example:
924 'http://www.example.com/rt/'.
925
926 =cut
927
928 my $port = RT->Config->Get('WebPort');
929 Set($WebBaseURL,
930     ($port == 443? 'https': 'http') .'://'
931     . RT->Config->Get('WebDomain')
932     . ($port != 80 && $port != 443? ":$port" : '')
933 );
934
935 Set($WebURL, RT->Config->Get('WebBaseURL') . RT->Config->Get('WebPath') . "/");
936
937 =item C<$WebImagesURL>
938
939 C<$WebImagesURL> points to the base URL where RT can find its images.
940 Define the directory name to be used for images in rt web
941 documents.
942
943 =cut
944
945 Set($WebImagesURL, RT->Config->Get('WebPath') . "/NoAuth/images/");
946
947 =item C<$LogoURL>
948
949 C<$LogoURL> points to the URL of the RT logo displayed in the web UI
950
951 =cut
952
953 Set($LogoURL, RT->Config->Get('WebImagesURL') . "bplogo.gif");
954
955 =item C<$LogoLinkURL>
956
957 C<$LogoLinkURL> is the URL that the RT logo hyperlinks to.
958
959 =cut
960
961 Set($LogoLinkURL, "http://bestpractical.com");
962
963 =item C<$LogoAltText>
964
965 C<$LogoAltText> is a string of text for the alt-text of the logo. It
966 will be passed through C<loc> for localization.
967
968 =cut
969
970 Set($LogoAltText, "Best Practical Solutions, LLC corporate logo");
971
972 =item C<$LogoImageHeight>
973
974 C<$LogoImageHeight> is the value of the C<height> attribute of the logo
975 C<img> tag.
976
977 =cut
978
979 Set($LogoImageHeight, 33);
980
981 =item C<$LogoImageWidth>
982
983 C<$LogoImageWidth> is the value of the C<width> attribute of the logo
984 C<img> tag.
985
986 =cut
987
988 Set($LogoImageWidth, 177);
989
990 =item C<$WebNoAuthRegex>
991
992 What portion of RT's URL space should not require authentication.
993
994 This is mostly for extension and doesn't mean RT will work without
995 login if you change it.
996
997 =cut
998
999 Set($WebNoAuthRegex, qr{^ /rt (?:/+NoAuth/ | /+REST/\d+\.\d+/NoAuth/) }x );
1000
1001 =item C<$SelfServiceRegex>
1002
1003 What portion of RT's URLspace should be accessible to Unprivileged users
1004 This does not override the redirect from F</Ticket/Display.html> to
1005 F</SelfService/Display.html> when Unprivileged users attempt to access
1006 ticked displays
1007
1008 =cut
1009
1010 Set($SelfServiceRegex, qr!^(?:/+SelfService/)!x );
1011
1012 =item C<$MessageBoxWidth>, C<$MessageBoxHeight>
1013
1014 For message boxes, set the entry box width, height and what type of
1015 wrapping to use.  These options can be overridden by users in their
1016 preferences.
1017
1018 Default width: 72, height: 15
1019
1020 These settings only apply to the non-RichText message box.
1021 See below for Rich Text settings.
1022
1023 =cut
1024
1025 Set($MessageBoxWidth, 72);
1026 Set($MessageBoxHeight, 15);
1027
1028 =item C<$MessageBoxWrap>
1029
1030 Default wrapping: "HARD"  (choices "SOFT", "HARD")
1031
1032 Wrapping is disabled when using MessageBoxRichText because
1033 of a bad interaction between IE and wrapping with the Rich
1034 Text Editor.
1035
1036 =cut
1037
1038 Set($MessageBoxWrap, "HARD");
1039
1040 =item C<$MessageBoxRichText>
1041
1042 Should "rich text" editing be enabled? This option lets your users send html email messages from the web interface.
1043
1044 =cut
1045
1046 Set($MessageBoxRichText, 1);
1047
1048 =item C<$MessageBoxRichTextHeight>
1049
1050 Height of RichText javascript enabled editing boxes (in pixels)
1051
1052 =cut
1053
1054 Set($MessageBoxRichTextHeight, 200);
1055
1056 =item C<$MessageBoxIncludeSignature>
1057
1058 Should your user's signatures (from their Preferences page) be included in Comments and Replies
1059
1060 =cut
1061
1062 Set($MessageBoxIncludeSignature, 1);
1063
1064 =item C<$MessageBoxIncludeSignatureOnComment>
1065
1066 Should your user's signatures (from their Preferences page) be included in Comments. Setting this to false overrides C<$MessageBoxIncludeSignature>.
1067
1068 =cut
1069
1070 Set($MessageBoxIncludeSignatureOnComment, 1);
1071
1072 =item C<$WikiImplicitLinks>
1073
1074 Support implicit links in WikiText custom fields?  A true value
1075 causes InterCapped or ALLCAPS words in WikiText fields to
1076 automatically become links to searches for those words.  If used on
1077 RTFM articles, it links to the RTFM article with that name.
1078
1079 =cut
1080
1081 Set($WikiImplicitLinks, 0);
1082
1083 =item C<$TrustHTMLAttachments>
1084
1085 if C<TrustHTMLAttachments> is not defined, we will display them
1086 as text. This prevents malicious HTML and javascript from being
1087 sent in a request (although there is probably more to it than that)
1088
1089 =cut
1090
1091 Set($TrustHTMLAttachments, undef);
1092
1093 =item C<$AlwaysDownloadAttachments>
1094
1095 Always download attachments, regardless of content type. If set,
1096 this overrides C<TrustHTMLAttachments>.
1097
1098 =cut
1099
1100 Set($AlwaysDownloadAttachments, undef);
1101
1102 =item C<$AttachmentUnits>
1103
1104 Controls the units (kilobytes or bytes) that attachment sizes use
1105 for display. The default is to display kilobytes if the attachment
1106 is larger than 1024 bytes, bytes otherwise. If you set
1107 C<$AttachmentUnits> to C<'k'> then attachment sizes will always be
1108 displayed in kilobytes. If set to C<'b'>, then sizes will be bytes.
1109
1110 =cut
1111
1112 Set($AttachmentUnits, undef);
1113
1114 =item C<$EditCustomFieldsSingleColumn>
1115
1116 When displaying a list of Ticket Custom Fields for editing, RT defaults
1117 to a 2 column list.  If you set this to 1, it will instead display the
1118 Custom Fields in a single column.
1119
1120 =cut
1121
1122 Set($EditCustomFieldsSingleColumn, 0);
1123
1124 =item C<$RedistributeAutoGeneratedMessages>
1125
1126 Should RT redistribute correspondence that it identifies as
1127 machine generated? A true value will do so; setting this to '0'
1128 will cause no such messages to be redistributed.
1129 You can also use 'privileged' (the default), which will redistribute
1130 only to privileged users. This helps to protect against malformed
1131 bounces and loops caused by autocreated requestors with bogus addresses.
1132
1133 =cut
1134
1135 Set($RedistributeAutoGeneratedMessages, 'privileged');
1136
1137 =item C<$PreferRichText>
1138
1139 If C<$PreferRichText> is set to a true value, RT will show HTML/Rich text
1140 messages in preference to their plaintext alternatives. RT "scrubs" the 
1141 html to show only a minimal subset of HTML to avoid possible contamination
1142 by cross-site-scripting attacks.
1143
1144 =cut
1145
1146 Set($PreferRichText, undef);
1147
1148 =item C<$WebExternalAuth>
1149
1150 If C<$WebExternalAuth> is defined, RT will defer to the environment's
1151 REMOTE_USER variable.
1152
1153 =cut
1154
1155 Set($WebExternalAuth, undef);
1156
1157 =item C<$WebExternalAuthContinuous>
1158
1159 If C<$WebExternalAuthContinuous> is defined, RT will check for the
1160 REMOTE_USER on each access.  If you would prefer this to only happen
1161 once (at initial login) set this to a false value.  The default setting
1162 will help ensure that if your external auth system deauthenticates a
1163 user, RT notices as soon as possible.
1164
1165 =cut
1166
1167 Set($WebExternalAuthContinuous, 1);
1168
1169 =item C<$WebFallbackToInternalAuth>
1170
1171 If C<$WebFallbackToInternalAuth> is defined, the user is allowed a chance
1172 of fallback to the login screen, even if REMOTE_USER failed.
1173
1174 =cut
1175
1176 Set($WebFallbackToInternalAuth , undef);
1177
1178 =item C<$WebExternalGecos>
1179
1180 C<$WebExternalGecos> means to match 'gecos' field as the user identity);
1181 useful with mod_auth_pwcheck and IIS Integrated Windows logon.
1182
1183 =cut
1184
1185 Set($WebExternalGecos , undef);
1186
1187 =item C<$WebExternalAuto>
1188
1189 C<$WebExternalAuto> will create users under the same name as REMOTE_USER
1190 upon login, if it's missing in the Users table.
1191
1192 =cut
1193
1194 Set($WebExternalAuto , undef);
1195
1196 =item C<$AutoCreate>
1197
1198 If C<$WebExternalAuto> is true, C<$AutoCreate> will be passed to User's
1199 Create method.  Use it to set defaults, such as creating 
1200 Unprivileged users with C<{ Privileged => 0 }>
1201 ( Must be a hashref of arguments )
1202
1203 =cut
1204
1205 Set($AutoCreate, undef);
1206
1207 =item C<$WebSessionClass>
1208
1209 C<$WebSessionClass> is the class you wish to use for managing Sessions.
1210 It defaults to use your SQL database, but if you are using MySQL 3.x and
1211 plans to use non-ascii Queue names, uncomment and add this line to
1212 F<RT_SiteConfig.pm> will prevent session corruption.
1213
1214 =cut
1215
1216 # Set($WebSessionClass , 'Apache::Session::File');
1217
1218 =item C<$AutoLogoff>
1219
1220 By default, RT's user sessions persist until a user closes his or her 
1221 browser. With the C<$AutoLogoff> option you can setup session lifetime in 
1222 minutes. A user will be logged out if he or she doesn't send any requests 
1223 to RT for the defined time.
1224
1225 =cut
1226
1227 Set($AutoLogoff, 0);
1228
1229 =item C<$LogoutRefresh>
1230
1231 The number of seconds to wait after logout before sending the user to the
1232 login page. By default, 1 second, though you may want to increase this if
1233 you display additional information on the logout page.
1234
1235 =cut
1236
1237 Set($LogoutRefresh, 1);
1238
1239 =item C<$WebSecureCookies>
1240
1241 By default, RT's session cookie isn't marked as "secure" Some web browsers 
1242 will treat secure cookies more carefully than non-secure ones, being careful
1243 not to write them to disk, only send them over an SSL secured connection 
1244 and so on. To enable this behaviour, set C<$WebSecureCookies> to a true value. 
1245 NOTE: You probably don't want to turn this on _unless_ users are only connecting
1246 via SSL encrypted HTTP connections.
1247
1248 =cut
1249
1250 Set($WebSecureCookies, 0);
1251
1252 =item C<$WebFlushDbCacheEveryRequest>
1253
1254 By default, RT clears its database cache after every page view.
1255 This ensures that you've always got the most current information 
1256 when working in a multi-process (mod_perl or FastCGI) Environment
1257 Setting C<$WebFlushDbCacheEveryRequest> to '0' will turn this off,
1258 which will speed RT up a bit, at the expense of a tiny bit of data 
1259 accuracy.
1260
1261 =cut
1262
1263 Set($WebFlushDbCacheEveryRequest, '1');
1264
1265
1266 =item C<$MaxInlineBody>
1267
1268 C<$MaxInlineBody> is the maximum attachment size that we want to see
1269 inline when viewing a transaction.  RT will inline any text if value
1270 is undefined or 0.  This option can be overridden by users in their
1271 preferences.
1272
1273 =cut
1274
1275 Set($MaxInlineBody, 12000);
1276
1277 =item C<$DefaultSummaryRows>
1278
1279 C<$DefaultSummaryRows> is default number of rows displayed in for search
1280 results on the frontpage.
1281
1282 =cut
1283
1284 Set($DefaultSummaryRows, 10);
1285
1286 =item C<$HomePageRefreshInterval>
1287
1288 C<$HomePageRefreshInterval> is default number of seconds to refresh the RT
1289 home page. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
1290
1291 =cut
1292
1293 Set($HomePageRefreshInterval, 0);
1294
1295 =item C<$SearchResultsRefreshInterval>
1296
1297 C<$SearchResultsRefreshInterval> is default number of seconds to refresh
1298 search results in RT. Choose from [0, 120, 300, 600, 1200, 3600, 7200].
1299
1300 =cut
1301
1302 Set($SearchResultsRefreshInterval, 0);
1303
1304 =item C<$ResolveDefaultUpdateType>
1305
1306 Set the default Update Type when clicking the Resolve link in the Ticket
1307 links tab.
1308
1309   Comment            Comments (Not sent to requestors)
1310   Respond            Reply to requestors
1311
1312 =cut
1313
1314 Set($ResolveDefaultUpdateType, 'Comment');
1315
1316 =item C<$SuppressAutoOpenOnUpdate>
1317
1318 When users click Comment or Reply on a new ticket in the web UI, the default
1319 status for the ticket gets set to 'open' if the status is currently 'new'.
1320 Setting this option to 1 will suppress that behavior and leave the default
1321 status as 'new'. This option can be overridden by users in their preferences.
1322
1323 =cut
1324
1325 Set($SuppressAutoOpenOnUpdate, 0);
1326
1327 =item C<$OldestTransactionsFirst>
1328
1329 By default, RT shows newest transactions at the bottom of the ticket
1330 history page, if you want see them at the top set this to '0'.  This
1331 option can be overridden by users in their preferences.
1332
1333 =cut
1334
1335 Set($OldestTransactionsFirst, '1');
1336
1337 =item C<$ShowTransactionImages>
1338
1339 By default, RT shows images attached to incoming (and outgoing) ticket updates
1340 inline. Set this variable to 0 if you'd like to disable that behaviour
1341
1342 =cut
1343
1344 Set($ShowTransactionImages, 1);
1345
1346 =item C<$PlainTextPre>
1347
1348 Normally plaintext attachments are displayed as HTML with line
1349 breaks preserved.  This causes space- and tab-based formatting not
1350 to be displayed correctly.  By setting $PlainTextPre they'll be
1351 displayed using <pre> instead so such formatting works, but they'll
1352 use a monospaced font, no matter what the value of C<$PlainTextMono> is.
1353
1354 =cut
1355
1356 Set($PlainTextPre, 0);
1357
1358
1359 =item C<$PlainTextMono> 
1360 To display plaintext attachments,
1361 Set C<$PlainTextMono> to 1 to use monospaced font and preserve
1362 formatting, but unlike PlainTextPre, the text will wrap to fit into the
1363 UI.
1364
1365 =cut
1366
1367 Set($PlainTextMono, 0);
1368
1369 =item C<$ShowUnreadMessageNotifications>
1370
1371 By default, RT will prompt users when there are new, unread messages on
1372 tickets they are viewing.
1373
1374 Set C<$ShowUnreadMessageNotifications> to a false value to disable this feature.
1375
1376 =cut
1377
1378 Set($ShowUnreadMessageNotifications, 1);
1379
1380
1381 =item C<$HomepageComponents>
1382
1383 C<$HomepageComponents> is an arrayref of allowed components on a user's
1384 customized homepage ("RT at a glance").
1385
1386 =cut
1387
1388 Set($HomepageComponents, [qw(QuickCreate Quicksearch MyCalendar MyAdminQueues MySupportQueues MyReminders RefreshHomepage Dashboards)]);
1389
1390 =item C<@MasonParameters>
1391
1392 C<@MasonParameters> is the list of parameters for the constructor of
1393 HTML::Mason's Apache or CGI Handler.  This is normally only useful
1394 for debugging, eg. profiling individual components with:
1395
1396     use MasonX::Profiler; # available on CPAN
1397     Set(@MasonParameters, (preamble => 'my $p = MasonX::Profiler->new($m, $r);'));
1398
1399 =cut
1400
1401 Set(@MasonParameters, ());
1402
1403 =item C<$DefaultSearchResultFormat>
1404
1405 C<$DefaultSearchResultFormat> is the default format for RT search results
1406
1407 =cut
1408
1409 Set ($DefaultSearchResultFormat, qq{
1410    '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__id__</a></B>/TITLE:#',
1411    '<B><A HREF="__WebPath__/Ticket/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
1412    Customer,
1413    Status,
1414    QueueName,
1415    OwnerName, 
1416    Priority, 
1417    '__NEWLINE__',
1418    '',
1419    '<small>__Requestors__</small>',
1420    '<small>__CustomerTags__</small>',
1421    '<small>__CreatedRelative__</small>',
1422    '<small>__ToldRelative__</small>',
1423    '<small>__LastUpdatedRelative__</small>',
1424    '<small>__TimeLeft__</small>'});
1425
1426 =item C<$DefaultSelfServiceSearchResultFormat>
1427
1428 C<$DefaultSelfServiceSearchResultFormat> is the default format of searches displayed in the 
1429 SelfService interface.
1430
1431 =cut
1432
1433 Set($DefaultSelfServiceSearchResultFormat, qq{
1434    '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__id__</a></B>/TITLE:#',
1435    '<B><A HREF="__WebPath__/SelfService/Display.html?id=__id__">__Subject__</a></B>/TITLE:Subject',
1436    Status,
1437    Requestors,
1438    OwnerName});
1439
1440 =item C<%AdminSearchResultFormat>
1441
1442 In admin interface format strings similar to tickets search result
1443 formats are used. Use C<%AdminSearchResultFormat> to define format
1444 strings per RT class.
1445
1446 =cut
1447
1448 Set(%AdminSearchResultFormat,
1449     Queues =>
1450         q{'<a href="__WebPath__/Admin/Queues/Modify.html?id=__id__">__id__</a>/TITLE:#'}
1451         .q{,'<a href="__WebPath__/Admin/Queues/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
1452         .q{,__Description__,__Address__,__Priority__,__DefaultDueIn__,__Disabled__},
1453
1454     Groups =>
1455         q{'<a href="__WebPath__/Admin/Groups/Modify.html?id=__id__">__id__</a>/TITLE:#'}
1456         .q{,'<a href="__WebPath__/Admin/Groups/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
1457         .q{,'__Description__'},
1458
1459     Users =>
1460         q{'<a href="__WebPath__/Admin/Users/Modify.html?id=__id__">__id__</a>/TITLE:#'}
1461         .q{,'<a href="__WebPath__/Admin/Users/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
1462         .q{,__RealName__, __EmailAddress__},
1463
1464     CustomFields =>
1465         q{'<a href="__WebPath__/Admin/CustomFields/Modify.html?id=__id__">__id__</a>/TITLE:#'}
1466         .q{,'<a href="__WebPath__/Admin/CustomFields/Modify.html?id=__id__">__Name__</a>/TITLE:Name'}
1467         .q{,__AppliedTo__, __FriendlyType__, __FriendlyPattern__},
1468
1469     Scrips => 
1470         q{'<a href="__WebPath__/__WebRequestPathDir__/Scrip.html?id=__id__&Queue=__QueueId__">__id__</a>/TITLE:#'}
1471         .q{,'<a href="__WebPath__/__WebRequestPathDir__/Scrip.html?id=__id__&Queue=__QueueId__">__Description__</a>/TITLE:Description'}
1472         .q{,__Stage__, __Condition__, __Action__, __Template__},
1473
1474     Templates =>
1475         q{'<a href="__WebPath__/__WebRequestPathDir__/Template.html?Queue=__QueueId__&Template=__id__">__id__</a>/TITLE:#'}
1476         .q{,'<a href="__WebPath__/__WebRequestPathDir__/Template.html?Queue=__QueueId__&Template=__id__">__Name__</a>/TITLE:Name'}
1477         .q{,'__Description__'},
1478 );
1479
1480 =item C<$SuppressInlineTextFiles>
1481
1482 If C<$SuppressInlineTextFiles> is set to a true value, then uploaded
1483 text files (text-type attachments with file names) are prevented
1484 from being displayed in-line when viewing a ticket's history.
1485
1486 =cut
1487
1488 Set($SuppressInlineTextFiles, undef);
1489
1490 =item C<$DontSearchFileAttachments>
1491
1492 If C<$DontSearchFileAttachments> is set to a true value, then uploaded
1493 files (attachments with file names) are not searched during full-content
1494 ticket searches.
1495
1496 =cut
1497
1498 Set($DontSearchFileAttachments, undef);
1499
1500 =item C<%ChartFont>
1501
1502 The L<GD> module (which RT uses for graphs) ships with a builtin font 
1503 that doesn't have full Unicode support. You can use a given TrueType font 
1504 for a specific language by setting %ChartFont to (language =E<gt> the 
1505 absolute path of a font) pairs. Your GD library must have support for
1506 TrueType fonts to use this option. If there is no entry for a language 
1507 in the hash then font with 'others' key is used.
1508
1509 RT comes with two TrueType fonts covering most available languages.
1510
1511 =cut
1512
1513 Set(
1514     %ChartFont,
1515     'zh-cn'  => "$RT::BasePath/share/fonts/DroidSansFallback.ttf",
1516     'zh-tw'  => "$RT::BasePath/share/fonts/DroidSansFallback.ttf",
1517     'ja'     => "$RT::BasePath/share/fonts/DroidSansFallback.ttf",
1518     'others' => "$RT::BasePath/share/fonts/DroidSans.ttf",
1519 );
1520
1521 =item C<$ChartsTimezonesInDB>
1522
1523 RT stores dates using the UTC timezone in the DB, so charts grouped
1524 by dates and time are not representative. Set C<$ChartsTimezonesInDB>
1525 to a true value to enable timezone conversions using your DB's
1526 capabilities. You may need to do some work on the DB side to use this
1527 feature, read more in F<docs/timezones_in_charts.pod>.
1528
1529 At this time, this feature only applies to MySQL and PostgreSQL.
1530
1531 =cut
1532
1533 Set( $ChartsTimezonesInDB, 0 );
1534
1535 =item C<@Active_MakeClicky>
1536
1537 MakeClicky detects various formats of data in headers and email
1538 messages, and extends them with supporting links.  By default, RT
1539 provides two formats:
1540
1541 * 'httpurl': detects http:// and https:// URLs and adds '[Open URL]'
1542   link after the URL.
1543
1544 * 'httpurl_overwrite': also detects URLs as 'httpurl' format, but
1545   replace URL with link and *adds spaces* into text if it's longer
1546   then 30 chars. This allow browser to wrap long URLs and avoid
1547   horizontal scrolling.
1548
1549 See F<share/html/Elements/MakeClicky> for documentation on how to add your own.
1550
1551 =cut
1552
1553 Set(@Active_MakeClicky, qw());
1554
1555 =item C<$DefaultQueue>
1556
1557 Use this to select the default queue name that will be used for creating new
1558 tickets. You may use either the queue's name or its ID. This only affects the
1559 queue selection boxes on the web interface.
1560
1561 =cut
1562
1563 #Set($DefaultQueue, 'General');
1564
1565 =item C<$DefaultTimeUnitsToHours>
1566
1567 Use this to set the default units for time entry to hours instead of minutes.
1568
1569 =cut
1570
1571 Set($DefaultTimeUnitsToHours, 0);
1572
1573 =item C<$SimpleSearchIncludeResolved>
1574
1575 By default, the simple ticket search in the top bar excludes "resolved" tickets
1576 unless a status argument is specified.  Set this to a true value to include 
1577 them.
1578
1579 =cut
1580
1581 Set($SimpleSearchIncludeResolved, 0);
1582
1583 =back
1584
1585 =head1 L<Net::Server> (rt-server) Configuration
1586
1587 =over 4
1588
1589 =item C<$StandaloneMinServers>, C<$StandaloneMaxServers>
1590
1591 The absolute minimum and maximum number of servers that will be created to
1592 handle requests. Having multiple servers means that serving a slow page will
1593 affect other users less.
1594
1595 =cut
1596
1597 Set($StandaloneMinServers, 1);
1598 Set($StandaloneMaxServers, 1);
1599
1600 =item C<$StandaloneMinSpareServers>, C<$StandaloneMaxSpareServers>
1601
1602 These next two options can be used to scale up and down the number of servers
1603 to adjust to load. These two options will respect the C<$StandaloneMinServers
1604 > and C<$StandaloneMaxServers options>.
1605
1606 =cut
1607
1608 Set($StandaloneMinSpareServers, 0);
1609 Set($StandaloneMaxSpareServers, 0);
1610
1611 =item C<$StandaloneMaxRequests>
1612
1613 This sets the absolute maximum number of requests a single server will serve.
1614 Setting this would be useful if, for example, memory usage slowly crawls up
1615 every hit.
1616
1617 =cut
1618
1619 #Set($StandaloneMaxRequests, 50);
1620
1621 =item C<%NetServerOptions>
1622
1623 C<%NetServerOptions> is a hash of additional options to use for
1624 L<Net::Server/DEFAULT ARGUMENTS>. For example, you could set
1625 reverse_lookups to get the hostnames for all users with:
1626
1627 C<Set(%NetServerOptions, (reverse_lookups => 1));>
1628
1629 =cut
1630
1631 Set(%NetServerOptions, ());
1632
1633 =back
1634
1635
1636 =head1 UTF-8 Configuration
1637
1638 =over 4
1639
1640 =item C<@LexiconLanguages>
1641
1642 An array that contains languages supported by RT's internationalization
1643 interface.  Defaults to all *.po lexicons; setting it to C<qw(en ja)> will make
1644 RT bilingual instead of multilingual, but will save some memory.
1645
1646 =cut
1647
1648 Set(@LexiconLanguages, qw(*));
1649
1650 =item C<@EmailInputEncodings>
1651
1652 An array that contains default encodings used to guess which charset
1653 an attachment uses if not specified.  Must be recognized by
1654 L<Encode::Guess>.
1655
1656 =cut
1657
1658 Set(@EmailInputEncodings, qw(utf-8 iso-8859-1 us-ascii));
1659
1660 =item C<$EmailOutputEncoding>
1661
1662 The charset for localized email.  Must be recognized by Encode.
1663
1664 =cut
1665
1666 Set($EmailOutputEncoding, 'utf-8');
1667
1668
1669 =back
1670
1671 =head1 Date Handling Configuration
1672
1673 =over 4
1674
1675 =item C<$DateTimeFormat>
1676
1677 You can choose date and time format.  See "Output formatters"
1678 section in perldoc F<lib/RT/Date.pm> for more options.  This option can
1679 be overridden by users in their preferences.
1680 Some examples:
1681
1682 C<Set($DateTimeFormat, 'LocalizedDateTime');>
1683 C<Set($DateTimeFormat, { Format => 'ISO', Seconds => 0 });>
1684 C<Set($DateTimeFormat, 'RFC2822');>
1685 C<Set($DateTimeFormat, { Format => 'RFC2822', Seconds => 0, DayOfWeek => 0 });>
1686
1687 =cut
1688
1689 Set($DateTimeFormat, 'DefaultFormat');
1690
1691 # Next two options are for Time::ParseDate
1692
1693 =item C<$DateDayBeforeMonth>
1694
1695 Set this to 1 if your local date convention looks like "dd/mm/yy" instead of
1696 "mm/dd/yy". Used only for parsing, not for displaying dates.
1697
1698 =cut
1699
1700 Set($DateDayBeforeMonth , 1);
1701
1702 =item C<$AmbiguousDayInPast>, C<$AmbiguousDayInFuture>
1703
1704 Should an unspecified day or year in a date refer to a future or a
1705 past value? For example, should a date of "Tuesday" default to mean
1706 the date for next Tuesday or last Tuesday? Should the date "March 1"
1707 default to the date for next March or last March?
1708
1709 Set $<AmbiguousDayInPast> for the last date, or $<$AmbiguousDayInFuture> for the
1710 next date.
1711
1712 The default is usually good.
1713
1714 =cut
1715
1716 Set($AmbiguousDayInPast, 0);
1717 Set($AmbiguousDayInFuture, 0);
1718
1719 =back
1720
1721 =head1 Approval Configuration
1722
1723 Configuration for the approval system
1724
1725 =over 4
1726
1727 =item C<$ApprovalRejectionNotes>
1728
1729 Should rejection notes be sent to the requestors?  The default is true.
1730
1731 =cut
1732
1733 Set($ApprovalRejectionNotes, 1);
1734
1735
1736 =back
1737
1738 =head1 Miscellaneous Configuration
1739
1740 =over 4
1741
1742 =item C<@ActiveStatus>, C<@InactiveStatus>
1743
1744 You can define new statuses and even reorder existing statuses here.
1745 WARNING. DO NOT DELETE ANY OF THE DEFAULT STATUSES. If you do, RT
1746 will break horribly. The statuses you add must be no longer than
1747 10 characters.
1748
1749 =cut
1750
1751 Set(@ActiveStatus, qw(new open stalled));
1752 Set(@InactiveStatus, qw(resolved rejected deleted));
1753
1754 =item C<$LinkTransactionsRun1Scrip>
1755
1756 RT-3.4 backward compatibility setting. Add/Delete Link used to record one
1757 transaction and run one scrip. Set this value to 1 if you want
1758 only one of the link transactions to have scrips run.
1759
1760 =cut
1761
1762 Set($LinkTransactionsRun1Scrip, 0);
1763
1764 =item C<$StrictLinkACL>
1765
1766 When this feature is enabled a user needs I<ModifyTicket> rights on both
1767 tickets to link them together, otherwise he can have rights on either of
1768 them.
1769
1770 =cut
1771
1772 Set($StrictLinkACL, 1);
1773
1774 =item C<$PreviewScripMessages>
1775
1776 Set C<$PreviewScripMessages> to 1 if the scrips preview on the ticket
1777 reply page should include the content of the messages to be sent.
1778
1779 =cut
1780
1781 Set($PreviewScripMessages, 0);
1782
1783 =item C<$UseTransactionBatch>
1784
1785 Set C<$UseTransactionBatch> to 1 to execute transactions in batches,
1786 such that a resolve and comment (for example) would happen
1787 simultaneously, instead of as two transactions, unaware of each
1788 others' existence.
1789
1790 =cut
1791
1792 Set($UseTransactionBatch, 1);
1793
1794 =item C<@CustomFieldValuesSources>
1795
1796 Set C<@CustomFieldValuesSources> to a list of class names which extend
1797 L<RT::CustomFieldValues::External>.  This can be used to pull lists of
1798 custom field values from external sources at runtime.
1799
1800 =cut
1801
1802 Set(@CustomFieldValuesSources, ('RT::CustomFieldValues::Queues'));
1803
1804 =item C<$CanonicalizeRedirectURLs>
1805
1806 Set C<$CanonicalizeRedirectURLs> to 1 to use $C<WebURL> when redirecting rather
1807 than the one we get from C<%ENV>.
1808
1809 If you use RT behind a reverse proxy, you almost certainly want to
1810 enable this option.
1811
1812 =cut
1813
1814 Set($CanonicalizeRedirectURLs, 0);
1815 =item C<$EnableReminders>
1816
1817 Hide links/portlets related to Reminders by setting this to 0
1818
1819 =cut
1820
1821 Set($EnableReminders,1);
1822
1823
1824 =item C<@Plugins>
1825
1826 Set C<@Plugins> to a list of external RT plugins that should be enabled (those
1827 plugins have to be previously downloaded and installed).
1828 Example:
1829
1830 C<Set(@Plugins, (qw(Extension::QuickDelete RT::FM)));>
1831
1832 =cut
1833
1834 Set(@Plugins, (qw(RTx::Calendar
1835                   RT::Extension::MobileUI))); #RTx::Checklist ));
1836
1837 =back
1838
1839 =head1 Development Configuration
1840
1841 =over 4
1842
1843 =item C<$DevelMode>
1844
1845 RT comes with a "Development mode" setting. 
1846 This setting, as a convenience for developers, turns on 
1847 all sorts of development options that you most likely don't want in 
1848 production:
1849
1850 * Turns off Mason's 'static_source' directive. By default, you can't 
1851   edit RT's web ui components on the fly and have RT magically pick up
1852   your changes. (It's a big performance hit)
1853
1854  * More to come
1855
1856 =cut
1857
1858 Set($DevelMode, '@RT_DEVEL_MODE@');
1859
1860
1861 =back
1862
1863 =head1 Deprecated Options
1864
1865 =over 4
1866
1867 =item C<$AlwaysUseBase64>
1868
1869 Encode blobs as base64 in DB (?)
1870
1871 =item C<$TicketBaseURI>
1872
1873 Base URI to tickets in this system; used when loading (?)
1874
1875 =item C<$UseCodeTickets>
1876
1877 This option is exists for backwards compatibility.  Don't use it.
1878
1879 =back
1880
1881 =cut
1882
1883 1;