my $zone = "UTC";
$zone=`/bin/cat /etc/timezone`
    if -f "/etc/timezone";
chomp $zone;
Set($Timezone, $zone);
# end   /etc/request-tracker4/RT_SiteConfig.d/40-timezone
# start /etc/request-tracker4/RT_SiteConfig.d/50-mmrtbaseconf
# THE BASICS:
Set($rtname, 'mm');
Set($Organization, 'company.com');
Set($CorrespondAddress , 'rt@rt.company.com');
Set($CommentAddress , 'rt-comment@rt.company.com');

# THE WEBSERVER:
Set($WebPath , "");
Set($WebBaseURL , "https://rt.company.com");
Set($WebPort, 443);
Set($WebDomain, "rt.company.com");

# TWEAKS
# for accurate search results
Set($UseSQLForACLChecks , 1);
# allow rt and mm as email tag
Set($EmailSubjectTagRegex, qr/(?:rt|mm)/i );
# outgoing emails should use the queues email address
Set($SetOutgoingMailFrom, 1);
Set(@Active_MakeClicky, qw());
Set($UseFriendlyFromLine, 1);
# disable reminders
Set($EnableReminders, 0);
Set($AutocompleteOwners, 1);
Set($SimplifiedRecipients, 1);
Set($UseTransactionBatch, '1');

# LOGGING:
Set($LogToFile , 'debug');
# Possible are debug info notice warning error critical alert emergency
Set($LogDir, '/var/log/request-tracker4');
Set($LogToFileNamed , "rt.log");
#Set($LogStackTraces, '5');
Set($DevelMode, '0');

# EXTENSIONS
# Definition
Set(@Plugins,qw(RT::Authen::ExternalAuth RT::Extension::QueueDeactivatedScrips RT::Extension::CommandByMail RT::Extension::SpawnLinkedTicketInQueue RT::Extension::Utils RT::Extension::LDAPImport));
Set(@MailPlugins, qw(Auth::MailFrom Filter::TakeAction));

# LDAP Import
Set($LDAPHost,"ldaps://ldap.company1.net:3269");
Set($LDAPUser, "CN=RTConnectAD,OU=RT,OU=!Ress,DC=company,DC=net");
Set($LDAPPassword, "***");
Set($LDAPBase, "DC=company,DC=net");
#Set($LDAPFilter, "(&(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))");
Set($LDAPFilter, "(&(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(!(extensionAttribute6=1)))");
#Set($LDAPFilter, "(&(mail=*)(!(userAccountControl:1.2.840.113556.1.4.803:=2))(msExchHideFromAddressLists=FALSE))");
Set($LDAPMapping, {Name         => 'sAMAccountName',
                    EmailAddress => 'mail',
                    RealName     => 'cn',
                    Organization => 'physicalDeliveryOfficeName'});

# External Auth
Set($ExternalAuthPriority,  [   'COMPANY1_LDAP',
                                'COMPANY2_LDAP'
                            ]
);
Set($ExternalInfoPriority,  [   'COMPANY1_LDAP',
                                'COMPANY2_LDAP'
                            ]
);
Set($ExternalServiceUsesSSLorTLS,    1);

Set($AutoCreateNonExternalUsers,    1);

Set($ExternalSettings,      {
                                'COMPANY1_LDAP'       =>  {   ## GENERIC SECTION
                                                        'type'                      =>  'ldap',
                                                        'auth'                      =>  1,
                                                        'info'                      =>  1,
                                                        'server'                    =>  'dc.company1.net',
                                                        'user'                      =>  'RTConnectAD@company1.net',
                                                        'pass'                      =>  '***',
                                                        'base'                      =>  'DC=company1,DC=net',
                                                        'filter'                    =>  '(objectClass=person)',
                                                        'd_filter'                  =>  '(userAccountControl:1.2.840.113556.1.4.803:=2)',
                                                        'tls'                       =>  1,
                                                        'net_ldap_args'             => [    version =>  3   ],
                                                        ## RT ATTRIBUTE MATCHING SECTION
                                                        # The list of RT attributes that uniquely identify a user
                                                        'attr_match_list'           => [    'Name',
                                                                                            'EmailAddress',
                                                                                        ],
                                                        # The mapping of RT attributes on to LDAP attributes
                                                        'attr_map'                  =>  {   'Name' => 'sAMAccountName',
                                                                                            'EmailAddress' => 'mail',
                                                                                            'Organization' => 'physicalDeliveryOfficeName',
                                                                                            'RealName' => 'cn'
                                                                                        }
                                                      },
                                'COMPANY2_LDAP'       =>  {
                                                        'type'                      =>  'ldap',
                                                        'auth'                      =>  1,
                                                        'info'                      =>  1,
                                                        'server'                    =>  'dc.company2.net',
                                                        'user'                      =>  'RTConnectAD@company2.net',
                                                        'pass'                      =>  '***',
                                                        'base'                      =>  'DC=company2,DC=net',
                                                        'filter'                    =>  '(objectClass=person)',
                                                        'd_filter'                  =>  '(userAccountControl:1.2.840.113556.1.4.803:=2)',
                                                        'tls'                       =>  1,
                                                        # What other args should I pass to Net::LDAP->new($host,@args)?
                                                        'net_ldap_args'             => [    version =>  3   ],
                                                        # Does authentication depend on group membership? What group name?
                                                        #'group'                     =>  '',
                                                        # What is the attribute for the group object that determines membership?
                                                        #'group_attr'                =>  'GROUP_ATTR',
                                                        # The list of RT attributes that uniquely identify a user
                                                        'attr_match_list'           => [    'Name',
                                                                                            'EmailAddress',
                                                                                        ],
                                                        # The mapping of RT attributes on to LDAP attributes
                                                        'attr_map'                  =>  {   'Name' => 'sAMAccountName',
                                                                                            'EmailAddress' => 'mail',
                                                                                            'Organization' => 'physicalDeliveryOfficeName',
                                                                                            'RealName' => 'cn'
                                                                                        }
                     }
                                }
);
# end   /etc/request-tracker4/RT_SiteConfig.d/50-mmrtbaseconf
# start /etc/request-tracker4/RT_SiteConfig.d/60-mmdbconf
# THE DATABASE:
# ProdDB
Set($DatabaseType, 'mysql');
Set($DatabaseHost, 'mysql.company.com');
Set($DatabasePort, '');
Set($DatabaseUser , 'rt');
Set($DatabasePassword , '***');
Set ($DatabaseName, 'db_rt');
# end   /etc/request-tracker4/RT_SiteConfig.d/60-mmdbconf
# start /etc/request-tracker4/RT_SiteConfig.d/70-mmlifecycles
Set(%Lifecycles,
    default => {
        initial         => [ 'new' ],
        active          => [ 'open', 'stalled', 'waiting', 'finished' ],
        inactive        => [ 'resolved', 'rejected', 'deleted' ],

        defaults => {
            on_create => 'new',
            on_merge  => 'resolved',
            approved  => 'open',
            denied    => 'rejected',
        },

        transitions => {
            ''       => [qw(new open resolved)],

            # from   => [ to list ],
            new      => [qw(open stalled resolved rejected deleted)],
            open     => [qw(new stalled waiting finished resolved rejected deleted)],
            stalled  => [qw(new open waiting finished rejected resolved deleted)],
            waiting  => [qw(new open stalled finished rejected resolved deleted)],
            finished  => [qw(new open stalled waiting rejected resolved deleted)],
            resolved => [qw(new open stalled waiting finished rejected deleted)],
            rejected => [qw(new open stalled waiting finished resolved deleted)],
            deleted  => [qw(new open stalled waiting finished rejected resolved)],
        },
        rights => {
            '* -> deleted'  => 'DeleteTicket',
            '* -> *'        => 'ModifyTicket',
        },
        actions => [
            'new -> open'      => {
                label  => 'Open It', # loc
                update => 'Respond',
            },
            'new -> resolved'  => {
                label  => 'Resolve', # loc
                update => 'Comment',
            },
            'new -> rejected'  => {
                label  => 'Reject', # loc
                update => 'Respond',
            },
            'new -> deleted'   => {
                label  => 'Delete', # loc
            },

            'open -> stalled'  => {
                label  => 'Stall', # loc
                update => 'Comment',
            },
            'open -> waiting'  => {
                label  => 'Put on Wait', # loc
                update => 'Comment',
            },
            'open -> finished'  => {
                label  => 'Put on Finished', # loc
                update => 'Comment',
            },
            'open -> resolved' => {
                label  => 'Resolve', # loc
                update => 'Comment',
            },
            'open -> rejected' => {
                label  => 'Reject', # loc
                update => 'Respond',
            },
            'stalled -> open'  => {
                label  => 'Open It', # loc
                update => 'Comment',
            },
            'stalled -> waiting'  => {
                label  => 'Put on Wait', # loc
                update => 'Comment',
            },
            'stalled -> finished'  => {
                label  => 'Finished', # loc
                update => 'Comment',
            },
            'stalled -> resolved'  => {
                label  => 'Resolve', # loc
                update => 'Comment',
            },
            'waiting -> open'  => {
                label  => 'Open It', # loc
                update => 'Comment',
            },
            'waiting -> finished'  => {
                label  => 'Finished', # loc
                update => 'Comment',
            },
            'waiting -> resolved'  => {
                label  => 'Resolve', # loc
                update => 'Comment',
            },
            'finished -> open' => {
                label  => 'Re-open', # loc
                update => 'Comment',
            },
            'finished -> resolved' => {
                label  => 'Resolve', # loc
                update => 'Comment',
            },
            'resolved -> open' => {
                label  => 'Re-open', # loc
                update => 'Comment',
            },
            'rejected -> open' => {
                label  => 'Re-open', # loc
                update => 'Comment',
            },
            'deleted -> open'  => {
                label  => 'Undelete', # loc
            },
        ],
    },
# don't change lifecyle of the approvals, they are not capable to deal with
# custom statuses
    approvals => {
        initial         => [ 'new' ],
        active          => [ 'open', 'stalled' ],
        inactive        => [ 'resolved', 'rejected', 'deleted' ],

        defaults => {
            on_create => 'new',
            on_merge => 'resolved',
        },

        transitions => {
            ''       => [qw(new open resolved)],

            # from   => [ to list ],
            new      => [qw(open stalled resolved rejected deleted)],
            open     => [qw(new stalled resolved rejected deleted)],
            stalled  => [qw(new open rejected resolved deleted)],
            resolved => [qw(new open stalled rejected deleted)],
            rejected => [qw(new open stalled resolved deleted)],
            deleted  => [qw(new open stalled rejected resolved)],
        },
        rights => {
            '* -> deleted'  => 'DeleteTicket',
            '* -> rejected' => 'ModifyTicket',
            '* -> *'        => 'ModifyTicket',
        },
        actions => [
            'new -> open'      => {
                label  => 'Open It', # loc
                update => 'Respond',
            },
            'new -> resolved'  => {
                label  => 'Resolve', # loc
                update => 'Comment',
            },
            'new -> rejected'  => {
                label  => 'Reject', # loc
                update => 'Respond',
            },
            'new -> deleted'   => {
                label  => 'Delete', # loc
            },

            'open -> stalled'  => {
                label  => 'Stall', # loc
                update => 'Comment',
            },
            'open -> resolved' => {
                label  => 'Resolve', # loc
                update => 'Comment',
            },
            'open -> rejected' => {
                label  => 'Reject', # loc
                update => 'Respond',
            },

            'stalled -> open'  => {
                label  => 'Open It', # loc
            },
            'resolved -> open' => {
                label  => 'Re-open', # loc
                update => 'Comment',
            },
            'rejected -> open' => {
                label  => 'Re-open', # loc
                update => 'Comment',
            },
            'deleted -> open'  => {
                label  => 'Undelete', # loc
            },
        ],
    },
);
# end   /etc/request-tracker4/RT_SiteConfig.d/70-mmlifecycles
1;
